man-命令介绍使用
man-命令介绍使用
man-pages定义规范
linux命令帮助,一般有2种,命令自身代码里面带有使用帮助说明,这种一般很精简,太长了,程序自身的大小以及日常维护不方便。还有一种,就是带有帮助文件,类似windows的chm格式文件。下面我说下这2种怎么样查阅。
一、程序内在帮助信息
例如:
上面是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 这个目录里面。这个目录下面结构还有定义的:
先说一下,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 。看下下面例子:
从这个里面看,.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地址 规范的文档,如果有相关描述,都会包含上面这些节点类型的。我们举例说明下:
这里自己解压了一个cat.1.gz然后通过自带命令查看文档格式如上图,这些你看到用到好多命令,显示一个文档,在下一节文档查询里面我们会知道原因的。
这里主要说的是linux文档结构,包括目录,命名,已经文档名称,格式等。这些不是强制的,系统也不好强制检测你自己的文档是否满足。下一节实际检索文档方面的东西。
linux shell man命令详细介绍
知道linux帮助文件(man-pages,手册页)一般放在,$MANPATH/man 目录下面,而且按照领域与语言放到不同的目录里面。 看了上一章,要找那个命令使用相关手册,只要我们按照领域区分,到对于目录去查看与命令对应的文件解压,cat file 就可以看到一篇详细的文档了。 但是与快速索引查找帮助相差太远了。linux有一个很好工具,就是man 它会按照系统设计帮助目录,在各个文档里面查询,并且显示内容。接下来,主要讲一下这个命令使用以及配置说明,还有一些使用实例。
- man命令使用
man命令:可以通过一些参数,快速查询linux帮助手册,并且格式化显示。
使用语法:
man [-adfhktwW] [section] [-M path] [-P pager] [-S list] [-m system] [-p string] title..
参数用法:
参数 备注 man命令常用参数 -a 显示所有匹配项 -d 显示man查照手册文件时候,搜索路径信息,不显示手册页内容 -D 同-d,显示手册页内容 -f 同命令whatis ,将在whatis数据库查找以关键字开同的帮助索引信息 -h 显示帮助信息 -k 同命令apropos 将搜索whatis数据库,模糊查找关键字 -S list 指定搜索的领域及顺序 如:-S 1:1p httpd 将搜索man1然后 man1p目录 -t 使用troff 命令格式化输出手册页 默认:groff输出格式页 -w 不带搜索title 打印manpath变量 带title关键字 打印找到手册文件路径,默认搜索一个文件后停止 -W 同-w section 搜索领域【限定手册类型】默认查找所有手册 man命令其它参数 -c 显示使用 cat 命令的手册信息 -C 指定man 命令搜索配置文件 默认是man.config -K 搜索一个字符串在所有手册页中,速度很慢 -M 指定搜索手册的路径 -P pro 使用程序pro显示手册页面 默认是less -B pro 使用pro程序显示HTML手册页 默认是less -H pro 使用pro程序读取HTML手册,用txt格式显示,默认是cat -p str 指定通过groff格式化手册之前,先通过其它程序格式化手册 它带的参数非常多,其实只有上面常用参数我们才经常使用,其它很多参数几本不会去修改。
- man命令获得帮助一般过程
实例代码
对于:whatis数据库,以及中文化linux帮助文件这里先不分析。
一般遇到一个不是很熟悉命令可以先通过:
man -k command1 查询所有类似帮助文件信息,这样输出最多也可以用:
man -f command1 查询以command1开头所有相关帮助信息列表 如果发现有类似:command1 (5)
man 5 command1 通过直接定位5获得帮助信息
- man命令搜索配置文件(man.config配置方法)
man这个命令为什么功能这么神奇,能够这么方便快捷索引出系统帮助信息,其它与它的一个配置文件分不开。我们看一下它配置文件。
通过该命令,我们索引到所有与man有关的手册页了。 根据前面提到的领域设置类型,(1)是man命令说明,(7)man文件使用的宏格式规定,下面有一个:man.config (5) ,就是man的配置文件了。
读取man.config文件:
配置文件分类:
MANPATH 关键字
指定手册默认存放路径,man启动就会在这些目录中索引手册页,可以通过添加一行:MANPATH /home/chengmo/man 指定加入自己的手册路径,通过man -M可以添加自己的手册路径
MANPATH_MAP关键字
指定帮助手册与命令对应目录,如果自己增加搜索目录,这里需要增加对应方式
格式化手册页输出
linux系统手册页,大家在看到时候有高亮,然后还有加粗,下划线,倾斜,空行等固定格式。其实这些在本来的手册页文件里面,只是保存为一系列的代号。大家不妨解压个gz手册文件,然后通过cat查看下内容。你会发现显示里面有如下内容中(点开头,然后一系列数字,而且整个页面显示杂乱无章,跟我们man看到完全不一样),其它这些代号对应是linux文件里面的宏指令代码,如:
.B 粗体
.BI 粗体跟斜体
.BR 粗体跟正体
.I 斜体
.IB 斜体跟粗体
.IR 斜体跟正体
.RB 正体跟粗体
.RI 正体跟斜体
.SM 小(缩放到正常大小的9/10)
.SB 小跟黑体(所跟的黑体不会缩小)
如果不清楚这个关系,把这些宏指令比拟为:html语言一些标签,在记事本中打开,大家都看不明白,但是如果用ie查看。就一目了然了。
这些宏指令在显示时候,必须通过一系列命令做格式转换,这里必须提到是:groff系列命令(它的工作有点像IE):
这里只是解析man.config常见的解析命令:
gpic 将内嵌于troff或者TeX输入文件中的图像编译成troff或者TeX理解的指令。
gtbl 实现table表格输出。
neqn 将方程格式化,使其成为适应ASCII输出的脚本,如果文档要表示一些数字开方,根号之类需要它了
refer 将一个文件拷贝到标准输出,并丢弃.[和.]之间作为引用的内容和在.R1和.R2之间解释如何处理这些引用的命令。
troff groff依照合适的顺序并使用合适的参数来执行预处理程序和后处理程序。
PAGER、BROWSER、HTMLPAGER
分别制定最终标准手册页,HTML手册页,HTML as TXT手册页 由那个程序显示。其实基本都是交给了:less这个作为手册页显示程序。当我们打开了手册页后,对它进行翻页查找等操作,其实就是运用less 程序快捷键完成的。如果命令行man –[PBH] 可以对当前索引,分别用新的程序覆盖系统设置。
COMPRESS,COMPRESS_EXT
设置压缩文件,已经压缩文件生成扩展名,如果需要将手册输出其它格式时候会用到
MANSECT
指定man 搜索手册目录顺序,假设设置是:
mansect 1:1p:8:2:3:3p:4:5:6:7:9:0p:n:l:p:o:1x:2x:3x:4x:5x:6x:7x:8x
如果直接man command1 ,它将按照这里指定的顺序查找手册页,先是man1,然后man1p…… 直到找到一个页面,就停止搜索。除非加了-a 参数。如果调用man -S 1:1p 是可以覆盖这项设置的
.gz .bz2
这个是如果手册页面是这里程序的,用什么程序进行解压。
我们还记得上次man -d 的参数吧!运行最后会输入一个脚本:
(cd /usr/share/man && (echo ".ll 11.8i"; echo ".nr LL 11.8i"; echo ".pl 1100i"; /usr/bin/gunzip -c '/usr/share/man/man1/man.1.gz'; echo ".\""; echo ".pl \n(nlu+10") | /usr/bin/gtbl | /usr/bin/nroff -c --legacy ISO-8859-1 -mandoc 2>/dev/null | /usr/bin/less -is)
其实这个才是man命令执行后 ,通过各个格式化指令组合,最终shell脚本运行的命令。
突然想到一个问题,man之所以强大,与它的松散配置分不开,它只是实现了搜索查找,而解压由:gunzip,格式化是由:groff处理,显示有less处理。
说到这里,man好像都说完了,对了,显示的页面怎么操作呢?接下来,我们在看看,less常用命令
- man显示页面操作(less命令使用)
我们找到了自己的帮助文件了,而且已经显示了页面。在这个黑屏页面里面,我怎么样实现查找,跳转等操作呢?
其实,它现在已经进入了less命令管理范围了(可能有朋友认为是vi的,因为它们快捷键很相似,其实是less的)
image下面说下less命令操作:
光标移动操作:
e ^E j ^N CR * 前进一行(或N行)
y ^Y k ^K ^P * 后退一行(或N行)
f ^F ^V SPACE * 前进一个窗口(或N行)
b ^B ESC-v * 后退一个窗口(或N行)
z * 前进一个窗口(将窗口设置到N)
w * 后退一个窗口(将窗口设置到N)
ESC-SPACE * 前进一个窗口,在文件末尾不停止 d ^D * 前进半个窗口(将这半个窗口设置到N)
u ^U * 后退半个窗口(将这半个窗口设置到N)
ESC-) RightArrow * 向左半个屏幕宽(或N个位置)
ESC-( LeftArrow * 向右半个屏幕宽(或N个位置)
F 一直前进,像"tail -f"一样移动操作基本与vi一样的。
查找操作:
/pattern * 向前查找包含pattern的行. ?pattern * 向后查找包含pattern的行. n * 查找下一个pattern行. N * 查找上一个pattern行. ESC-n * 同n. ESC-N * 同N ESC-u 取消所有搜索的高亮显示
调动操作:
g < ESC-< * 跳转到文件第一行 G > ESC-> * 跳转到文件最后一行 p % * 跳转到文件最开始
其它操作:
:n * 打开跳转到下一个文件 :p * 打开跳转到上一个文件 :x * 跳转到第一个打开的文件 h H 显示帮助 q :q Q :Q ZZ 退出当前打开文件
less可以打开多个文件,在多个文件操作中,可以使用这些命令。如man -a passwd 实际会查到多个手册,都会有less打开。可以通过这类命令实现打开与关闭。