Linux命令行的藝術

jopen 9年前發布 | 45K 次閱讀 Linux

熟練使用命令行是一種常常被忽視或被認為難以掌握的技能,但實際上,它可以提高你作為工程師的靈活性以及生產力。本文是一份我在 Linux 上工作時發現的一些關于命令行的使用的小技巧的摘要。有些小技巧是非常基礎的,而另外一些則是相當復雜的甚至晦澀難懂的。這篇文章并不長,但當你能夠熟練掌握這里列出的所有技巧時,你就學會了很多關于命令行的東西了。

 

必讀

涵蓋范圍:

  • 這篇文章對剛接觸命令行的新手以及具有命令行使用經驗的人都有用處。本文致力于做到覆蓋面廣(盡量包括一切重要的內容),具體(給出最常見的具體的例子)以及簡潔(避免一些不必要的東西以及一些偏題的可以在其他地方翻閱到文獻的東西)。 每個小技巧在某個特定情境下都是基本的或能夠顯著地節約時間。
  • 本文為 Linux 所寫,除了僅限 MacOS X 系統節。其它節中的大部分內容都適用于其它 Unix 系統或 MacOS 系統,甚至 Cygwin。
  • 本文關注于交互式 Bash,盡管很多技巧也適用于其他 shell 或 Bash 腳本。
  • 本文包括了“標準的”Unix 命令和需要安裝特定包的命令,只要它們足夠重要。
  • </ul>

    注意事項:

    • 為了能在一頁內展示盡量多的東西,一些具體的信息會被間接的包含在引用頁里。聰明機智的你如果掌握了使用 Google 搜索引擎的基本思路與命令,那么你將可以查閱到更多的詳細信息。使用 apt-getyumdnfpacmanpipbrew(以及其它合適的包管理器)來安裝新程序。
    • 使用 Explainshell 去獲取相關命令、參數、管道等內容的解釋。
    • </ul>

      基礎

      • 學習 Bash 的基礎知識。具體來說,輸入 man bash 并至少全文瀏覽一遍; 它很簡單并且不長。其他的 shell 可能很好用,但 Bash 功能強大且幾乎所有情況下都是可用的 ( 學習 zsh,fish 或其他的 shell 的話,在你自己的電腦上會顯得很方便,但在很多情況下會限制你,比如當你需要在服務器上工作時)。
      • 學習并掌握至少一個基于文本的編輯器。通常 Vim (vi) 會是你最好的選擇,因為在終端里進行隨機編輯 Vim 真的毫無敵手,哪怕是 Emacs、某大型 IDE 甚至時下非常流行的編輯器。
      • 學會如何使用 man 命令去閱讀文檔。學會使用 apropos 去查找文檔。了解有些命令并不對應可執行文件,而是Bash內置的,可以使用 help 和 help -d 命令獲取幫助信息。
      • 學會使用 > 和 < 來重定向輸出和輸入,學會使用 | 來重定向管道。明白 > 會覆蓋了輸出文件而 >> 是在文件未添加。了解標準輸出 stdout 和標準錯誤 stderr。
      • 學會使用通配符 * (或許再算上 ? 和 []) 和引用以及引用中 ' 和 " 的區別。
      • 熟悉 Bash 任務管理工具:&ctrl-zctrl-cjobsfgbgkill 等。
      • 了解 ssh,以及學會通過使用 ssh-agentssh-add 等命令來實現基本的無密碼認證。
      • 學會基本的文件管理:ls 和 ls -l (了解 ls -l 中每一列代表的意義),lessheadtail 和 tail -f (甚至 less +F),ln 和 ln -s (了解硬鏈接與軟鏈接的區別),chownchmoddu (硬盤使用情況概述:du -hk *)。 關于文件系統的管理,學習 dfmountfdiskmkfslsblk。知道 inode 是什么(與 ls -i 和 df -i等命令相關)。
      • 學習基本的網絡管理:ip 或 ifconfigdig
      • 熟悉正則表達式,以及 grepegrep 里不同參數的作用,例如 -i-o-v-A-B 和 -C,這些參數是值得學習并掌握的。
      • 學會使用 apt-getyumdnf 或 pacman (取決于你使用的 Linux 發行版)來查找或安裝軟件包。并確保你的環境中有 pip 來安裝基于 Python 的命令行工具 (接下來提到的部分程序使用 pip 來安裝會很方便)。
      • </ul>

        日常使用

        • 在 Bash 中,可以使用 Tab 自動補全參數,使用 ctrl-r 搜索命令行歷史。
        • 在 Bash 中,可以使用 ctrl-w 刪除你鍵入的最后一個單詞,使用 ctrl-u 刪除整行,使用 alt-b 和 alt-f 以單詞為單位移動光標,使用 ctrl-a 將光標移至行首,使用 ctrl-e 將光標移至行尾,使用 ctrl-k 刪除光標至行尾的所有內容,使用ctrl-l 清屏。鍵入 man readline 查看 Bash 中的默認快捷鍵,內容很多。例如 alt-. 循環地移向前一個參數,以及 alt-* 展開通配符。
        • 你喜歡的話,可以鍵入 set -o vi 來使用 vi 風格的快捷鍵,而 set -o emacs 可以把它改回來。
        • 為了方便地鍵入長命令,在設置你的編輯器后(例如 export EDITOR=vim),鍵入 ctrl-x ctrl-e 會打開一個編輯器來編輯當前命令。在 vi 模式下則鍵入 escape-v 實現相同的功能。
        • 鍵入 history 查看命令行歷史記錄。其中有許多縮寫,例如 !$(最后鍵入的參數)和 !!(最后鍵入的命令),盡管通常被 ctrl-r 和 alt-. 取代。
        • 回到上一個工作路徑:cd -
        • 如果你輸入命令的時候改變了主意,按下 alt-# 來在行首添加 #,或者依次按下 ctrl-a, #, enter。這樣做的話,之后你可以很方便的利用命令行歷史回到你剛才輸入到一半的命令。
        • 使用 xargs ( 或 parallel)。他們非常給力。注意到你可以控制每行參數個數(-L)和最大并行數(-P)。如果你不確定它們是否會按你想的那樣工作,先使用 xargs echo 查看一下。此外,使用 -I{} 會很方便。例如:
        • </ul>