标签 MAN 下的文章

我遇到 “找不到 man 命令” 错误的小插曲,以及我是如何解决的。

多年后,我再次尝试 Arch Linux。我忘记了 pacman 命令的用法,所以我尝试访问它的手册页。

接下来发生的事情让我震惊(是的!我一直在阅读 BuzzFeed ?)。它向我展示了这个错误:

bash: man: command not found

当然,这不仅是 pacman,所有命令都是这样。

这让我感到困惑,因为我以前从未遇到过无法使用 man 命令的情况。

如果你发现自己处于找不到 man 命令的类似情况,我向你保证,修复很简单:

  • 安装 man-db 包(安装手册页)
  • 更新 mandb 缓存(用于索引所有命令的手册页)

让我们更详细地看看。

在 Linux 中安装手册页

我从未想过我必须明确安装手册页。但是 Arch Linux 将你带入未知领域。这在某种程度上是件好事,因为你会发现以前从未遇到过的事情。

这里的关键是安装手册页的包名为 man-db。这对我来说也是一个发现。

你可以使用发行版的包管理器来安装它。

对于 Arch 和 Manjaro,使用:

sudo pacman -S man-db

对于 Ubuntu 和 Debian,请使用:

sudo apt install man-db

对于 Fedora,请使用:

sudo dnf install man-db

对于 Red Hat Linux,请使用:

sudo yum install man-db

你明白了要点。为手册页构建缓存也是明智的一步。

构建手册页缓存

要刷新或构建手册页缓存,请运行 mandb 命令

sudo mandb

它将在不同位置查找手册页并构建缓存,以便你可以快速访问手册页。

完成后,我就可以像往常一样使用 man 命令。

结论

这确实让我感到震惊,因为我一直认为手册页是 Linux 的核心部分。从未想过我必须安装它们。

我应该将其添加到 安装 Arch Linux 后要做的事情列表 吗?我还没有把握。

也许我是在 Arch 中遇到这个缺少 man 命令问题的极少数用户之一。也许不是。如果你遇到过这样的“意外错误”,请在评论中告诉我。

(题图:MJ/a582366a-ee9d-4583-9025-eed6a4e96108)


via: https://itsfoss.com/man-command-not-found/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

手册页 man pages ,即 参考手册页 reference manual pages 的简称,是你进入 Linux 的钥匙。你想知道的一切都在那里,包罗万象。这套文档永远不会赢得普利策奖,但这套文档是相当准确和完整的。手册页是主要信源,其权威性是众所周知的。

虽然它们是源头,但阅读起来并不是最令人愉快的。有一次,在很久以前的哲学课上,有人告诉我,阅读 亚里士多德 是最无聊的阅读。我不同意:说到枯燥的阅读,亚里士多德远远地排在第二位,仅次于手册页。

乍一看,这些页面可能看起来并不完整,但是,不管你信不信,手册页并不是为了隐藏信息 —— 只是因为信息量太大,这些页面必须要有结构,而且信息是以尽可能简短的形式给出的。这些解释相当简略,需要一些时间来适应,但一旦你掌握了使用它们的技巧,你就会发现它们实际上是多么有用。

Linux 中的手册页入门

这些页面是通过一个叫做 man 的工具查看的,使用它的命令相当简单。在最简单的情况下,要使用 man,你要在命令行上输入 man,后面加一个空格和你想查询的命令,比如 lscp,像这样:

man ls

man 会打开 ls 命令的手册页。

你可以用方向键上下移动,按 q 退出查看手册页。通常情况下,手册页是用 less 打开的,所以 less 命令的键盘快捷键在 man 中也可以使用。

例如,你可以用 /search_term 来搜索一个特定的文本,等等。

有一个关于手册页的介绍,这是一篇值得阅读介绍。它非常详细地说明了手册页是如何布局和组织的。

要看这个页面,请打开一个终端,然后输入:

man man

man page of man

在你开始更深入地研究手册页之前,知道手册页有一个固定的页面布局和一个归档方案会有帮助。这可能会让新手感到困惑,因为我可以说:“看手册页中关于 ls 的 NAME section ”,我也可以说:“看第 5 section 中的 passwd 的手册页。”

我把 “ section ” 这个词用斜体字表示,是为了显示混淆的来源。这个词,“节” 被用于两种不同的方式,但并不总是向新人解释其中的区别。

我不确定为什么会出现这种混淆,但我在培训新用户和初级系统管理员时看到过几次这种混淆。我认为这可能是隧道视野,专注于一件事会使一个人忘记另一件事。一叶障目,不见泰山。

