歡迎您光臨本站 註冊首頁

UNIX 手冊頁系統指南

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
UNIX® 有成百上千條命令,不可能記住所有選項和細節。好在不需要這樣:手冊(UNIX 內置的聯機參考系統)是用戶最好的朋友。

可以在 UNIX 命令行上使用的命令有很多(粗略統計超過 1,500 個命令),每個命令具有許多特性,不可能記住每個選項、細節和排列次序。更糟糕的是,經過 40 年的發展,UNIX 命令存在各種各樣的差異。例如,-l 在 ls 命令中表示 “long 格式”,但是在其他與文件相關的命令中不是這個意思,甚至根本沒有這個選項。另外,一些命令行程序支持 --help,這個選項輸出簡要的使用方法說明,但是並非所有命令都有這個選項。隨著命令行越來越強大,學習的難度也相應地增加了。

與學習任何技能一樣,隨著時間的推移,經常使用的命令序列會被記住,成為本能。另外,根據您使用的 shell,可以為經常使用的命令行組合建立別名或 shell 腳本,這可以減輕記憶負擔。一些 shell 還提供很長的命令歷史,可以跨會話保存以前使用過的命令。

但是,記憶會模糊,還需要掌握新命令。要想真正掌握命令行,就必須利用手冊。man 系統是 UNIX 內置的聯機參考系統。實際上,對於那些最討厭的問題,UNIX 社區的回答往往是 “RTFM!”,即 “去讀手冊頁吧!”。

man 系統

UNIX 手冊系統由兩個部分組成:聯機文檔的集合和相應的文檔閱讀程序。每個文檔稱為一個手冊頁;根據主題不同,手冊頁的長度差異非常大。文檔閱讀程序僅僅是一個名為 man 的命令實用程序。

要想閱讀系統上安裝的軟體的文檔,只需輸入 man component,其中的 component 是軟體的名稱。例如,為了閱讀 ls 實用程序的文檔,輸入:

$ man ls  

甚至可以閱讀 man 本身的相關信息:

$ man man  

如果安裝了 component,它有手冊頁,應該會看到與 圖 1 相似的屏幕(這裡是 ls 的手冊頁)。如果指定的手冊頁不存在,man 就報告 No manual entry for component。(除了指定名稱之外,還有尋找手冊頁的其他方法,稍後介紹。)


圖 1. 在終端窗口中運行的手冊文檔閱讀程序

通常情況下,UNIX 系統上的所有軟體(包括每個命令行實用程序、每個系統調用、編程庫中每個可調用的函數和每種文件格式)都包含一個手冊頁。實際上,在構建新軟體時編寫並提供手冊頁被認為是一種必要的 “禮節”。

在以前,手冊頁存儲庫曾經放在 /usr/man。最近,存儲位置已經改為 /usr/share/man,但是具體位置因 UNIX 版本而異。另外,軟體包經常把它的手冊頁放在自己的根目錄的子目錄中。例如,MySQL 資料庫引擎的一些版本把手冊頁存儲在 /usr/local/mysql/man 中。這些策略都是允許的,但是,如果手冊頁分散在許多存儲庫中,就需要一些額外的配置。

無論它的位置在哪裡,每個存儲庫都劃分為一個或多個部分。每個部分實現為一個獨立的子目錄。每個部分按慣例命名為 man1、man2 直到 man8,分別包含一類命令的手冊頁。表 1 列出部分名及其內容。


表 1. 手冊頁存儲庫部分及其內容
部分 內容
man1 一般命令。這個部分中的命令通常不需要超級用戶(即管理員)特權。ls、cat 和 passwd 放在這裡,還有 shell。例如,請試試 man bash。
man2 用來訪問 UNIX 內核提供的服務的系統調用或函數。例如 fork 系統,它從一個現有的進程生成一個新進程。輸入 man fork 顯示它的手冊頁。使用系統軟體的程序員常常參考這個部分。
man3 C 庫函數。許多軟體包提供功能豐富的代碼庫,讓開發人員可以創建新軟體來補充現有的特性或開發全新的特性。每個庫通常有一個手冊頁;一些庫(比如系統的 libc)太大了,所以各個函數或一組相關函數有單獨的文檔。
man4 特殊文件,比如設備和驅動程序。
man5 文件格式。UNIX 幾乎完全使用文本配置文件定製系統的操作。有大量配置文件,包括網路服務的列表 (/etc/services) 和可用的 shell 列表 (/etc/shells) 等等。
man6 遊戲和屏幕保護程序。
man7 雜類文件。這是一個包羅萬象的類別。在傳統的系統上,可以了解 glob 操作符、正則表達式等方面的信息。
man8 系統管理命令,超級用戶很可能要使用它們。

