作為剛剛學習linux朋友,我們拿到一個命令,不知道怎麼樣使用,一般都會先看下命令預設參數說明,然後再不清楚就是通過man命令查閱手冊。還是找不到方法,就網上搜尋,最後不行就去大論壇發帖。由於很多時候發文章估計要比較久有人回複。久而久之,對學習linux的熱情被怠慢下來了。 其實,這也是學習linux的最大困難。
linux命令協助,一般有2種,命令自身代碼裡面帶有使用協助說明,這種一般很精簡,太長了,程式自身的大小以及日常維護不方便。還有一種,就是帶有協助檔案,類似windows的chm格式檔案。下面我說下這2種怎麼樣查閱。
一、程式內在協助資訊
例如:
[chengmo@centos5 ~]$ cat --helpUsage: cat [OPTION] [FILE]...Concatenate FILE(s), or standard input, to standard output. -A, --show-all equivalent to -vET#......省略 [chengmo@centos5 ~]$ man -hman, version 1.6d usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list] [-m system] [-p string] name ...#......省略
上面是2個例子,通過參數獲得命令使用協助,這是我們經常用的。 說點題外話,開始跑題了……,呵呵
我想說下命令常見參數規律,一般如果帶參數是一個字元,那麼就用:一個”-“串連,如果後面參數是多個字元就用:”--“串連。是不是一個”-“後面不能接多個字元呢?這點就是linux命令解析靈活性了,如果你把多個字元用一個”-“串連,它會將它分割為多個參數。如:ls –al 等價於 ls –a –l ,如果你用:ls –-al 那麼它將把al作為整體參數了。
還要說一點,一般linux命令,都會用-h,或者 --help作為返回命令列協助資訊。 特別是--help最多,有的命令2個都支援。 這個已經成了一種習慣了。遇到不會用的命令,不妨試試這2個參數。
二、獲得命令外部協助檔案(man-pages)
什麼是手冊頁(man-pages)
在windows下面,我們經常把協助手冊叫電子書,是chm檔案。在linux下面的協助手冊,一般叫man-pages。它們按照一定規律存放在linux一些檔案夾裡面,如果需要查閱,可以通過man-pages手冊索引命令查閱,常見有:info,man(本文主要講的),xman等等。說到這裡,肯定有朋友會說:那有windows下面的chm方便嗎,搜尋,查詢,以及表現形式怎麼樣的呢?在shell終端查看,是不是都是一大篇大篇文字,單獨枯燥,密密麻麻的。 哈哈,我可以說的是,它內容表現還很豐富,支援普通文字,表格,圖片,還有就是搜尋定位到需要資訊超快。 一定比在windows裡面通過滑鼠點擊快幾倍了。
那麼它為什麼管理方便,索引速度快呢。接下來,我們看一下man-pages也的規範了。
man-pages目錄及檔案名稱規範定義
存放目錄:
首先是目錄以及存放規範,linux文檔經常放在:MANPATH環境變數指定的目錄中。一般在:/usr/share/man 這個目錄裡面。這個目錄下面結構還有定義的:
[chengmo@centos5 man]$ lsbg el fr hu it.UTF-8 man1 man2x man4 man6 man8 manl pl.ISO8859-2 ro sk zh_CNcs en fr.ISO8859-1 id ja man1p man3 man4x man6x man8x mann pl.UTF-8 ru sl zh_TWda es fr.UTF-8 it ko man1x man3p man5 man7 man9 nl pt ru.KOI8-R svde fi hr it.ISO8859-1 man0p man2 man3x man5x man7x man9x pl pt_BR ru.UTF-8 tr#可以分為<strong>2類</strong>,一類是man[*]目錄,一類是:en,zh_CN,pl.ISO8859-2類代表語言已經地區,編碼目錄
先說一下,man[*]這類目錄表示意思。linux協助文檔,一個特別的有意思的是,按照文檔表示不同類型,分領域的(也就是分類別),過會我們會說這個類別按照什麼分了。還有就是類似:zh_CN pl.ISO8859-2這些。文檔還分語言.地區.字元編碼 。可以支援統一命令,多個語言版本的文檔,並且地區可以不一樣,還可以指定字元集。如:zh_TW.big5 這個意思就是:中文_台灣地區.使用big5字元集編碼的文檔。
文檔領域區分方法(就是類別)
我們看下下面的表格:
領域 |
描述 |
說明 |
1 |
使用者命令 |
可由任何人啟動的,如env、cat、man、touch文檔 |
2 |
系統調用或核心功能 |
即由核心提供的函數 如link、sethostname、mkdir |
3 |
庫程式 |
即庫函數 如acosh、asctime、btree、locale |
4 |
與裝置有關的資訊 |
即/dev目錄下的特殊檔案 如zero null sda |
5 |
檔案格式描述 |
如/etc/passwd 檔案格式描述說明在這個分類下 |
6 |
遊戲 |
遊戲的協助檔案 |
7 |
其他 |
包括 宏命令包、慣例等如 arp、boot、regex、unix utf8 |
8 |
系統管理 |
只能由root啟動 如fdisk、fsck、renice、rpm、yum |
9 |
核心 |
用來存放核心例行程式的文檔 |
n |
新文檔 |
可能要移到更適合的領域 |
o |
老文檔 |
可能會在一段期限內保留 |
l |
本地文檔 |
與本特定系統有關的 |
如果文檔屬於那個類型的,它就放到 MANPATH/語言_地區.字元集/man[n]目錄下面。 沒有地區語言,代表是en英文文檔。就直接放到:MANPATH/man[n]下面,基本上大部分文檔都是這個下面。
舉個列子吧:
linux下面有個命令是:passwd 修改密碼資訊的,每個使用者都可以調用,所以它會放到man1/目錄下面
但是同時,/etc/passwd有個儲存使用者賬戶資訊設定檔,它的格式及說明資訊文檔,將放到/man5目錄下了。這樣按照領域(以後都叫這個了,呵呵)區分,不會出現相同名稱檔案找錯的情況了。 上面提到的:1,2,3,4,5,7,8這些類型是我們經常用到的。 如果我想知道/dev/null 裝置的意思,我可以到:man4這個目錄下面找了。
協助檔案格式:
剛才說了,目錄存放格式,協助檔案一樣有它的格式的。首先是命名格式:
[命令名稱.領域]:名字就是命令、函數或檔案名稱的名稱,後面跟一個點,再跟著領域字元。如:如果passwd命令說明文檔,檔案名稱命名是:passwd.1,加上目錄存放為:man1/passwd.1 ,如果對應passwd格式說明文檔,它將是:man5/passwd.5 。看下下面例子:
[chengmo@centos5 man5]$ ls p* pam.5.gz pam_env.conf.5.gz passwd.5.gz png.5.gz pam.conf.5.gz pam_krb5.5.gz pbm.5.gz pnm.5.gz pam.d.5.gz pam_ldap.5.gz pgm.5.gz ppm.5.gz #/usr/share/man/man5 下面所有以p開標頭檔,從檔案裡面我們就知道它對應於那些設定檔格式說明了。#pam.d.5.gz就是pam.d目錄結構說明 pam.5.gz是pam模組結構說明
從這個裡面看,.gz結尾,看來是通過gzip壓縮過的,linux系統為節省文檔儲存空間,內建文檔都經過壓縮的。只是查看時候,我們需要解壓然後查看。文檔內容不會改變。
再囉嗦一下:
細心朋友一定看到個問題,上面顯示:man目錄下面結構例子裡面,除了man[n]以及語言地區目錄。還有一類目錄:man1,man0p,man1p,man1x 這裡說明下:
加p:表示POSIX Programmer 程式說明文檔
加x:表示x windows傳統型程式說明文檔
0p:表示POSIX Programmer 一些c的標頭檔庫,如:tcp.h,ulimit.h等說明文檔
man-pages檔案內容格式規範
能夠快捷方便查詢linux文檔,除了目錄規範以及命名規範外。對於文檔的內容也有一個格式規範呢。
一個文字檔,又不是用word格式,基本都是ascii字元,還有什麼規範?
可能朋友會這麼說,是的,它確實是文字檔,編輯一個隨便的txt檔案,就可以是一個linux文檔,如:你寫了個:testhellow.sh指令碼,然後你寫了一段文本存為:man/man1/testhellow.1檔案。這個就算一個文檔了。
你通過linux索引方法,是可以找得到的。 但是:它不是一個規範的文檔。
標準格式文檔是:
手冊頁內容 |
描 述 |
NAME |
程式或者命令的名稱、手冊節號及發布日期 |
SYNOPSIS |
怎樣調用命令,帶有所有選項和參數的完整列表 |
DESCRIPTl0N |
命令及其用法的簡短小結 |
RETURN VALUES |
程式或者庫函數傳回值,以及產生特定傳回值的環境 |
EXIT STATUS |
經常用來替代服TURNVALUS |
OPTIONS |
按字母順序排列的選項和參數清單,如果有的話 |
FILES |
命令使用的或者能使用的檔案清單 |
USAGE |
用程式的語言說明的簡明文法,如果有的話 |
ENVIROMENT |
命令使用的或者能使用的環境變數清單 |
DIAGNOSTICS |
命令產生的錯誤資訊及其解決辦法的清單 |
NOTES |
不能夠歸入其他任何一種類別下的所有資訊 |
CONFORMING TO |
列出程式遵循的任何標難,比如PoSIX或ISO |
SEE ALSO |
和命令有關的交叉索引和資訊 |
BUGS |
指出己知的bug和錯誤功能,以及怎樣和程式的作者聯絡修正它們 |
AUTHOR |
命令的作者或者維護者的名字,可能帶有電子郵件地址或URL地址 |
規範的文檔,如果有相關描述,都會包含上面這些節點類型的。我們舉例說明下:
[chengmo@centos5 ~]$ gtbl cat.1 | gtbl | groff -Tascii -man CAT(1) User Commands CAT(1) NAME cat - concatenate files and print on the standard output SYNOPSIS cat [OPTION] [FILE]... DESCRIPTION Concatenate FILE(s), or standard input, to standard output.省略.... EXAMPLES cat f - g省略.... AUTHOR Written by Torbjorn Granlund and Richard M. Stallman. REPORTING BUGS Report bugs to <bug-coreutils@gnu.org>. COPYRIGHT Copyright (C) 2006 Free Software Foundation, Inc.省略....SEE ALSO The full documentation for cat is maintained as a Texinfo manual. If省略.... cat 5.97 March 2007 CAT(1)
這裡自己解壓了一個cat.1.gz然後通過內建命令查看文檔格式如上圖,這些你看到用到好多命令,顯示一個文檔,在下一節文檔查詢裡面我們會知道原因的。
這裡主要說的是linux文檔結構,包括目錄,命名,已經文檔名稱,格式等。這些不是強制的,系統也不好強制檢測你自己的文檔是否滿足。但是,你如果有自己文檔想加入系統索引,按照規定去做,才會讓以後管理不止混亂了。俗話說:無規律不成方圓。是這個理。呵呵,今天說的比較囉嗦,不知道有沒有說清楚,這次說的比較理論的,下一節實際檢索文檔方面的東西。