man这个命令为什么功能这么神奇,能够这么方便快捷索引出系统帮助信息,其它与它的一个配置文件分不开。我们看一下它配置文件。
1
2
3
4
5
6
7[chengmo@centos5 ~]$man -fman
man (1) -format and display the on-line manual pages
man (1p) - display system documentation
man (7) - macros toformat man pages
man (rpm) - Aset of documentation tools:man,apropos and whatis.
man-pages (rpm) - Man (manual) pages from the Linux Documentation Project.
man.config [man] (5) - configuration datafor man
通过该命令,我们索引到所有与man有关的手册页了。 根据前面提到的领域设置类型,(1)是man命令说明,(7)man文件使用的宏格式规定,下面有一个:man.config (5) ,就是man的配置文件了。
读取man.config文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39[wangsl@centos5 ~]$cat /etc/man.config |grep -v '^#'
FHS
MANPATH/usr/man
MANPATH/usr/share/man
MANPATH/usr/local/man
MANPATH/usr/local/share/man
MANPATH/usr/X11R6/man
MANPATH_MAP/bin /usr/share/man
MANPATH_MAP/sbin /usr/share/man
MANPATH_MAP/usr/bin /usr/share/man
MANPATH_MAP/usr/sbin /usr/share/man
MANPATH_MAP/usr/local/bin /usr/local/share/man
MANPATH_MAP/usr/local/sbin /usr/local/share/man
MANPATH_MAP/usr/X11R6/bin /usr/X11R6/man
MANPATH_MAP/usr/bin/X11 /usr/X11R6/man
MANPATH_MAP/usr/bin/mh /usr/share/man
TROFF/usr/bin/groff -Tps -mandoc
NROFF/usr/bin/nroff -c --legacy NROFF_OLD_CHARSET -mandoc 2>/dev/null
EQN/usr/bin/geqn -Tps
NEQN/usr/bin/geqn -Tutf8
TBL/usr/bin/gtbl
REFER/usr/bin/grefer
PIC/usr/bin/gpic
VGRIND
GRAP
PAGER/usr/bin/less -is
BROWSER/usr/bin/less -is
HTMLPAGER/bin/cat
CAT/bin/cat
CMP/usr/bin/cmp -s
COMPRESS/usr/bin/bzip2
COMPRESS_EXT .bz2
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
.gz/usr/bin/gunzip -c
.bz2/usr/bin/bzip2 -c -d
.z
.Z/bin/zcat
.F
.Y
配置文件分类:
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):
groff简介:
Groff (GNU Troff) 是 Troff 的最新开放源码实现,Troff 是从相同的输入源为各种设备生成打印和屏幕文档的一种文档格式化输出系统。
Groff 是一种用于格式化输出文档的编程语言。它由一套工具组成,而不是单个的应用程序,groff 工具是使用这些工具的前端。其中包括处理特殊的输入文本的预处理器、用于处理输入的称为 troff 的主排版引擎、以及将 troff 的输出转换为打印和屏幕输出的各种格式的后处理器。
您可以在文本编辑器中编写输入或者从程序生成输入,无论采用哪种方式,文档的编写过程都发生在 Groff 系统之外。文档使用纯文本进行编写并使用 Groff 语言进行标记,后者指定了文档的格式和外观(请参见为 Groff 编写输入部分)。然后将该输入文本发送到 Groff,以便对其进行处理从而获得所需的输出。
Groff包含几个处理文本格式的程序。Groff把标准的文本和特殊的命令翻译成格式化的输出,像你在 man 手册页里看到的那样。
安装下列程序: addftinfo, afmtodit, eqn, eqn2graph, geqn (link to eqn), grn, grodvi, groff, groffer, grog, grolbp, grolj4, grops, grotty, gtbl (link to tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, pic2graph, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff and zsoelim (link to soelim)
这里只是解析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常用命令