這裡整理一些關於 Linux 線上手冊(man page)的使用範例,教您如何善用這些說明文件。

在 UNIX/Linux 的系統中有非常多的指令,通常使用者(甚至是資深的系統管理者)都無法記住每個指令的詳細使用方式,尤其是那些有非常多參數可以用的指令,就算是天天在用的 ls,您可能也不是很清楚它所有的參數如何使用。


所幸一般 UNIX/Linux 系統中的指令都會附帶相關的線上說明手冊(man page),提供使用者查詢與參考。

man page(manual page 的簡寫)是在 UNIX/Linux 系統上特有的說明文件格式,在這個領域大家都會直接稱呼這樣的文件為 man page。

基本查詢

一般稍微有經驗的 Linux 使用者大概都知道使用 man 指令加上要查詢的說明主題來閱讀線上手冊,通常主題的名稱就是指令或是函數的名稱,例如查詢 ls 的用法:

man ls

這樣就可以查閱 ls 的使用方式:

linux-man-page-ls

指定章節(Section)

Linux 的線上手冊分為幾個主要的章節(sections),每個章節對應不同的類別:

  • 1:可執行的程式或是 shell 指令。
  • 2:系統呼叫(system calls,Linux 核心所提供的函數)。
  • 3:一般函式庫函數。
  • 4:特殊檔案(通常位於 /dev)。
  • 5:檔案格式與協定,如 /etc/passwd
  • 6:遊戲。
  • 7:雜項(巨集等,如 man(7)groff(7))。
  • 8:系統管理者指令(通常是管理者 root 專用的)。
  • 9:Kernel routines(非標準)。

而在線上手冊中的文件都會以小括弧來標明該文件所屬的章節,例如 LS(1) 就代表這份文件隸屬於第 1 個章節。

有些時候一個主題名稱在不同章節中有不同的說明文件,如果查詢一個主題的時候沒有指定章節,預設會依照 1 n l 8 3 2 3posix 3pm 3perl 5 4 9 6 7 這個順序來搜尋,然後顯示第一個搜尋到的章節。

例如 passwd 這個主題有 passwd(1)passwd(5) 兩個章節,如果不指定章節的話:

man passwd

就會顯示 passwd(1),而若要查詢 passwd(5) 的話,就要明確指定章節數:

man 5 passwd

列出所有章節

有時候我們對於某個主題有興趣,但是卻不知道該主題有哪些章節可以查詢,這時候就可以使用 -aw 參數查詢:

man -aw printf

輸出為
/usr/share/man/man1/printf.1.gz
/usr/share/man/man3/printf.3.gz

這樣我們就可以知道 printf 這個主題有兩份說明文件,一份在第 1 個章節,另一份在第 3 個章節,所以我們可以用下面兩個指令來查詢:

man printf
man 3 printf

一次查閱所有章節

如果要一次查閱一個主題的所有章節,可以使用 -a 參數,這樣 man 會依序顯示所有的章節:

man -a printf

當您看完一個章節並按下 q 離開之後,它就會顯示
--Man-- next: printf(3) [ view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]
接著按下 Enter 鍵即可繼續閱讀下一個章節。

搜尋線上手冊

若想要在所有的線上手冊中以關鍵字搜尋,可以使用 -k 參數,並指定要搜尋的字眼:

man -k printf

輸出會類似這樣
asprintf (3) -- print to allocated string
dprintf (3) -- print to a file descriptor
fprintf (3) -- formatted output conversion
fwprintf (3) -- formatted wide-character output conversion
printf (1) -- format and print data
[略]

man 在搜尋時其實是以正規表達式(regular expression)來比對的,所以您可以使用任何正規表達式來做更複雜的搜尋,例如搜尋 s 開頭,並且包含 printf 字眼的文件:

man -k "^s.*printf"

輸出為
snprintf (3) -- formatted output conversion
sprintf (3) -- formatted output conversion
swprintf (3) -- formatted wide-character output conversion

另外也可以使用 apropos 指令來搜尋:

apropos "^s.*printf"

使用瀏覽器顯示線上手冊

如果您喜歡瀏覽器來查看說明文件,可以使用 -H 參數,並指定要使用的瀏覽器:

man -Hfirefox printf

畫面會像這樣

man-page-in-firefox-browser

如果您在使用 -H 這個參數時,出現這樣的錯誤:

man: command exited with status 3: /usr/lib/man-db/zsoelim | /usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE | preconv -e UTF-8 | tbl | groff -mandoc -Thtml

就表示系統可能沒裝 groff,請先用 apt 安裝:

sudo apt-get install groff

指定分頁程式(Pager)

顯示文件用的分頁程式,可以使用 -P 參數指定:

man -P more printf

將線上手冊儲存為文字檔、網頁或 PDF

有時候我們會想要將線上手冊儲存成一般的檔案,方便用其他的方式來查閱,若要儲存成一般的文字檔可以使用:

man printf | col -b > printf.txt

將線上手冊儲存為 HTML 網頁檔:

zcat `man -w printf` | groff -mandoc -T html > printf.html

將線上手冊儲存為 PDF 檔:

man -t printf | ps2pdf - > printf.pdf

指定語系

現在很多線上手冊都有中文翻譯,如果您的 Linux 系統設定為中文語系,可能就有機會看到中文的說明文件:

man-page-chinese-locale

如果想要看原文的話(尤其是翻譯翻的不好的時候),可以用 -L 指定語系:

man -L en 5 passwd

彩色的線上文件

將文件的關鍵字加上色彩可以讓人閱讀起來更舒服,在 ~/.bashrc 中加入以下的色彩設定:

# Less Colors for Man Pages
export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold
export LESS_TERMCAP_me=$'\E[0m'           # end mode
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode
export LESS_TERMCAP_so=$'\E[38;5;246m'    # begin standout-mode - info box
export LESS_TERMCAP_ue=$'\E[0m'           # end underline
export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline

這樣就可以讓線上文件變成彩色的:

colorful-man-page

這裡的顏色都是使用 ANSI escape code 來指定的,所以您也可以自己修改這裡的色碼,自己調整顏色。

另外一個顯示彩色文件的方法是改用 most 這個分頁程式:

sudo apt-get install most
export PAGER="most"
man printf

畫面會像這樣

man-page-most-pager

參考資料:TGSnixCraft