RTFM!如何閱讀(和理解)Linux 中神奇的手冊頁
手冊頁 ,即 參考手冊頁 的簡稱,是你進入 Linux 的鑰匙。你想知道的一切都在那裡,包羅萬象。這套文檔永遠不會贏得普利策獎,但這套文檔是相當準確和完整的。手冊頁是主要信源,其權威性是眾所周知的。
雖然它們是源頭,但閱讀起來並不是最令人愉快的。有一次,在很久以前的哲學課上,有人告訴我,閱讀 亞里士多德 是最無聊的閱讀。我不同意:說到枯燥的閱讀,亞里士多德遠遠地排在第二位,僅次於手冊頁。
乍一看,這些頁面可能看起來並不完整,但是,不管你信不信,手冊頁並不是為了隱藏信息 —— 只是因為信息量太大,這些頁面必須要有結構,而且信息是以儘可能簡短的形式給出的。這些解釋相當簡略,需要一些時間來適應,但一旦你掌握了使用它們的技巧,你就會發現它們實際上是多麼有用。
Linux 中的手冊頁入門
這些頁面是通過一個叫做 man
的工具查看的,使用它的命令相當簡單。在最簡單的情況下,要使用 man
,你要在命令行上輸入 man
,後面加一個空格和你想查詢的命令,比如 ls
或 cp
,像這樣:
man ls
man
會打開 ls
命令的手冊頁。
你可以用方向鍵上下移動,按 q
退出查看手冊頁。通常情況下,手冊頁是用 less
打開的,所以 less
命令的鍵盤快捷鍵在 man
中也可以使用。
例如,你可以用 /search_term
來搜索一個特定的文本,等等。
有一個關於手冊頁的介紹,這是一篇值得閱讀介紹。它非常詳細地說明了手冊頁是如何布局和組織的。
要看這個頁面,請打開一個終端,然後輸入:
man man
節
在你開始更深入地研究手冊頁之前,知道手冊頁有一個固定的頁面布局和一個歸檔方案會有幫助。這可能會讓新手感到困惑,因為我可以說:「看手冊頁中關於 ls
的 NAME 節 」,我也可以說:「看第 5 節 中的 passwd
的手冊頁。」
我把 「 節 」 這個詞用斜體字表示,是為了顯示混淆的來源。這個詞,「節」 被用於兩種不同的方式,但並不總是向新人解釋其中的區別。
我不確定為什麼會出現這種混淆,但我在培訓新用戶和初級系統管理員時看到過幾次這種混淆。我認為這可能是隧道視野,專註於一件事會使一個人忘記另一件事。一葉障目,不見泰山。
對於那些已經知道其中的區別的人,你可以跳過這一小節。這一部分是針對那些剛接觸到手冊頁的人。
這就是區別:
對於手冊頁
單獨的手冊頁是用來顯示信息塊的。例如,每個手冊頁都有一個「NAME」節,顯示命令的名稱和簡短的描述。還會有另一個信息塊,稱為「SYNOPSIS」,顯示該命令是如何使用的,以此類推。
每個手冊頁都會有這些,以及其他的標題。這些在各個手冊頁上的節,或者說標題,有助於保持事情的一致性和信息的分工。
對於手冊
使用「節」,如 「查看第 5 節中的 passwd
的手冊頁」,是指整個手冊的內容。當我們只看一頁時,很容易忽略這一點,但是 passwd
手冊頁是同一本手冊的一部分,該手冊還有 ls
、rm
、date
、cal
等的手冊頁。
整個 Linux 手冊是巨大的;它有成千上萬的手冊頁。其中一些手冊頁有專門的信息。有些手冊頁有程序員需要的信息,有些手冊頁有網路方面的獨特信息,還有一些是系統管理員會感興趣的。
這些手冊頁根據其獨特的目的被分組。想想看,把整個手冊分成幾個章節 —— 每章有一個特定的主題。有 9 個左右的章節(非常大的章節)。碰巧的是,這些章節被稱為「節」。
總結一下:
- 手冊中單頁(我們稱之為「手冊頁」)的節是由標題定義的信息塊。
- 這個大的手冊(所有頁面的集合)中的章節,剛好被稱為「節」。
現在你知道區別了,希望本文的其餘部分會更容易理解。
手冊頁的節
你將會看到不同的手冊頁,所以讓我們先研究一下各個頁面的布局。
手冊頁被分成幾個標題,它們可能因提供者不同而不同,但會有相似之處。一般的分類如下:
NAME
(名稱)SYNOPSIS
(概要)DESCRIPTION
(描述)EXAMPLES
(例子)DIAGNOSTICS
(診斷)FILES
(文件)LIMITS
(限制)PORTABILITY
(可移植性)SEE ALSO
(另見)HISTORY
(歷史)- WARNING
(警告)或
BUGS`(錯誤) NOTES
(注意事項)
NAME
- 在這個標題下是命令的名稱和命令的簡要描述。
SYNOPSIS
- 顯示該命令的使用方法。例如,這裡是 cal
命令的概要:
cal [Month] [Year]
概要以命令的名稱開始,後面是選項列表。概要採用命令行的一般形式;它顯示了你可以輸入的內容和參數的順序。方括弧中的參數([]
)是可選的;你可以不輸入這些參數,命令仍然可以正常工作。不在括弧內的項目必須使用。
請注意,方括弧只是為了便於閱讀。當你輸入命令時,不應該輸入它們。
DESCRIPTION
- 描述該命令或工具的作用以及如何使用它。這一節通常以對概要的解釋開始,並說明如果你省略任何一個可選參數會發生什麼。對於長的或複雜的命令,這一節可能會被細分。
EXAMPLES
- 一些手冊頁提供了如何使用命令或工具的例子。如果有這一節,手冊頁會嘗試給出一些簡單的使用例子,以及更複雜的例子來說明如何完成複雜的任務。
DIAGNOSTICS
- 本節列出了由命令或工具返回的狀態或錯誤信息。通常不顯示不言自明的錯誤和狀態信息。通常會列出可能難以理解的信息。
FILES
- 本節包含了 UNIX 用來運行這個特定命令的補充文件的列表。這裡,「補充文件」是指沒有在命令行中指定的文件。例如,如果你在看 passwd
命令的手冊,你可能會發現 /etc/passwd
列在這一節中,因為 UNIX 是在這裡存儲密碼信息。
LIMITS
- 本節描述了一個工具的限制。操作系統和硬體的限制通常不會被列出,因為它們不在工具的控制範圍內。
PORTABILITY
- 列出其他可以使用該工具的系統,以及該工具的其他版本可能有什麼不同。
SEE ALSO
- 列出包含相關信息的相關手冊頁。
HISTORY
- 提供命令的簡要歷史,如它第一次出現的時間。
WARNING
- 如果有這個部分,它包含了對用戶的重要建議。
NOTES
- 不像警告那樣嚴重,但也是重要的信息。
同樣,並不是所有的手冊都使用上面列出的確切標題,但它們足夠接近,可以遵循。
手冊的節
整個 Linux 手冊集合的手冊頁傳統上被劃分為有編號的節:
第 1 節:Shell 命令和應用程序 第 2 節:基本內核服務 - 系統調用和錯誤代碼 第 3 節:為程序員提供的庫信息 第 4 節:網路服務 - 如果安裝了 TCP/IP 或 NFS 設備驅動和網路協議 第 5 節:文件格式 - 例如:顯示 tar
存檔的樣子 第 6 節:遊戲 第 7 節:雜項文件和文檔 第 8 節:系統管理和維護命令 第 9 節:不知名的內核規格和介面
將手冊頁分成這些組,可以使搜索更有效率。在我工作的地方,我有時會做一些編程工作,所以我花了一點時間看第 3 節的手冊頁。我也做一些網路方面的工作,所以我也知道要涉足網路部分。作為幾個實驗性機器的系統管理員,我在第 8 節花了很多時間。
將手冊網歸入特定的節(章節),使搜索信息更加容易 —— 無論是對需要搜索的人,還是對進行搜索的機器。
你可以通過名稱旁邊的數字來判斷哪個手冊頁屬於哪個部分。例如,如果你正在看 ls
的手冊頁,而頁面的最上面寫著。 LS(1)
,那麼你正在瀏覽第 1 節中的 ls
頁面,該節包含關於 shell 命令和應用程序的頁面。
下面是另一個例子。如果你在看 passwd
的手冊頁,頁面的頂部顯示: PASSWD(1)
,說明你正在閱讀第 1 節中描述 passwd
命令如何更改用戶賬戶密碼的手冊頁。如果你看到 PASSWD(5)
,那麼你正在閱讀關於密碼文件和它是如何組成的的手冊頁。
passwd
恰好是兩個不同的東西:一個是命令的名稱,一個是文件的名稱。同樣,第 1 節描述了命令,而第 5 節涉及文件格式。
括弧中的數字是重要的線索 —— 這個數字告訴你正在閱讀的頁面來自哪一節。
搜索一個特定的節
基本命令:
man -a name
將在每一節中搜索由 name
標識的手冊頁,按數字順序逐一顯示。要把搜索限制在一個特定的部分,請在 man
命令中使用一個參數,像這樣:
man 1 name
這個命令將只在手冊頁的第 1 節中搜索 name
。使用我們前面的 passwd
例子,這意味著我們可以保持搜索的針對性。如果我想閱讀 passwd
命令的手冊頁,我可以在終端輸入以下內容:
man 1 passwd
man
工具將只在第 1 節中搜索 passwd
並顯示它。它不會在任何其他節中尋找 passwd
。
這個命令的另一種方法是輸入: man passwd.1
。
使用 man -k 來搜索包含某個關鍵詞的所有手冊頁
如果你想獲得包含某個關鍵詞的手冊頁的列表,man
命令中的 -k
選項(通常稱為標誌或開關)可以派上用場。例如,如果你想看一個關於 ftp
的手冊列表,你可以通過輸入以下內容得到這個列表:
man -k ftp
在接下來的列表中,你可以選擇一個特定的手冊頁來閱讀:
在某些系統上,在 man -k
工作之前,系統管理員需要運行一個叫做 catman
的工具。
使用 whatis 和 whereis 命令來了解手冊的各個節
有兩個有趣的工具可以幫助你搜索信息:whatis
和 whereis
。
whatis
有的時候,我們完全可以得到我們需要的信息。我們需要的信息有很大的機會是可以找到的 —— 找到它可能是一個小問題。
例如,如果我想看關於 passwd
文件的手冊頁,我在終端上輸入:
man passwd
我就會看到關於 passwd
命令所有信息的手冊頁,但沒有關於 passwd
文件的內容。我知道 passwd
是一個命令,也有一個 passwd
文件,但有時,我可能會忘記這一點。這時我才意識到,文件結構在手冊頁中的不同節,所以我輸入了:
man 4 passwd
我得到這樣的答覆:
No manual entry for passwd in section 4
See 'man 7 undocumented' for help when manual pages are not available.
又是一次健忘的失誤。文件結構在 System V UNIX 頁面的第 4 節中。幾年前,當我建立文件時,我經常使用 man 4 ...
;這仍然是我的一個習慣。那麼它在 Linux 手冊中的什麼地方呢?
現在是時候調用 whatis
來糾正我了。為了做到這一點,我在我的終端中輸入以下內容:
whatis passwd
然後我看到以下內容:
passwd (1) - change user password
passwd (1ssl) - compute password hashes
passwd (5) - the password file
啊!passwd
文件的頁面在第 5 節。現在沒問題了,可以訪問我想要的信息了:
man 5 passwd
然後我被帶到了有我需要的信息的手冊頁。
whatis
是一個方便的工具,可以用簡短的一句話告訴你一個命令的作用。想像一下,你想知道 cal
是做什麼的,而不想查看手冊頁。只要在命令提示符下鍵入以下內容。
whatis cal
你會看到這樣的回應:
cal (1) - displays a calendar and the date of Easter
現在你知道了 whatis
命令,我可以告訴你一個秘密 —— 有一個 man
命令的等價物。為了得到這個,我們使用 -f
開關:man -f ...
。
試試吧。在終端提示下輸入 whatis cal
。執行後就輸入:man -f cal
。兩個命令的輸出將是相同的:
whereis
whereis
命令的名字就說明了這一點 —— 它告訴你一個程序在文件系統中的位置。它也會告訴你手冊頁的存放位置。再以 cal
為例,我在提示符下輸入以下內容:
whereis cal
我將看到這個:
仔細看一下這個回答。答案只在一行里,但它告訴我兩件事:
/usr/bin/cal
是cal
程序所在的地方,以及/usr/share/man/man1/cal.1.gz
是手冊頁所在的地方(我也知道手冊頁是被壓縮的,但不用擔心 ——man
命令知道如何即時解壓)。
whereis
依賴於 PATH
環境變數;它只能告訴你文件在哪裡,如果它們在你的 PATH
環境變數中。
你可能想知道是否有一個與 whereis
相當的 man
命令。沒有一個命令可以告訴你可執行文件的位置,但有一個開關可以告訴你手冊頁的位置。在這個例子中使用 date
命令,如果我們輸入:
whereis date
在終端提示符下,我們會看到:
我們看到 date
程序在 /usr/bin/
目錄下,其手冊頁的名稱和位置是:/usr/share/man/man1/date.1.gz
。
我們可以讓 man
像 whereis
一樣行事,最接近的方法是使用 -w
開關。我們不會得到程序的位置,但我們至少可以得到手冊頁的位置,像這樣:
man -w date
我們將看到這樣的返回:
你知道了 whatis
和 whereis
,以及讓 man
命令做同樣(或接近)事情的方法。我展示了這兩種方法,有幾個不同的原因。
多年來,我使用 whatis
和 whereis
,因為它們在我的培訓手冊中。直到最近我才了解到 man -f ...
和 man -w ...
。我確信我看了幾百次 man
的手冊頁,但我從未注意到 -f
和 -w
開關。我總是在看手冊頁的其他東西(例如:man -k ...
)。我只專註於我需要找到的東西,而忽略了其他的東西。一旦我找到了我需要的信息,我就會離開這個頁面,去完成工作,而不去注意這個命令所提供的其他一些寶貝。
這沒關係,因為這部分就是手冊頁的作用:幫助你完成工作。
直到最近我向別人展示如何使用手冊頁時,我才花時間去閱讀 —— 「看看還有什麼可能」 —— 我們才真正注意到關於 man
命令的 -f
和 -w
標記可以做什麼的信息。
不管你使用 Linux 多久了,或者多麼有經驗,總有一些新東西需要學習。
手冊頁會告訴你在完成某項任務時可能需要知道的東西 —— 但它們也有很多內容 —— 足以讓你看起來像個魔術師,但前提是你要花時間去讀。
結論
如果你花一些時間和精力在手冊頁上,你將會取得勝利。你對手冊頁的熟練程度,將在你掌握 Linux 的過程中發揮巨大作用。
via: https://itsfoss.com/linux-man-page-guide/
作者:Bill Dyer 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive