每日最新頭條.有趣資訊

22款好用的CLI工具

作者 | switowski

策劃 | 萬佳

作者根據多年的終端使用經驗,詳細介紹了一些實用的 CLI 工具,希望它們能幫讀者提高生產力。

前段時間,我寫過一篇我最喜歡的 Mac 應用的文章。其實,我大部分的時間都花費在終端的使用上,我覺得有必要給大家推薦一下比較好用的終端工具。先給大家列個推薦清單,如下圖。

高頻 CLI 工具推薦

1fish shell

Shell- 毋庸置疑,在終端中,Shell 是使用最頻繁也最重要的工具。過去,我曾經使用過 Bash 和 Z Shell,而如今,我正在使用的是 Fish Shell。這是一個非常優秀的終端 Shell 工具,擁有許多開箱即用的功能,例如語法自動推薦補全、語法高亮顯示或使用快捷鍵在最近訪問的文件夾之間來回切換。

一方面,它非常適合初學者使用,因為使用者無需進行任何設置。另一方面,由於它使用的腳本語法與其他 Shell 有所差異,因此通常用戶不能把拷貝自網上的腳本直接粘貼使用。你必須將不兼容的命令更改為合法的 Fish 腳本,或者啟動一個 Bash 會話以運行 Bash 腳本。

https://fishshell.com/docs/current/index.html#syntax-overview

我能理解這種更改背後的原因(畢竟 Bash 腳本不是易於用戶使用的語言),但這種不兼容絲毫沒有給我帶來任何好處。我平時很少編寫 Bash / Fish 腳本,所以經常遺忘這些語法,因此每次要使用這些腳本時我總是必須從頭開始重新學習它。與 Bash 腳本相比,Fish 腳本的資源相對更少。我通常不會去閱讀文檔,重複造輪子,而是從 StackOverflow 複製粘貼現成的腳本拿來即用。

雖然前面我提到了 Fish Shell 的幾個缺點,但是我還是會推薦你去用一下,因為切換 Shell 工具十分簡單,所以很值得你去嘗試一下。特別是當你懶得自己去配置 Shell,並希望通過最少的配置就能獲得很好的使用效果的時候,那就更不要錯過它了。

Fish插件

你可以自己添加相關插件來擴展 Fish Shell 的功能。最簡單的安裝插件的方法就是使用插件管理工具,比如 Fisher、Oh My Fish 或者 fundle。現在,我使用的插件管理工具是 Fisher,我用它安裝管理了三個插件:

franciscolourenco/done ——在長時間運行的腳本完成後發送通知。

evanlucas/fish-kubectl-completions——1個自動補全 kubectl(Kubernetes command line tool) 命令的插件。

fzf——將 fzf 工具與 Fish 集成在一起的插件。

過去,我有使用很多的插件(比如 rbenv、pyenv、nodenv、fzf、z),但是我改用其他工具以避免影響我的 Shell 的運行速度(這是我過去使用 Z shell 所得到的一個教訓)。

下載地址:https://fishshell.com/

2Starship

如果必須要從本篇文章中選擇一個我最喜歡的終端工具——那非 Starship 莫屬。Starship 可以適用於任何 Shell。你只需要安裝它,然後在相應的配置文件.bashrc/.zshrc/config.fish添加一行配置,剩下的工作交給它來完成就好了。

它可以做到:

根據你是否在代碼倉庫中添加了新文件、是否修改了文件、是否暫存了文件等情況,用相應的符號表示 git 倉庫的狀態。

根據你所在的 Python 項目目錄,展示 Python 的版本號,這也適用於 Go/Node/Rust/Elm 等其他編程語言環境。

展示上一個命令執行所用的時間,指令運行時間必須在毫秒級別。

如果上一個命令執行失敗,會展示相應的錯誤提示符。

還有不計其數的其他信息可以展示。但是,它能以更加友好的形式智能地給你呈現!比如,如果你不在 git 存儲庫中,它將隱藏 git 信息。如果您不在 Python 項目中,則不會有 Python 版本信息,因為顯示它沒有什麽意義。它永遠不會給你展示多餘信息,始終保持終端的美觀,優雅和簡約。