在某些情況下,不同部分中的組件可能名稱相同。這種現象很常見,尤其是在一個軟體包有多個部分的情況下。例如,第一部分中有 crontab 命令,它提交要調度的作業。同時,第五部分中有 crontab 文件格式,它描述要運行的作業。

為了區分不同部分中的同名組件,應該在第一個參數中提供部分號:

$ man 1 crontab  $ man 5 crontab  

前一個命令顯示 crontab 命令的手冊頁;后一個命令顯示 crontab 文件格式。如果一個軟體在多個部分中存在,而您沒有指定部分號,man 就會顯示在編號最低的部分中找到的匹配。





手冊頁的內容

儘管各個命令的選項差異很大,但是手冊頁的內容相當有規律。實際上,手冊頁之所以是寶貴的參考資料,就是因為它們符合慣例。閱讀一小段文字之後,您很快就能夠跳到文檔的正確部分,找到您要找的信息。

最簡單的手冊頁包含五個部分:名稱、大綱、描述、一些示例和其他相關資料的引用。在 圖 1 中可以看到前三個部分。

  • name(名稱)給出命令、函數或文件格式的名稱,以及對軟體作用的單行的準確描述。
  • synopsis(大綱)簡要描述如何使用這個軟體。如果手冊頁的主題是命令,那麼這個部分顯示必需的和可選的選項、參數的格式和參數次序。如果主題是系統調用或庫函數,那麼這個部分顯示函數的形式參數以及使用函數所需的頭文件(如果有的話)。

    例如,下面是 BSD UNIX 上 du 命令的大綱。

    du [-H | -L | -P] [-a | -s | -d depth] [-c] [-h | -k | -m | -g] [-x]     [-I mask] [file ...]  

    命令大綱中使用的表示法是手冊系統中有幫助的慣例之一(一些建模實用程序提供的使用方法提示借鑒了這種表示法)。這裡的大綱的意思是,“輸入 du;可選地輸入 -H、-L 或 -P 選項之一;然後,可選地輸入 -a、-s 或 -d 之一,但是如果使用最後一個選項,還要指定一個深度(depth);指定 -c,也可以不指定;可選地輸入 -h、-k、-m 或 -g 之一;指定 -x,也可以不指定;指定 -I 和一個掩碼,也可以不指定;最後,提供一個或多個文件名。省略號 (...) 表示多於一個。

    分組在一起的選項(比如第一組 -H、-L 和 -P)的關係就像是圖形用戶界面 (GUI) 中的單選按鈕:只能選擇其中一個。獨立的選項(比如 -c 和 -x)就像是複選框:可以打開或關閉。這種表示法很容易閱讀,很快就可以按照它輸入命令。

    下面是 BSD UNIX 上 open() 系統調用的大綱:

    #include <fcntl.h>    int open(const char *path, int oflag, ...);  

    這個大綱表明,需要頭文件 fcntl.h,open() 返回一個整數,必須指定要打開的文件的路徑和一組決定模式(只讀、讀/寫、打開並截斷等等)的標誌。

  • description(描述)部分討論特性、使用方法和命令行上可以使用的所有選項。如果想知道 du -H 的作用,可以閱讀描述中的文本。
  • examples(示例)部分給出實用程序的一般用途、常見的特殊情況和解釋。
  • 最後一部分 See Also(參見)提供相關資料的引用,比如其他相關命令、重要的系統文件、行業標準規範等等。

除了前面提到的幾個部分,在手冊頁中可能還有其他特殊部分。一個重要的部分是 “Environment(環境)”。可以設置它列出的環境變數來影響實用程序的操作。例如,man 的手冊頁列出 10 個多環境變數,可以通過修改它們定製 man。其中之一是 MANPATH,它指定尋找手冊頁時要搜索的目錄。





手冊頁使用技巧

那麼,如何高效地使用 man?下面是一些有幫助的提示:

  • 用 MANPATH 進行定製。shell 變數 PATH 指定在搜索可執行文件時要搜索的目錄。例如,如果把 PATH 設置為 /usr/bin:/bin:/usr/local/bin,那麼 shell 會依次在這三個目錄中搜索命令行程序。同樣,可以把 MANPATH 設置為冒號分隔的目錄列表,man 在這些目錄中搜索手冊頁。例如,如果把 MANPATH 設置為 /usr/share/man:/usr/local/mysql/man(它們都是存儲庫的根目錄),man 會在這兩個目錄中搜索匹配的手冊頁。


[火星人 ] UNIX 手冊頁系統指南已經有726次圍觀

http://coctec.com/docs/linux/show-post-68748.html