作为刚刚学习linux朋友,我们拿到一个命令,不知道怎么样使用,一般都会先看下命令默认参数说明,然后再不清楚就是通过man命令查阅手册。还是找不到方法,就网上搜索,最后不行就去大论坛发帖。由于很多时候发帖子估计要比较久有人回复。久而久之,对学习linux的热情被怠慢下来了。 其实,这也是学习linux的最大困难。
linux命令帮助,一般有2种,命令自身代码里面带有使用帮助说明,这种一般很精简,太长了,程序自身的大小以及日常维护不方便。还有一种,就是带有帮助文件,类似windows的chm格式文件。下面我说下这2种怎么样查阅。
一、程序内在帮助信息
例如:
[chengmo@centos5 ~]$ cat --help Usage: cat [OPTION] [FILE]... Concatenate FILE(s), or standard input, to standard output. -A, --show-all equivalent to -vET #......省略 [chengmo@centos5 ~]$ man -h man, 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]$ ls bg el fr hu it.UTF-8 man1 man2x man4 man6 man8 manl pl.ISO8859-2 ro sk zh_CN cs en fr.ISO8859-1 id ja man1p man3 man4x man6x man8x mann pl.UTF-8 ru sl zh_TW da es fr.UTF-8 it ko man1x man3p man5 man7 man9 nl pt ru.KOI8-R sv de 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文档结构,包括目录,命名,已经文档名称,格式等。这些不是强制的,系统也不好强制检测你自己的文档是否满足。但是,你如果有自己文档想加入系统索引,按照规定去做,才会让以后管理不止混乱了。俗话说:无规律不成方圆。是这个理。呵呵,今天说的比较啰嗦,不知道有没有说清楚,这次说的比较理论的,下一节实际检索文档方面的东西。