Starship 的運行速度怎麽樣呢?它是用 Rust 編寫的,儘管功能如此之多,但仍然比我以前使用的所有提示工具都要快!我對提示信息非常潔癖,因此我經常破解自己的版本。我會根據現有的提示找到對應的功能代碼,然後將其粘組合在一起,以確保 Starship 只有我需要的功能以保持其快速運行。“外部工具永遠無法比我精心製作的提示工具更快!” 這就是我對 Starship 持懷疑態度的原因。

下載地址:https://starship.rs/

3z

“z”可以讓你快速地在文件目錄之間跳轉。它會記住你訪問的歷史文件夾,經過短暫的學習後,你就可以使用z path_of_the_folder_name命令在目錄之間跳轉了。

比如,如果我經常訪問 ~/work/src/projects,我只需要運行 z pro ,就可以立馬跳轉到那裡。z 的原理參考了 frecency 算法——一個基於統計 frequency 和 recency 進行分析的算法。如果它存儲了你不想使用的路徑文件夾,你隨時可以手動將其刪除。它提高了我在常用的不同文件路徑之間頻繁切換的效率,幫我節省了鍵盤擊鍵次數以及大量的路徑記憶。

下載地址:https://github.com/rupa/z

4fzf

fzf— fuzzy finder,即模糊查找器。它是一種通用工具,可讓你使用模糊搜索來查找文件、歷史命令、進程、git 提交等。你鍵入一些字母,它會嘗試匹配結果列表中任何位置的字母。輸入的字母越多,結果也就越準確。你可能在其他的代碼編輯器中有過這種類型的搜索使用體驗——當你想打開某個文件時,隻鍵入文件名的一部分而不用輸入完整路徑就能進行查找——這就是模糊搜索。

我通過 fish fzf 插件插件使用它,因此我可以搜索命令歷史記錄或快速打開文件。這是可以每天為我節省不少時間的一個非常棒的工具。

https://github.com/jethrokuan/fzf

下載地址:https://github.com/junegunn/fzf

5fd

上面動圖是 find 命令(左)和 fd 命令(右)的使用對比。

類似於系統自帶的 find 命令,但使用起來更簡單,查找速度更快,並且具有良好的默認設置。

不管你想找到一個名為“invoice”的文件,但是不確定文件的擴展名,還是查找一個存放所有 invoice 的目錄,而不單是一個文件。你可以擼起袖子,開始為 find 命令編寫那些複雜的正則表達式,也可以直接命令行運行 fd invoice。反正對我來說,我隻選擇最簡單的那個。

默認情況下,fd 會忽略隱藏的以及在.gitignore列出的文件和目錄。大多數時候,這也是我們想要的,但是在極少數特殊情況下,如果需要禁用此功能時,我會給該命令設置一個別名:fda='fd -IH'。

你會發現,fd 命令輸出的顏色配置很漂亮,而且根據基準測試(上述 GIF),它的執行速度甚至比find 命令的還要快。

下載地址:https://github.com/sharkdp/fd

6ripgrep

上圖為 grep(左)與 rg(右)命令執行時的對比。

與上述fd指令類似,ripgrep是grep命令的替代方法, 不過ripgrep的執行速度更快,而且具有健全的默認配置以及豐富的彩色輸出。

它同樣會跳過被.gitignore忽略以及隱藏的文件,因此如果有特殊需要,我們可以設置指令別名:rga ='rg -uuu'。它會禁用所有智能篩選,並使ripgrep的表現與標準的 grep 指令一致。

下載地址:https://github.com/BurntSushi/ripgrep

7htop 和 glances

在 Linux 或 Mac 上顯示進程運行狀態信息最常用工具是我們熟悉的top,它是每位系統管理員的好幫手。而且,即使是像我一樣主要從事網絡開發,查看計算機的運行狀況也很有用。你知道,只是看一下當前到底是 Docker 進程還是 Chrome 進程吃掉了你所有的 RAM,應該如何做嗎?

htop工具是top工具的絕佳替代品。

