命令行常用工具的替代品

程序員離不開命令行,許多經典命令是每天必用的,比如lscd

雖然它們很好用,但是由於歷史原因,往往也有一些缺點,比如用法不符合直覺、難以配置,有些速度也不快。

這些年,它們的替代品開始出現,而且越來越多,大家開始嘗試使用現代語言,重新實現這些經典命令。本文總結一下這些替代品,其中有些真的很不錯,值得你在自己的計算機上安裝。

一、exa

exa[1] 是ls命令的替代品,可以彩色輸出目錄內容,更容易辨識。

$ exa --long --git

上面命令中,參數--git表示輸出文件的 Git 狀態。

N:新文件 •M:文件有變動 •I:該文件被忽略

除了平鋪顯示,exa還支持目錄的樹狀顯示。

$ exa --tree --level=2

exa本身是一個二進制文件,不需要安裝,下載後直接使用,速度也相當快。

同類軟件還有 lsd[2],這裏就不詳細介紹了。

二、broot

broot[3] 可以看作增強版的ls替代品,實際是一個終端裏面的文件管理器。

使用時,可以先列出當前目錄的文件信息。

$ br -sdph

上面命令中,參數含義如下。

-s:顯示文件體積 •-d:顯示文件時間 •-p:顯示文件權限 •-h:顯示隱藏文件。

可以看到,它默認以樹狀結構,展開子目錄。

然後,在這個界面中,可以完成各種文件操作。

• 搜索:輸入搜索詞 • 複製:輸入:cp <複製後的文件名>• 刪除:輸入:rm• 改名:輸入:mv <新文件名>• 退出:輸入:q

甚至還可以預覽文件:通過上下箭頭選中文件,然後按下右箭頭,就會打開外部關聯程序;按下ctrl + →,則在當前窗口預覽文件。

三、zoxide

zoxide[4] 是 cd 命令的替代品,用來切換目錄。

它的用法與cd完全一樣,進入目錄/tmp就是下面的命令。

$ z /tmp

它的特色是部分匹配,可以只寫路徑的一部分,它自動找到最經常使用的匹配項。

比如,你經常用它進入目錄/tmp,那麼以後只要輸入z t,它就會自動將t匹配爲/tmp,從而進入該目錄。

$ z t

四、bat,fx,hexyl

bat[5] 是cat命令的替代品,輸出文本文件的內容,並且帶有cat所沒有的代碼高亮和行號。

$ bat README.md

如果瀏覽的是 JSON 文件,還可以使用 fx[6] 或者 jq[7]。

$ fx data.json

如果瀏覽的是二進制文件,使用 hexyl[8]。

$ hexyl example.jpg

五、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的文件名。

# find 的寫法
$ find /tmp -iname '*dog*'
# fd 的寫法
$ fd dog /tmp

上面兩條命令一比較,就會發現fd簡單很多。

fd內部採用正則搜索,如果想使用模糊搜索,比如找出包含三個字符dog的文件名,則需要另外安裝 fzf[12]。

$ find . -type f | fzf

執行上面命令以後,再輸入dog就可以了。

七、ripgrep

ripgrep[13] 是grep命令的替代品,用來搜索文件內容。

它跟grep的用法類似。下面例子是搜索當前目錄裏面,所有內容包含字符串foo的 Markdown 文件。

# grep 的寫法
$ grep foo *.md
# ripgrep 的寫法
$ rg foo *.md

ripgrep的主要優勢在於,默認帶有行號和搜索詞高亮,速度也更快。

同類項目還有 ag[14]。

八、McFly

McFly[15] 是ctrl-r的替代品,用來搜索 Shell 的操作歷史。

安裝以後,只要按下ctrl-r,就會出現一個更好用的搜索界面。

九、choose

choose[16] 是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[17] 是df命令的替代品,用來顯示磁盤佔用情況。

$ duf

它是彩色的表格輸出,更容易查看。

ncdu[18] 是du命令的替代品,用來顯示每個目錄佔用的大小。

$ ncdu

你還可以上下移動,選中指定目錄查看。

同類項目還有 dust[19]。

十一、htop,procs

htop[20] 是 top命令的替代品,用來顯示系統的實時狀態。它帶有高亮輸出,並可以切換不同的選項卡。

$ htop

同類項目還有 glances[21]、gtop[22]、bottom[23]。

procs[24] 是ps命令的替代品,用來高亮顯示進程信息。

$ procs

十二、httpie,dog

httpie[25] 是 curl 的替代品,用來發出 HTTP 請求。

它的特點是語法更簡單,並且服務器的返回內容會格式化高亮顯示。

下面是發出 PUT 請求的例子。

# curl 的寫法
$ curl -X PUT -d hello=world example.com
# httpie 的寫法
$ http PUT example.com hello=world

同類項目還有 curlie[26]、xh[27]。

dog[28] 是dig命令的替代品,用來發出 DNS 查詢。它的用法比dig簡單多了。

# 默認查詢 A 記錄
$ dog example.net
# 查詢多個記錄
$ dog example.net A NS MX

(完)

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/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/gkPbQTyhAHwYrpzJjftJVQ