man 指令:用法與選項、區段編號與 man -k 搜尋
在 Linux 伺服器上要查看指令或設定檔的用法時,用 man 指令開啟手冊頁;不知道名稱時,用 man -k 搜尋簡短說明。在 AlmaLinux 9 與 Debian 12 伺服器上查詢 passwd 頁面的結果,Debian 12 同時有第 1 區段的指令頁面與第 5 區段的檔案格式頁面,而 AlmaLinux 9 沒有第 5 區段的頁面。
以下輸出是在 AlmaLinux 9.8 伺服器以 root 帳號、在 Debian 12 伺服器以一般帳號執行的結果。模擬器的主機名稱與連線位址為範例值。
1️⃣ man 指令基本用法
在 man 後面寫上指令名稱,就會開啟該指令的手冊頁。man 會把頁面交給分頁程式(pager)一次輸出一個畫面,因此執行後不會馬上回到提示字元。分頁程式由 MANPAGER 或 PAGER 環境變數決定,兩者都是空的就使用 less。
把輸出交給管線時,不經分頁程式,只會輸出文字。用 head 取 [man ls] 的前 12 行,第一行有 LS(1),接著依序是 NAME、SYNOPSIS、DESCRIPTION 各節。
man ls | head -n 12LS(1) User Commands LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is speci-
fied.第一行 LS(1) 括號裡的數字 1,是這個頁面所在的區段編號。
在頁面中,[Space] 顯示下一個畫面,[/字詞] 加 Enter 搜尋字詞。[n] 移到同一字詞出現的下一個位置,[q] 結束 man。
寫了不存在的名稱時,會出現 [No manual entry for] 錯誤,結束代碼是 16。
man no-such-cmd9No manual entry for no-such-cmd9echo $?16man 頁面的 EXIT STATUS 一節說明,16 是頁面、檔案、字詞當中至少有一項找不到時的值。用法錯誤是 1,因此指令稿可以把兩種情況分開處理。
2️⃣ man 區段編號
同名頁面出現在多個區段時,man 會依既定的區段順序尋找,只開啟最先找到的那一頁。區段從 1 到 9,伺服器作業中常開的是第 1 區段的指令、第 5 區段的檔案格式與第 8 區段的管理指令。
| 區段 | 收錄的頁面 | 在 AlmaLinux 9.8 伺服器看到的例子 |
|---|---|---|
| 1 | 可執行程式與 shell 指令 | ls, passwd, crontab, man |
| 2 | 系統呼叫(核心提供的函式) | |
| 3 | 函式庫函式 | |
| 4 | 特殊檔案(多半在 /dev 底下) | |
| 5 | 檔案格式與慣例,例如 /etc/passwd | crontab |
| 6 | 遊戲 | |
| 7 | 其他(巨集套件與慣例) | |
| 8 | 系統管理指令,主要供 root 使用 | useradd, mandb |
| 9 | 核心常式(非標準) |
crontab 的指令與設定檔格式同名,所以兩個區段都有頁面。用 [man -f crontab] 確認時,第 1 與第 5 區段的行一起出現。
man -f crontabcrontab (1) - maintains crontab files for individual users
crontab (5) - files used to schedule the execution of programs不加區段編號執行 [man crontab],會開啟第 1 區段的 crontab 指令頁面。要看排程工作檔的格式,就在名稱前面寫 5。
man 5 crontab | head -n 4CRONTAB(5) File Formats CRONTAB(5)
NAME
crontab - files used to schedule the execution of programs第一行變成 CRONTAB(5) 與 File Formats,NAME 那一行也不再是指令說明,而是排程工作檔的說明。
指定的區段裡沒有該名稱的頁面時,會出現錯誤。在 AlmaLinux 9.8 伺服器上為了看 /etc/passwd 的檔案格式而執行 [man 5 passwd],結果出現第 5 區段沒有頁面的錯誤。
man 5 passwdNo manual entry for passwd in section 5在 Debian 12 伺服器上,[man -f passwd] 也一併列出第 5 區段的 passwd 那一行。哪個區段有頁面,取決於伺服器上安裝的手冊,所以加上區段編號之前,先用 [man -f] 確認。
man -f passwdpasswd (1) - change user password
passwd (1ssl) - OpenSSL application commands
passwd (5) - the password file第 8 區段收錄的是主要由 root 帳號執行的管理指令,例如建立帳號的 useradd。
man -f useradduseradd (8) - create a new user or update default new user information3️⃣ man 指令選項與 -k、-f 搜尋
[man -f] 會輸出同名頁面的一行說明,動作與 whatis 相同。在 AlmaLinux 9.8 伺服器上執行 [man -f passwd] 與 [whatis passwd],輸出了相同的兩行。
man -f passwdpasswd (1) - update user's authentication tokens
passwd (1ossl) - OpenSSL application commands1ossl 那一行是共用 passwd 這個名稱的 OpenSSL 指令頁面。
不知道名稱時,用 [man -k] 搜尋頁面名稱與簡短說明。動作與 apropos 相同,字詞會當成正規表示式讀取。
man -k '^passwd'passwd (1) - update user's authentication tokens
passwd (1ossl) - OpenSSL application commands^ 代表行首,所以只列出以 passwd 開頭的行。也可以用說明裡的字詞來找,[man -k 'directory contents'] 除了 ls,還找到 dir、vdir 頁面。
man -k 'directory contents'dir (1) - list directory contents
ls (1) - list directory contents
vdir (1) - list directory contents[man -k] 只搜尋 NAME 一節的簡短說明,所以用選項名稱或內文的字詞找不到頁面。連內文也搜尋的 [man -K] 會逐一讀取所有頁面,需要很長的時間。
找不到要搜尋的字詞時,會出現 [nothing appropriate],結束代碼是 16。
man -k no-such-word9no-such-word9: nothing appropriate.echo $?16[man -w] 不開啟頁面,只輸出原始檔的位置。
man -w ls/usr/share/man/man1/ls.1.gzman -w 5 crontab/usr/share/man/man5/crontab.5.gz這兩個檔案位於 /usr/share/man 底下的 man1 與 man5 資料夾,資料夾名稱裡的數字與區段編號相同。用 [man -w 1ossl passwd] 找到的 1ossl 頁面檔,也在與第 1 區段相同的 man1 資料夾裡。
選項整理在下方兩個分頁。
| 選項 | 複製 | 說明 |
|---|---|---|
| -f, --whatis | 輸出同名頁面的一行說明。動作與 whatis 相同 | |
| -k, --apropos | 搜尋頁面名稱與簡短說明。動作與 apropos 相同 | |
| -w, --where, --path, --location | 不開啟頁面,只輸出原始檔的位置 | |
| -a, --all | 依序輸出所有名稱相符的頁面 |
| 選項 | 複製 | 說明 |
|---|---|---|
| -K, --global-apropos | 在所有頁面的內文中搜尋字詞。需要很長的時間 | |
| -S, -s, --sections清單 | 以逗號或冒號分隔的清單,指定要搜尋的區段與順序 | |
| -P, --pager分頁程式 | 指定用來輸出頁面的分頁程式。預設值是 less | |
| -M, --manpath路徑 | 指定尋找頁面的手冊路徑 | |
| -L, --localelocale | 指定這次執行要使用的 locale | |
| -l, --local-file | 不搜尋系統手冊,把指定的檔案當成頁面輸出 | |
| -u, --update | 更新已安裝頁面的索引快取 | |
| -V, --version | 輸出版本資訊 |
🔲 man 指令模擬器
在下方模擬器中,可以用 [man ls] 開啟頁面,再用 [Space]、[/list]、[n]、[q] 按鈕翻動畫面。在同一台虛擬伺服器上,也可以像 [man 5 crontab] 那樣加上區段編號,或輸入 [man -f]、[man -k]、[man -w]。
4️⃣ man 頁面結構
man 頁面分成幾個以大寫標題開頭的節。只用 grep 取出節標題來比較,ls 頁面的選項說明放在 DESCRIPTION 裡,而 crontab 頁面另有 OPTIONS 一節。
man ls | grep -E '^[A-Z]+( [A-Z]+)*$'NAME
SYNOPSIS
DESCRIPTION
AUTHOR
REPORTING BUGS
COPYRIGHT
SEE ALSOman crontab | grep -E '^[A-Z]+( [A-Z]+)*$'NAME
SYNOPSIS
DESCRIPTION
OPTIONS
CAVEATS
SEE ALSO
FILES
STANDARDS
DIAGNOSTICS
AUTHOR節的名稱每個頁面略有不同,常見的節如下。
| 節 | 內容 |
|---|---|
| NAME | 名稱與一行說明(man -f 與 man -k 輸出的那一行) |
| SYNOPSIS | 指令的寫法 |
| DESCRIPTION | 動作說明(ls 頁面的選項說明也在這一節) |
| OPTIONS | 每個選項一段 |
| EXIT STATUS | 結束代碼的意義 |
| FILES | 指令讀取或寫入的檔案 |
| SEE ALSO | 可一併參考的頁面 |
SYNOPSIS 的符號遵循 man 頁面訂定的規則。中括號內的部分可以省略。以直線(|)隔開的選項不能同時使用,後面帶有三個點(...)的引數可以寫多次。
ls 的 SYNOPSIS 是 ls [OPTION]... [FILE]...,因此 指令選項和檔案名稱這類命令列引數都可以全部省略,也可以寫多個。
[--help] 是程式自己輸出的用法摘要,所以不經分頁程式,直接顯示在終端機上。[ls --help] 第一行的 Usage 與 SYNOPSIS 形式相同,全長 121 行,比 [man ls] 的 245 行短。
ls --help | head -n 3Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.man 頁面還有 [--help] 沒有的 AUTHOR、SEE ALSO 等節。想快速查看單一選項時用 [--help],需要像設定檔格式或結束代碼這類分節說明時,就開啟 man。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。