7.1. 文档资源

在你能搞懂引发问题的原因之前,你需要从原理上明白程序及其所包含的子程序所扮演的角色。为此,最好的方法是参考程序的文档;但这些文档往往数量巨大且分散,因此你也需要知道如何找到这些文档。

7.1.1. 手册页面

文化 读那该死的文档去!(RTFM)

本标题缩写意思是“读那该死的文档!(Read the F**king Manual)”,当然,也可以翻译得文雅一些,“读那些好文档(Read the Fine Manual)”。这个短语经常是用来回复新手的提问时,表达略带厌烦的情绪。有人认为这种回应略显粗鲁,毕竟对于提问的人来说,他们未必会介意去阅读文档。但也有人认为,这种经典的回应方式聊胜于无(至少指出已有的文档包含了相关的信息),毕竟也比直接得到一个满是抱怨并且十分冗长答复要好些。

在任何情况下,如果有人用“RTFM”来回应你,通常并没有任何冒犯的意思。要是这种回应让你觉得脑火,要么你就直接无视,要么你最好在提问之初就说明在手册当中没有找到相关信息。在上论坛提问前,最好也能描述你已经寻找资料的一些步骤。Eric Raymod曾发表过一篇指引性的文章,就如何提问给出了建议,这能有效避免常识性的错误并得到有用的答案。文章地址是:

http://catb.org/~esr/faqs/smart-questions.html

手册页 (manual pages)通常都是文笔紧凑,包含了大量的有用信息。通过查找手册页能快速的知道命令的使用方法。只要简单的输入命令 man *manual-page* 就能显示所查命令的手册页。例如,当你想了解 cp 这个命令的所有选项时,直接在Shell控制台输入 man cp 就可以了(具体请见 sidebar 基本知识 命令行解析器 - Shell )。

基本知识 命令行解析器 - Shell

