原文做者: Darren Burnsgit
翻譯:weakish@LeanCloudgithub
原文連接:url.leanapp.cn/darrenweb
我打算寫一系列文章,展現下近些年發現的一些很棒的非標準命令行工具,這是第一篇。若是你用命令行,那麼這些工具中大概至少有一個能讓你的生活更舒心。正則表達式
z
跳轉現代瀏覽器地址欄能夠智能模糊搜索,節省了大量時間。想要刷下推特?只需在地址欄輸入「tw」而後回車。shell
相比之下,在命令行下使用 cd
訪問文件系統,方式就太陳舊了。謝天謝地,z
給命令行帶來了瀏覽器風格的導航。npm
短暫的學習期以後,z
能讓你從任意位置跳轉到一個目錄,只需輸入目標目錄名的子字符串。z
會跳轉到哪一個目錄取決於你提供的字符串參數、訪問目錄的頻繁程度、訪問目錄的最近時間。這稱爲「頻近度 (frecency)」。json
z
不只提升了速度,還下降了認知負擔。使用 cd
時,你須要準確回憶目標目錄在目錄樹的位置,並計算到達目錄的路徑。有了 z
,只需知道目錄的名稱。瀏覽器
z
也已經移植到了其餘 shell (例如 fish 和 zsh)。相似的項目有 autojump
。bash
z
fzf
快速模糊搜尋器安裝 fzf
後,在命令行的任何地方按下 Ctrl + T
,就能夠開啓交互式模糊搜索界面,遞歸搜索當前目錄下的文件。輸入搜索項後,上、下鍵選擇結果,回車上屏:服務器
在上面的例子中,我輸入了 bat
(還能夠是其餘任何命令,例如 less
、cd
等),接着按下 Ctrl + T
。接着輸入 five
,回車,插入路徑 src/five.rs
至光標所在處,而沒必要先輸入 src
,再按 tab 鍵,再輸入 fi
,再按 tab 鍵——路徑很長或者很差記的時候,這樣很麻煩。
fzf
brew install fzf
fish
綁定: fisher add jethrokuan/fzf
bat
帶語法高亮的文件查看bat 助你快速查看文件,有語法高亮。bat
能夠無縫替換 cat
。
若是輸出過大(如上面的例子所示),bat
會將輸出傳給 less
,自動分頁。
bat
brew install bat
bench
代碼性能測試bench
是極爲有用的測試代碼性能的工具。它是用 Haskell 寫的,從這點上說,算是這篇文章中最酷的。任何能夠在終端中運行的命令均可以傳給它(加引號),bench 會重複運行該命令,測量執行時間。測試完成後,bench 會輸出有用的統計數據。
衡量代碼執行時間,相比系統內置的 time
命令,bench 更爲強大。
相似的工具備 hyperfine
,是用 Rust 編寫的。
bench
brew install bench
asciinema
和 svg-term
錄製終端爲 SVG 動畫這篇文章中的終端剪輯其實是 SVG 動畫!使用 SVG 而不是視頻文件有不小的優點:
我使用 asciinema
錄製終端。輸入 asciinema rec
便可開始錄製。完成後按 Ctrl+D
,選擇本地保存或上傳 asciinema.org
svg-term
能夠根據 asciinema 錄製文件生成 SVG 動畫。若是你將錄製文件上傳到了 asciinema,須要訪問 asciinema 連接將其設爲公開。
轉換錄製文件爲 SVG 動畫,須要提供錄製 ID (公開 asciinema 頁面後能夠在 URL 中找到 ID),輸出文件名,還有其餘一些可選參數。例如,我使用以下命令將上面例子中的終端錄製 (asciinema.org/a/219486) 轉換爲 SVG 文件:
svg-term --cast=219486 --out ~/somewhere/out.svg --padding 18 --height 8 --width 80
複製代碼
或者,若是你不想把錄製文件上傳到 asciinema,你也能夠直接使用 svg-term
轉換本地錄製文件(感謝 svg-term-cli 的做者 Mario Nebl 指出這一點):
asciinema rec cast.json
cat cast.json | svg-term-cli
複製代碼
asciinema
和 svg-term
asciinema
:brew install asciinema
svg-term
: npm install -g svg-term-cli
wrk
測試 HTTP API 性能wrk
是個方便的小工具,能夠測試 API 性能。爲了演示它的用法,我在本地的 8001 端口運行了一個最小化的 Python HTTP API 服務器,它只有一個端點(/hello
)。用 wrk
測試它的性能(5 秒內,使用 12 個線程發起 200 個鏈接):
調整線程數、鏈接數、時長能夠測試不一樣負載下 API 的表現。它不能代替 Locust 和 JMeter 這樣的性能測試工具,但很輕量,在許多場景下夠用。
很不幸,基於 wrk
的命令行接口發起 POST 請求很笨拙:須要用 Lua 編寫一個小腳本,做爲參數傳給命令(詳見文檔)。
wrk
brew install wrk
exa
替代 ls
exa
是 ls
的現代替代品,其彩色輸出更爲易讀,並提供了更多控制輸出如何呈現的選項。
加上 --git-ignore
參數會根據 .gitignore 忽略對應文件,使用 -T
參數則能以樹型結構列出目錄。
exa
brew install exa
fd
查找文件和目錄一般使用 find
命令基於正則表達式查找文件或目錄。fd
是用 Rust 編寫的 find
替代品。使用合理的默認值,提供更方便的界面,速度也更快。
fd
遵循 .gitignore 文件,也支持並行命令執行。並行命令執行能夠在搜索返回的每一個文件和目錄上(並行)執行命令。fd
文檔中的一個例子是找出全部 .jpg 文件,並行轉換爲 .png 文件(使用 convert
命令):
fd -e jpg -x convert {} {.}.png 複製代碼
fd
brew install fd
rg
(ripgrep) 查找文件中的字符串rg
是 grep 的替代品,它比 grep
快不少。
rg
是用 Rust 編寫的,VS Code 編輯器的搜索功能實際上是經過調用 rg 實現的。在性能評測中,rg 一向超過相似工具。
brew install ripgrep
我但願你在這篇文章中發現了有用的工具!我打算讓這篇文章成爲及時更新的工具庫,收羅有用的替代性命令行工具,因此我可能會時不時更新這篇文章。
若是你對更多相似內容感興趣,歡迎在 Twitter 上關注我。