对于那些已经知道其中的区别的人,你可以跳过这一小节。这一部分是针对那些刚接触到手册页的人。

这就是区别:

对于手册页

单独的手册页是用来显示信息块的。例如,每个手册页都有一个“NAME”节,显示命令的名称和简短的描述。还会有另一个信息块,称为“SYNOPSIS”,显示该命令是如何使用的,以此类推。

每个手册页都会有这些,以及其他的标题。这些在各个手册页上的节,或者说标题,有助于保持事情的一致性和信息的分工。

对于手册

使用“节”,如 “查看第 5 节中的 passwd 的手册页”,是指整个手册的内容。当我们只看一页时,很容易忽略这一点,但是 passwd 手册页是同一本手册的一部分,该手册还有 lsrmdatecal 等的手册页。

整个 Linux 手册是巨大的;它有成千上万的手册页。其中一些手册页有专门的信息。有些手册页有程序员需要的信息,有些手册页有网络方面的独特信息,还有一些是系统管理员会感兴趣的。

这些手册页根据其独特的目的被分组。想想看,把整个手册分成几个章节 —— 每章有一个特定的主题。有 9 个左右的章节(非常大的章节)。碰巧的是,这些章节被称为“节”。

总结一下:

  • 手册中单页(我们称之为“手册页”)的节是由标题定义的信息块。
  • 这个大的手册(所有页面的集合)中的章节,刚好被称为“节”。

现在你知道区别了,希望本文的其余部分会更容易理解。

手册页的节

你将会看到不同的手册页,所以让我们先研究一下各个页面的布局。

