Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

程式設計師聯盟發表於2017-04-05

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

-- 作者 謝恩銘 轉載請註明出處

內容簡介


  1. 第二部分第八課:RTFM 閱讀那該死的手冊
  2. 第二部分第九課預告:查詢檔案,無所遁形

軟體安裝,如虎添翼


上一課 Linux探索之旅 | 第二部分第七課:軟體安裝,如虎添翼 中,我們領略了Linux下安裝軟體的便捷。

今天這一課也會比較輕鬆。

在Linux下,閱讀手冊應該成為一個反射動作,一個自然而然的反應。雖說一開始要我們去看手冊會有點讓人生畏,但是我們學習各種Linux命令的使用方法的最好去處就是手冊了。

我們這個系列教程也絕不能和手冊相比,因為我們的教程裡對於每一個知識點,不可能做到鉅細靡遺,全盤托出。

比如,對於某個Linux的命令,我們不可能詳盡地列出每個引數及其用法,只能舉幾個最常用的引數。所以,如果要深入瞭解一個命令,閱讀命令的手冊就是最好方式了。

這一課就是為了揭開Linux手冊的神祕面紗,帶大家學習如何閱讀手冊。

這一課是系列課程中極重要的,因為如果你學會了如何閱讀手冊,那麼大部分問題都可以自己解決。

今天的題目裡的RTFM稍微有點小“暴力”,因為它是Read The F**king Manual的縮寫,翻成中文是“閱讀那該死的手冊”。

這個縮寫經常被Linux老鳥用來回復一些初學者,並無侮辱之意,只是提醒及表示無奈,因為這些初學者的問題大多在手冊中可以輕鬆找到解答。

就好比我們會說:“唉,這麼簡單的問題,百度或google一下就出來了,何必要來論壇裡問。”

man命令,顯示使用手冊


man是manual的縮寫,就是英語“使用手冊”的意思。

man命令用法很簡單,後接你想要顯示使用手冊的命令,函式或者其他。

此命令用於檢視系統中自帶的各種參考手冊,但是手冊分為好幾個類別,如下所示:

  1. 可執行程式或shell命令

  2. 系統呼叫(Linux核心提供的函式)

  3. 庫呼叫(程式庫中的函式)

  4. 特殊檔案(通常在/dev下)

  5. 檔案格式和慣例(例如 /etc/passwd)

  6. 遊戲

  7. 雜項(包括巨集包和慣例,比如man(7),groff(7))

  8. 系統管理命令(通常只能被root使用者使用)

  9. 核心子程式

在shell中輸入 man+數字+命令/函式,即可以查到相關的命令和函式。若不加數字,那man命令預設從數字較小的手冊中尋找相關命令和函式。

例如,本來是想尋找C語言標準庫中的rand()函式,直接使用man rand得到的是一個rand命令的手冊,直接用來產生一個隨機數,這個內容在手冊第1部分中。

如果使用man 3 rand就可以得到想要的庫函式中rand()的用法了。

man 3 rand複製程式碼

man這個詞本身又是英語“男人”的意思,所以Linux和Unix世界流行著一句有趣的話:不懂就問一問“男人”。

比如,我們舉個例子,用man命令來顯示ls命令的使用手冊:

man ls複製程式碼

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

如上圖所見,執行man ls後,就顯示了ls命令的使用手冊,這裡有你想知道的關於ls命令的一切。

在手冊中移動


我們來學習如何在手冊頁面中移動:

  • 鍵盤上的方向鍵:向上鍵和向下鍵可以使我們實現上一行和下一行的跳轉。

  • 鍵盤上的PgUp和PgDn(或者空格鍵)鍵:實現上一頁和下一頁的跳轉。

  • 鍵盤上的Home和End鍵:實現開始和結尾的跳轉。

  • 鍵盤上的/鍵(斜槓):實現搜尋,和之前在less命令中功能類似。

  • 鍵盤上的Q鍵:退出手冊頁。

如果我們使用圖形介面的終端來開啟手冊頁,那麼可以使用滑鼠的滾輪來實現上下滾動。

手冊頁的不同區域


正如我們在上圖中所看到的,手冊頁分為不同的區域。這些區域的名字是用大寫和粗體表示,且靠左對齊:

  • NAME:英語“名字”的意思。手冊頁對應的命令或函式名字,後接簡單描述。

  • SYNOPSIS: 英語“概要,大意,摘要”的意思。使用此命令的所有方法。下面我們會詳述這個區域,因為此區域的內容極為關鍵。

  • DESCRIPTION: 英語“描述”的意思。命令的更深入的描述。這個區域也會包括所有引數及其用法。一般來說這個區域是文字最多的。

  • AUTHOR: 英語“作者”的意思。命令的作者。有時候不止一個作者。

  • REPORTING BUGS: 英語“報告故障”的意思。如果使用時遇到bug(程式的缺陷),有彙報問題的聯絡方式,通常是郵件。

  • COPYRIGHT: 英語“版權”的意思。版權。也就是用了什麼許可證(Licence)。大多數命令都是在GPL許可證之下的開原始碼。

  • SEE ALSO: 英語“另見”的意思。與此命令有關的其他命令。擴充套件閱讀。

一般來說,前三個區域(NAME, SYNOPSIS, DESCRIPTION)是最重要的。

手冊頁的語言


不好意思,如你所見,手冊頁的語言全是英語。並不是所有人都精通英語,那假如你英語不好怎麼辦呢?

我只能給出一個最好的建議,也許你不會喜歡:花點時間學學英語。

不需要精通英語,但至少要會閱讀,而且大膽使用金山詞霸,靈格斯翻譯家,有道詞典,谷歌翻譯等等。

如果你做程式設計工作,在資訊科技領域做研究,那麼英語可以說是必不可少的語言。

請見 對於程式設計師, 為什麼英語比數學更重要? 如何學習

接下來我們學習一下SYNOPSIS這個區域。

SYNOPSIS區域


SYNOPSIS這個區域是手冊頁中很重要的一個區域,但也是最難理解的區域之一。

SYNOPSIS這個區域的作用就是列出使用命令的所有可能方法。簡單地說,SYNOPSIS這個區域顯示了所有可能的引數組合。

有些命令的SYNOPSIS區域比較簡單,但有些就很複雜了,會是一長串,看得人頭大。

我們下面就用一些實際的例子來學習。

man mkdir


我們從mkdir命令的使用手冊開始。

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

如上圖所見,mkdir命令的使用手冊的NAME區域是:

mkdir - make directories複製程式碼

make是英語“建立”的意思,directories是directory(英語“目錄”)的複數。所以我們知道mkdir命令用於建立目錄。

mkdir命令的SYNOPSIS區域如下:

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

雖然這個SYNOPSIS區域比較短,但已經包含不少資訊了。它告訴我們如何使用mkdir命令。

我們一點點解析此SYNOPSIS區域:

  • mkdir:使用mkdir命令,我們當然需要先輸入mkdir,這是很好理解的。

  • [OPTION]:option是英語“選項”的意思。表示在mkdir之後,我們可以加選項引數(就是 -v,-h之類)。在SYNOPSIS區域中,中括號中的內容表示可選,所以我們並不一定要新增選項引數。

  • DIRECTORY:directory是英語“目錄”的意思。就是需要用mkdir命令建立的目錄。這個引數是必須的,因為並沒有用中括號括起來。這也不難理解,因為mkdir命令就是用於建立目錄的,那最少也要輸入一個目錄的名字吧。

  • ... :省略號表示可以有多個此類內容。在[OPTION]和DIRECTORY後都有省略號,分別表示可以有多個選項和多個目錄名。也即是說可以同時指定多個選項引數,也可以用mkdir同時建立多個目錄。

那麼為什麼mkdir使用粗體,而OPTION和DIRECTORY都是用下劃線呢?

SYNOPSIS區域中,粗體的文字表示要原封不動地輸入,下劃線的文字表示要用實際的內容替換。

這也不難理解:mkdir命令肯定要原封不動地輸入,而DIRECTORY就要替換成實際要建立的目錄名稱。

用例


根據SYNOPSIS區域的語法,我們使用mkdir命令時至少要輸入一個建立的目錄名。

例如:

mkdir photo複製程式碼

用於建立一個名為photo的目錄。

而且,DIRECTORY之後的省略號表明我們可以同時輸入多個目錄名,用於同時建立多個目錄,例如:

mkdir photo video music複製程式碼

用於建立photo,video,music三個目錄。

我們也可以加選項引數,選項引數在DESCRIPTION區域中:

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

以上所有的選項引數都可以替換[OPTION],而且可以同時寫多個選項引數,例如-pv。

man cp


我們再來看一個比較複雜的SYNOPSIS區域的例子:cp命令的SYNOPSIS區域。

我們之前學過cp命令,它用於拷貝檔案或目錄。

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

上圖是cp命令的手冊,可以看到SYNOPSIS區域如下:

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

是否有些驚訝?一下子來了三行...

為什麼有三行而不是一行呢?原因很簡單,因為沒法只用一行表達清楚cp命令的使用方法。

逐行來解釋:

  • cp [OPTION]... [-T] SOURCE DEST 拷貝原始檔到目標檔案。除了cp是原封不動輸入外,還必須輸入SOURCE和DEST這兩部分內容,分別用實際的原始檔名和目標檔名代替。也可以加上一個或多個選項引數(替換OPTION),還可以加上-T引數。

  • cp [OPTION]... SOURCE... DIRECTORY 拷貝一個或多個原始檔到目錄,除了cp是原封不動輸入外,還必須輸入SOURCE和DIRECTORY這兩部分內容,分別用實際的原始檔名和目錄名代替。也可以加上一個或多個選項引數(替換OPTION)。

  • cp [OPTION]... -t DIRECTORY SOURCE... 拷貝一個或多個原始檔到目錄。除了cp是原封不動輸入外,還必須輸入DIRECTORY和SOURCE這兩部分內容,分別用實際的目錄名和原始檔名代替。與第二種方法其實效果是一樣的,只不過這裡把目錄名放在了前面,後接需要拷貝到目錄的檔名(一個或多個)。但是這裡的-t引數是必須加的。也可以加上一個或多個選項引數(替換OPTION)。

比如我們可以這樣用:

cp file.jpg file_copy.jpg複製程式碼

是將file.jpg拷貝為file_copy.jpg。

cp file.jpg file_copy.jpg photo/複製程式碼

是將file.jpg和file_copy.jpg兩個檔案拷貝到photo這個資料夾中。

man apt-get


我們最後來看一個更復雜一些的例項:apt-get的使用手冊。

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

如上圖所見,我們的apt-get命令的手冊的SYNOPSIS區域如下:

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

雖然這次的SYNOPSIS區域多得有點嚇人,這酸爽...

但是比起cp命令,至少這個SYNOPSIS區域只有一行,雖然這一行略長。

我們逐步分析:

  • apt-get:這個粗體部分是必須原封不動輸入的,這不難理解。

  • [-sqdyfmubV]:我們可以使用-s,-q,-d,-y,-f,-m,-u,-b,-V這些選項引數中的一個或多個。例如-s,-sqfm,-bV,等等。

  • -o,-c,-t:這三個選項引數比較特別,也是可選的引數,但是如果要使用它們,必須要接上=xxx,xxx是引數的值。

  • 用大括號括起來的(從update,到最後的-h | --help):大括號括起來的是一個整體,而每個部分又由|號隔開,說明必須要使用大括號裡的某一項,但是每次只能使用一項,不能多項同時使用。

例如:

  • update:更新軟體包的快取。

  • upgrade:更新所有已安裝的軟體。

  • install pkg:安裝pkg欄位對應的軟體包。實際使用時,用實際的軟體包名替換pkg。

  • 等等。

當然,可以仔細閱讀DESCRIPTION區域,以便了解每個引數的不同含義。

用例


根據apt-get的手冊的SYNOPSIS區域的語法,我們使用apt-get時,須要選擇大括號裡用一豎隔開的任意一個選項。因此,我們可以這樣使用:

apt-get install xxx複製程式碼

或者

apt-get update複製程式碼

或者

apt-get autoclean複製程式碼

等等。

但是我們不能同時使用兩個或以上大括號裡用一豎隔開的選項。例如,下面的用法是錯誤的:

apt-get update install xxx    # 不正確的用法複製程式碼

SYNOPSIS區域的語法總結


  • 粗體:原封不動地輸入。

  • 下劃線的部分:用實際的內容替換。

  • [-hvc]:-h,-v和-c選項都是可選的,非強制性的。

  • a|b:你可以輸入a或者b選項,但是不能夠同時輸入a和b。

  • option...:省略號表示前面的內容可以輸入任意多個。

apropos命令:查詢命令


在使用man命令時,我們需要先知道我們要顯示使用手冊的那個命令的名字。那如果不知道那個命令叫什麼怎麼辦呢?

這時候我們就需要請apropos命令上場了,apropos是英語“關於”的意思。

apropos命令的用法很簡單,只要後接一個關鍵字,apropos命令就會為你在所有手冊頁中查詢相關的命令。

因此apropos命令與man命令有點對立的關係,man命令用於顯示命令的使用手冊,而apropos命令用於根據手冊中的關鍵字來找到命令。

我們用實際例子來學習:你想要知道如何用終端的命令來控制音量。

你可以這樣查詢:

apropos sound複製程式碼

為什麼用sound這個關鍵字呢?因為sound是英語“聲音,音量”的意思。

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

如上圖所見,執行apropos sound之後,就列出了所有使用手冊中有sound這個關鍵字的命令。

可以看到,左側是命令的名字,後邊是命令的手冊中出現關鍵字的句子。

我們就知道了要調節音量可以用的命令是:

alsamixer複製程式碼

我們執行此命令:

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

可以用加號和減號來調節。

其他閱讀手冊的方式


雖說man命令和apropos命令是最常用的兩個有關手冊的命令,但是還有其他查閱手冊的方式。

那麼哪些是man的替代品呢?

-h或--help引數


雖然並不一定,但是大多數命令都接受-h這個引數(有時候它等價的引數--help也可以)。

-h引數中的h是help的首字母,help是英語“幫助”的意思。所以-h或--help引數的作用是顯示幫助文件。

雖說一般幫助文件沒有man命令顯示的使用手冊那麼詳細,但是也很有用,且往往比man顯示的手冊易於閱讀。

比如我們要檢視apt-get命令的幫助文件,可以這樣:

apt-get -h複製程式碼

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

whatis命令


what是英語“什麼”的意思,is是英語“是”的第三人稱單數形式。所以連起來what is就是“是什麼”的意思。

whatis命令可以說是man命令的精簡版,它只會列出man命令顯示的手冊的開頭部分,就是概述命令的作用。

例如用whatis命令來檢視ls命令的作用。

whatis ls複製程式碼

Linux 探索之旅 | 第二部分第八課:RTFM 閱讀那該死的手冊

只顯示list directory contents,就是說ls命令用於列出目錄的內容。

在網路上檢視手冊


我們不僅僅能在Linux系統裡查詢到手冊,在網路上也可以找到。

如果你暫時不在Linux系統裡,又想查一個命令或函式的使用手冊,可以用搜尋引擎如google或者百度來搜尋。

例如,我要檢視ls命令的手冊,可以在google裡搜尋:

man ls複製程式碼

一般搜尋結果的第一個就是你要找的。

總結


  1. 在Linux中,命令和函式都有使用手冊。每次遇到命令和函式的用法不明確的情況,都可以通過查考手冊來解決。

  2. man命令可以顯示命令或函式的使用手冊。man後接要顯示使用手冊的名字。比如:man touch

  3. 在手冊頁時,我們可以用鍵盤上的上下箭頭,PgUp,PgDn,空格來移動到手冊的其他部分,用/(斜槓)鍵來查詢,用q鍵來退出手冊。

  4. 手冊的SYNOPSIS區域很重要,列出了我們使用此命令的所有方法。中括號裡的內容是可選的。

  5. apropos命令可以用來查詢有相應關鍵字的命令,比如我們要找和音量,聲音有關的命令,可以用apropos sound。

第二部分第九課預告


今天的課就到這裡,一起加油吧!

下一課我們學習:Linux探索之旅 | 第二部分第九課:查詢檔案,無所遁形


微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”

相關文章