程式設計師離不開命令列,許多經典命令是每天必用的,比如ls
和cd
。
雖然它們很好用,但是由於歷史原因,往往也有一些缺點,比如用法不符合直覺、難以配置,有些速度也不快。
這些年,它們的替代品開始出現,而且越來越多,大家開始嘗試使用現代語言,重新實現這些經典命令。本文總結一下這些替代品,其中有些真的很不錯,值得你在自己的計算機上安裝。
一、exa
exa 是ls
命令的替代品,可以彩色輸出目錄內容,更容易辨識。
$ exa --long --git
上面命令中,引數--git
表示輸出檔案的 Git 狀態。
N
:新檔案M
:檔案有變動I
:該檔案被忽略
除了平鋪顯示,exa
還支援目錄的樹狀顯示。
$ exa --tree --level=2
exa
本身是一個二進位制檔案,不需要安裝,下載後直接使用,速度也相當快。
同類軟體還有 lsd,這裡就不詳細介紹了。
二、broot
broot 可以看作增強版的ls
替代品,實際是一個終端裡面的檔案管理器。
使用時,可以先列出當前目錄的檔案資訊。
$ br -sdph
上面命令中,引數含義如下。
-s
:顯示檔案體積-d
:顯示檔案時間-p
:顯示檔案許可權-h
:顯示隱藏檔案。
可以看到,它預設以樹狀結構,展開子目錄。
然後,在這個介面中,可以完成各種檔案操作。
- 搜尋:輸入搜尋詞
- 複製:輸入
:cp <複製後的檔名>
- 刪除:輸入
:rm
- 改名:輸入
:mv <新檔名>
- 退出:輸入
:q
甚至還可以預覽檔案:透過上下箭頭選中檔案,然後按下右箭頭→
,就會開啟外部關聯程式;按下ctrl + →
,則在當前視窗預覽檔案。
三、zoxide
zoxide 是 cd 命令的替代品,用來切換目錄。
它的用法與cd
完全一樣,進入目錄/tmp
就是下面的命令。
$ z /tmp
它的特色是部分匹配,可以只寫路徑的一部分,它自動找到最經常使用的匹配項。
比如,你經常用它進入目錄/tmp
,那麼以後只要輸入z t
,它就會自動將t
匹配為/tmp
,從而進入該目錄。
$ z t
四、bat,fx,hexyl
bat 是cat
命令的替代品,輸出文字檔案的內容,並且帶有cat
所沒有的程式碼高亮和行號。
$ bat README.md
如果瀏覽的是 JSON 檔案,還可以使用 fx 或者 jq。
$ fx data.json
如果瀏覽的是二進位制檔案,使用 hexyl。
$ hexyl example.jpg
五、diff-so-fancy
diff-so-fancy 是 git diff 的替代品,使得命令列的 diff 操作具有類似 GitHub 的頁面效果。
安裝後,參考官方文件,將它配置為 Git 的預設 diff 工具就可以了。以後每次執行git diff
,就會輸出它的執行結果。
同類專案還有 delta。
六、fd,fzf
fd 是find
命令的替代品,用於檔名搜尋。
它的用法比find
更符合直覺。下面例子是搜尋目錄/tmp
裡面(包括子目錄),所有含有dog
的檔名。
# find 的寫法 $ find /tmp -iname '*dog*' # fd 的寫法 $ fd dog /tmp
上面兩條命令一比較,就會發現fd
簡單很多。
fd
內部採用正則搜尋,如果想使用模糊搜尋,比如找出包含三個字元d
、o
、g
的檔名,則需要另外安裝fzf。
$ find . -type f | fzf
執行上面命令以後,再輸入dog
就可以了。
七、ripgrep
ripgrep 是grep
命令的替代品,用來搜尋檔案內容。
它跟grep
的用法類似。下面例子是搜尋當前目錄裡面,所有內容包含字串foo
的 Markdown 檔案。
# grep 的寫法 $ grep foo *.md # ripgrep 的寫法 $ rg foo *.md
ripgrep
的主要優勢在於,預設帶有行號和搜尋詞高亮,速度也更快。
同類專案還有 ag。
八、McFly
McFly 是ctrl-r
的替代品,用來搜尋 Shell 的操作歷史。
安裝以後,只要按下ctrl-r
,就會出現一個更好用的搜尋介面。
九、choose
choose 是cut
命令的替代品,用來選中指定的欄位。
它的優勢主要是語法更簡單,比如輸出檔案的第一列。
# cut 的寫法 $ cat data.txt | cut -d " " -f 1 # or $ cut -d " " -f 1 data.txt # choose 的寫法 $ cat data.txt | choose 0 # or $ choose 0 -i data.txt
更多例子看下圖。
十、duf,ncdu
duf 是df
命令的替代品,用來顯示磁碟佔用情況。
$ duf
它是彩色的表格輸出,更容易檢視。
ncdu 是du
命令的替代品,用來顯示每個目錄佔用的大小。
$ ncdu
你還可以上下移動,選中指定目錄檢視。
同類專案還有 dust。
十一、htop,procs
htop 是 top
命令的替代品,用來顯示系統的實時狀態。它帶有高亮輸出,並可以切換不同的選項卡。
$ htop
procs 是ps
命令的替代品,用來高亮顯示程式資訊。
$ procs
十二、httpie,dog
httpie 是 curl 的替代品,用來發出 HTTP 請求。
它的特點是語法更簡單,並且伺服器的返回內容會格式化高亮顯示。
下面是發出 PUT 請求的例子。
# curl 的寫法 $ curl -X PUT -d hello=world example.com # httpie 的寫法 $ http PUT example.com hello=world
dog 是dig
命令的替代品,用來發出 DNS 查詢。它的用法比dig
簡單多了。
# 預設查詢 A 記錄 $ dog example.net # 查詢多個記錄 $ dog example.net A NS MX
(完)