程序員離不開命令行,許多經典命令是每天必用的,比如ls和cd。
雖然它們很好用,但是由於歷史原因,往往也有一些缺點,比如用法不符合直覺、難以配置,有些速度也不快。
這些年,它們的替代品開始出現,而且越來越多,大家開始嘗試使用現代語言,重新實現這些經典命令。本文總結一下這些替代品,其中有些真的很不錯,值得你在自己的計算機上安裝。
一、exa
exa[1]是ls命令的替代品,可以彩色輸出目錄內容,更容易辨識。
上面命令中,參數--git表示輸出文件的 Git 狀態。
•N:新文件•M:文件有變動•I:該文件被忽略
除了平鋪顯示,exa還支持目錄的樹狀顯示。
exa本身是一個二進制文件,不需要安裝,下載後直接使用,速度也相當快。
同類軟件還有lsd[2],這裡就不詳細介紹了。
二、broot
broot[3]可以看作增強版的ls替代品,實際是一個終端裡面的文件管理器。
使用時,可以先列出當前目錄的文件信息。
上面命令中,參數含義如下。
•-s:顯示文件體積•-d:顯示文件時間•-p:顯示文件權限•-h:顯示隱藏文件。
可以看到,它默認以樹狀結構,展開子目錄。
然後,在這個界面中,可以完成各種文件操作。
•搜索:輸入搜索詞•複製:輸入:cp <複製後的文件名>•刪除:輸入:rm•改名:輸入:mv <新文件名>•退出:輸入:q
甚至還可以預覽文件:通過上下箭頭選中文件,然後按下右箭頭→,就會打開外部關聯程序;按下ctrl + →,則在當前窗口預覽文件。
三、zoxide
zoxide[4]是 cd 命令的替代品,用來切換目錄。
它的用法與cd完全一樣,進入目錄/tmp就是下面的命令。
它的特色是部分匹配,可以只寫路徑的一部分,它自動找到最經常使用的匹配項。
比如,你經常用它進入目錄/tmp,那麼以後只要輸入z t,它就會自動將t匹配為/tmp,從而進入該目錄。
四、bat,fx,hexyl
bat[5]是cat命令的替代品,輸出文本文件的內容,並且帶有cat所沒有的代碼高亮和行號。
如果瀏覽的是 JSON 文件,還可以使用fx[6]或者jq[7]。
如果瀏覽的是二進制文件,使用hexyl[8]。
五、diff-so-fancy
diff-so-fancy[9]是 git diff 的替代品,使得命令行的 diff 操作具有類似 GitHub 的頁面效果。
安裝後,參考官方文檔,將它配置為 Git 的默認 diff 工具就可以了。以後每次執行git diff,就會輸出它的執行結果。
同類項目還有delta[10]。
六、fd,fzf
fd[11]是find命令的替代品,用於文件名搜索。
它的用法比find更符合直覺。下面例子是搜索目錄/tmp裡面(包括子目錄),所有含有dog的文件名。
上面兩條命令一比較,就會發現fd簡單很多。
fd內部採用正則搜索,如果想使用模糊搜索,比如找出包含三個字符d、o、g的文件名,則需要另外安裝fzf[12]。
執行上面命令以後,再輸入dog就可以了。
七、ripgrep
ripgrep[13]是grep命令的替代品,用來搜索文件內容。
它跟grep的用法類似。下面例子是搜索當前目錄裡面,所有內容包含字符串foo的 Markdown 文件。
ripgrep的主要優勢在於,默認帶有行號和搜索詞高亮,速度也更快。
同類項目還有ag[14]。
八、McFly
McFly[15]是ctrl-r的替代品,用來搜索 Shell 的操作歷史。
安裝以後,只要按下ctrl-r,就會出現一個更好用的搜索界面。
九、choose
choose[16]是cut命令的替代品,用來選中指定的欄位。
它的優勢主要是語法更簡單,比如輸出文件的第一列。
更多例子看下圖。
十、duf,ncdu
duf[17]是df命令的替代品,用來顯示磁盤占用情況。
它是彩色的表格輸出,更容易查看。
ncdu[18]是du命令的替代品,用來顯示每個目錄占用的大小。
你還可以上下移動,選中指定目錄查看。
同類項目還有dust[19]。
十一、htop,procs
htop[20]是top命令的替代品,用來顯示系統的實時狀態。它帶有高亮輸出,並可以切換不同的選項卡。
同類項目還有glances[21]、gtop[22]、bottom[23]。
procs[24]是ps命令的替代品,用來高亮顯示進程信息。
十二、httpie,dog
httpie[25]是 curl 的替代品,用來發出 HTTP 請求。
它的特點是語法更簡單,並且服務器的返回內容會格式化高亮顯示。
下面是發出 PUT 請求的例子。
同類項目還有curlie[26]、xh[27]。
dog[28]是dig命令的替代品,用來發出 DNS 查詢。它的用法比dig簡單多了。
(完)
References
[1]exa:https://github.com/ogham/exa[2]lsd:https://github.com/Peltoche/lsd[3]broot:https://github.com/Canop/broot[4]zoxide:https://github.com/ajeetdsouza/zoxide[5]bat:https://github.com/sharkdp/bat[6]fx:https://github.com/antonmedv/fx[7]jq:https://github.com/stedolan/jq[8]hexyl:https://github.com/sharkdp/hexyl[9]diff-so-fancy:https://github.com/so-fancy/diff-so-fancy[10]delta:https://github.com/dandavison/delta[11]fd:https://github.com/sharkdp/fd[12]fzf:https://github.com/junegunn/fzf[13]ripgrep:https://github.com/BurntSushi/ripgrep[14]ag:https://github.com/ggreer/the_silver_searcher[15]McFly:https://github.com/cantino/mcfly[16]choose:https://github.com/theryangeary/choose[17]duf:https://github.com/muesli/duf[18]ncdu:https://dev.yorhel.nl/ncdu[19]dust:https://github.com/bootandy/dust[20]htop:https://github.com/htop-dev/htop[21]glances:https://github.com/nicolargo/glances[22]gtop:https://github.com/aksakalli/gtop[23]bottom:https://github.com/ClementTsang/bottom[24]procs:https://github.com/dalance/procs[25]httpie:https://github.com/httpie/httpie[26]curlie:https://github.com/rs/curlie[27]xh:https://github.com/ducaale/xh[28]dog:https://dns.lookup.dog/