手册页被分成几个标题,它们可能因提供者不同而不同,但会有相似之处。一般的分类如下:

  • NAME(名称)
  • SYNOPSIS(概要)
  • DESCRIPTION(描述)
  • EXAMPLES(例子)
  • DIAGNOSTICS(诊断)
  • FILES(文件)
  • LIMITS(限制)
  • PORTABILITY(可移植性)
  • SEE ALSO(另见)
  • HISTORY(历史)
  • WARNING(警告)或BUGS`(错误)
  • NOTES(注意事项)

NAME - 在这个标题下是命令的名称和命令的简要描述。

SYNOPSIS - 显示该命令的使用方法。例如,这里是 cal 命令的概要:

cal [Month] [Year]

概要以命令的名称开始,后面是选项列表。概要采用命令行的一般形式;它显示了你可以输入的内容和参数的顺序。方括号中的参数([])是可选的;你可以不输入这些参数,命令仍然可以正常工作。不在括号内的项目必须使用。

请注意,方括号只是为了便于阅读。当你输入命令时,不应该输入它们。

DESCRIPTION - 描述该命令或工具的作用以及如何使用它。这一节通常以对概要的解释开始,并说明如果你省略任何一个可选参数会发生什么。对于长的或复杂的命令,这一节可能会被细分。

EXAMPLES - 一些手册页提供了如何使用命令或工具的例子。如果有这一节,手册页会尝试给出一些简单的使用例子,以及更复杂的例子来说明如何完成复杂的任务。

DIAGNOSTICS - 本节列出了由命令或工具返回的状态或错误信息。通常不显示不言自明的错误和状态信息。通常会列出可能难以理解的信息。

FILES - 本节包含了 UNIX 用来运行这个特定命令的补充文件的列表。这里,“补充文件”是指没有在命令行中指定的文件。例如,如果你在看 passwd 命令的手册,你可能会发现 /etc/passwd 列在这一节中,因为 UNIX 是在这里存储密码信息。

LIMITS - 本节描述了一个工具的限制。操作系统和硬件的限制通常不会被列出,因为它们不在工具的控制范围内。

PORTABILITY - 列出其他可以使用该工具的系统,以及该工具的其他版本可能有什么不同。

SEE ALSO - 列出包含相关信息的相关手册页。

HISTORY - 提供命令的简要历史,如它第一次出现的时间。

WARNING - 如果有这个部分,它包含了对用户的重要建议。

NOTES - 不像警告那样严重,但也是重要的信息。

同样,并不是所有的手册都使用上面列出的确切标题,但它们足够接近,可以遵循。

手册的节

整个 Linux 手册集合的手册页传统上被划分为有编号的节:

第 1 节:Shell 命令和应用程序 第 2 节:基本内核服务 - 系统调用和错误代码 第 3 节:为程序员提供的库信息 第 4 节:网络服务 - 如果安装了 TCP/IP 或 NFS 设备驱动和网络协议 第 5 节:文件格式 - 例如:显示 tar 存档的样子 第 6 节:游戏 第 7 节:杂项文件和文档 第 8 节:系统管理和维护命令 第 9 节:不知名的内核规格和接口

将手册页分成这些组,可以使搜索更有效率。在我工作的地方,我有时会做一些编程工作,所以我花了一点时间看第 3 节的手册页。我也做一些网络方面的工作,所以我也知道要涉足网络部分。作为几个实验性机器的系统管理员,我在第 8 节花了很多时间。

将手册网归入特定的节(章节),使搜索信息更加容易 —— 无论是对需要搜索的人,还是对进行搜索的机器。

你可以通过名称旁边的数字来判断哪个手册页属于哪个部分。例如,如果你正在看 ls 的手册页,而页面的最上面写着。 LS(1),那么你正在浏览第 1 节中的 ls 页面,该节包含关于 shell 命令和应用程序的页面。

下面是另一个例子。如果你在看 passwd 的手册页,页面的顶部显示: PASSWD(1),说明你正在阅读第 1 节中描述 passwd 命令如何更改用户账户密码的手册页。如果你看到 PASSWD(5),那么你正在阅读关于密码文件和它是如何组成的的手册页。

passwd 恰好是两个不同的东西:一个是命令的名称,一个是文件的名称。同样,第 1 节描述了命令,而第 5 节涉及文件格式。

括号中的数字是重要的线索 —— 这个数字告诉你正在阅读的页面来自哪一节。

搜索一个特定的节

基本命令:

man -a name

将在每一节中搜索由 name 标识的手册页,按数字顺序逐一显示。要把搜索限制在一个特定的部分,请在 man 命令中使用一个参数,像这样:

man 1 name

这个命令将只在手册页的第 1 节中搜索 name。使用我们前面的 passwd 例子,这意味着我们可以保持搜索的针对性。如果我想阅读 passwd 命令的手册页,我可以在终端输入以下内容:

man 1 passwd

man 工具将只在第 1 节中搜索 passwd 并显示它。它不会在任何其他节中寻找 passwd

这个命令的另一种方法是输入: man passwd.1

使用 man -k 来搜索包含某个关键词的所有手册页

如果你想获得包含某个关键词的手册页的列表,man 命令中的 -k 选项(通常称为标志或开关)可以派上用场。例如,如果你想看一个关于 ftp 的手册列表,你可以通过输入以下内容得到这个列表:

man -k ftp

在接下来的列表中,你可以选择一个特定的手册页来阅读:

man k example

在某些系统上,在 man -k 工作之前,系统管理员需要运行一个叫做 catman 的工具。

使用 whatis 和 whereis 命令来了解手册的各个节

有两个有趣的工具可以帮助你搜索信息:whatiswhereis

whatis

有的时候,我们完全可以得到我们需要的信息。我们需要的信息有很大的机会是可以找到的 —— 找到它可能是一个小问题。

例如,如果我想看关于 passwd 文件的手册页,我在终端上输入:

man passwd

我就会看到关于 passwd 命令所有信息的手册页,但没有关于 passwd 文件的内容。我知道 passwd 是一个命令,也有一个 passwd 文件,但有时,我可能会忘记这一点。这时我才意识到,文件结构在手册页中的不同节,所以我输入了:

man 4 passwd

我得到这样的答复:

No manual entry for passwd in section 4
See 'man 7 undocumented' for help when manual pages are not available.

又是一次健忘的失误。文件结构在 System V UNIX 页面的第 4 节中。几年前,当我建立文件时,我经常使用 man 4 ...;这仍然是我的一个习惯。那么它在 Linux 手册中的什么地方呢?

现在是时候调用 whatis 来纠正我了。为了做到这一点,我在我的终端中输入以下内容:

whatis passwd

然后我看到以下内容:

passwd (1)           - change user password
passwd (1ssl)        - compute password hashes
passwd (5)           - the password file

啊!passwd 文件的页面在第 5 节。现在没问题了,可以访问我想要的信息了:

man 5 passwd

然后我被带到了有我需要的信息的手册页。

whatis 是一个方便的工具,可以用简短的一句话告诉你一个命令的作用。想象一下,你想知道 cal 是做什么的,而不想查看手册页。只要在命令提示符下键入以下内容。

whatis cal

你会看到这样的回应:

cal (1)              - displays a calendar and the date of Easter

现在你知道了 whatis 命令,我可以告诉你一个秘密 —— 有一个 man 命令的等价物。为了得到这个,我们使用 -f 开关:man -f ...

试试吧。在终端提示下输入 whatis cal。执行后就输入:man -f cal。两个命令的输出将是相同的:

whatis cal and man f cal outputs are the same

whereis

whereis 命令的名字就说明了这一点 —— 它告诉你一个程序在文件系统中的位置。它也会告诉你手册页的存放位置。再以 cal 为例,我在提示符下输入以下内容:

whereis cal

我将看到这个:

whereis cal output

仔细看一下这个回答。答案只在一行里,但它告诉我两件事:

  • /usr/bin/calcal 程序所在的地方,以及
  • /usr/share/man/man1/cal.1.gz 是手册页所在的地方(我也知道手册页是被压缩的,但不用担心 —— man 命令知道如何即时解压)。

whereis 依赖于 PATH 环境变量;它只能告诉你文件在哪里,如果它们在你的 PATH 环境变量中。

你可能想知道是否有一个与 whereis 相当的 man 命令。没有一个命令可以告诉你可执行文件的位置,但有一个开关可以告诉你手册页的位置。在这个例子中使用 date 命令,如果我们输入:

whereis date

在终端提示符下,我们会看到:

whereis date output

我们看到 date 程序在 /usr/bin/ 目录下,其手册页的名称和位置是:/usr/share/man/man1/date.1.gz

我们可以让 manwhereis 一样行事,最接近的方法是使用 -w 开关。我们不会得到程序的位置,但我们至少可以得到手册页的位置,像这样:

man -w date

我们将看到这样的返回:

你知道了 whatiswhereis,以及让 man 命令做同样(或接近)事情的方法。我展示了这两种方法,有几个不同的原因。

多年来,我使用 whatiswhereis,因为它们在我的培训手册中。直到最近我才了解到 man -f ...man -w ...。我确信我看了几百次 man 的手册页,但我从未注意到 -f-w 开关。我总是在看手册页的其他东西(例如:man -k ...)。我只专注于我需要找到的东西,而忽略了其他的东西。一旦我找到了我需要的信息,我就会离开这个页面,去完成工作,而不去注意这个命令所提供的其他一些宝贝。

这没关系,因为这部分就是手册页的作用:帮助你完成工作。

直到最近我向别人展示如何使用手册页时,我才花时间去阅读 —— “看看还有什么可能” —— 我们才真正注意到关于 man 命令的 -f-w 标记可以做什么的信息。

不管你使用 Linux 多久了,或者多么有经验,总有一些新东西需要学习。

手册页会告诉你在完成某项任务时可能需要知道的东西 —— 但它们也有很多内容 —— 足以让你看起来像个魔术师,但前提是你要花时间去读。

结论

如果你花一些时间和精力在手册页上,你将会取得胜利。你对手册页的熟练程度,将在你掌握 Linux 的过程中发挥巨大作用。


via: https://itsfoss.com/linux-man-page-guide/

作者:Bill Dyer 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 系统上的手册页可以做的不仅仅是提供特定命令的信息。它们可以帮助你发现你没有意识到的命令。

手册页提供了关于 Linux 命令的基本信息,很多用户经常参考它,但手册页的内容比我们很多人意识到的要多得多。

你总是可以输入一个像 man who 这样的命令,然后得到 who 命令的工作原理的漂亮描述,但是探索你可能不知道的命令可能会更有启发。例如,你可以使用 man 命令来帮助找到一些处理非常具有挑战性的任务的命令,或者显示一些选项,这些选项可以帮助你以新的更好的方式使用你已经知道的命令。

让我们来浏览一些选项,看看最终的结果是什么。

用 man 去识别命令

man 命令可以帮助你按主题查找命令。例如,如果你要找一个计算文件中的行数的命令,你可以提供一个关键字。在下面的例子中,我们把关键字 “count” 放在了引号中,并添加了空格,这样我们就不会得到与 “accounts” 或 “accounting” 相关的命令,而是得到那些可以为我们做一些计算的命令。

$ man -k ' count '
anvil (8postfix)     - Postfix session count and request rate control
cksum (1)            - checksum and count the bytes in a file
sum (1)              - checksum and count the blocks in a file
timer_getoverrun (2) - get overrun count for a POSIX per-process timer

为了显示与新用户账户相关的命令,我们可以尝试使用这样的命令。

$ man -k "new user"
newusers (8)         - update and create new users in batch
useradd (8)          - create a new user or update default new user information
zshroadmap (1)       - informal introduction to the zsh manual The Zsh Manual, …

需要说明的是,上面的第三项只是提到 “new users” 类似的内容,并不是设置、删除或配置用户账号的命令。man 命令只是在命令描述中匹配了一些词,作用很像 apropos 命令。注意上面列出的每个命令后面的括号中的数字。这些数字与包含这些命令的手册页的分区有关。

确定手册页的分区

man 命令的分区将其内容划分为不同的类别。要列出这些类别,请键入 man man,并查看类似下面的描述。你的系统中很可能没有第 9 分区的命令。

  • 1:可执行程序或 shell 命令
  • 2:系统调用(内核提供的函数)
  • 3:库调用(程序库内的函数)
  • 4:特殊文件(通常在可以 /dev 中找到)
  • 5:文件格式和惯例,例如 /etc/passwd
  • 6:游戏
  • 7:杂项(包括宏包和约定),例如 man(7)、groff(7)
  • 8:系统管理命令(通常只由 root 用户使用)
  • 9:内核例程(非标准)

手册页涵盖了比我们通常认为的“命令”更多的内容。从上面的描述中可以看到,它们涵盖了系统调用、库调用、特殊文件等等。

下面的列表显示了 Linux 系统中的手册页的实际存储位置。这些目录上的日期会有所不同,因为随着更新,其中一些分区会有新的内容,而另一些则不会。

$ ls -ld /usr/share/man/man?
drwxr-xr-x 2 root root  98304 Feb  5 16:27 /usr/share/man/man1
drwxr-xr-x 2 root root  65536 Oct 23 17:39 /usr/share/man/man2
drwxr-xr-x 2 root root 270336 Nov 15 06:28 /usr/share/man/man3
drwxr-xr-x 2 root root   4096 Feb  4 10:16 /usr/share/man/man4
drwxr-xr-x 2 root root  28672 Feb  5 16:25 /usr/share/man/man5
drwxr-xr-x 2 root root   4096 Oct 23 17:40 /usr/share/man/man6
drwxr-xr-x 2 root root  20480 Feb  5 16:25 /usr/share/man/man7
drwxr-xr-x 2 root root  57344 Feb  5 16:25 /usr/share/man/man8

注意,为了节省空间,手册页文件一般都是 gzip 压缩的。每当你使用 man 命令时,man 命令会根据需要解压。

$ ls -l /usr/share/man/man1 | head -10
total 12632
lrwxrwxrwx 1 root root      9 Sep  5 06:38 [.1.gz -> test.1.gz
-rw-r--r-- 1 root root    563 Nov  7 05:07 2to3-2.7.1.gz
-rw-r--r-- 1 root root    592 Apr 23  2016 411toppm.1.gz
-rw-r--r-- 1 root root   2866 Aug 14 10:36 a2query.1.gz
-rw-r--r-- 1 root root   2361 Sep  9 15:13 aa-enabled.1.gz
-rw-r--r-- 1 root root   2675 Sep  9 15:13 aa-exec.1.gz
-rw-r--r-- 1 root root   1142 Apr  3  2018 aaflip.1.gz
-rw-r--r-- 1 root root   3847 Aug 14 10:36 ab.1.gz
-rw-r--r-- 1 root root   2378 Aug 23  2018 ac.1.gz

按分区列出的手册页

即使只看第 1 分区的前 10 个手册页(如上所示),你也可能会看到一些新的命令 —— 也许是 a2queryaaflip(如上所示)。

探索命令的更好策略是按分区列出命令,不查看文件本身,而是使用 man 命令向你显示命令并提供每个命令的简要说明。

在下面的命令中,-s 1 指示 man 显示第 1 分区中的命令信息。-k . 使该命令对所有命令都有效,而不是指定一个特定的关键字;如果没有这个,man 命令就会回过头来问:“你想要什么手册页?”所以,使用关键字来选择一组相关的命令,或者使用点来显示一个分区中的所有命令。

$ man -s 1 -k .
2to3-2.7 (1)         - Python2 to Python3 converter
411toppm (1)         - convert Sony Mavica .411 image to ppm
as (1)               - the portable GNU assembler.
baobab (1)           - A graphical tool to analyze disk usage
busybox (1)          - The Swiss Army Knife of Embedded Linux
cmatrix (1)          - simulates the display from "The Matrix"
expect_dislocate (1) - disconnect and reconnect processes
red (1)              - line-oriented text editor
enchant (1)          - a spellchecker
…

有多少手册页?

如果你对每个分区中有多少手册页感到好奇,可以使用以下命令按分区对它们进行计数:

$ for num in {1..8}
> do
>   man -s $num -k . | wc -l
> done
2382
493
2935
53
441
11
245
919

确切的数量可能有所不同,但是大多数 Linux 系统的命令数量差不多。如果我们使用命令将这些数字加在一起,我们可以看到运行该命令的系统上有将近 7500 个手册页。有很多命令,系统调用等。

$ for num in {1..8}
> do
>     num=`man -s $num -k . | wc -l`
>     tot=`expr $num + $tot`
>     echo $tot
> done
2382
2875
5810
5863
6304
6315
6560
7479            <=== total

阅读手册页可以学到很多东西,但是以其他方式浏览手册页可以帮助你了解系统上可能不知道的命令。


via: https://www.networkworld.com/article/3519853/navigating-man-pages-in-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

我一般都很喜欢无所事事,但有时候太无聊了也不行 —— 2015 年的一个星期天下午就是这样,我决定开始写一个开源项目来让我不那么无聊。

在我寻求创意时,我偶然发现了一个请求,要求构建一个由 Mathias Bynens 提出的“按 Web 标准构建的 Man 手册页查看器”。没有考虑太多,我开始使用 JavaScript 编写一个手册页解析器,经过大量的反复思考,最终做出了一个 Jroff

那时候,我非常熟悉手册页这个概念,而且使用过很多次,但我知道的仅止于此,我不知道它们是如何生成的,或者是否有一个标准。在经过两年后,我有了一些关于此事的想法。

man 手册页是如何写的

当时令我感到惊讶的第一件事是,手册页的核心只是存储在系统某处的纯文本文件(你可以使用 manpath 命令检查这些目录)。

此文件中不仅包含文档,还包含使用了 20 世纪 70 年代名为 troff 的排版系统的格式化信息。

troff 及其 GNU 实现 groff 是处理文档的文本描述以生成适合打印的排版版本的程序。它更像是“你所描述的即你得到的”,而不是你所见即所得的。

如果你对排版格式毫不熟悉,可以将它们视为 steroids 期刊用的 Markdown,但其灵活性带来的就是更复杂的语法:

groff-compressor

groff 文件可以手工编写,也可以使用许多不同的工具从其他格式生成,如 Markdown、Latex、HTML 等。

为什么 groff 和 man 手册页绑在一起是有历史原因的,其格式随时间有变化,它的血统由一系列类似命名的程序组成:RUNOFF > roff > nroff > troff > groff。

但这并不一定意味着 groff 与手册页有多紧密的关系,它是一种通用格式,已被用于书籍,甚至用于照相排版

此外,值得注意的是 groff 也可以调用后处理器将其中间输出结果转换为最终格式,这对于终端显示来说不一定是 ascii !一些支持的格式是:TeX DVI、HTML、Canon、HP LaserJet4 兼容格式、PostScript、utf8 等等。

该格式的其他很酷的功能是它的可扩展性,你可以编写宏来增强其基本功能。

鉴于 *nix 系统的悠久历史,有几个可以根据你想要生成的输出而将特定功能组合在一起的宏包,例如 manmdocmommsmm 等等。

手册页通常使用 manmdoc 宏包编写。

区分原生的 groff 命令和宏的方式是通过标准 groff 包大写其宏名称。对于 man 宏包,每个宏的名称都是大写的,如 .PP.TH.SH 等。对于 mdoc 宏包,只有第一个字母是大写的: .Pp.Dt.Sh

groff-example

挑战

无论你是考虑编写自己的 groff 解析器,还是只是好奇,这些都是我发现的一些更具挑战性的问题。

上下文敏感的语法

表面上,groff 的语法是上下文无关的,遗憾的是,因为宏描述的是主体不透明的令牌,所以包中的宏集合本身可能不会实现上下文无关的语法。

这导致我在那时做不出来一个解析器生成器(不管好坏)。

嵌套的宏

mdoc 宏包中的大多数宏都是可调用的,这差不多意味着宏可以用作其他宏的参数,例如,你看看这个:

  • Fl(Flag)会在其参数中添加破折号,因此 Fl s 会生成 -s
  • Ar(Argument)提供了定义参数的工具
  • Op(Optional)会将其参数括在括号中,因为这是将某些东西定义为可选的标准习惯用法
  • 以下组合 .Op Fl s Ar file 将生成 [-s file],因为 Op 宏可以嵌套。

缺乏适合初学者的资源

让我感到困惑的是缺乏一个规范的、定义明确的、清晰的来源,网上有很多信息,这些信息对读者来说很重要,需要时间来掌握。

有趣的宏

总结一下,我会向你提供一个非常简短的宏列表,我在开发 jroff 时发现它很有趣:

man 宏包:

  • .TH:用 man 宏包编写手册页时,你的第一个不是注释的行必须是这个宏,它接受五个参数:titlesectiondatesourcemanual
  • .BI:粗体加斜体(特别适用于函数格式)
  • .BR:粗体加正体(特别适用于参考其他手册页)

mdoc 宏包:

  • .Dd.Dt.Os:类似于 man 宏包需要 .THmdoc 宏也需要这三个宏,需要按特定顺序使用。它们的缩写分别代表:文档日期、文档标题和操作系统。
  • .Bl.It.El:这三个宏用于创建列表,它们的名称不言自明:开始列表、项目和结束列表。

via: https://monades.roperzh.com/memories-writing-parser-man-pages/

作者:Roberto Dip 译者:wxy 校对:wxy 选题:lujun9972

本文由 LCTT 原创编译,Linux中国 荣誉推出

现在上网已经很方便了,但技术上会有限制。看到技术的发展,我很惊讶,但与此同时,各种地方也都会出现衰退。

当你搜索有关其他 Linux 发行版的某些东西时,大多数时候你会得到的是一个第三方的链接,但是对于 Arch Linux 来说,每次你都会得到 Arch Wiki 页面的结果。

因为 Arch Wiki 提供了除第三方网站以外的大多数解决方案。

到目前为止,你也许可以使用 Web 浏览器为你的 Arch Linux 系统找到一个解决方案,但现在你可以不用这么做了。

一个名为 arch-wiki-man 的工具提供了一个在命令行中更快地执行这个操作的方案。如果你是一个 Arch Linux 爱好者,我建议你阅读 Arch Linux 安装后指南,它可以帮助你调整你的系统以供日常使用。

arch-wiki-man 是什么?

arch-wiki-man 工具允许用户从命令行(CLI)中离线搜索 Arch Wiki 页面。它允许用户以 Linux Man 手册样式访问和搜索整个 Wiki 页面。

而且,你无需切换到 GUI。更新将每两天自动推送一次,因此,你的 Arch Wiki 本地副本页面将是最新的。这个工具的名字是 awmanawman 是 “Arch Wiki Man” 的缩写。

我们之前写过一篇类似工具 Arch Wiki 命令行实用程序(arch-wiki-cli)的文章。这个工具允许用户从互联网上搜索 Arch Wiki。但你需要在线使用这个实用程序。

如何安装 arch-wiki-man 工具?

arch-wiki-man 工具可以在 AUR 仓库(LCTT 译注:AUR 即 Arch 用户软件仓库 Arch User Repository )中获得,因此,我们需要使用 AUR 工具来安装它。有许多 AUR 工具可用,而且我们曾写了一篇关于流行的 AUR 辅助工具: Yaourt AUR helperPacker AUR helper 的文章。

$ yaourt -S arch-wiki-man

$ packer -S arch-wiki-man

或者,我们可以使用 npm 包管理器来安装它,确保你已经在你的系统上安装了 NodeJS。然后运行以下命令来安装它。

$ npm install -g arch-wiki-man

如何更新 Arch Wiki 本地副本?

正如前面更新的那样,更新每两天自动推送一次,也可以通过运行以下命令来完成更新。

$ sudo awman-update
[sudo] password for daygeek:
[email protected] /usr/lib/node_modules/arch-wiki-man
└── [email protected]

arch-wiki-md-repo has been successfully updated or reinstalled.

awman-update 是一种更快、更方便的更新方法。但是,你也可以通过运行以下命令重新安装 arch-wiki-man 来获取更新。

$ yaourt -S arch-wiki-man

$ packer -S arch-wiki-man

如何在终端中使用 Arch Wiki ?

它有着简易的接口且易于使用。想要搜索,只需要运行 awman 加搜索项目。一般语法如下所示。

$ awman Search-Term

如何搜索多个匹配项?

如果希望列出包含 “installation” 字符串的所有结果的标题,运行以下格式的命令,如果输出有多个结果,那么你将会获得一个选择菜单来浏览每个项目。

$ awman installation

详细页面的截屏:

在标题和描述中搜索给定的字符串

-d--desc-search 选项允许用户在标题和描述中搜索给定的字符串。

$ awman -d mirrors

$ awman --desc-search mirrors
? Select an article: (Use arrow keys)
❯ [1/3] Mirrors: Related articles
  [2/3] DeveloperWiki-NewMirrors: Contents
  [3/3] Powerpill: Powerpill is a pac

在内容中搜索给定的字符串

-k--apropos 选项也允许用户在内容中搜索给定的字符串。但须注意,此选项会显著降低搜索速度,因为此选项会扫描整个 Wiki 页面的内容。

$ awman -k openjdk

$ awman --apropos openjdk
? Select an article: (Use arrow keys)
❯ [1/26] Hadoop: Related articles
 [2/26] XDG Base Directory support: Related articles
 [3/26] Steam-Game-specific troubleshooting: See Steam/Troubleshooting first.
 [4/26] Android: Related articles
 [5/26] Elasticsearch: Elasticsearch is a search engine based on Lucene. It provides a distributed, mul..
 [6/26] LibreOffice: Related articles
 [7/26] Browser plugins: Related articles
(Move up and down to reveal more choices)

在浏览器中打开搜索结果

-w--web 选项允许用户在 Web 浏览器中打开搜索结果。

$ awman -w AUR helper

$ awman --web AUR helper

以其他语言搜索

想要查看支持的语言列表,请运行以下命令。

$ awman --list-languages
arabic
bulgarian
catalan
chinesesim
chinesetrad
croatian
czech
danish
dutch
english
esperanto
finnish
greek
hebrew
hungarian
indonesian
italian
korean
lithuanian
norwegian
polish
portuguese
russian
serbian
slovak
spanish
swedish
thai
ukrainian

使用你的首选语言运行 awman 命令以查看除英语以外的其他语言的结果。

$ awman -l chinesesim deepin


via: https://www.2daygeek.com/arch-wiki-man-a-tool-to-browse-the-arch-wiki-pages-as-linux-man-page-from-offline/

作者:Prakash Subramanian 选题:lujun9972 译者:Auk7F7 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在终端上使用各种命令执行重要任务是 Linux 桌面体验中不可或缺的一部分。Linux 这个开源操作系统拥有丰富的命令,任何用户都无法全部记住所有这些命令。而使事情变得更复杂的是,每个命令都有自己的一组带来丰富的功能的选项。

为了解决这个问题,人们创建了 手册页 man page ,(手册 —— man 是 manual 的缩写)。首先,它是用英文写成的,包含了大量关于不同命令的深入信息。有时候,当你在寻找命令的基本信息时,它就会显得有点庞杂。为了解决这个问题,人们创建了TLDR 页

什么是 TLDR 页?

TLDR 页的 GitHub 仓库将其描述为简化的、社区驱动的手册页集合。在实际示例的帮助下,努力让使用手册页的体验变得更简单。如果还不知道,TLDR 取自互联网的常见俚语: 太长没读 Too Long Didn’t Read

如果你想比较一下,让我们以 tar 命令为例。 通常,手册页的篇幅会超过 1000 行。tar 是一个归档实用程序,经常与 bzipgzip 等压缩方法结合使用。看一下它的手册页:

tar man page

而另一方面,TLDR 页面让你只是浏览一下命令,看看它是如何工作的。 tar 的 TLDR 页面看起来像这样,并带有一些方便的例子 —— 你可以使用此实用程序完成的最常见任务:

tar tldr page

让我们再举一个例子,向你展示 TLDR 页面为 apt 提供的内容:

tldr-page-of-apt

如上,它向你展示了 TLDR 如何工作并使你的生活更轻松,下面让我们告诉你如何在基于 Linux 的操作系统上安装它。

如何在 Linux 上安装和使用 TLDR 页?

最成熟的 TLDR 客户端是基于 Node.js 的,你可以使用 NPM 包管理器轻松安装它。如果你的系统上没有 Node 和 NPM,请运行以下命令:

sudo apt-get install nodejs
sudo apt-get install npm 

如果你使用的是 Debian、Ubuntu 或 Ubuntu 衍生发行版以外的操作系统,你可以根据自己的情况使用yumdnfpacman包管理器。

现在,通过在终端中运行以下命令,在 Linux 机器上安装 TLDR 客户端:

sudo npm install -g tldr 

一旦安装了此终端实用程序,最好在尝试之前更新其缓存。 为此,请运行以下命令:

tldr  --update 

执行此操作后,就可以阅读任何 Linux 命令的 TLDR 页面了。 为此,只需键入:

tldr  <commandname> 

tldr kill command

你还可以运行其帮助命令,以查看可与 TLDR 一起使用的各种参数,以获取所需输出。 像往常一样,这个帮助页面也附有例子。

TLDR 的 web、Android 和 iOS 版本

你会惊喜地发现 TLDR 页不仅限于你的 Linux 桌面。 相反,它也可以在你的 Web 浏览器中使用,可以从任何计算机访问。

要使用 TLDR Web 版本,请访问 tldr.ostera.io 并执行所需的搜索操作。

或者,你也可以下载 iOSAndroid 应用程序,并随时随地学习新命令。

tldr app ios

你觉得这个很酷的 Linux 终端技巧很有意思吗? 请尝试一下,让我们知道您的反馈。


via: https://fossbytes.com/tldr-pages-linux-man-pages-alternative/

作者:Adarsh Verma 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出