linux/unix 上那些炫酷的命令列工具(一)
工欲善其事,必先利其器,作為一名手藝人, 我們應該利用好工具,以便將我們的時間用在更有效率的事情上,類 Linux 上很多原生的如 cat
, grep
等命令給我們帶來了很多便利,但其實都或多或少有可以改進的地方,市面上其實出現了大量的第三方開發者開發的對這些原生做了很大改進的命令,比原生的命令更好用,今天就給大家推薦這些命令,大部分可以說是秒殺原生命令了,能讓你事半功倍,強烈推薦
如何執行原生的命令
個人覺得即將介紹的命令很好用,完全可以替代原生命令,也設定了大量的 alias 語句來替代原生命令,不過每個人的習慣不一樣,如果你覺得即將介紹的命令用得不習慣 ,想用回原生的命令也可以,按類似以下的操作即可
\cat # 忽略所有 alias 為 cat 的命令 - explanation: https://stackoverflow.com/a/16506263/22617 # 或 command cat # 忽略所有函式和 aliases
廢話不說,讓我們看看哪此命令足以替代原生命令吧
bat > cat
原生的 cat
命令只是簡單地列印某個檔案的內容,但 bat
命令在此基礎上還可以做到以下功能
- 自動識別副檔名並進行高亮顯示
- 顯示行號
- 檔案內容過長時自動分頁
- 如果檔案內容過長,還可以用
/
來搜尋相關的內容
功能演示如下
image
推薦用 alias
命令將 cat
設定成 bat
alias cat='bat'
:floppy_disk: 點選 這裡 可安裝 bat
fzf > ctrl+r
什麼是 fzf 呢
It's an interactive Unix filter for command-line that can be used with any list; files, command history, processes, hostnames, bookmarks, git commits, etc.
它是一款使用 GO 語言編寫的互動式的 Unix 命令列工具。可以用來查詢任何列表內容、檔案、歷史命令、 本機繫結的host、 程序、 Git 分支、程序等。所有的命令列工具可以生成列表輸出的都可以再通過管道 pipe 到 fzf 上進行搜尋和查詢
我們簡單介紹一下它的查詢歷史命令的功能,檢視歷史輸入的終端命令我們一般用 ctrl+r
,在這方面, fzf
可以說是秒殺 ctrl+r
了, ctrl+r
只能撥出最近一條包含輸入字串的歷史命令,而且只能做精確匹配,而安裝了 fzf
後,當撥出 ctrl+r
會顯示所有包含輸入字串的命令(預設匹配最近一條符合搜尋條件的命令),按上下箭頭即可自由選擇你想要的命令,而且支援模糊搜尋,這個特性針對那些常常只是隱約記得歷史命令的人特別有用,比如如果我隱約記得有個命令和 git
, finance
有關,我可以這麼搜

image
當然如果你不需要模糊搜尋也可以關掉
fzf 的功能遠不止於此,與其他命令結合讓你的效率飛速提升,自動補全功能完全秒殺預設的 tab 功能,再安裝一個具有預覽功能的 highlight 外掛,好用到爆炸,不信看以下功能展示

