一部のマニュアルページは1ページに複数のコマンド/機能を文書化し、manコマンドは通常、各コマンド/機能の正しいマニュアルページを提供します。
例: 多くのシステムの malloc/free/calloc/realloc のマニュアルページ
人々はそのような照会にどのようなメカニズムを使用しますか?
これまで私が出会ったのは次のとおりです。
- 下のシンボリックリンク
/usr/share/man/manX
.so manX/foo
ソースディレクティブのみを含むAliasのマニュアルページ
もちろん、マンページのハードリンクとコピーも思い浮かびます。
manコマンドは他のメカニズムをサポートしていますか?
たとえば、このカテゴリ名を定義する中央インデックスファイルはありますか?
答え1
OpenBSDでは、各man
ディレクトリ(/usr/share/man
基本システムに関連するマニュアルなど)にmandoc.db
毎週実行されるクローンジョブで作成されたデータベースmakewhatis
。
これらのデータベースは、特定の文字列のさまざまな手動ソース(roffソースファイル)を解析して作成され、次のように生成されます。man
便利です。インデックスの内容の1つは、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ベースシステムに関連しないマニュアル(例:以下のサードパーティのマニュアル/usr/local/man
)も解析されますが、makewhatis
これらのマニュアルはroffタグを使用しないことが多いためmdoc
(通常は他のマクロパッケージを使用してLinux用に書かれています)マクロ値で使用されるタグをインデックス化します(.TH
タイトルマクロ)。
一部のサードパーティプログラムは、ドキュメントを複製して別の名前を付けた場合でも、個々のツールまたは機能用に別々のドキュメントを展開するようです。シンボルおよび/またはハードリンクを使用することも一般的なソリューションです。
他の人は少しスマートです。zzip_fread(3)
完全なマニュアルソース(パッケージの一部)は次のとおりですzziplib
。
.so man3/zzip_read.3
つまり、パーサーに別のファイルを読み取るマクロが含まれます。