十三個基本 Linux 指令,就能涵蓋在 GNU/Linux 系統上瀏覽、檢視與管理檔案時,大部分不涉及破壞性操作的日常需求。Linux Commands Cheat Sheet 把這十三個指令——包括 pwd、ls、mkdir、cp、mv、cat、head、tail、wc、sort、uniq、df 與 du——整理成一份可以搜尋的範本集合,讓你能一次複製一則。每個範本都附有以角括號包起來的預留位置文字、一段簡短說明,以及針對該指令特殊之處量身打造的安全提示。因為這份清單刻意略過了強制參數、遞迴刪除、權限提升與程序終止,你可以把它當成一份輔助回憶的參考,而不是一份完整的指令大全。這份速查表完全在你的瀏覽器中執行;它不會開啟終端機,不會讀取你的檔案系統,也不會執行任何東西。你要做的,是先搜尋,把預留位置換成真實的值,並在把某個指令貼進你真正掌控的 shell 之前,先確認目前的工作目錄。

basic linux commands
基本 Linux 指令

這份速查表實際涵蓋的內容

這 13 個指令,分成四個實用的群組,各自回答初學者會遇到的一種問題。位置類指令用 pwd 回答「我現在在哪裡?」。檔案與目錄類指令,讓你用 ls、mkdir、cp 與 mv,來列出、建立、複製與搬移。文字類指令,讓你用 cat、head、tail、wc、sort 與 uniq,來預覽、計算與排序檔案內容。磁碟類指令,用 df 與 du,回報檔案系統層級與路徑層級的空間使用狀況。合起來,這些指令涵蓋了新手在第一週就會遇到的日常工作:在目錄之間移動、建立資料夾、複製與重新命名檔案、瀏覽日誌內容、計算行數、排序輸出,以及檢查磁碟空間是不是快滿了。在一般情況下,它們都不需要提升的權限,這也是為什麼它們是很合理的入門組合。

這種刻意限定的範圍,也說明了這份清單裡少了什麼。這份速查表沒有包含 rm、強制參數、遞迴刪除、chmod、像 apt 或 dnf 這類套件管理工具、像 curl 或 ssh 這類網路指令,或是像 kill 這類程序控制指令。把這些從一份「快速複製」的參考資料中拿掉,能避免有人不看參數,就直接貼上指令,因而不小心造成資料遺失的情況。當你真的需要執行破壞性操作時,正確的做法是先查閱本機的 man 頁面,並先確認目標對象,而不是直接從一份輔助回憶的資料裡,抓一行指令就用。

依任務分類的 13 個指令

下表依主要用途,把每個範本分組。當你知道自己想要哪個動作、卻不確定確切的參數語法時,可以把它當成快速索引來用。

類別 指令 主要用途
位置 pwd 印出目前的工作目錄
檔案與目錄 ls 列出目錄內容
檔案與目錄 mkdir 建立一個或多個目錄(mkdir -p 會一併建立父目錄)
檔案與目錄 cp 複製檔案,加上 -i 會在覆蓋前先詢問
檔案與目錄 mv 搬移或重新命名檔案,加上 -i 會在覆蓋前先詢問
文字 cat 把檔案內容寫到標準輸出
文字 head 顯示檔案的前 20 行
文字 tail 顯示檔案的最後 20 行
文字 wc 計算行數、字數與位元組數(wc -l 計算換行字元的數量)
文字 sort 依目前使用中的地區設定排序各行
文字 uniq 合併相鄰的重複行;輸入內容必須先經過排序
磁碟 df 回報每個掛載的檔案系統剩餘多少空間(df -h 會以人類易讀的單位顯示)
磁碟 du 估算某個路徑所使用的磁碟空間(du -sh 會顯示單一總計值)

如何安全地複製並執行一個範本

  1. 開啟 Linux Commands Cheat Sheet,依指令名稱、類別、語法或用途搜尋。舉例來說,輸入「disk」或「first lines」,就能縮小清單範圍。
  2. 在複製任何內容之前,先閱讀說明與任何安全提示,了解這個範本會做什麼、又省略了什麼。
  3. 把每一個角括號預留位置——例如 <file>、<path>、<source>、<destination>、<directory>,或 <sorted-file>——換成真實的值,並移除角括號。
  4. 用 pwd 確認目前的工作目錄,用 ls 確認目標路徑確實存在,用 command -v 或 which 確認可執行檔的來源,並用 man <command> 確認本機上的實際行為。
  5. 複製這個範本,並以所需的最小權限來執行。cp 與 mv 的範本已經內建 -i,所以 shell 會在任何覆蓋動作發生之前先詢問你。
  6. 在繼續下一步之前,確認觀察到的結果與離開狀態碼。閱讀輸出內容,確認檔案確實已經改變,並在需要明確檢查回傳代碼時,執行 echo $?。

替換預留位置卻不弄壞指令

角括號裡的文字是一個預留位置,不是字面上的輸入內容。如果你原封不動地輸入 cat <file>,shell 就會去尋找一個檔名真的叫做「<file>」的檔案,並回報「No such file or directory」失敗。同樣的規則也適用於 <path>、<source>、<destination>、<directory> 與 <sorted-file>。要連同角括號一起整段替換掉,並選擇真正指向你想操作的對象的真實值。

對 shell 而言比較敏感的字元,會帶來另一層風險。空格、開頭的連字號、萬用字元、環境變數,以及符號連結,都有可能改變一個指令實際作用的對象。為包含空格或特殊字元的路徑加上引號,並在檔名以連字號開頭、而且該工具支援的情況下,在檔名前加上 --。cp 與 mv 的範本已經內建 -i,會在任何覆蓋動作之前強制跳出互動式提示,但這個提示只會在真正的終端機中出現。在腳本、別名,或非互動式的工作階段裡,這個提示可能不會觸發,所以在執行之前,永遠要再三確認目標對象。

當實際 Linux 行為與速查表不一致時

這份速查表已對照 GNU Coreutils manual 進行驗證,並與 POSIX utility documentation 交叉核對過,但實際的系統情況各有不同。macOS、BSD、BusyBox、容器、精簡版映像檔,以及較舊的發行版,所附帶的核心工具、參數與輸出格式都可能不一樣。舉例來說,sort 除非另外設定,否則會依照目前使用中的地區設定來排序,所以同一份目錄清單,在一台機器上排出來的順序,可能和另一台機器不一樣。這裡的 head 與 tail 預設是二十行,但換行字元與編碼方式仍然很重要;二進位輸入與 Windows 格式的換行符,都可能產生出乎意料的結果。

如需權威的細節說明,請在你實際執行指令的那台系統上,查閱 GNU Coreutils manual 或 POSIX utilities index。本機的 man 頁面與該指令內建的說明輸出,才應該是你最終依據的來源,而不是這份速查表。

磁碟類指令回報的是不同的東西

df -h 與 du -sh 看起來很像,但回答的其實是不同的問題。df -h 以人類易讀的單位,摘要出各個掛載檔案系統的空間狀況,適合用來回答「磁碟是不是滿了?」這類問題。du -sh 則估算歸屬於某個選定路徑的總區塊數,適合用來回答「空間都跑到哪裡去了?」這類問題。兩者的總計數字可能不一致,因為已刪除但仍開啟的檔案、稀疏檔案、硬連結、權限、掛載邊界、快照,以及檔案系統本身的計算方式,都會影響每個指令看到的內容。

不論哪一個指令,都不能證明清理動作是安全的。在刪除任何東西以釋放磁碟空間之前,要先確認確切是誰在佔用空間,並保留可還原的餘地。先把候選檔案封存或搬移到別處,確認新的總計數字,然後才真正刪除它們。這份速查表把磁碟類指令,當成檢視用的工具,而不是刪除的授權依據。

複製指令時常見的陷阱

一個語法上完全正確的指令,仍然有可能作用在錯誤的檔案上,而這種錯誤,往往要等到出事之後才會被發現。三個習慣,能防止大部分的意外。第一,在執行 cp、mv 或 rm 之前,永遠先用 pwd 印出目前的工作目錄。第二,用 ls 列出目標,確認這個路徑確實存在,而且解析到的位置就是你所想的那個地方。第三,把 -i 當成一道安全防線,而不是備份機制;這個提示的目的是讓你放慢腳步,而不是用來救回已經遺失的資料。當你想並排比較兩個檔案時,how to check the difference between two files in Linux 這篇導覽,自然而然能和這些指令搭配使用。

重新導向與管線,也適用同樣的習慣。wc -l 計算的是換行字元的數量,而不是人類定義的「紀錄」數量。uniq 只會合併相鄰的重複行,這也是為什麼範本裡明確寫著 sorted-file:要先排序,再去除重複。cat 會把檔案內容寫到標準輸出,過大或二進位的輸入內容,可能會把終端機灌爆。head 與 tail 是比較安全的預覽方式,因為它們會限制輸出的行數,但這裡的上限是二十行,並不是一個放諸四海皆準的保證。當你需要在搬移檔案之前先畫出目錄結構時,Linux directory tree generator 能從一份嚴格的路徑清單,產生出一張清晰的視覺化地圖。

圍繞保守型範本建立習慣

這份速查表是一份學習與輔助回憶的工具,不是操作一台你不熟悉的伺服器的授權依據。當某個指令有可能覆蓋、洩露、搬移或消耗重要資料時,先停下來,把確切的目標對象弄清楚。在腳本中,要明確處理離開狀態碼、為變數加上引號、明確設定工作目錄,並選擇可以重複執行而不會造成傷害的冪等操作。在做出改動之前,先備份重要資料,事後再驗證結果。這裡列出的 13 個指令,已經足以讓你應付大多數初學者會遇到的任務,同時又不會讓你暴露在那些會把小失誤變成永久性錯誤的破壞性捷徑之下。