Linux中國

如何在命令行上舒適地生存?

有時我與一些害怕使用命令行的朋友交談,我感到自己給不出好的建議(我已經使用命令行太長時間了),因此我向一些 Mastodon 上的人提出了以下問題:

如果在過去一到三年內,你剛剛不再害怕使用命令行了,是什麼幫助了你?

(如果你不記得,或者你已經使用命令行舒適地工作了 15 年,則無需回答——這個問題不適用於你 ?)

這個列表還不如我希望的那麼長,但我希望通過發布它來收集更多的答案。顯然,並沒有一個單一的方法適用於所有人,不同的人會選擇不同的路徑。

我認為舒適使用命令行有三個方面:減少風險動機資源。我將先談談減少風險,然後是一些動機,並列出一些資源。

減少風險的方式

很多人(沒錯!)對在命令行上意外執行了一些無法撤銷的破壞性操作感到擔心。

以下是一些人們提到的幫助他們減少風險的策略:

  • 定期備份(有人提到他們在上周的一個命令行錯誤中意外刪除了整個家目錄,但很幸運他們有備份)。
  • 對於代碼,儘可能多地使用 git
  • rm 設置為類似 safe-rmrmtrash 這樣的工具的別名,這樣你就不會意外刪除不應刪除的內容(或者就設置別名到 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 &apos;&apos; | fzf --preview "jq {q} < YOURFILE.json"
  • 自動預覽 sed 的輸出(echo &apos;&apos; | fzf --preview "sed {q} YOURFILE"
  • 自動預覽 awk 的輸出(echo &apos;&apos; | fzf --preview "awk {q} YOURFILE"

你可以參考這個思路。

通常,人們會為 fzf 的使用定義別名,比如輸入 gcb 或其他命令,以快速選擇要檢出的 git 分支。

樹莓派

一些人開始使用樹莓派,這樣可以更安全地進行實驗,而不必擔心損壞計算機(只需擦除 SD 卡然後重新開始即可!)。

漂亮的 Shell 環境

很多人說,當他們開始使用像 oh-my-zshFish 這樣更用戶友好的 Shell 環境時,他們在命令行上感到更舒適。我非常同意這一點 – 我已經使用 Fish 十年了,我非常喜歡它。

在這裡還有一些其他的事情可以做:

  • 有些人說,讓他們的終端更漂亮可以幫助他們感到更舒適(「讓它變成粉色!」)。
  • 設置一個漂亮的 Shell 提示符來提供更多信息(例如,當命令失敗時,可以將提示符設置為紅色)。特別是 transient prompts(在當前命令設置一個非常花哨的提示符,但在之前的命令中設置一個簡單得多的提示符)看起來非常好。

一些用於美化終端的工具:

  • 我使用 base16-shell
  • powerlevel10k 是一個流行的漂亮的 Zsh 主題,具有 transient prompts
  • starship 是一個漂亮的提示符工具
  • 在 Mac 上,我認為 iTerm2 比默認的終端更容易自定義。

漂亮的文件管理器

一些人提到了像 rangernnn 這樣的漂亮的終端文件管理器,這是我之前沒有聽說過的。

一個有幫助的朋友或同事

一個可以回答初學者問題並給你指點的人是無價的。

通過肩並肩地觀察學習

有人提到觀察更有經驗的人使用終端 - 有很多經驗豐富的用戶甚至沒有意識到自己在做什麼,你可以從中學到很多小技巧。

別名

很多人說,為常用任務創建自己的別名或腳本就像是一個神奇的「靈光一現」時刻,因為:

  • 他們不必記住語法
  • 然後他們就有了一份自己常用命令的列表,可以輕鬆調用

查找示例的備忘單

很多手冊頁沒有示例,例如 openssl s_client 的手冊頁就沒有示例。這使得起步變得更加困難!

人們提到了一些備忘單工具,比如:

  • tldr.sh
  • cheat(還可以進行編輯 - 你可以添加自己的命令以供以後參考)
  • um(一個非常精簡的需要自己構建的系統)

例如,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 課程

書籍和文章

一些提到的材料:

文章:

書籍:

視頻:

(題圖: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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國