您如何输出特定部分中所有手册页的列表?

xyz*_*xyz 33 shell man

fork例如, 的手册页位于 System Calls 部分,编号为 2:

man 2 fork

在不求助于 Google 的情况下,您如何看待第 2 部分的其他内容?

Ulr*_*gel 32

要从特定部分列出所有已安装的手册页,您可以使用apropos

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Run Code Online (Sandbox Code Playgroud)


Tho*_*hor 20

联机帮助页通常放在/usr/share/man, 但检查$MANPATH, 并组织成这样的部分:

 Section 1:
 /usr/share/man/man1/

 Section 2:
 /usr/share/man/man2/

 ...
Run Code Online (Sandbox Code Playgroud)

因此,要列出所有已安装的第 2 部分联机帮助页,请执行以下操作:

ls /usr/share/man/man2/
Run Code Online (Sandbox Code Playgroud)

或者更完整的一个:

find $(echo $MANPATH | tr ':' ' ') -path '*/man2/*'
Run Code Online (Sandbox Code Playgroud)

如果您的目录$MANPATH名称中有空格,则后一个会出现问题。

在大多数发行版上,您还可以使用软件包工具检查可用的手册页,例如在 Debian 派生发行版上,您可以apt-file像这样使用:

apt-file search /man2/
Run Code Online (Sandbox Code Playgroud)


Chr*_*age 5

此命令列出给定部分中所有条目的排序名称:

man -aWS 1 \* | xargs basename | sed 's/\.[^.]*$//' | sort -u
Run Code Online (Sandbox Code Playgroud)

如果要查看路径名,请使用:

man -aWS 1 \* | sed 's/\.[^.]*$//' | sort
Run Code Online (Sandbox Code Playgroud)

这告诉man使用通配符模式搜索所有命令的部分*(反斜杠引用,因此 shell 不会解释它)。-a查找所有匹配项,-W打印路径名而不是显示页面,并-S 1指定第一部分。将 更改为1您要搜索的任何部分。

sed命令去除文件扩展名;如果您想查看完整的文件名,请将其删除。sort对结果进行排序(-u删除重复项)。

为了方便重用,这里定义了一个 Bash shell 函数:

function mansect { man -aWS ${1?man section not provided} \* | xargs basename | sed 's/\.[^.]*$//' | sort -u; }
Run Code Online (Sandbox Code Playgroud)

例如,您可以调用它mansect 3来查看第三部分中的条目。

[在 macOS 上测试。]

  • 我得到“没有 * 的手动输入” (2认同)