如何在命令行上舒適地生存?
有時我與一些害怕使用命令行的朋友交談,我感到自己給不出好的建議(我已經使用命令行太長時間了),因此我向一些 Mastodon 上的人提出了以下問題:
如果在過去一到三年內,你剛剛不再害怕使用命令行了,是什麼幫助了你?
(如果你不記得,或者你已經使用命令行舒適地工作了 15 年,則無需回答——這個問題不適用於你 ?)
這個列表還不如我希望的那麼長,但我希望通過發布它來收集更多的答案。顯然,並沒有一個單一的方法適用於所有人,不同的人會選擇不同的路徑。
我認為舒適使用命令行有三個方面:減少風險、動機和資源。我將先談談減少風險,然後是一些動機,並列出一些資源。
減少風險的方式
很多人(沒錯!)對在命令行上意外執行了一些無法撤銷的破壞性操作感到擔心。
以下是一些人們提到的幫助他們減少風險的策略:
- 定期備份(有人提到他們在上周的一個命令行錯誤中意外刪除了整個家目錄,但很幸運他們有備份)。
- 對於代碼,儘可能多地使用
git
。 - 將
rm
設置為類似safe-rm
或rmtrash
這樣的工具的別名,這樣你就不會意外刪除不應刪除的內容(或者就設置別名到rm -i
)。 - 盡量避免使用通配符,使用製表符鍵補全代替(我的 Shell 會使用
TAB
鍵補全rm *.txt
並顯示我將要刪除的內容)。 - 使用精美的終端提示符,可以顯示當前目錄、計算機名稱、
git
分支和你是否具有 root 許可權。 - 如果你計劃對文件運行未經測試或危險的命令,先備份文件副本。
- 擁有一台專用的測試機器(如便宜的舊 Linux 計算機或樹莓派)進行特別危險的測試,例如測試備份軟體或分區。
- 對於危險命令,如果有的話,使用
--dry-run
選項來查看執行結果而不實際執行操作。 - 在你的 Shell 腳本中構建自己的
--dry-run
選項。
這些策略有助於降低在命令行上引發不可逆操作的風險。
殺手級應用程序
一些人提到了一個「殺手級命令行應用程序」,這激勵他們開始花更多時間在命令行上。例如:
- ripgrep
- jq
- wget / curl
- git(一些人發現他們更喜歡使用 git 命令行界面而不是使用圖形界面)
- ffmpeg(用於視頻處理)
- yt-dlp
- 硬碟數據恢復工具(來自 這個精彩的故事)
還有一些人提到他們對圖形界面工具感到失望(例如使用了所有內存,並使計算機崩潰的重型集成開發環境),並因此有動機用更輕量級的命令行工具替代它們。
激發人們的命令行技巧
有人提到被其他人在命令行上展示的酷炫功能所激勵,例如:
explainshell
有幾個人提到了 explainshell,它可以讓你粘貼任何命令行指令,並將其分解成不同的部分解釋。
命令歷史、製表符補全等等
有很多小技巧和竅門可以使在命令行上工作更容易,例如:
- 使用向上箭頭查看先前的命令
- 使用
Ctrl+R
搜索你的 Bash 歷史記錄 - 使用快捷鍵在行內導航:
Ctrl+w
(刪除一個單詞)、Ctrl+a
(跳轉到行首)、Ctrl+e
(跳轉到行尾),以及Ctrl+left arrow
/Ctrl+right arrow
(向前/向後跳轉一個單詞) - 將 Bash 歷史記錄設置為無限制
- 使用
cd -
返回上一個目錄 - 文件名和命令名的製表符自動補全
- 學習如何使用像
less
這樣的分頁工具閱讀手冊頁或其他大型文本文件(如搜索、滾動等) - 在 macOS 上使用
pbcopy
/pbpaste
將剪貼板內容複製/粘貼到 stdout/stdin - 在編輯配置文件之前備份它們
fzf
很多人提到使用 fzf 作為模糊搜索 Shell 歷史記錄的更好方法。除了作為更好的模糊搜索 Shell 歷史記錄的工具,人們還提到了一些其他用途:
- 選擇
git
分支(git checkout $(git for-each-ref --format='%(refname:short)' refs/heads/ | fzf)
) - 快速查找要編輯的文件(
nvim $(fzf)
) - 切換 Kubernetes 上下文(
kubectl config use-context $(kubectl config get-contexts -o name | fzf --height=10 --prompt="Kubernetes Context> ")
) - 從測試套件中選擇要運行的特定測試
一般的模式是使用 fzf
來選擇某個對象(文件、git
分支、命令行參數),fzf
將所選對象輸出到標準輸出,然後將其插入作為另一個命令的命令行參數。
你還可以將 fzf
用作工具,自動預覽輸出並快速迭代,例如:
- 自動預覽
jq
的輸出(echo '' | fzf --preview "jq {q} < YOURFILE.json"
) - 自動預覽
sed
的輸出(echo '' | fzf --preview "sed {q} YOURFILE"
) - 自動預覽
awk
的輸出(echo '' | fzf --preview "awk {q} YOURFILE"
)
你可以參考這個思路。
通常,人們會為 fzf
的使用定義別名,比如輸入 gcb
或其他命令,以快速選擇要檢出的 git
分支。
樹莓派
一些人開始使用樹莓派,這樣可以更安全地進行實驗,而不必擔心損壞計算機(只需擦除 SD 卡然後重新開始即可!)。
漂亮的 Shell 環境
很多人說,當他們開始使用像 oh-my-zsh 或 Fish 這樣更用戶友好的 Shell 環境時,他們在命令行上感到更舒適。我非常同意這一點 – 我已經使用 Fish 十年了,我非常喜歡它。
在這裡還有一些其他的事情可以做:
- 有些人說,讓他們的終端更漂亮可以幫助他們感到更舒適(「讓它變成粉色!」)。
- 設置一個漂亮的 Shell 提示符來提供更多信息(例如,當命令失敗時,可以將提示符設置為紅色)。特別是 transient prompts(在當前命令設置一個非常花哨的提示符,但在之前的命令中設置一個簡單得多的提示符)看起來非常好。
一些用於美化終端的工具:
- 我使用 base16-shell
- powerlevel10k 是一個流行的漂亮的 Zsh 主題,具有 transient prompts
- starship 是一個漂亮的提示符工具
- 在 Mac 上,我認為 iTerm2 比默認的終端更容易自定義。
漂亮的文件管理器
一些人提到了像 ranger 或 nnn 這樣的漂亮的終端文件管理器,這是我之前沒有聽說過的。
一個有幫助的朋友或同事
一個可以回答初學者問題並給你指點的人是無價的。
通過肩並肩地觀察學習
有人提到觀察更有經驗的人使用終端 - 有很多經驗豐富的用戶甚至沒有意識到自己在做什麼,你可以從中學到很多小技巧。
別名
很多人說,為常用任務創建自己的別名或腳本就像是一個神奇的「靈光一現」時刻,因為:
- 他們不必記住語法
- 然後他們就有了一份自己常用命令的列表,可以輕鬆調用
查找示例的備忘單
很多手冊頁沒有示例,例如 openssl s_client 的手冊頁就沒有示例。這使得起步變得更加困難!
人們提到了一些備忘單工具,比如:
例如,openssl 的備忘單 非常棒 - 我認為它幾乎包含了我在實際中使用 openssl
時用過的所有內容(除了 openssl s_client
的 -servername
選項)。
有人說他們配置了他們的 .bash_profile
,這樣每次登錄時都會列印出一張備忘單。
不要試圖背誦
一些人說他們需要改變自己的方法 - 他們意識到不需要試圖記住所有的命令,只需按需查找命令,隨著時間的推移,他們會自然而然地記住最常用的命令。
(我最近對學習閱讀 x86 彙編有了完全相同的體會 - 我正在上一門課程,講師說「是的,剛開始時可以每次都查找,最終你會記住最常見的指令。」)
還有一些人說相反的觀點 - 他們使用間隔重複應用程序(如 Anki)來記憶常用的命令。
Vim
有人提到他們開始在命令行上使用 Vim 編輯文件,一旦他們開始使用終端文本編輯器,使用命令行處理其他事情也變得更自然。
此外,顯然有一個名為 micro 的新編輯器,像是更好的 pico
/nano
,適用於那些不想學習 Emacs 或 Vim 的人。
桌面上使用 Linux
有人說他們開始使用 Linux 作為他們的日常主力系統,而需要修復 Linux 問題可以幫助他們學習。這也是我在大約 2004 年熟悉命令行的方式(我非常喜歡安裝各種不同的 Linux 發行版,以找到我最喜歡的那個),但我猜這不是如今最受歡迎的策略。
被迫僅使用終端
有些人說他們參加了一門大學課程,教授讓他們在終端上做所有事情,或者他們自己制定了一個規則,一段時間內必須在終端上完成所有工作。
工作坊
有幾個人說像 Software Carpentry 這樣的工作坊(面向科學家的命令行、Git 和 Python/R 編程簡介)幫助他們更熟悉命令行。
你可以在這裡查看 Software Carpentry 課程。
書籍和文章
一些提到的材料:
文章:
書籍:
- 《Effective Linux at The Command Line》
- 《Unix Power Tools》(可能有些過時)
- 《The Linux Pocket guide》
視頻:
- Mindy Preston 的 CLI tools aren』t inherently user-hostile
- Gary Bernhardt 的 destroy all software screencasts
- DistroTube
(題圖:MJ/c0dc082a-a477-434b-b826-77a42c8f61c3)
via: https://jvns.ca/blog/2023/08/08/what-helps-people-get-comfortable-on-the-command-line-/
作者:Julia Evans 選題:lujun9972 譯者:ChatGPT 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive