-- 作者 謝恩銘 轉載請註明出處
內容簡介
- 第二部分第八課:RTFM 閱讀那該死的手冊
- 第二部分第九課預告:查詢檔案,無所遁形
軟體安裝,如虎添翼
上一課 Linux探索之旅 | 第二部分第七課:軟體安裝,如虎添翼 中,我們領略了Linux下安裝軟體的便捷。
今天這一課也會比較輕鬆。
在Linux下,閱讀手冊應該成為一個反射動作,一個自然而然的反應。雖說一開始要我們去看手冊會有點讓人生畏,但是我們學習各種Linux命令的使用方法的最好去處就是手冊了。
我們這個系列教程也絕不能和手冊相比,因為我們的教程裡對於每一個知識點,不可能做到鉅細靡遺,全盤托出。
比如,對於某個Linux的命令,我們不可能詳盡地列出每個引數及其用法,只能舉幾個最常用的引數。所以,如果要深入瞭解一個命令,閱讀命令的手冊就是最好方式了。
這一課就是為了揭開Linux手冊的神祕面紗,帶大家學習如何閱讀手冊。
這一課是系列課程中極重要的,因為如果你學會了如何閱讀手冊,那麼大部分問題都可以自己解決。
今天的題目裡的RTFM稍微有點小“暴力”,因為它是Read The F**king Manual的縮寫,翻成中文是“閱讀那該死的手冊”。
這個縮寫經常被Linux老鳥用來回復一些初學者,並無侮辱之意,只是提醒及表示無奈,因為這些初學者的問題大多在手冊中可以輕鬆找到解答。
就好比我們會說:“唉,這麼簡單的問題,百度或google一下就出來了,何必要來論壇裡問。”
man命令,顯示使用手冊
man是manual的縮寫,就是英語“使用手冊”的意思。
man命令用法很簡單,後接你想要顯示使用手冊的命令,函式或者其他。
此命令用於檢視系統中自帶的各種參考手冊,但是手冊分為好幾個類別,如下所示:
可執行程式或shell命令
系統呼叫(Linux核心提供的函式)
庫呼叫(程式庫中的函式)
特殊檔案(通常在/dev下)
檔案格式和慣例(例如 /etc/passwd)
遊戲
雜項(包括巨集包和慣例,比如man(7),groff(7))
系統管理命令(通常只能被root使用者使用)
核心子程式
在shell中輸入 man+數字+命令/函式,即可以查到相關的命令和函式。若不加數字,那man命令預設從數字較小的手冊中尋找相關命令和函式。
例如,本來是想尋找C語言標準庫中的rand()函式,直接使用man rand得到的是一個rand命令的手冊,直接用來產生一個隨機數,這個內容在手冊第1部分中。
如果使用man 3 rand就可以得到想要的庫函式中rand()的用法了。
man 3 rand複製程式碼
man這個詞本身又是英語“男人”的意思,所以Linux和Unix世界流行著一句有趣的話:不懂就問一問“男人”。
比如,我們舉個例子,用man命令來顯示ls命令的使用手冊:
man ls複製程式碼
如上圖所見,執行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命令的使用手冊開始。
如上圖所見,mkdir命令的使用手冊的NAME區域是:
mkdir - make directories複製程式碼
make是英語“建立”的意思,directories是directory(英語“目錄”)的複數。所以我們知道mkdir命令用於建立目錄。
mkdir命令的SYNOPSIS區域如下:
雖然這個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區域中:
以上所有的選項引數都可以替換[OPTION],而且可以同時寫多個選項引數,例如-pv。
man cp
我們再來看一個比較複雜的SYNOPSIS區域的例子:cp命令的SYNOPSIS區域。
我們之前學過cp命令,它用於拷貝檔案或目錄。
上圖是cp命令的手冊,可以看到SYNOPSIS區域如下:
是否有些驚訝?一下子來了三行...
為什麼有三行而不是一行呢?原因很簡單,因為沒法只用一行表達清楚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的使用手冊。
如上圖所見,我們的apt-get命令的手冊的SYNOPSIS區域如下:
雖然這次的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是英語“聲音,音量”的意思。
如上圖所見,執行apropos sound之後,就列出了所有使用手冊中有sound這個關鍵字的命令。
可以看到,左側是命令的名字,後邊是命令的手冊中出現關鍵字的句子。
我們就知道了要調節音量可以用的命令是:
alsamixer複製程式碼
我們執行此命令:
可以用加號和減號來調節。
其他閱讀手冊的方式
雖說man命令和apropos命令是最常用的兩個有關手冊的命令,但是還有其他查閱手冊的方式。
那麼哪些是man的替代品呢?
-h或--help引數
雖然並不一定,但是大多數命令都接受-h這個引數(有時候它等價的引數--help也可以)。
-h引數中的h是help的首字母,help是英語“幫助”的意思。所以-h或--help引數的作用是顯示幫助文件。
雖說一般幫助文件沒有man命令顯示的使用手冊那麼詳細,但是也很有用,且往往比man顯示的手冊易於閱讀。
比如我們要檢視apt-get命令的幫助文件,可以這樣:
apt-get -h複製程式碼
whatis命令
what是英語“什麼”的意思,is是英語“是”的第三人稱單數形式。所以連起來what is就是“是什麼”的意思。
whatis命令可以說是man命令的精簡版,它只會列出man命令顯示的手冊的開頭部分,就是概述命令的作用。
例如用whatis命令來檢視ls命令的作用。
whatis ls複製程式碼
只顯示list directory contents,就是說ls命令用於列出目錄的內容。
在網路上檢視手冊
我們不僅僅能在Linux系統裡查詢到手冊,在網路上也可以找到。
如果你暫時不在Linux系統裡,又想查一個命令或函式的使用手冊,可以用搜尋引擎如google或者百度來搜尋。
例如,我要檢視ls命令的手冊,可以在google裡搜尋:
man ls複製程式碼
一般搜尋結果的第一個就是你要找的。
總結
在Linux中,命令和函式都有使用手冊。每次遇到命令和函式的用法不明確的情況,都可以通過查考手冊來解決。
man命令可以顯示命令或函式的使用手冊。man後接要顯示使用手冊的名字。比如:man touch
在手冊頁時,我們可以用鍵盤上的上下箭頭,PgUp,PgDn,空格來移動到手冊的其他部分,用/(斜槓)鍵來查詢,用q鍵來退出手冊。
手冊的SYNOPSIS區域很重要,列出了我們使用此命令的所有方法。中括號裡的內容是可選的。
apropos命令可以用來查詢有相應關鍵字的命令,比如我們要找和音量,聲音有關的命令,可以用apropos sound。
第二部分第九課預告
今天的課就到這裡,一起加油吧!
下一課我們學習:Linux探索之旅 | 第二部分第九課:查詢檔案,無所遁形
微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”