充分利用 Linux 中的手册页

在 *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 的命令时,这也很有用。 跳转到标志并验证它的作用。 搜索也可用于快速向下滚动到手册页的特定部分。

手册页的部分

手册通常分为多个部分,由显示的标题指示 大写粗体 文本。 大多数页面中都有一个部分列表。 但常见且重要的是名称、概要、环境和文件。

Linux 中的手册页元素

姓名

此部分包含应用程序(或手册主题)的名称和简短描述。 各种总结。

概要

概要部分是快速入门指南。 对于应用程序,它是对命令行语法的描述。

了解概要部分中用于说明如何使用命令的约定很有用。

command [--optional-flag] [-a -b] [ -c argument ] [-A|-B] filename ...
  • 第一个词是命令的名称
  • 被包围的参数 [ ] 是可选的
  • 标志或选项 | 它们之间不能一起使用
  • 后面的参数 ... 可以重复
  • 没有参数 [ ] 是必须的

有了上面的示例, command /etc/passwdcommand /etc/passwd /etc/group 是具有所有必需元素的最简单的有效调用。

列出的所有标志都是可选的,但是 -A 不能与 -B. 只能使用两者之一。

另请注意 -c argument 意思是 争论 是必需的,如果 -c 使用标志。 并且只能将一个参数传递给 -c.

环境

手册页的 ENVIRONMENT 部分

环境变量对于控制应用程序的行为很有用。 手册页的环境部分列出了影响给定命令的变量及其效果。 还列出了由软件设置以供其他应用程序使用的变量。

您可以在我们的指南中阅读有关使用环境变量的更多信息 export 命令

文件

手册页的 FILES 部分

手册页的文件部分列出并描述了文件系统中与软件相关的路径。 这些路径通常是配置文件的路径。 手册页 bash 列出由 shell 解析的初始化文件。

?搜索图案 ^ENV 或者 ^SYN 无需输入完整单词即可快速滚动到各个部分!

人节

不要将手册中的部分与手册页的不同部分混淆。

基本上,系统上所有可用的手册都归类在编号为 1 到 8 的部分中。并安装到它们各自的文件夹中, man1man8. 正如您在下面的屏幕截图中看到的, ls 命令位于第 1 节中。

man 命令的部分

有时还存在一些附加部分。 每个部分的最佳描述在手册页中 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 命令

虽然最简单的调用 manman 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 上发布的纯网络文档并不少见。

标准如何扩散(参见:A/C 充电器、字符编码、即时消息等) 情况:有 14 个相互竞争的标准。 母球:14?! 荒谬的! 我们需要开发一种涵盖每个人的用例的通用标准。 马尾辫:对!  Soon: 情况:有 15 个相互竞争的标准。图片来源: xkcd

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

本文由 凯文·塞缪尔.