Learning Objectives
- 看懂「指令 選項 參數」的格式,分辨短選項、長選項與參數
- 用 --help 查看指令的簡短用法,用 man 開啟完整手冊並看懂 NAME、SYNOPSIS、DESCRIPTION 等區塊
- 知道手冊的章節編號,用 man 5 passwd 指定章節,並在手冊裡翻頁、搜尋、離開
- 用 whatis、apropos(man -k)找指令,用 type 分辨 shell 內建指令與外部指令
指令記不住,就查說明
Linux 有上千個指令,每個指令又有幾十個選項,沒有人能全部記住。熟練的使用者不是背得多,而是知道怎麼查:
| 想知道的事 | 用什麼 |
|---|---|
| 這個指令有哪些選項? | 指令 --help |
| 完整的用法與說明 | man 指令 |
| 這個指令是做什麼的?(一行說明) | whatis 指令 |
| 想做某件事,但不知道指令叫什麼 | apropos 關鍵字 或 man -k 關鍵字 |
| 這個指令是 shell 內建的,還是一支程式? | type 指令 |
這一課先看懂指令的格式,再逐一練習這些查詢方法。
指令格式:指令 選項 參數
大部分的指令都遵守同樣的格式,中間以空格分開:
指令 [選項] [參數]
- 指令:要執行的程式,例如
ls、cp - 選項(option):調整指令的行為,以
-開頭。短選項是一個字母(-l),可以合併寫(-la等於-l -a); 長選項以--開頭、是完整的單字(--all、--help) - 參數(argument):指令要處理的對象,通常是檔案或目錄
- 方括號
[ ]表示可以省略
| 指令 | 選項 | 參數 | 意思 |
|---|---|---|---|
ls -l ./ |
-l 以詳細清單列出 |
./ 目前目錄 |
列出目前目錄的詳細資訊 |
cp -v ./aa.txt ./bb.txt |
-v 顯示執行過程 |
來源 ./aa.txt、目的 ./bb.txt |
把 aa.txt 複製成 bb.txt |
cat -n ./aa.txt |
-n 加上行號 |
./aa.txt |
顯示 aa.txt 的內容並列出行號 |
rm ./dev00.file |
(沒有) | ./dev00.file |
刪除 dev00.file |
投影片說
rm不加選項時會詢問是否刪除,那是因為該系統把rm設成了rm -i的別名。 Ubuntu 預設沒有這個別名,rm會直接刪除,不會詢問。
每個指令都可以加 --help,例如 ls --help、cp --help,印出用法與所有選項的簡短說明,
適合「大概知道指令,只是忘了某個選項」的時候。
Linux 的手冊:man
man(manual)會開啟指令的手冊頁(manual page,簡稱 man page),這是 Linux 內建的線上說明系統。
例如 man ls 開啟 ls 的手冊,內容分成幾個固定的區塊:
| 區塊 | 內容 |
|---|---|
| NAME | 指令名稱與一行用途說明 |
| SYNOPSIS | 指令的語法;[ ] 可以省略,... 可以重複 |
| DESCRIPTION | 詳細說明,通常也列出所有選項 |
| OPTIONS | 選項的說明(有些手冊把選項併在 DESCRIPTION) |
| EXAMPLES | 使用範例(不是每份手冊都有) |
| SEE ALSO | 相關的其他手冊 |
手冊在終端機裡以翻頁的方式顯示,常用的按鍵:
| 按鍵 | 作用 |
|---|---|
Space、Page Down |
往下翻一頁 |
Page Up |
往上翻一頁 |
Home、End |
到第一頁、最後一頁 |
/字串 |
往下搜尋這個字串,例如 /sort |
?字串 |
往上搜尋 |
n、N |
跳到下一個、上一個搜尋結果 |
q |
離開手冊,回到提示字元 |
下方的模擬器把手冊內容顯示在檢視區,不需要按
q。在真的終端機上,看完手冊一定要按q才能回到提示字元。 如果man顯示 This system has been minimized,表示安裝時選了精簡(minimized)版本,手冊被移除了,照畫面的說明執行unminimize可以補回。
手冊的章節編號
手冊分成好幾個章節(section),同一個名稱可能出現在不同章節。man man 的說明裡有這張表:
| 章節 | 內容 |
|---|---|
| 1 | 一般使用者可以執行的指令或程式 |
| 2 | 系統呼叫(由核心提供的函數) |
| 3 | 函式庫裡的函數 |
| 4 | 特殊檔案(通常在 /dev) |
| 5 | 設定檔與檔案格式,例如 /etc/passwd |
| 6 | 遊戲 |
| 7 | 其他(慣例、協定等) |
| 8 | 系統管理指令(通常要 root 權限) |
| 9 | 核心相關的函數(非標準) |
passwd 既是改密碼的指令(第 1 章),也是帳號設定檔 /etc/passwd 的名稱(第 5 章)。文件裡常寫成 passwd(1)、passwd(5) 來區分:
man passwd # 不指定章節:開啟找到的第一個,也就是 passwd(1)
man 5 passwd # 指定第 5 章:/etc/passwd 檔案的格式
whatis 只印出手冊的一行說明,可以先用它看有哪些章節:
$ whatis passwd
passwd (1) - change user password
passwd (5) - the password file
不知道指令名稱時,用 apropos 關鍵字(等於 man -k 關鍵字)搜尋所有手冊的一行說明。
type:內建指令與外部指令
指令分成兩種:
- 外部指令:一支放在磁碟上的程式,例如
/usr/bin/cp。有手冊,可以用man查。 - shell 內建指令(builtin):寫在 bash 本身裡面的指令,例如
cd、history、alias、type。 它們沒有獨立的手冊,man cd會找不到;要用 bash 的help指令查,例如help cd。
type 可以分辨一個名稱屬於哪一種:
$ type cd
cd is a shell builtin
$ type cp
cp is /usr/bin/cp
$ type ll
ll is aliased to `ls -alF'
cd必須是內建指令:它要改變的是 shell 自己的目前目錄,另外啟動一支程式無法做到這件事。
查說明的順序
遇到不熟的指令,可以照這個順序查:
whatis 指令:先確認它是做什麼的、有哪些章節指令 --help:快速看選項清單man 指令:需要完整說明時再開手冊,用/關鍵字跳到想看的地方- 名稱忘了:
apropos 關鍵字,例如apropos directory找出所有和目錄有關的指令 man找不到:用type看看是不是內建指令,是的話改用help 指令
手冊與
--help多半是英文。看到不懂的選項,可以把那一段說明複製給 AI 助教,請它舉例說明,再回到終端機實際試一次。
想一想:指令格式與 --help
在 cp -v ./aa.txt ./bb.txt 裡,-v 是什麼?
ls -la 和下列哪一個寫法的效果相同?
在 Ubuntu 上執行 rm ./dev00.file(沒有任何選項),會怎樣?
想一想:man、章節與 type
想看 /etc/passwd 這個檔案每個欄位的意思,應該用哪一個指令?
正在看 man ls,想找出所有提到 sort 的地方並離開手冊,要按哪些鍵?
man cd 出現 No manual entry for cd,type cd 顯示 cd is a shell builtin。要查 cd 的用法,該怎麼做?
重點精華回顧
- 指令格式是「指令 [選項] [參數]」;短選項
-l可以合併成-la,長選項以--開頭。 指令 --help快速列出用法與選項。man 指令開啟手冊,主要區塊有 NAME、SYNOPSIS、DESCRIPTION、OPTIONS、SEE ALSO;/字串搜尋、n下一個、q離開。- 手冊分章節:1 一般指令、5 設定檔與檔案格式、8 系統管理指令;
man 5 passwd指定章節。 whatis印出一行說明;apropos(man -k)用關鍵字找指令。type分辨內建指令、外部指令與別名;內建指令用help查說明。