你需要了解访问 man 手册页的精确机制,以便为你的 man 手册页提供正确的名称并将其安装在正确的位置。每个 man 手册页都应按特定章节分类,用单个字符表示。Linux 下最常见的章节及其人类可读的名称是
Section The human readable name 1 User commands that may be started by everyone. 2 System calls, that is, functions provided by the kernel. 3 Subroutines, that is, library functions. 4 Devices, that is, special files in the /dev directory. 5 File format descriptions, e.g. /etc/passwd. 6 Games, self-explanatory. 7 Miscellaneous, e.g. macro packages, conventions. 8 System administration tools that only root can execute. 9 Another (Linux specific) place for kernel routine documentation. n (Deprecated) New documentation, that may be moved to a more appropriate section. o (Deprecated) Old documentation, that may be kept for a grace period. l (Deprecated) Local documentation referring to this particular system. |
man 手册页源文件(格式化系统的输入)的名称是命令、函数或文件名的名称,后跟一个点,然后是章节字符。如果你编写关于 `passwd` 文件格式的文档,你必须将源文件命名为 `passwd.5`。这里我们还有一个文件名与命令名称相同的例子。甚至可能有一个名为 passwd 的库子程序。分节是解决这些歧义的常用方法:命令描述位于文件 `passwd.1` 中,而假设的库子程序位于 `passwd.3` 中。
有时会附加额外的字符,文件名看起来像 `xterm.1x` 或 `wish.1tk`。其目的是表明这是 X Window 程序或 Tk 应用程序的文档。一些手册浏览器可以利用这些额外信息。例如,xman 将在可用文档列表中使用 `xterm(x)` 和 `wish(tk)`。
请不要使用 n、o 和 l 章节;根据文件系统标准,这些章节已被弃用。请坚持使用数字章节。注意与现有程序、函数或文件名的名称冲突。编写另一个编辑器并将其命名为 ed、sed(表示智能 ed)或 red(表示 Rocky 的 ed)肯定不是一个好主意。通过确保你的程序名称是唯一的,你可以避免有人执行你的程序却读取了别人的 man 手册页,反之亦然。
现在我们知道了如何命名我们的文件。下一个决定是它最终将被安装的目录(例如,当用户运行 `make install` 为你的软件包时。)在 Linux 上,所有 man 手册页都位于环境变量 MANPATH 中列出的目录之下。与 shell 使用 PATH 定位可执行文件的方式相同,与文档相关的工具也使用 MANPATH。实际上,MANPATH 的格式与 PATH 相同。每个都包含一个冒号分隔的目录列表(例外是 MANPATH 不允许空字段和相对路径名——它只使用绝对名称)。如果 MANPATH 未设置或未导出,则将使用默认值,该默认值至少包含 /usr/man 目录。为了加快搜索速度并保持目录较小,MANPATH 指定的目录(所谓的基目录)包含一堆名为 `man<s>` 的子目录,其中 <s> 代表 上表 中介绍的单字符章节指示符。并非所有章节都可能由子目录表示,因为根本没有理由保留空的 `mano` 子目录。但是,可能存在名为 `cat<s>`、`dvi<s>` 和 `ps<s>` 的目录,其中包含准备好显示或打印的文档。稍后会详细介绍。任何基目录中的唯一其他文件应该是名为 `whatis` 的文件。此文件的目的和创建也将在 第 12 段 中描述。将章节 <s> 的 man 手册页安装在正确位置的最安全方法是将其放在目录 /usr/man/man<s> 中。一个好的Makefile,但是,将允许用户通过make变量 MANDIR 来选择基目录。大多数 GNU 软件包都可以使用--prefix=/what/ever选项进行配置。手册将安装在基目录 /what/ever/man 下。我建议你也提供一种类似的方法。
随着 Linux 文件系统标准 (FS-Stnd) 的出现,事情变得更加复杂。[注意:FS-Stnd 似乎已被 文件系统层次结构标准 (FHS) 取代。] FS-Stnd 1.2 规定
“/usr/man 的结构中必须做出规定,以支持以不同(或多种)语言编写的手册页。”
这是通过引入另一个目录级别来实现的,该级别区分不同的语言。再次引用 FS-Stnd 1.2
“/usr/man 的语言子目录的命名基于 POSIX 1003.1 标准的附录 E,该附录描述了区域设置标识字符串——描述文化环境的最广为接受的方法。<locale> 字符串是:<language>[_<territory>][.<character-set>][,<version>]”
(有关一些常见的 <locale> 字符串,请参阅 FS-Stnd。)根据这些准则,我们的 man 手册页位于 /usr/man/<locale>/man[1-9lno] 中。格式化版本当然应该位于 /usr/man/<locale>/cat[1-9lno] 中,否则我们只能为单个区域设置提供它们。但是,我现在不建议切换到该结构。FS-Stnd 1.2 也允许
“对于所有手册页都使用唯一语言和代码集的系统,可以省略 <locale> 子字符串,并将所有手册页存储在 <mandir> 中。例如,仅具有用 ASCII 编码的英文手册页的系统可以将手册页(man[1-9]目录)直接存储在 /usr/man 中。(事实上,这是传统的环境和安排。)”
我不会切换,直到所有工具(如 xman、tkman、info 和许多其他读取 man 手册页的工具)都能适应新结构。