了解 Linux 中的手册页
尽管 Linux 中的手册页非常有用,但一开始可能会让人望而生畏。本文旨在让您更轻松地阅读手册并快速获得所需的帮助。
在 *nix 世界中,手册页(又名手册页)被认为是高级用户的绝对参考。偶尔也有一些迂腐的 RTFM 粗鲁地坚持其重要性。 man 命令甚至是 POSIX 规范的一部分——大多数现代 *nix 系统实现的基础。那么这个想法到底合理吗?
手册页的优点
不需要互联网连接
由开发人员/维护人员编写,提供广泛的信息和准确性
是独立的,不需要外部资源
始终适用于已安装的应用程序版本和当前发行版
然而,即使它们可能有用,手册页一开始也令人畏惧。本文旨在让您更轻松地阅读手册并快速获得所需的帮助。
什么是手册页?
man 诞生于 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 文件并对其进行处理以生成适合当前终端的输出。该处理包括根据终端支持设置页面宽度、文本编码、字体粗细和样式。然后使用寻呼机显示输出。
Linux 中的 man
命令是 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 的符号链接。
要随时关闭手册,只需按键盘上的 q 即可。这将退出寻呼机并返回到 shell。
滚动
在大多数寻呼机(包括 less
)中,使用滚轮、滚动手势和箭头键滚动页面非常容易。还支持 Home 和 End。
熟悉 Vim 的用户还可以使用标准的动作键绑定来浏览寻呼机。按住 j 键可向下滚动,k 键可向上滚动一行。 g和G可分别用于页面的开头和结尾。
也可以使用键盘一次滚动更多内容,但这通常会使阅读变得困难。但如果您愿意,可以按 h 键调出 less
所有按键绑定的帮助屏幕。
熟悉滚动是使用文档查找信息的第一步。但即便如此,逐行浏览它也不是一件容易的事。这就是寻呼机的搜索功能发挥作用的地方。
搜寻中
在手册页中查找特定功能或选项的最快方法是搜索该单词。要在手册中启动搜索,请按(正斜杠)/ 键,输入模式(支持正则表达式!),然后按 Enter
当您正在寻找近似的“主题”时,这非常有用。例如,您可以打开 rsync
的手册页并搜索单词 partial 以快速跳转到该单词的第一次出现。然后,您可以按 n 键移至下一个实例,或按 N (shift + n) 返回上一个实例。使用 ?您也可以向后搜索。
默认情况下,模式的大小写(大写或小写)被忽略。但如果有大写字母,则该模式将区分大小写。此行为使得无法搜索完全小写的模式。因此,有时启用区分大小写的搜索很有用。这可以通过按连字符-i 序列 - i 切换该功能来完成。
循环浏览搜索模式的实例并在它们周围上下滚动是获取特定主题信息的好方法。
搜索功能的另一个很好的用途是使用标志。搜索以空格和模式开头的行的模式对于跳转到标志非常有用。
/^\s+--压缩
在运行命令之前审核来自互联网的命令时,这也很有用。跳转到标志并验证它的作用。搜索还可用于快速向下滚动到手册页的特定部分。
手册页的各个部分
这些手册通常分为多个部分,由以粗体大写文本显示的标题表示。大多数页面中都有一个部分列表。但常见且重要的是名称、概要、环境和文件。
姓名
此部分包含应用程序的名称(或手册主题)和简短说明。各种总结。
概要
摘要部分是快速入门指南。对于应用程序来说,它是命令行语法的描述。
了解概要部分中使用的约定很有用,该部分说明了如何使用命令。
command [--optional-flag] [-a -b] [ -c argument ] [-A|-B] filename ...
第一个单词是命令的名称
[ ]
包围的参数是可选的之间有
|
的标志或选项不能一起使用...
后面的参数可以重复不带
[ ]
的参数是必需的
对于上面的示例,command /etc/passwd
和 command /etc/passwd /etc/group
是具有所有必需元素的最简单的有效调用。
列出的所有标志都是可选的,但 -A
不能与 -B
一起使用。只能使用两者之一。
另请注意,-c argument
表示如果使用 -c
标志,则需要 argument。并且只能将一个参数传递给 -c
。
环境
环境变量对于控制应用程序的行为很有用。手册页的环境部分列出了影响给定命令的变量及其效果。还列出了由软件设置供其他应用程序使用的变量。
您可以在我们的 export
命令指南中了解有关使用环境变量的更多信息
文件
手册页的文件部分列出并描述了文件系统中与软件相关的路径。这些路径通常是配置文件的路径。 bash
的手册页列出了 shell 解析的初始化文件。
^ENV
或 ^SYN
即可快速滚动到各个部分,而无需输入完整单词!男人部分
请勿将手册中的各个部分与手册页的不同部分相混淆。
基本上,系统上可用的所有手册都按编号 1 到 8 的部分进行分类。并安装到各自的文件夹 man1
- man8
中。正如您在下面的屏幕截图中看到的,ls 命令位于第 1 部分。
有时还存在一些附加部分。每个部分的最佳描述位于 man
本身的手册页中。
Section | Name | Description |
---|---|---|
1 | Executable programs or shell commands | general commands. e.g. cat, man, ssh, cp |
2 | System calls | functions provided by the kernel |
3 | Library calls | functions within program libraries |
4 | Special files | usually found in /dev |
5 | File formats and conventions | e.g. /etc/passwd |
6 | Games | |
7 | Miscellaneous | including macro packages and conventions, e.g. man(7), groff(7) |
8 | System administration commands | usually only for root |
在大多数情况下,没有必要指定该部分。 man
按预定义的顺序自动浏览所有部分。但可以指定部分。
man 5 ssh_config
man rsync.1
man "passwd(5)"
以上都是该命令的有效语法。最后一个 - passwd(5)
指的是 /etc/passwd
的手册页。另一方面,passwd(1)
将向应用程序更改用户的密码。在此类情况下,指定该部分很有用。
手册通常会指导用户参考其他相关手册。这些引用以名称(节号)
格式编写,可以轻松复制并粘贴到终端中。但需要用引号括起来以防止 shell 解释它们。
使用带有附加选项的 man 命令
虽然 man
最简单的调用是 man name
,但也可以使用标志来获得不同的结果。
用于简短描述的 -f
标志
man -f name
是 whatis name
的别名,这是 man-db
套件中的另一个命令。 Whatis 命令打印手册页的 NAME 部分的简短描述。描述被提取并缓存在所有 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
描述数据库中搜索 name 并打印匹配的内容。当它搜索每个手册的名称和描述时,该标志对于查找某个主题的所有手册很有用。
$ 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
标志可用于生成 html 输出! man
甚至会打开浏览器并显示 html 版本的手册。请注意,这取决于 $BROWSER
环境变量是否有效。
man(1)
中列出了其他 CLI 选项,可以使用命令 man man
查看它们。 ?
替代文档
尽管它很实用,但 man
并不总是答案。有时,人们只需要 grep 一个术语的帮助提示即可。
$ command --help | grep -i 'term'
大多数程序都有使用 --help
标志访问的帮助提示。然而,man
仍然是获取深入信息的最佳方式。
但 man 并不是唯一的答案。软件文档存在各种相互竞争的标准。 GNU 的 texinfo、在网站或 GitHub 上发布的纯网络文档并不罕见。
尽管如此,man
仍然经受住了时间的考验,并一直延续至今。它的灵活性和可用性发挥着重要作用。信息的深度也起着同样重要的作用。希望本文能够引导您接受它。下次,也许您也会在搜索引擎之前找到手册页。
本文由 Kevin Samuel 贡献。