Linux中國

RTFM!如何閱讀(和理解)Linux 中神奇的手冊頁

手冊頁 man pages ,即 參考手冊頁 reference manual pages 的簡稱,是你進入 Linux 的鑰匙。你想知道的一切都在那裡,包羅萬象。這套文檔永遠不會贏得普利策獎,但這套文檔是相當準確和完整的。手冊頁是主要信源,其權威性是眾所周知的。

雖然它們是源頭,但閱讀起來並不是最令人愉快的。有一次,在很久以前的哲學課上,有人告訴我,閱讀 亞里士多德 是最無聊的閱讀。我不同意:說到枯燥的閱讀,亞里士多德遠遠地排在第二位,僅次於手冊頁。

乍一看,這些頁面可能看起來並不完整,但是,不管你信不信,手冊頁並不是為了隱藏信息 —— 只是因為信息量太大,這些頁面必須要有結構,而且信息是以儘可能簡短的形式給出的。這些解釋相當簡略,需要一些時間來適應,但一旦你掌握了使用它們的技巧,你就會發現它們實際上是多麼有用。

Linux 中的手冊頁入門

這些頁面是通過一個叫做 man 的工具查看的,使用它的命令相當簡單。在最簡單的情況下,要使用 man,你要在命令行上輸入 man,後面加一個空格和你想查詢的命令,比如 lscp,像這樣:

man ls

man 會打開 ls 命令的手冊頁。

你可以用方向鍵上下移動,按 q 退出查看手冊頁。通常情況下,手冊頁是用 less 打開的,所以 less 命令的鍵盤快捷鍵在 man 中也可以使用。

例如,你可以用 /search_term 來搜索一個特定的文本,等等。

有一個關於手冊頁的介紹,這是一篇值得閱讀介紹。它非常詳細地說明了手冊頁是如何布局和組織的。

要看這個頁面,請打開一個終端,然後輸入:

man man

man page of man

在你開始更深入地研究手冊頁之前,知道手冊頁有一個固定的頁面布局和一個歸檔方案會有幫助。這可能會讓新手感到困惑,因為我可以說:「看手冊頁中關於 ls 的 NAME section 」,我也可以說:「看第 5 section 中的 passwd 的手冊頁。」

我把 「 section 」 這個詞用斜體字表示,是為了顯示混淆的來源。這個詞,「節」 被用於兩種不同的方式,但並不總是向新人解釋其中的區別。

我不確定為什麼會出現這種混淆,但我在培訓新用戶和初級系統管理員時看到過幾次這種混淆。我認為這可能是隧道視野,專註於一件事會使一個人忘記另一件事。一葉障目,不見泰山。

對於那些已經知道其中的區別的人,你可以跳過這一小節。這一部分是針對那些剛接觸到手冊頁的人。

這就是區別:

對於手冊頁

單獨的手冊頁是用來顯示信息塊的。例如,每個手冊頁都有一個「NAME」節,顯示命令的名稱和簡短的描述。還會有另一個信息塊,稱為「SYNOPSIS」,顯示該命令是如何使用的,以此類推。

每個手冊頁都會有這些,以及其他的標題。這些在各個手冊頁上的節,或者說標題,有助於保持事情的一致性和信息的分工。

對於手冊

使用「節」,如 「查看第 5 節中的 passwd 的手冊頁」,是指整個手冊的內容。當我們只看一頁時,很容易忽略這一點,但是 passwd 手冊頁是同一本手冊的一部分,該手冊還有 lsrmdatecal 等的手冊頁。

整個 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 example

在某些系統上,在 man -k 工作之前,系統管理員需要運行一個叫做 catman 的工具。

使用 whatis 和 whereis 命令來了解手冊的各個節

有兩個有趣的工具可以幫助你搜索信息:whatiswhereis

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。兩個命令的輸出將是相同的:

whatis cal and man f cal outputs are the same

whereis

whereis 命令的名字就說明了這一點 —— 它告訴你一個程序在文件系統中的位置。它也會告訴你手冊頁的存放位置。再以 cal 為例,我在提示符下輸入以下內容:

whereis cal

我將看到這個:

whereis cal output

仔細看一下這個回答。答案只在一行里,但它告訴我兩件事:

  • /usr/bin/calcal 程序所在的地方,以及
  • /usr/share/man/man1/cal.1.gz 是手冊頁所在的地方(我也知道手冊頁是被壓縮的,但不用擔心 —— man 命令知道如何即時解壓)。

whereis 依賴於 PATH 環境變數;它只能告訴你文件在哪裡,如果它們在你的 PATH 環境變數中。

你可能想知道是否有一個與 whereis 相當的 man 命令。沒有一個命令可以告訴你可執行文件的位置,但有一個開關可以告訴你手冊頁的位置。在這個例子中使用 date 命令,如果我們輸入:

whereis date

在終端提示符下,我們會看到:

whereis date output

我們看到 date 程序在 /usr/bin/ 目錄下,其手冊頁的名稱和位置是:/usr/share/man/man1/date.1.gz

我們可以讓 manwhereis 一樣行事,最接近的方法是使用 -w 開關。我們不會得到程序的位置,但我們至少可以得到手冊頁的位置,像這樣:

man -w date

我們將看到這樣的返回:

你知道了 whatiswhereis,以及讓 man 命令做同樣(或接近)事情的方法。我展示了這兩種方法,有幾個不同的原因。

多年來,我使用 whatiswhereis,因為它們在我的培訓手冊中。直到最近我才了解到 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國