top工具是非常基礎的監控工具,提供的功能有限,因此很多人轉去使用 htop。htop比起top,優勢很明顯——除了功能更加完善以外,它的色彩搭配也很豐富,整體上使用起來更加友好。

借助 glances,還可以讓你一目了然地快速了解系統當前狀態。

glances 是htop的補充工具。除了列出所有進程及其 CPU 和記憶體使用情況之外,它還可以顯示有關係統的其他信息,比如:

網絡及磁盤使用情況

文件系統已使用的空間和總空間

來自不同傳感器(例如電池)的數據

以及最近消耗過多資源的進程列表

我選擇使用htop來篩選和終止進程,因為對我來講,效率提高了不少,我也使用 glances可以快速瀏覽一下計算機的運行狀況。它提供 API 接口、Web UI 以及支持各種導出格式,因此你可以將系統監視提高到一個新 Level。因此我在這裡強烈推薦一波!

htop 下載地址:https://hisham.hm/htop/

glances 下載地址:

https://nicolargo.github.io/glances/

8virtualenv 和 virtualfish

Virtualenv 是用於在 Python 中創建虛擬環境的工具(比起內置的venv模塊,我更喜歡 Virtualenv)。

VirtualFish 是 Fish Shell 的虛擬環境管理器(如果你不使用 Fish Shell,請查看 virtualenvwrapper)。它提供了許多命令來執行快速創建、列出或刪除虛擬環境等操作。

virtualenv 下載地址:

https://pypi.org/project/virtualenv/

virtualfish 下載地址:

https://github.com/justinmayer/virtualfish

9pyenv、nodenv 和 rbenv

pyenv 可以輕鬆實現 Python 版本的切換。

Pyenv、nodenv 和 rubyenv 是用於管理計算機上不同版本的 Python、Node 和 Ruby 的工具。

假設你要在計算機上安裝兩個版本的 Python。比如,你正在從事兩個不同的 Python 項目,或者因為特殊情況仍然需要使用 Python2。不同 Python 版本在電腦上管理很複雜。你需要確保不同的項目具有正確版本的軟體依賴包。如果你不小心的話,很容易弄亂這種脆弱的配置並被其他套裝軟體使用的二進製文件所覆蓋。

該工具為版本管理提供了很多幫助,並將這一噩夢變得易於管理。它可以全局或“按文件夾”切換 Python 版本,而且每個版本都是相互隔離的。

我最近找到了一種名為 asdf 的工具,該工具可以將 pyenv、nodenv、rbenv 及其他 env 進行統一管理。它提供了幾乎所有編程語言的版本管理,下次我需要為編程語言設置版本管理器時,一定會嘗試使用一下。

pyenv 下載地址:https://github.com/pyenv/pyenv

nodenv 下載地址:

https://github.com/nodenv/nodenv

rbenv 下載地址:https://github.com/rbenv/rbenv

10pipx

Virtualenv 解決了 Python 程序包管理中的許多問題,但是還有一個方案可以解決。如果我想在全局環境下安裝 Python 套裝軟體(比如它是一個獨立的工具,正如前面提到的glances 工具),那麽我會遇到全局安裝帶來的問題。在虛擬環境之外安裝套裝軟體不是一個好主意,將來可能會導致意想不到的問題。另一方面,如果我決定使用虛擬環境,那麽每次我要運行程序時都需要激活該虛擬環境。這也不是最方便的解決方案。

事實證明,pipx工具可以解決上面提到的問題。它將 Python 軟體依賴包安裝到單獨的環境中(因此不會存在依賴項衝突的問題)。與此同時,這些工具提供的 CLI 命令在全局環境內也可用。因此,我無需激活任何環境——pipx會幫我完成這個操作!

如果你想了解有關 Python 工具的更多信息並想了解如何使用它們,我為 PyCon 2020 會議製作了一個名為“現代 Python 開發人員工具包”的視頻。

這是一個長達兩個小時的視頻教程,內容涉及如何設置 Python 開發環境,要使用的工具以及如何從頭開始製作 TODO 應用程序(包括測試和文檔)。你可以在 YouTube 上進行觀看。

https://www.youtube.com/watch?v=WkUBx3g2QfQ

pipx 下載地址:

https://github.com/pipxproject/pipx

11ctop 和 lazydocker

ctop 的實時監控示例

當你使用 Docker 並對其監控時,這兩個工具會很有幫助。ctop是 Docker 容器的頂級接口。它可以為你:

展示正在運行和已停止的容器列表。

展示統計信息,例如記憶體、CPU 使用率以及針對每個容器的其他詳細信息窗口(例如綁定的端口等其他信息)。

提供快捷菜單,方便快速停止、殺掉指定容器進程或顯示給定容器的日誌。

這比你嘗試從docker ps命令中找出所有這些信息要方便多了。

lazydocker是我最喜歡的 Docker 工具

如果你認為ctop很酷,請你嘗試使用 lazydocker 後再做決定!它是一個非常成熟的擁有終端 UI 界面的工具,提供了非常豐富的功能用於管理 Docker。這是我最喜歡的 Docker 管理工具!

ctop 下載地址:https://github.com/bcicen/ctop

lazydocker 下載地址:

https://github.com/jesseduffield/lazydocker

低頻 CLI 工具推薦

除了幾乎每天都在使用的工具以外,我多年來還收集了一些給力的工具,這些工具對於一些特定需求非常好用。比如有的終端工具可以用來將終端操作記錄成 GIF(並且可以讓你在 GIF 中暫停和複製文本!),還有的終端工具可以用於列出目錄結構、連接數據庫等,下面我會一一介紹。

12Homebrew

如果你使用的是 Mac,那我就無需再介紹 Homebrew 了。它是 macOS 上被業界普遍認可的套裝軟體管理器。對了,它還有一個稱為 Cakebrew 的 GUI 版本軟體,如果感興趣你可以嘗試一下。

下載地址:https://brew.sh/

13asciinema

asciinema是可用於記錄終端會話的工具。但是,與錄製 GIF 不同,它可以讓用戶選擇並複製這些錄製中的代碼!

這對於錄製編碼教程來說十分好用。你應該遇到那種尷尬的情況——當你準備跟著視頻教程在終端中敲巨長的命令,但是講師並為你提供這個代碼段,你不得不花費很長的時間去整理這些冗長的命令。asciinema錄製的內容,支持直接複製,十分給力。

下載地址:https://asciinema.org/

14colordiff 和 diff-so-fancy

我很少在終端中使用diff操作(比較兩個文件之間的差異),但是如果你需要執行這個操作,可以放棄使用diff命令,而是使用 colordiff。colordiff輸出可以高亮顯示,因此在查看文件差異內容時要方便得多,而不是在diff命令輸出內容下,費力地查看所有的“ ”符號來對比文件差異。

如果你覺得還不夠,那麽我推薦給你 diff-so-fancy。它是比colordiff更友好的一個差異對比工具。

它通過以下方式進一步改善了文件內容差異展示的外觀:

突出顯示每一行中差異的單詞,而不是整行

簡化變更文件的標題

去除 + 和 - 符號(顏色差異展示就夠了)

清楚地指出新行和刪除的空行

colordiff 下載地址:https://www.colordiff.org/

diff-so-fancy 下載地址:https://github.com/so-fancy/diff-so-fancy

15tree

你可以通過brew install tree安裝該工具。如果要查看給定目錄的內容,那麽 tree 是執行此操作的必備工具。它能以漂亮的樹狀結構顯示所有子目錄及文件:

$ tree ..├── recovery.md├── README.md├── archive├── automator│ ├── Open\ Iterm2.workflow│ │ └── Contents│ │ ├── Info.plist│ │ ├── QuickLook│ │ │ └── Thumbnail.png│ │ └── document.wflow│ └── Start\ Screen\ Saver.workflow├── brew-cask.sh

16bat

類似於在終端中常用的用於顯示文件內容的cat命令,但是bat效果更佳。

它增加了語法高亮顯示,git gutter 標記(如果適用),自動分頁(如果文件很大)等功能,並且使得輸出的內容閱讀起來更加友好。

bat 下載地址:https://github.com/sharkdp/bat

17httpie

