1.9 手册页和其他联机文档
UNIX/Linux 系统管理技术手册(第四版)
手册页通常称为“man手册页”,因为要用man命令来阅读,它构成了传统的“联机”文档(当然,现如今所有的文档都以这样或者那样的形式在线存在)。man手册页一般伴随系统一起安装。针对特定程序的man手册页通常随着安装新软件包一同安装。
man手册页对单条命令、驱动程序、文件格式或者库例程给出简洁的说明。它们不会解释诸如“我该怎样安装一个新设备?”或者“为什么我们的系统这么慢?”这样更普通的话题。对于这些问题来说,用户可以参考厂商提供的系统管理指南(参见1.10节),对于Linux系统来说,也可以从“Linux建档项目(Linux Documentation Project)”中获得文档。
1.9.1 手册页的组织
所有的系统都把man手册页分成若干节,但是在各个节的规定上面,不同系统间略有区别。我们的示例系统所采用的基本结构如表1.3所示。
手册页中有些节会做进一步细分。例如,Solaris的第3c节包含了有关系统C标准库的手册页;有些系统的第8节没有内容,而把系统管理命令放到第1节。许多系统撤销了游戏和演示,第6节什么内容都没有。很多系统在手册中都有一个称之为l(L的小写)的节,用于本地手册页。
对于大多数主题而言,各节的确切结构并不重要,因为只要有匹配的手册页,man命令就会找到它。用户只需要对出现在不同节内同名的主题,知道各节的规定就行了。例如,passwd既是一条命令,也是一个配置文件,所以在第1节和第4或第5节都有关于它的手册项。
1.9.2 man:读取手册页
mantitle命令格式化特定的手册页并通过more、less命令,或者在PAGER环境变量中指定的任何程序把手册页发送到用户终端。title通常是一个命令、设备、文件名或者库例程名。手册中的各节大致是按照数字顺序进行搜索的,不过通常首先搜索描述命令的那些节(第1、8和6节)。
命令格式mansection title可让用户从某个特定的节获取手册页。于是在大多数系统上,man sync命令可得到sync命令的手册页,man 2sync命令可得到系统调用sync的手册页。
在Solaris上,必须在节号前面加上-s标志;例如,man -s 2 sync。
man -kkeyword或者aproposkeyword输出一份手册页清单,在其单行概要中有keyword。例如:
keyword指代的库可能已经过期了。如果要向系统添加man手册页,需重构这个库文件,在Ubuntu、SUSE上使用mandb命令,在Red Hat上使用makewhatis命令,在Solaris、HP-UX和AIX上使用catman -w命令。
1.9.3 手册页的保存
手册页的nroff输入通常保存在/usr/share/man/下的多个目录中。Linux系统会把它们用gzip压缩以节省空间(命令man知道如何当场将它们解压缩)。如果在/var/cache/man或者/var/share/man下的适当目录有写入权限,那么命令man会在那里维护一个有格式的手册页的缓存,但是这存在安全风险。大多数系统会在安装的时候预处理一次手册页的格式(参考catman命令),或者根本不做预处理。
除了传统的nroff格式之外,Solaris还支持SGML格式的手册页。SGML格式手册页相关各节的目录都在/usr/share/man下。
命令man会在若干不同的目录中寻找用户需要的手册页。在Linux系统上,用户可以使用manpath命令来确定搜索路径。这个搜索路径(在Ubuntu中)一般为:
ubuntu$ manpath
/usr/local/man:/usr/local/share/man:/usr/share/man
如果有必要,用户可以设置自己的环境变量MANPATH来覆盖默认路径:
export MANPATH=/home/share/localman:/usr/share/man
有些系统能让用户为手册页设置一个自定义的系统级默认搜索路径,如果用户想要维护平行的一套man手册页目录树(比如OpenPKG创建的目录树),就能够用上这种功能。不过,如果用户想要用手册页的形式发布本地文档,更简单的做法是,用系统的标准打包机制打包,并把这些手册页放在标准的man目录下。参考第12章了解有关软件安装和管理的更多知识。
1.9.4 GNUTexinfo
Linux系统包括一种补充的联机手册页系统,叫做Texinfo。很久以前,GNU人士针对设定man页面格式的nroff为AT&T专有命令这一现实情况,发明了Texinfo文档。现在,我们已经有了GNU的groff来为我们完成这项工作,nroff的问题不再重要了,但它仍然在人们脑海里阴魂不散。
虽然Texinfo逐渐不用了,但仍有很少几个GNU软件包坚持用Texinfo文件而不是man页面来提供自身的文档。用户可以把读取Texinfo的命令info的输出通过管道送给less命令,避开info命令内建的浏览体系。幸运的是,采用Texinfo提供文档的软件包通常会安装指示性的man页面,告诉用户使用info命令来阅读了解那些特殊的软件包。用户可以坚持使用man命令来查找手册,只有在被告知要采用info时再这么做,这样的做法很保险。命令info info将会把用户带入Texinfo的黑暗神秘世界。