image
:floppy_disk: 點選 這裡 可安裝 fzf
htop > top
top 命令可以說是檢視程序與系統執行的利器了,不過 htop 不僅具備 top 的所有功能,還有一些 top 不具備但很實用的功能,簡單列舉幾個
-
顯示每個 CPU 的負載情況,如果 CPU 是四核八執行緒的,會顯示每個執行緒的負載情況,而且不同的指標用顏色區分開來,更直觀,對使用者更友好
image
-
互動式
- 可以左右滑動顯示此程序的所有資訊與對應的 COMMAND,也可以上下滑動顯示所有的程序資訊,而 top 只能最消耗資源的程序列表
- 可以以樹狀圖的方式檢視程序對應的多個子執行緒或程序佔用的檔案
image
- 方便追蹤程序的執行情況,如果我們要觀察某個程序的執行情況,使用 top 沒法定位某個程序,程序在螢幕上的顯示會忽上忽下,每次 top 重新整理我們都必須去用肉眼追蹤我們正在觀察的程序,很不方便(所有程序的顏色都一樣),而用 htop 就簡單了,我們可以按下空格鍵標記我們想要的程序,被標記的程序會高亮展示,同時按 F 可以保證被標記的程序出現在螢幕裡
-
用 htop 可以直接給多個程序發訊號,這樣能很方便地實現像 kill 程序之類的操作,一般我們要 kill 掉某個程序要經過兩個步驟: 1、輸入 top 獲得我們想要 kill 執行緒的 pid. 2、退出 top 輸入 kill PID,由於 top 命令不能執行搜尋功能,光是找 PID 這一步就夠嗆, 而用 htop 可以很輕易地做到,輸入 htop 後,按 F3 輸入程序名稱進行查詢,然後換空格選中此程序(也可以選中多個程序),再換 F9 選中左邊的 SIGKILL 即可將選中的程序 kill 掉,以 kill 掉 htop 程序為例,操作如下
image
可以看到效率上比 top 不知高了多少倍
我們可以設定 top 的 alias 以便利用 htop 的強大功能
alias top="sudo htop" # alias top and fix high sierra bug
:floppy_disk: 點選 這裡 可安裝 htop
diff-so-fancy > diff
預設的 git diff
顯示不太友好,也不支援定製配色方案,而且僅能支援行級別的 diff, diff-so-fancy
預設的配色方案不僅是 human readable
,而且支援字元級別的 diff,所以推薦 git diff
用 diff-so-fancy
,預設的 diff 和 diff-so-fancy 對比如下

image
diff-so-fancy
fd > find
預設的 find 命令不太好用,查詢命令比較複雜冗餘,考慮以下三種情形
- 查詢所有副檔名為 md 的字尾
- 查詢所有檔名包含 cli 的檔案
- 查詢所有包含 cli 的檔案中的單詞數
我們來看下分別用 find 和 fd 的對比
// use find find . -type f -name "*.md" find . -name '*cli*' find ./ -type f -name "*php*" -exec wc -w {} + // use fd fd -e md fd md # all with .md extension fd cli -x wc -w
可以看到,用 fd 命令極簡,更關鍵的是在檔案多的情況下 fd 還有另一大優勢:效能!fd 的搜尋效率可以達到 find 的 20 倍以上
:floppy_disk: 點選 這裡 可安裝配置 fd
ncdu > du
ncdu 可以理解為是互動式的 du。我們一般用 du 來查詢某個目錄佔用了多少磁碟空間,但如果我們需要檢視這個目錄下的子目錄/檔案佔用了多少空間並對其進行排序 du 就無能為力了,而用 ncdu 的話我們只要在目錄輸入此命令即可顯示按空間大小降序排序的所有檔案/目錄
而且比較方便的一點是 ncdu 是互動式的,如果我們還想看子目錄裡的檔案/目錄大小,只需要按上下箭頭選中相關目錄按回車即可檢視子目錄詳情的空間佔用情況,速度極快!另外也可刪除檔案,可以在選中子目錄時執行相當於 cd 到此子目錄的命令(此時會退出ncdu, 並 cd 到此子目錄)。還有一個比較騷的功能是點選 cmd
+ 選中的目錄/檔案可以開啟當前目錄/檔案
我們可以為 du 設定 ncdu 的 alias,配上主題優雅很多
// --color 設定主題,--rr 只讀模式,防止執行 ncdu 時刪除檔案以及 cd 到某個子目錄 alias du="ncdu --color dark -rr -x --exclude .git --exclude node_modules"
效果如下

image
ncdu
個人公眾號: 碼農蛻變之路,定期分享各種 IT 技能,歡迎交流

image