如果你需要發送一些 HTTP 請求,但發現使用curl不夠直觀,那麽請嘗試一下httpie。這是一款非常好用的curl替代工具。合理的默認配置以及簡潔的語法使它更易於使用,命令返回也是彩色輸出,甚至支持為不同類型的身份驗證安裝相應的插件。

httpie 下載地址:https://httpie.org/

18tldr

簡化版的命令幫助手冊。“man pages” 包含了 Linux 軟體的手冊,這些手冊解釋了如何使用給定的命令。你可以嘗試運行man cat或man grep來查看相關命令的幫助手冊。它們描述的非常詳細,有時可能難以掌握。因此,tldr社區的目的,就是將每個命令的幫助手冊進行簡化,方便用戶查閱。

tldr適用於幾乎所有的受歡迎的軟體。正如我提到的,這是社區的努力和功勞,雖然不太可能包含所有的軟體的簡化幫助手冊。但是當某個幫助手冊被納入管理並起作用時,它提供的信息通常就是你要查找的內容。

比如,如果你要創建一些文件的 gzip 壓縮存檔,man tar可以為你提供可能的參數選擇。而tldr tar會列出一些我們常見的示例——如圖所示,第二個示例正是你要執行的操作:

“man pages”展示的信息太全面了,但是很多時候使用tldr可以更快地幫你找到特定信息,這才是用戶真正想要的。

tldr 下載地址:https://tldr.sh/

19exa

exa是ls命令的一個可替代方案。

它色彩豔麗,還可以顯示 git 狀態等其他信息,自動將文件大小轉換為方便人們閱讀的部門,並且所有這些都保持與ls幾乎相同的執行速度。雖然我很喜歡這個工具並推薦給你們,但由於某種原因,我仍然堅持使用 ls。

exa 下載地址:https://the.exa.website/

20litecli 和 pgcli

這是我首選的 SQLite 和 PostgreSQL CLI 的解決方案。借助自動提示和語法突出顯示,它們比默認的sqlite3和psql工具要好用很多。

litecli 下載地址:https://litecli.com/

pgcli 下載地址:https://www.pgcli.com/

21mas

mas是一個用於從 App Store 安裝軟體的 CLI 工具。我目前為止,我僅僅使用過它一次——設置我的 Macbook 電腦軟體。將來,我也將使用它來設置我的下一台 Macbook。mas可讓你自動在 macOS 中安裝軟體。它解放了你大量的點擊操作。而且,鑒於你正在閱讀這篇有關 CLI 工具的文章,所以我大膽地認為,大家都和我一樣,不喜歡無聊的單擊操作。

我在“災難修複”腳本中保留了從 App Store 安裝的應用程序列表。如果我的電腦真的發生了什麽意外情況,我希望能夠以最小的代價重新安裝所有內容。

mas 下載地址:https://github.com/mas-cli/mas

22ncdu

這是在終端進行磁盤分析時使用的工具,它使用起來簡單快捷。當我需要釋放一些硬碟空間時,會默認使用這款工具。

ncdu 下載地址:https://dev.yorhel.nl/ncdu

23總結

以上推薦工具清單確實很長,但是我希望有一些工具真的能夠帶給你方便,提高你的生產力。fd、ripgrep或httpie等工具可能是你以前熟悉的工具的改進版本。這些工具的改進版本除了更易於使用之外,它們還提供更友好的輸出,執行速度甚至更快。所以,我們要多多嘗試並接受新的事物,不要僅僅因為大家都在使用舊工具而隻局限在舊工具的使用上。事物都是在向前發展的,窮則變,變則通,通則久。大家一起共勉。

參考閱讀:

https://switowski.com/blog/favorite-cli-tools#mas

InfoQ 讀者交流群上線啦!各位小夥伴可以掃描下方二維碼,添加 InfoQ 小助手,回復關鍵字“進群”申請入群。大家可以和 InfoQ 讀者一起暢所欲言,和編輯們零距離接觸,超值的技術禮包等你領取,還有超值活動等你參加,快來加入我們吧!

點個在看少個 bug

獲得更多的PTT最新消息
按讚加入粉絲團