一些手册页在一页中记录了多个命令/函数,而 man 命令通常为每个命令/函数提供正确的手册页。
示例:许多系统上的 malloc/free/calloc/realloc 的手册页
人们使用什么机制进行此类查找?
到目前为止我遇到过:
- 下的符号链接
/usr/share/man/manX
- 仅包含
.so manX/foo
源指令的别名手册页
当然,也可以想到硬链接和手册页的副本。
man 命令是否支持其他机制?
例如定义此类别名的中央索引文件?
答案1
在 OpenBSD 上,每个man
目录(例如/usr/share/man
与基本系统相关的手册)都包含一个mandoc.db
由每周运行的 cron 作业创建的数据库makewhatis
。
这些数据库是通过解析特定字符串的各种手动源(roff 源文件)来创建的,并且由man
公用事业。索引的内容之一是使用 OpenBSD 排版的手册部分.Nm
中由(“名称”)宏引用的字符串.Sh NAME
mdoc
宏。
例如,源代码一开始的一部分malloc(3)
手动输入/usr/share/man/man3/malloc.3
看起来像这样:
.Dd $Mdocdate: May 19 2019 $
.Dt MALLOC 3
.Os
.Sh NAME
.Nm malloc ,
.Nm calloc ,
.Nm realloc ,
.Nm free ,
.Nm reallocarray ,
.Nm recallocarray ,
.Nm freezero ,
.Nm aligned_alloc ,
.Nm malloc_conceal ,
.Nm calloc_conceal
.Nd memory allocation and deallocation
.Sh SYNOPSIS
该makewhatis
工具将为每个.Nm
值建立索引,并且当用户请求任何列出的函数(例如)的手册时,该man
命令将显示源的渲染版本。malloc.3
man free
与 OpenBSD 基本系统无关的手册(即 下的第 3 方手册/usr/local/man
)也由 解析makewhatis
,但由于这些手册经常使用不是的 roff 标记mdoc
(通常为使用另一个宏包的 Linux 编写),因此它索引其他宏使用的值(.TH
标题宏)。
一些第三方程序似乎为每个单独的工具或功能分发单独的手册,即使这意味着复制手册并只是给它们不同的名称。使用符号和/或硬链接也是一种常见的解决方案。
其他人则聪明一点。这是zzip_fread(3)
(包的一部分)的完整手册源zziplib
:
.so man3/zzip_read.3
即,它包含一个使解析器读取另一个文件的宏。