在 *nix 世界中,手册页,也就是手册页,被认为是高级用户的绝对参考。 RTFM 偶尔也有迂腐的做法,粗鲁地强调其重要性。 这 man
命令甚至是 POSIX 规范的一部分——大多数现代 *nix 系统实现的基础。 那么这个概念到底有道理吗?
手册页的优点
- 不需要互联网连接
- 由开发人员/维护人员编写,可提供广泛的信息和准确性
- 是独立的,不需要外部资源
- 始终适用于已安装的应用版本和当前发行版
然而,即使它们可能有用,手册页起初也令人望而生畏。 本文旨在让您更轻松地阅读手册并快速获得所需的帮助。
什么是手册页?
出生于 Unix 时代的 man – 简称 手动的 – 页面是用户文档的主要来源。 它们由软件的开发人员编写并随软件一起提供。
今天,在 Linux 发行版中,当通过包管理器(apt、dnf、pacman 或其他)安装包时,手册会安装到 /usr/share/man
目录。
选择其中一个文件并使用 cat
查看它……有意想不到的效果
$ cat /usr/share/man/man1/man.1.gz
�[ks�F���_��IS$m�Ig&��2��b=V��I�6%�
@�F����߾�>��$e�nmR�C��}��}{n�`�3M2Ŀ�
���X�Ϋ;k�����Tm�0˪άi�i*3�f]�u]eֹ��{��
YZ�uzm�q�JK��7N��C�_�4�����|�U����
... # truncated output
一定是因为文件被压缩了。 我们试试看 zcat
$ zcat /usr/share/man/man1/man.1.gz
'" t
." ** The above line should force tbl to be a preprocessor **
." Man page for man
."
." Copyright (C) 1994, 1995, Graeme W. Wilford. (Wilf.)
." Copyright (C) 2001-2019 Colin Watson.
."
." You may distribute under the terms of the GNU General Public
... # truncated output
好的,这给出了文本。 但它仍然充满了奇怪的语法; 也很长,以至于它填满了整个终端。
让我们从冒险开始,按预期查看手册页 – 使用 man
命令。
$ man man
当使用 man
命令,它仍然会填充终端窗口。 但现在它更容易阅读。 此外,还有很多格式:标题、粗体文本、斜体文本或带下划线的文本。
手册页是如何呈现的?
手册页是使用 roff 语法的后代编写的标记文件,例如 来自 GNU 项目的 groff. 语法是一种排版系统,用于确定手册页的结构和格式。 这类似于网页的语义 HTML。
man
在文件系统中找到原始 roff 文件并对其进行处理以生成适合当前终端的输出。 该处理包括根据终端支持设置页面宽度、文本编码、字体粗细和样式。 然后使用寻呼机显示输出。
这 man
Linux 中的命令是 man-db
套装. 集合中有用于处理各种过程并维护已安装手册的索引的包。
在大多数 BSD 系统中, mandoc
项目 项目改为使用。 它不同于 man-db
在各个方面。 本文的其余部分将仅关注 man-db
及其功能和选项。
这 man
程序
如前所述,要访问手册页,我们使用 man
命令。 最简单的命令调用是 man
后跟您要访问的页面的名称。 所以要访问 ssh 的手册
$ man ssh
的元素 man-db
套件维护系统上安装的所有手册页的共享数据库。 该数据库很可能位于 /var/cache/man/index.db
, 充当手册页的缓存索引。 它还提供了其他工具所需的信息 man-db
. 如果索引中没有名称为 ssh 的页面,则 man 命令搜索定义的目录列表 /etc/manpath.config
或通过环境变量 $MANPATH
.
导航
手册页中的导航完全由正在使用的寻呼机处理。 默认, man
使用 pager
命令。 在大多数现代 Linux 系统中 pager
是less的符号链接。
至 close 随时使用说明书,简单 按q 在你的键盘上。 这将退出寻呼机并返回到 shell。
滚动
在大多数寻呼机中,包括 less
使用滚轮、滚动手势和箭头键滚动页面非常容易。 还支持 Home 和 End。
熟悉 Vim 的用户也可以使用标准的键绑定动作来浏览寻呼机。 按住 j 键向下滚动, k 一次向上滚动一行。 g 和 G 可分别用于页面的开始和结束。
也可以使用键盘一次滚动更多,但这通常会使阅读变得困难。 但如果你愿意,你可以按 h 键调出 less
的所有键绑定的帮助屏幕。
熟悉滚动是使用文档查找信息的第一步。 但即便如此,一行一行地通过它也不是一件容易的事。 这就是寻呼机的搜索功能发挥作用的地方。
搜索
在手册页中查找特定功能或选项的最快方法是搜索该词。 要在手册中启动搜索,请按(正斜杠)/ 键,键入模式(支持正则表达式!)并按 Enter
当您正在寻找一个近似的“主题”时,这很有用。 为了 example,您可以打开手册页 rsync
并搜索这个词 部分的 快速跳转到单词的第一次出现。 然后,您可以按 n 键移至下一个实例,或按 N (shift + n) 键返回上一个实例。 使用 ? 您也可以向后搜索。
默认情况下,模式的大小写(大写或小写)被忽略。 但如果有大写字母,则模式会区分大小写。 这种行为使搜索完全小写的模式变得不可能。 因此,有时启用区分大小写的搜索很有用。 这可以通过按连字符-i 序列 – i 来切换功能来完成。
循环浏览搜索模式的实例并在它们周围上下滚动是获取特定主题信息的好方法。
搜索功能的另一个很好的用途是使用标志。 搜索以空格和模式开头的模式对于跳转到标志很有用。
/^s+--compress
在运行命令之前审核来自 Internet 的命令时,这也很有用。 跳转到标志并验证它的作用。 搜索也可用于快速向下滚动到手册页的特定部分。
手册页的部分
手册通常分为多个部分,由显示的标题指示 大写粗体 文本。 大多数页面中都有一个部分列表。 但常见且重要的是名称、概要、环境和文件。

姓名
此部分包含应用程序(或手册主题)的名称和简短描述。 各种总结。
概要
概要部分是快速入门指南。 对于应用程序,它是对命令行语法的描述。
了解概要部分中用于说明如何使用命令的约定很有用。
command [--optional-flag] [-a -b] [ -c argument ] [-A|-B] filename ...
- 第一个词是命令的名称
- 被包围的参数
[ ]
是可选的 - 标志或选项
|
它们之间不能一起使用 - 后面的参数
...
可以重复 - 没有参数
[ ]
是必须的
有了上面的示例, command /etc/passwd
和 command /etc/passwd /etc/group
是具有所有必需元素的最简单的有效调用。
列出的所有标志都是可选的,但是 -A
不能与 -B
. 只能使用两者之一。
另请注意 -c argument
意思是 争论 是必需的,如果 -c
使用标志。 并且只能将一个参数传递给 -c
.
环境

环境变量对于控制应用程序的行为很有用。 手册页的环境部分列出了影响给定命令的变量及其效果。 还列出了由软件设置以供其他应用程序使用的变量。
您可以在我们的指南中阅读有关使用环境变量的更多信息 export
命令
文件

手册页的文件部分列出并描述了文件系统中与软件相关的路径。 这些路径通常是配置文件的路径。 手册页 bash
列出由 shell 解析的初始化文件。
?搜索图案 ^ENV
或者 ^SYN
无需输入完整单词即可快速滚动到各个部分!
人节
不要将手册中的部分与手册页的不同部分混淆。
基本上,系统上所有可用的手册都归类在编号为 1 到 8 的部分中。并安装到它们各自的文件夹中, man1
– man8
. 正如您在下面的屏幕截图中看到的, ls 命令位于第 1 节中。

有时还存在一些附加部分。 每个部分的最佳描述在手册页中 man
本身。
部分 | 姓名 | 描述 |
---|---|---|
1 | 可执行程序或 shell 命令 | 一般命令。 例如猫、人、ssh、cp |
2 | 系统调用 | 内核提供的函数 |
3 | 库调用 | 程序库中的函数 |
4 | 特殊文件 | 通常在 /dev 中找到 |
5 | 文件格式和约定 | 例如 /etc/passwd |
6 | 游戏 | |
7 | 各种各样的 | 包括宏包和约定,例如 man(7)、groff(7) |
8 | 系统管理命令 | 通常只用于根 |
在大多数情况下,没有必要指定该部分。 man
自动按预定义的顺序浏览所有部分。 但是可以指定部分。
man 5 ssh_config
man rsync.1
man "passwd(5)"
以上都是该命令的有效语法。 最后一个—— passwd(5)
指的是手册页 /etc/passwd
. 另一方面, passwd(1)
会向应用程序更改用户的密码。 在这种情况下,指定部分很有用。
通常,手册会指导用户参考其他相关手册。 这些参考文献写在 name(section number)
格式,可以轻松复制并粘贴到终端中。 但是需要用引号括起来以防止shell解释它们。
使用带有附加选项的 man 命令
虽然最简单的调用 man
是 man name
,也可以使用标志来获得不同的结果。
这 -f
简短描述的标志
man -f name
是一个别名 whatis name
另一个命令可作为 man-db
套房。 whatis 命令打印来自手册页的简短描述 姓名 部分。 描述被提取并缓存在所有共享的数据库中 man-db
公用事业。
$ man -f whatis
whatis (1) - display one-line manual page descriptions
$ whatis whatis
whatis (1) - display one-line manual page descriptions
这 -k
标记以搜索主题
相似地, man -k name
是一个别名 apropos name
. 该命令搜索 姓名 在里面 man-db
描述数据库并打印匹配的那些。 当它搜索每个手册的名称和描述时,此标志对于查找有关某个主题的所有手册很有用。
$ man -k apropos
apropos (1) - search the manual page names and descriptions
$ apropos apropos
apropos (1) - search the manual page names and descriptions
$ man -k password
chage (1) - change user password expiry information
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
... #truncated
查看与 --html
$ man --html
这 --html
flag 可用于生成 html 输出! man
甚至会打开浏览器并显示手册的 html 版本。 请注意,这取决于 $BROWSER
环境变量有效。
中列出了其他 CLI 选项 man(1)
并且可以使用命令查看它们 man man
. ?
替代文件
尽管它的实用性, man
并不总是答案。 有时,只需要查找一个术语的帮助提示即可。
$ command --help | grep -i 'term'
大多数程序都有一个帮助提示,可以使用 --help
旗帜。 然而, man
仍然是获取深入信息的最佳方式。
但 man
不是唯一的答案。 软件文档存在各种相互竞争的标准。 GNU 的 texinfo,在网站或 GitHub 上发布的纯网络文档并不少见。

尽管这一切 man
经受住了时间的考验,一直延续到今天。 它的灵活性和可用性起着重要作用。 信息的深度也有同样重要的作用。 希望这篇文章能够引导您接受它。 下一次,也许您也会在搜索引擎之前访问手册页。
本文由 凯文·塞缪尔.