手册页别名

手册页别名

一些手册页在一页中记录了多个命令/函数,而 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 NAMEmdoc宏。

例如,源代码一开始的一部分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.3man free

与 OpenBSD 基本系统无关的手册(即 下的第 3 方手册/usr/local/man)也由 解析makewhatis,但由于这些手册经常使用不是的 roff 标记mdoc(通常为使用另一个宏包的 Linux 编写),因此它索引其他宏使用的值(.TH标题宏)。

一些第三方程序似乎为每个单独的工具或功能分发单独的手册,即使这意味着复制手册并只是给它们不同的名称。使用符号和/或硬链接也是一种常见的解决方案。

其他人则聪明一点。这是zzip_fread(3)(包的一部分)的完整手册源zziplib

.so man3/zzip_read.3

即,它包含一个使解析器读取另一个文件的宏。

相关内容