命令行解析器,通常也称作“shell”, 是一种执行用户输入或者文本命令的程序。在交互模式下,会显示一个提示符(普通用户会显示一个$ 符号,管理员用户会显示一个#),用来表示shell已经就绪,可以读取一个新的命令。附录 B, 简短辅导课程 描述了shell的基本使用方法。

默认且经常会被用到的shell程序是 bash (Bourne Again SHell), 当然也有其他,包括 dashcshtcshzsh等等。

上述的这些shell程序,大部分都有命令和文件名自动补全(输入命令的过程中敲击 Tab就可以补全),以及重新调用之前输入过的命令(历史管理)的功能。

手册页面不仅可以为命令行程序可以编写文档,也可以为配置文件,系统调用,以及C语言库函数等等编写。当遇到不同类型的程序拥有相同名字的情况,就会造成冲突。例如:shell有一个命令 read 和系统调用函数 read 重名。为此,手册页面通过添加数字参数的方式对不同种类的文档进行分类:

  1. 可从命令行执行的程序

  2. 系统调度(由内核提供的函数)

  3. 库函数(有系统库提供的函数)

  4. 设备(在Unix下,设备就是一些特殊的文件,通常放置在 /dev/ 目录下);

  5. 配置文件(格式与约定)

  6. 游戏

  7. 系统宏与标准集

  8. 系统管理命令

  9. 内核例程。

如果出现上述的冲突情况,你可以在使用手册页面查看文档的时候指定对应的分类数字(section):例如浏览系统调用read的文档时,你可以键入man 2 read。如果不指定具体的分类数字(section),系统则会从小到大获取第一个数字作为默认值。因此直接输入man shadow的时候,系统就会返回 shadow(5)的文档内容,这是在分类页面1-4都没有shadow这个命令的手册页面所导致的。

TIP whatis命令

如果你只是想显示一些简短的描述来确认所输入的命令是否自己所需,不希望显示完整的手册页面的话,只需要输入whatis *command*就可以了。

  1. $

这部分描述同样包含在手册页面的NAME部分。

当然,如果你连命令的名字都不知道,手册页面恐怕就无能为力了。遇到这种情况,我们可以用命令 apropos 来解决,这个命令能帮你查询手册页面的功能,或者简要的描述。每个手册页面都有一个单行的描述。apropos 返回手册页面请求的关键字列表。关键字选择得恰当,就能通过此工具很快得到结果。

例 7.1. 通过apropos查找 cp命令

  1. $

提示通过以下链接浏览

很多的手册页面都有”SEE ALSO”的段落,通常位于内容的最后。其作用是同时指出其他相关的类似命令,或者外部的文档。这样就可以在不选择第一个选项的情况下,仍可寻找到相关文档。

并不仅仅man这个命令可以用来查看手册页面,在KDE环境中也可以使用konqueror,在GNOME当中可以用yelp命令,均可实现相同功能。而用 man2html 软件包甚至能提供手册页面的web接口,允许你通过网页浏览器来浏览手册页面。使用方法是在已经安装了这个软件包的计算机上浏览这个连接

http://localhost/cgi-bin/man/man2html

这个工具需要一个web服务器,因此你应该将其安装包安装在一台服务器上:本地网络的所有用户将会因此受惠(包括非linux的机器),也不需要在每台工作站上面都安装http服务。如果你的服务器同时也能从外部网络访问的话,比较建议对这项服务的访问限制在本地网络的用户。

DEBIAN政策对手册页面的规定

Debian要求每个程序都必须配备手册页面。如果上游的作者没有提供这份文档,Debian软件包的维护者就必须为读者编写一份最少内容的页面作为原文档。

7.1.2. info文档

GNU项目为其大部分的程序编写了info格式的文档;这将解释为何很多手册页面的内容直接引用 info 文档的内容。这种格式有一定的优势,但默认的查看程序(也就是info 命令)却会使得查看文档变得复杂。更好的建议,是使用 pinfo 程序来替代默认的程序(使用 pinfo 的软件包)。

info文档拥有一个分层次的结构,如果在调用 pinfo 命令的时候没有输入任何参数,它将会列出第一层所有有效的节点。通常来说,节点名称与命令的名称相对应。

pinfo 命令可以使用键盘的上下箭头很轻易的在节点之间进行导航。另外,你们也可以使用图形界面的浏览器来查看文档,这种方式对用户更加友好。命令 konqueroryelp同样可用;而命令info2www同样提供了一个web接口。详情可访问

http://localhost/cgi-bin/info2www

需要注意的是,info 系统不支持翻译功能,这点与 man 系统不一样。因此 info 总是以英文编写。然而,当你尝试用 pinfo 命令访问一个并不存在的info页面的时候,将会回退到同名的 man 页面(如果该页面存在),这时的页面有可能是被翻译了的。

7.1.3. 特定的文档

每个软件包都包含起自身的文档。即使是最缺乏文档的包也至少会包含 README 文件,里面包含了有趣并且(或者)重要的信息。这些文档通常会被安装在/usr/share/doc/*package*/ 目录(这里的 package 代表软件包的名字)。当文件特别巨大的情况下,这些文档不会包含在程序的主包当众,而是另外提供一个通常以 *package*-doc 的包名格式另外提供一个软件包。通过主包名称通常都能很快找到文档包。

/usr/share/doc/*package*/目录当中同样有一些由Debian包维护者补充的文档,与原版文档不同的是,增补了一些软件包的特性或改善的内容。README.Debian 文件同时也会指出相关的修改内容是为了遵守Debian的包发布政策(Debian Policy)。changelog.Debian.gz 这个文件则按照时间的顺序描述了同一功能的若干次改动间的区别:这对理解不同版本的程序的演变过程有利。最后, NEWS.Debian.gz 这个文件记录了一些管理员可能非常关心的功能变化。

7.1.4. 网站

在大部分情况下,自由软件(Free software)都拥有各自的网站,网站上面提供程序发布的地址,以及提供了开发者和用户交流的社区。这些网站通常都有以不同形式组织起来的如下一些信息:官方文档, FAQ(常见问题列表), 邮件列表和归档内容等等。通常,你所遇到的问题都已经被很多人提出过了的,这你就能在FAQ和邮件列表归档等方式找到解决的方法。同归对搜索引擎指定搜索的域名和子域名,能切实有效的提高查找问题的效率。但凡搜索引擎所返回的页面过多或者结果并非你所想要,你可以通过添加查询关键字 debian 来限制结果和目标的相关信息。

提示 从错误到解决方法

如果软件返回了一个特定的错误信息,你可以将这段信息以半角双引号"括起(这样能保证以完整的句子进行查找,而不是单个单词),输入到搜索引擎中进行查找。在大部分情况下,第一条链接就会包括你所需要的答案。

在其它情况下,会出现一种经常遇到的错误信息,例如 “Permission denied”。在这种情况下,你最好检查一下相关元素的权限情况如何(文件、用户ID,组别等)。

如果你不知道软件的网站地址,也仍有几种不同的方法去获知。首先,检查软件包的元信息是否含有 Homepage 的字段(命令为 apt-cache show *软件包名称* )。另外,软件包的描述可能也包含了一个链接到程序官方网站的地址。如果此处没有网址,可以查看 /usr/share/doc/*package*/copyright。Debian 的维护者通常会指出到何处去获得程序的源代码,这通常都是你需要找的网站。如果到了这个阶段你仍然找不到所需的内容,可以查找自由软件目录网站,例如 FSF 自由软件目录,或者通过 Google、DuckDuckGo 或 Yahoo 等的搜索引擎来查找你所需的内容。

https://directory.fsf.org/wiki/Main_Page

你同样也可以通过Debian wiki来查找相关的内容,这是一种交互协作的网站,在网站上甚至普通的访问者都能直接通过浏览器提出修改建议。对该网站的使用对任何人来说都是平等的,无论是对设计和提出需求的项目开发者来说,亦或是对于通过交互协作的方式编写文档用以分享知识的用户来说。

http://wiki.debian.org/

7.1.5. 入门指导类文档(HOWTO文档)

howto 是一种文档类型,采用描述具体流程和步骤的方式,以“如何做”(how to)的方式来达到预定的目的。这里所指的目标范围相对广泛,单通常是指技术方面的目标:例如,设置一个伪造IP,配置软RAID,安装Samba服务等等。这类文档通常会尽力覆盖所有在实现给定技术情况下所遇到的各种潜在问题。

许多这类的引导文档都是由Linux文档项目(LDP)进行管理,该网站保存着所有这些文档,访问地址是:

http://www.tldp.org/

不要尽信文档所说的内容。毕竟这些东西都是年代就远了;里面包含的部分信息已经过时。由于一份新版文档的发布并非是系统的和实时的行为,这种现象同样经常会存在于翻译的文档当中。当然这其实也是一种乐趣,能让你在以志愿者的心态参与工作的同时不受约束…