作为刚刚学习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
#可以分为2类,一类是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文档结构,包括目录,命名,已经文档名称,格式等。这些不是强制的,系统也不好强制检测你自己的文档是否满足。但是,你如果有自己文档想加入系统索引,按照规定去做,才会让以后管理不止混乱了。俗话说:无规律不成方圆。是这个理。呵呵,今天说的比较啰嗦,不知道有没有说清楚,这次说的比较理论的,下一节实际检索文档方面的东西。