背景
請自問自答:
- 你覺得linux中最重要的命令是哪個?
- 你是否已經(jīng)掌握了它?
- 你認為它最重要的理由是什么?
正所謂“自助者天助之”,在linux系統(tǒng)中,最重要的命令應(yīng)當是能夠讓你“自助”的命令。
這個命令就是man
——用來查看linux的文檔系統(tǒng)。它之所以是最重要的命令,是因為通過它你能學(xué)習(xí)到其它任何命令,這無疑是為你打開了一扇信息大門。
簡介
Unix系統(tǒng)中有兩個重要的文檔系統(tǒng):
- Unix聯(lián)機手冊:Unix系統(tǒng)默認提供的文檔系統(tǒng);
- Info系統(tǒng):GNU項目的官方文檔系統(tǒng);
自學(xué)的傳統(tǒng)
在unix的傳統(tǒng)中,自學(xué)是一個極其重要的傳統(tǒng),在之前的文章Unix文化--RTFM提到過。
生而知之者上也;學(xué)而知之者次也;困而學(xué)之又其次也;困而不學(xué),民斯為下矣。
別指望什么“生而知之”,能做到“學(xué)而知之”就相當不錯了。RTFM一般發(fā)生在遇到困難時,更像是“困而學(xué)之”,但它強調(diào)的是一種主觀能動性,因此是“學(xué)而知之”的層次。
unix手冊
Unix手冊也通常稱為“聯(lián)機手冊”、“手冊”,相當于我們平常所說的“官方幫助文檔”。
如何使用
unix手冊的查看方式非常簡單,使用man
命令,意思是manual
(手冊、指南),后接你要查看的命令的名稱,即:
man X
(注意不是X man)。
比如,想要查看ls
的用法,使用:
man ls
也可以后接多個命令,這樣將會逐個顯示后接命令的幫助手冊內(nèi)容,如:
man pwd ls cd
說明書頁
一個命令的幫助文檔是一個單獨的條目,如命令man ls
的顯示內(nèi)容,稱為“一頁”,也叫做“說明書頁”。
如果說明書頁的內(nèi)容大于一屏,將分屏顯示(事實上幫助文檔不超過一屏的命令并不多)。
分屏的命令有less
、more
、pg
,其中less
最好用,使用最廣泛,也是man命令顯示說明書頁的默認分屏工具。
若希望用指定的分屏工具顯示幫助信息,使用管道線連接命令:
man ls | less
man cp | more
man pwd | pg
在查看幫助文檔內(nèi)容時,還可以使用一些命令來輔助閱讀,比如對于默認的分屏工具less
來說,按<space>
(空格)鍵會顯示下一屏內(nèi)容,按q
鍵會退出,等等。
然而,無論使用什么分屏工具,最重要的命令是h
,它顯示幫助信息。你看,再一次突出幫助命令的重要性。
當按h
鍵后,屏幕上將顯示該分頁工具的所有命令的摘要信息,想結(jié)束閱讀時,按q
退出,再回到說明書頁中:
-
less
的h
命令摘要
SUMMARY OF LESS COMMANDS
Commands marked with * may be preceded by a number, N.
Notes in parentheses indicate the behavior if N is given.
A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K.
h H Display this help.
q :q Q :Q ZZ Exit.
MOVING
e ^E j ^N CR * Forward one line (or N lines).
y ^Y k ^K ^P * Backward one line (or N lines).
...省略...
SEARCHING
/pattern * Search forward for (N-th) matching line.
?pattern * Search backward for (N-th) matching line.
...省略...
JUMPING
g < ESC-< * Go to first line in file (or line N).
G > ESC-> * Go to last line in file (or line N).
...省略...
CHANGING FILES
:e [file] Examine a new file.
...省略...
MISCELLANEOUS COMMANDS
-<flag> Toggle a command line option [see OPTIONS below].
...省略...
OPTIONS
Most options may be changed either on the command line,
or from within less by using the - or -- command.
Options may be given in one of two forms: either a single
character preceded by a -, or a name preceded by --.
...省略...
LINE EDITING
These keys can be used to edit text being entered
on the "command line" at the bottom of the screen.
RightArrow ESC-l Move cursor right one character.
...省略...
-
more
的h
命令摘要
多數(shù)命令可在前面加整數(shù)參數(shù) k。方括號中為參數(shù)的默認值
星號(*)表示參數(shù)將成為新的默認值。
<空格鍵> 顯示下 k 行文本[當前屏幕尺寸]
z 顯示下 k 行文本[當前屏幕尺寸]*
<回車鍵> 顯示下 k 行文本[1]*
d 或 ctrl-D 滾動 k 行[當前滾動尺寸,初始值為 11]*
q 或 Q 或 <interrupt> 退出 more
s 跳過下面 k 行文本[1]
f 跳過下面 k 屏文本[1]
b 或 ctrl-B 跳過上面 k 屏文本 [1]
' 轉(zhuǎn)到上次搜索開始處
= 顯示當前行號
/<正則表達式> 搜索正則表達式第 k 次出現(xiàn)處[1]
n 搜索前一正則表達式第 k 次出現(xiàn)處[1]
!<cmd> 或 :!<cmd> 在子 shell 中執(zhí)行 <cmd> 命令
v 在當前行啟動 /usr/bin/vi
ctrl-L 重繪屏幕
:n 轉(zhuǎn)到后面第 k 個文件[1]
:p 轉(zhuǎn)到前面第 k 個文件 [1]
:f 顯示當前文件名和行號
. 重復(fù)前一命令
-
pg
的h
命令摘要
pg 1.44 2/8/02. Copyright (c) 2000-2001 Gunnar Ritter. All rights reserved.
h this screen
q or Q quit program
<newline> next page
f skip a page forward
d or ^D next halfpage
l next line
$ last page
/regex/ search forward for regex
?regex? or ^regex^ search backward for regex
. or ^L redraw screen
w or z set page size and go to next page
s filename save current file to filename
!command shell escape
p go to previous file
n go to next file
Many commands accept preceding numbers, for example:
+1<newline> (next page); -1<newline> (previous page); 1<newline> (first page).
See pg(1) for more information.
由以上三個分頁命令的命令摘要也可以看出,less最好,難怪作為了man命令的默認分頁工具呢!
說明書頁的組織方式
我們看的各種書籍可以翻頁,但Unix幫助手冊不能翻頁,因為并沒有定義頁碼。它更像是一種具有層次結(jié)構(gòu)的電子書。
通常情況下,unix手冊分成了8節(jié)(不同的系統(tǒng)之間略有差異)。
- 命令
- 系統(tǒng)調(diào)用
- 庫函數(shù)
- 特殊文件
- 文件格式
- 游戲
- 雜項信息
- 系統(tǒng)管理
從以上8種的大體分類也可以知道,不同節(jié)的知識側(cè)重點不同,適用的人群也就不同,如:
節(jié)1的命令是基礎(chǔ)中的基礎(chǔ),對所有unix使用者都有用;
節(jié)2、節(jié)3、節(jié)7則更適合程序員;
節(jié)7、節(jié)8則更適用于系統(tǒng)管理員;
...... 等等。
如下是各節(jié)的詳細說明:
命令
Unix手冊中最重要的部分就是第1節(jié)——命令。這部分包含了大量的unix命令的說明書頁。系統(tǒng)調(diào)用
本節(jié)是系統(tǒng)調(diào)用的說明書頁,在程序中使用系統(tǒng)調(diào)用,以請求內(nèi)核執(zhí)行特定的動作。庫函數(shù)
庫函數(shù),也稱為子例程,是標準化的工具,不會直接涉及內(nèi)核,在程序中執(zhí)行特定的任務(wù)。特殊文件
該部分主要是指那些表示物理設(shè)備的文件,還包括設(shè)備驅(qū)動程序的信息。文件格式
本節(jié)介紹系統(tǒng)中的重要文件格式,包括配置文件。游戲
該節(jié)提供系統(tǒng)中所安裝游戲的說明書頁。在工作中碰到的linux機器,手冊中的第6節(jié)很可能是空的,原因你懂的。雜項信息
既然叫雜項信息,那就是各種混雜信息了。系統(tǒng)管理
主要包括系統(tǒng)管理員用來執(zhí)行工作所使用的所有特殊命令的說明書頁,也就是那些只能由超級管理員使用的命令。
指定要查看的節(jié)號
前面介紹了要想查看某命令的unix手冊,使用man命令后接該命令的名稱,如:
man kill
而上面我們知道m(xù)an手冊分為多節(jié),那么上述這個命令到底查看的是哪節(jié)呢?答案是第一節(jié)。
通過上述命令的輸出(第一行中行首和行末括號中的數(shù)字)也可以判斷:
KILL(1) User Commands KILL(1)
一般在命令幫助手冊的最后,有“SEE ALSO”的兩行,如:
SEE ALSO
kill(2), killall(1), nice(1), pkill(1), renice(1), signal(7), skill(1)
這說明與kill命令相關(guān)的其它幾個命令的引用。可以看到kill(2)
,即第二節(jié)中也有個kill的條目,那么應(yīng)該如何查看該條目呢?
依然使用man命令后接要查看的命令的名字,只不過在它們中間指定節(jié)號:
man 2 kill
輸出的首行如下:
KILL(2) Linux Programmer's Manual KILL(2)
因而,man kill
也等同于man 1 kill
。
如果希望同時查看kill幫助手冊的第一節(jié)和第二節(jié),可以使用man 1 kill 2 kill
。
說明書頁的格式
你用man來查看多個命令的幫助手冊,你會發(fā)現(xiàn)這些說明書頁都遵循大體相同的格式,如常見的有:
- Name
命令的名稱和用途,一般情況下是一個單行的摘要,因此意思比較模糊。 - Synopsis
命令語法,如果想知道一個命令如何使用,看這部分就足夠了。 - Description
完整描述(可能很長),包含了很多使用細節(jié)。 - Environment
命令使用的環(huán)境變量。 - Author
開發(fā)該命令的程序員的名字。 - Files
對該命令重要的文件列表。 - See also
查看相關(guān)信息的位置,一般顯示了相關(guān)命令以及其在幫助文檔中的節(jié)數(shù)。 - Diagnostics
可能的警告和錯誤。 - Bugs
錯誤、缺點、警告等。
快速查找命令
在文章情景l(fā)inux--不借助網(wǎng)絡(luò)如何找到你需要的命令中介紹了一種快速查找命令的方式。
如果你想查詢命令的作用,可以使用man -f
,后接命令名稱,也可以接多個命令,如:
man -f basename dirname
它將顯示后接命令的一句話作用描述:
basename (1) - strip directory and suffix from filenames
basename (3) - parse pathname components
dirname (1) - strip last component from file name
dirname (3) - parse pathname components
whatis
命令等價于man -f
whatis basename dirname
basename (1) - strip directory and suffix from filenames
basename (3) - parse pathname components
dirname (1) - strip last component from file name
dirname (3) - parse pathname components
文檔結(jié)構(gòu)
unix聯(lián)機手冊是一個文件集,每個文件是一個具體命令的相關(guān)文檔資料。那么,unix聯(lián)機手冊對應(yīng)的文件在哪里能夠找到呢?
前面提到說明書頁中有一節(jié)“FILES”是指該命令的相關(guān)文件,查看man命令的說明書頁中的“FILES”:
FILES
/etc/manpath.config
man-db configuration file.
/usr/share/man
A global manual page hierarchy.
/usr/share/man/index.(bt|db|dir|pag)
A traditional global index database cache.
/var/cache/man/index.(bt|db|dir|pag)
An FHS compliant global index database cache.
可見,man的幫助文檔頁存于目錄/usr/share/man
中。
至于這些文件是怎樣保存的,文件的格式,文件的內(nèi)容是怎樣的,請自行探索,你會有所收獲的,也可以輔助理解unix聯(lián)機手冊。
Info系統(tǒng)
Info系統(tǒng)獨立于unix手冊,是一個聯(lián)機幫助系統(tǒng),用來記錄GNU實用工具的用法。GNU實用工具在unix世界很普遍,所以掌握如何使用Info系統(tǒng)也大有裨益。
查看info系統(tǒng)中的文件,需要使用info命令,后接要查看的命令,即,info X
。
info time
File: time.info, Node: Top, Next: Resource Measurement, Up: (dir)
The GNU `time' Command
**********************
This file documents the the GNU `time' command for running programs and
summarizing the system resources they use. This is edition 1.7, for
version 1.7.
* Menu:
* Resource Measurement:: Measuring program resource use.
* Concept index:: Index of concepts.
使用man time
對比一下:
man time
TIME(1) General Commands Manual TIME(1)
NAME
time - run programs and summarize system resource usage
SYNOPSIS
time [ -apqvV ] [ -f FORMAT ] [ -o FILE ]
[ --append ] [ --verbose ] [ --quiet ] [ --portability ]
[ --format=FORMAT ] [ --output=FILE ] [ --version ]
[ --help ] COMMAND [ ARGS ]
...省略...
unix幫助手冊和info系統(tǒng)的分工不同,決定了所有的unix和linux命令都有說明書頁,但卻不一定有info文件。因此,如果嘗試顯示一個命令的info文件,而系統(tǒng)上沒有時,會默認顯示其說明書頁。
一點兒經(jīng)驗,請笑納
最重要的常常被忽略
man命令常常被大多數(shù)人忽略。現(xiàn)如今,獲取信息的成本非常之低,當你不清楚一個命令的用法時,上網(wǎng)使用搜索引擎就可以輕松解決了。
但,僅僅這樣做并不夠好。
- 使用搜索引擎和使用
man
命令查閱幫助文檔并不沖突; - 輕松不代表高效,你仔細想過沒有?使用搜索引擎和使用man查詢幫助文檔相比,后者效率更高,熟練掌握后成本更低!
- 這不是一種非此即彼的選擇,我覺得,兩種方式配合使用會更好。
專項查詢窗口
可以專門開個終端窗口,只為隨時能查詢命令的用法。
一般的終端軟件,如xshell
、putty CM
等都支持將兩個終端窗口以水平或豎直分布的方式同時顯示在屏幕上,一個窗口作為你工作的窗口,另一個則用于查詢命令手冊,工作效率會更高。
!的妙用
另外,在查詢命令的幫助文檔時,如果需要查看另一個命令的幫助信息,或者想知道某個命令的執(zhí)行結(jié)果,這時你大可不必退出當前的說明書頁,也沒必要再重新打開一個終端窗口,你可以直接在當前狀態(tài)下得到你想要的結(jié)果。
比如,在查看basename的幫助文檔時,想要看下dirname的某個參數(shù),輸入“!man dirname”即可,當前頁面會轉(zhuǎn)到dirname的說明書頁,當你從dirname的說明書頁退出后,屏幕顯示“!done (press RETURN)”,此時按回車鍵會再回到basename的幫助文檔頁。
觀其大略
linux命令的參數(shù)一般有多個,最常用的幾個參數(shù)能應(yīng)付得了日常需要,不常用的參數(shù)往往滿足某個特殊的需求。因而,無所事事的時候,不妨粗略閱讀一個命令的說明書頁,目前是大致了解一個命令的作用,大致有哪些參數(shù),結(jié)合實際思考其可以使用的場景。這樣,在尋找命令或參數(shù)上能節(jié)省很多的時間。而且,這種“遍歷式的閱讀文檔”,往往能發(fā)現(xiàn)更加給力的命令和參數(shù)。
總結(jié)
unix文檔系統(tǒng)是一部字典,在這里,我只能給出查閱字典的方法和方法論,無論是unix文檔系統(tǒng)本身,還是文檔系統(tǒng)中的命令們,更多內(nèi)容還有待我們?nèi)ヌ剿鳌?/p>
掌握了查閱unix文檔系統(tǒng)的方法,僅僅是一個開始,但正因為有這樣的開始,你的linux成長之路會比在這之前要更加的暢通和高效。
參考資料
http://www.gnu.org/software/texinfo/
書籍《Unix & Linux 大學(xué)教程》第9章
情景l(fā)inux--不借助網(wǎng)絡(luò)如何找到你需要的命令
Unix文化--RTFM
你為什么必須(從現(xiàn)在開始就)掌握linux