标签 MAN 下的文章

不久之前,我写了篇关于一个名叫 arch-wiki-cli 的命令行脚本的文章,使用它可以在终端命令行中查看 Arch Linux Wiki。使用这个脚本,你可以很轻松的用你喜欢的文本浏览器查看整个 Arch Wiki 网站。显然,使用这个脚本需要你有网络连接。我今天偶然发现了一个名为 Arch-wiki-man 的程序,与其有着相同的功能。就跟名字说的一样,它可以让你在命令行查看 Arch Wiki,但是无需联网。它可以以手册页的形式为你显示来自 Arch Wiki 的任何文章。它会下载整个 Arch Wiki 到本地,并每两天自动推送一次。因此,你的系统上总能有一份 Arch Wiki 最新的副本。

安装 Arch-wiki-man

Arch-wiki-man 在 AUR 中可用,所以你可以通过类似Yay 的 AUR 帮助程序安装它。

$ yay -S arch-wiki-man

另外,它也可以使用 NPM 安装。首先确保你已经安装了 NoodJS,然后使用以下命令安装它。

$ npm install -g arch-wiki-man

以手册页的形式查看整个 Arch Wiki

Arch-wiki-man 的典型语法如下:

$ awman <search-query>

下面看一些具体的例子:

搜索一个或多个匹配项

只需要下面的命令,就可以搜索 Arch Linux 安装指南

$ awman Installation guide

上面的命令将会从 Arch Wiki 中搜索所有包含 “Installation guide” 的条目。如果对于给出的搜索条目有很多的匹配项,将会展示为一个选择菜单。使用上下方向键或是 Vim 风格的方向键(j/k),移动到你想查看的指南上,点击回车打开。然后就会像下面这样,以手册页的形式展示指南的内容。

awman 指的是 arch wiki man 的首字母组合。

它支持手册页的所有操作,所以你可以像使用手册页一样使用它。按 h 查看帮助选项。

要退出选择菜单而不显示手册页,只需要按 Ctrl+c

输入 q 返回或者/并且退出手册页。

在标题或者概述中搜索匹配项

awman 默认只会在标题中搜索匹配项。但是你也可以指定它同时在标题和概述中搜索匹配项。

$ awman -d vim

或者,

$ awman --desc-search vim

在目录中搜索匹配项

不同于在标题和概述中搜索匹配项,它也能够扫描整个内容以匹配。不过请注意,这样将会使搜索进程明显变慢。

$ awman -k emacs

或者,

$ awman --apropos emacs

在 web 浏览器中打开搜索结果

如果你不想以手册页的形式查看 Arch Wiki 指南,你也可以像下面这样在 web 浏览器中打开它。

$ awman -w pacman

或者,

$ awman --web pacman

这条命令将会在 web 浏览器中打开匹配结果。请注意,使用这个选项需要网络连接。

在其他语言中搜索

awman 默认打开的是英文的 Arch Wiki 页面。如果你想用其他的语言查看搜索结果,例如西班牙语,只需要像这样做:

$ awman -l spanish codecs

使用以下命令查看可用的语言:

$ awman --list-languages

升级本地的 Arch Wiki 副本

就像我已经说过的,更新会每两天自动推送一次。或者你也可以使用以下命令手动更新。

$ awman-update
[email protected] /usr/lib/node_modules/arch-wiki-man
└── [email protected]

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

:)


via: https://www.ostechnix.com/how-to-browse-and-read-entire-arch-wiki-as-linux-man-pages/

作者:SK 选题:lujun9972 译者:dianbanjiu 校对:wxy

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

我们已经讨论了一些 man 手册的替代方案。 这些替代方案主要用于学习简洁的 Linux 命令示例,而无需通过全面而过于详细的手册页。 如果你正在寻找一种快速而简单的方法来轻松快速地学习 Linux 命令,那么这些替代方案值得尝试。 现在,你可能正在考虑 —— 如何为 Linux 命令创建自己的 man 式的帮助页面? 这时 “Um” 就派上用场了。 Um 是一个命令行实用程序,可以用于轻松创建和维护包含你到目前为止所了解的所有命令的 man 页面。

通过创建自己的手册页,你可以在手册页中避免大量不必要的细节,并且只包含你需要记住的内容。 如果你想创建自己的一套 man 式的页面,“Um” 也能为你提供帮助。 在这个简短的教程中,我们将学习如何安装 “Um” 命令以及如何创建自己的 man 手册页。

安装 Um

Um 适用于 Linux 和Mac OS。 目前,它只能在 Linux 系统中使用 Linuxbrew 软件包管理器来进行安装。 如果你尚未安装 Linuxbrew,请参考以下链接:

安装 Linuxbrew 后,运行以下命令安装 Um 实用程序。

$ brew install sinclairtarget/wst/um

如果你会看到类似下面的输出,恭喜你! Um 已经安装好并且可以使用了。

[...]
==> Installing sinclairtarget/wst/um
==> Downloading https://github.com/sinclairtarget/um/archive/4.0.0.tar.gz
==> Downloading from https://codeload.github.com/sinclairtarget/um/tar.gz/4.0.0
-=#=# # #
==> Downloading https://rubygems.org/gems/kramdown-1.17.0.gem
######################################################################## 100.0%
==> gem install /home/sk/.cache/Homebrew/downloads/d0a5d978120a791d9c5965fc103866815189a4e3939
==> Caveats
Bash completion has been installed to:
/home/linuxbrew/.linuxbrew/etc/bash_completion.d
==> Summary
[] /home/linuxbrew/.linuxbrew/Cellar/um/4.0.0: 714 files, 1.3MB, built in 35 seconds
==> Caveats
==> openssl
A CA file has been bootstrapped using certificates from the SystemRoots
keychain. To add additional certificates (e.g. the certificates added in
the System keychain), place .pem files in
/home/linuxbrew/.linuxbrew/etc/openssl/certs

and run
/home/linuxbrew/.linuxbrew/opt/openssl/bin/c_rehash
==> ruby
Emacs Lisp files have been installed to:
/home/linuxbrew/.linuxbrew/share/emacs/site-lisp/ruby
==> um
Bash completion has been installed to:
/home/linuxbrew/.linuxbrew/etc/bash_completion.d

在制作你的 man 手册页之前,你需要为 Um 启用 bash 补全。

要开启 bash 补全,首先你需要打开 ~/.bash_profile 文件:

$ nano ~/.bash_profile

并在其中添加以下内容:

if [ -f $(brew --prefix)/etc/bash_completion.d/um-completion.sh ]; then
 . $(brew --prefix)/etc/bash_completion.d/um-completion.sh
fi

保存并关闭文件。运行以下命令以更新更改。

$ source ~/.bash_profile

准备工作全部完成。让我们继续创建我们的第一个 man 手册页。

创建并维护自己的man手册

如果你想为 dpkg 命令创建自己的 man 手册。请运行:

$ um edit dpkg

上面的命令将在默认编辑器中打开 markdown 模板:

我的默认编辑器是 Vi,因此上面的命令会在 Vi 编辑器中打开它。现在,开始在此模板中添加有关 dpkg 命令的所有内容。

下面是一个示例:

正如你在上图的输出中看到的,我为 dpkg 命令添加了概要,描述和两个参数选项。 你可以在 man 手册中添加你所需要的所有部分。不过你也要确保为每个部分提供了适当且易于理解的标题。 完成后,保存并退出文件(如果使用 Vi 编辑器,请按 ESC 键并键入:wq)。

最后,使用以下命令查看新创建的 man 手册页:

$ um dpkg

如你所见,dpkg 的 man 手册页看起来与官方手册页完全相同。 如果要在手册页中编辑和/或添加更多详细信息,请再次运行相同的命令并添加更多详细信息。

$ um edit dpkg

要使用 Um 查看新创建的 man 手册页列表,请运行:

$ um list

所有手册页将保存在主目录中名为 .um 的目录下

以防万一,如果你不想要某个特定页面,只需删除它,如下所示。

$ um rm dpkg

要查看帮助部分和所有可用的常规选项,请运行:

$ um --help
usage: um <page name>
 um <sub-command> [ARGS...]

The first form is equivalent to `um read <page name>`.

Subcommands:
 um (l)ist List the available pages for the current topic.
 um (r)ead <page name> Read the given page under the current topic.
 um (e)dit <page name> Create or edit the given page under the current topic.
 um rm <page name> Remove the given page.
 um (t)opic [topic] Get or set the current topic.
 um topics List all topics.
 um (c)onfig [config key] Display configuration environment.
 um (h)elp [sub-command] Display this help message, or the help message for a sub-command.

配置 Um

要查看当前配置,请运行:

$ um config
Options prefixed by '*' are set in /home/sk/.um/umconfig.
editor = vi
pager = less
pages_directory = /home/sk/.um/pages
default_topic = shell
pages_ext = .md

在此文件中,你可以根据需要编辑和更改 pagereditordefault_topicpages_directorypages_ext 选项的值。 比如说,如果你想在 Dropbox 文件夹中保存新创建的 Um 页面,只需更改 ~/.um/umconfig 文件中 pages_directory 的值并将其更改为 Dropbox 文件夹即可。

pages_directory = /Users/myusername/Dropbox/um

这就是全部内容,希望这些能对你有用,更多好的内容敬请关注!

干杯!


via: https://www.ostechnix.com/how-to-create-and-maintain-your-own-man-pages/

作者:SK 选题:lujun9972 译者:way-ww 校对:wxy

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

不久前,我们发布了一篇简短的指引描述了如何轻易地回忆起忘记的 Linux 命令 。那篇指引对于无法记住命令的人来说真的非常有用。今天,我们就来学习一下如何高效而又迅速地从 man 页中获取你所需要的信息。如你所知,一个标准的 man 页分成很多个部分,每部分都有一个独立的标题。当你想查看特定的标志/选项时,可能需要向下滚动很长时间才能找到。这是个效率低下而且很耗时间的过程。这也是为什么学会高效使用 man 页来精确定位你想要的内容。

在本文中,我会分享一些常用的跟 man 页相关的重要技巧。

学习高效地使用 Man 页

基础用法

我们都知道,我们可以使用类似下面的命令来打开关于某个命令(比如 mkdir)的 man 页:

man mkdir

可以使用 空格db 以及上下箭头等来浏览 man 页。要跳转道 man 页的末尾,可以按 End 键而想跳转到 man 页的头部则可以按 Home 键。在当前打开的 man 页中按下 h 键会显示所有有用的键盘快捷键和一般用法。(LCTT 译注:这些快捷键其实是 man 所使用的 less 分页器的快捷键)

q 可以退出 man 页。

回忆起忘记的命令

对于那些不知道想要哪个命令的家伙,可以去查看一下我第一段中提到的那个链接。使用 man 页我们也能做到这一点。假设说,你想要创建一个目录,而你忘记了使用哪个命令来创建目录。

为了回忆起那个忘记的命令,可以将 man 和 grep 命令联用:

man -k directory | grep create

输出结果为:

CURLOPT_NEW_DIRECTORY_PERMS (3) - permissions for remotely created directories
libssh2_sftp_mkdir_ex (3) - create a directory on the remote file system
mkdir (2) - create a directory
mkdirat (2) - create a directory
mkdtemp (3) - create a unique temporary directory
mkdtemp (3p) - create a unique directory or file
mkfontdir (1) - create an index of X font files in a directory
mklost+found (8) - create a lost+found directory on a mounted Linux second extended file。。。
mkstemp (3p) - create a unique directory
mktemp (1) - create a temporary file or directory
pam_mkhomedir (8) - PAM module to create users home directory

你只需要阅读一下每个命令的描述然后挑选出合适的命令就行了。啊,现在你记起来了。mkdir 正式你想要的,对吧?就是那么简单。

在 man 页中搜索

若你在 man 页中想要查找特定字符串。只需要输入 / (前斜线)再加上你想要搜索的字符串,像这样:

/<search_string> 或 <pattern>

假设你正在查看 mount 命令的 man 页,想要寻找关于 -bind 选项的相关信息。可以输入:

/bind

当前 man 页中任何匹配搜索字符串的内容都会被高亮显示。

按下 nSHIFT+n 来查看下一个/上一个匹配的地方。

/ 模式(或者说字符串)会向前搜索匹配行。你也可以使用 ? 模式进行向后搜索。这当你在 man 页的末尾或中间位置时非常有用。

?bind

若想只显示匹配行,输入:

&bind

使用这种方法,你无需使用 nSHIFT+n 来滚动到下一个/上一个匹配的位置。& 模式只会显示那些包含搜索内容的行,其他的内容全都被省略掉。

不打开 man 页而进行搜索

也可以在不打开 man 页的前提下搜索指定选项的信息。

比如,你想了解 mkdir 命令中的 -m 选项的相关信息。可以运行:

man mkdir | grep -e '-m'

或者,

man mkdir | grep -- '-m'

这个命令会显示出 mkdir 命令 man 页中第一次出现 -m 时的内容。从上面命令中我们可以看到 -m 表示的是 “MODE”(chmod)。

如果你想阅读 mkdir 命令的完整 man 页,但是要跳过第一次出现 -m 之前的内容,可以使用下面命令:

man mkdir | less +/-m

这是另一个例子:

man mount | less +/--bind

按下 nSHIFT+n 可以浏览下一个/上一个匹配的位置。

参考阅读:每个 Linux 用户都应该知道的 3 个 man 页替代品

将完整的 man 页导出到文本文件中

我们可以将指定命令的完整 man 页导出成文本文件。方法是运行下面命令:

man mount > mount.txt

该命令会将 mount 命令的 man 页导出到当前目录的 mount.txt 文件中。

也可以获取一个简化版的 man 页,没有退格和下划线,方法是使用下面命令。

man mount | col -b > mount.txt

要了解更多关于 man 页的详细信息,运行:

man man

该命令会显示出关于 man 的 man 页。这些技巧都很基础但很实用。它们会节省你很多的时间而且能免去很多的滚动操作。

今天的内容就到这了。希望对你有帮助。更多好文即将到来。准备好哦!

Cheers!

(题图:Pixabay, CC0)


via: https://www.ostechnix.com/learn-use-man-pages-efficiently/

作者:SK 译者:lujun9972 校对:wxy

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

groff 是大多数 Unix 系统上所提供的流行的文本格式化工具 nroff/troff 的 GNU 版本。它一般用于编写手册页,即命令、编程接口等的在线文档。在本文中,我们将给你展示如何使用 groff 编写你自己的 man 手册页。

在 Unix 系统上最初有两个文本处理系统:troff 和 nroff,它们是由贝尔实验室为初始的 Unix 所开发的(事实上,开发 Unix 系统的部分原因就是为了支持这样的一个文本处理系统)。这个文本处理器的第一个版本被称作 roff(意为 “runoff”——径流);稍后出现了 troff,在那时用于为特定的 排字机 Typesetter 生成输出。nroff 是更晚一些的版本,它成为了各种 Unix 系统的标准文本处理器。groff 是 nroff 和 troff 的 GNU 实现,用在 Linux 系统上。它包括了几个扩展功能和一些打印设备的驱动程序。

groff 能够生成文档、文章和书籍,很多时候它就像是其它的文本格式化系统(如 TeX)的血管一样。然而,groff(以及原来的 nroff)有一个固有的功能是 TeX 及其变体所缺乏的:生成普通 ASCII 输出。其它的系统在生成打印的文档方面做得很好,而 groff 却能够生成可以在线浏览的普通 ASCII(甚至可以在最简单的打印机上直接以普通文本打印)。如果要生成在线浏览的文档以及打印的表单,groff 也许是你所需要的(虽然也有替代品,如 Texinfo、Lametex 等等)。

groff 还有一个好处是它比 TeX 小很多;它所需要的支持文件和可执行程序甚至比最小化的 TeX 版本都少。

groff 一个特定的用途是用于格式化 Unix 的 man 手册页。如果你是一个 Unix 程序员,你肯定需要编写和生成各种 man 手册页。在本文中,我们将通过编写一个简短的 man 手册页来介绍 groff 的使用。

像 TeX 一样,groff 使用特定的文本格式化语言来描述如何处理文本。这种语言比 TeX 之类的系统更加神秘一些,但是更加简洁。此外,groff 在基本的格式化器之上提供了几个宏软件包;这些宏软件包是为一些特定类型的文档所定制的。举个例子, mgs 宏对于写作文章或论文很适合,而 man 宏可用于 man 手册页。

编写 man 手册页

groff 编写 man 手册页十分简单。要让你的 man 手册页看起来和其它的一样,你需要从源头上遵循几个惯例,如下所示。在这个例子中,我们将为一个虚构的命令 coffee 编写 man 手册页,它用于以各种方式控制你的联网咖啡机。

使用任意文本编辑器,输入如下代码,并保存为 coffee.man。不要输入每行的行号,它们仅用于本文中的说明。

.TH COFFEE 1 "23 March 94"
.SH NAME
coffee \- Control remote coffee machine
.SH SYNOPSIS
\fBcoffee\fP [ -h | -b ] [ -t \fItype\fP ]
\fIamount\fP
.SH DESCRIPTION
\fBcoffee\fP queues a request to the remote
coffee machine at the device \fB/dev/cf0\fR.
The required \fIamount\fP argument specifies
the number of cups, generally between 0 and
12 on ISO standard coffee machines.
.SS Options
.TP
\fB-h\fP
Brew hot coffee. Cold is the default.
.TP
\fB-b\fP
Burn coffee. Especially useful when executing
\fBcoffee\fP on behalf of your boss.
.TP
\fB-t \fItype\fR
Specify the type of coffee to brew, where
\fItype\fP is one of \fBcolumbian\fP,
\fBregular\fP, or \fBdecaf\fP.
.SH FILES
.TP
\fC/dev/cf0\fR
The remote coffee machine device
.SH "SEE ALSO"
milk(5), sugar(5)
.SH BUGS
May require human intervention if coffee
supply is exhausted.

清单 1:示例 man 手册页源文件

不要让这些晦涩的代码吓坏了你。字符串序列 \fB\fI\fR 分别用来改变字体为粗体、斜体和正体(罗马字体)。\fP 设置字体为前一个选择的字体。

其它的 groff 请求 request 以点(.)开头出现在行首。第 1 行中,我们看到的 .TH 请求用于设置该 man 手册页的标题为 COFFEE、man 的部分为 1、以及该 man 手册页的最新版本的日期。(说明,man 手册的第 1 部分用于用户命令、第 2 部分用于系统调用等等。使用 man man 命令了解各个部分)。

在第 2 行,.SH 请求用于标记一个 section 的开始,并给该节名称为 NAME。注意,大部分的 Unix man 手册页依次使用 NAMESYNOPSISDESCRIPTIONFILESSEE ALSONOTESAUTHORBUGS 等节,个别情况下也需要一些额外的可选节。这只是编写 man 手册页的惯例,并不强制所有软件都如此。

第 3 行给出命令的名称,并在一个横线(-)后给出简短描述。在 NAME 节使用这个格式以便你的 man 手册页可以加到 whatis 数据库中——它可以用于 man -kapropos 命令。

第 4-6 行我们给出了 coffee 命令格式的大纲。注意,斜体 \fI...\fP 用于表示命令行的参数,可选参数用方括号扩起来。

第 7-12 行给出了该命令的摘要介绍。粗体通常用于表示程序或文件的名称。

在 13 行,使用 .SS 开始了一个名为 Options 的子节。

接着第 14-25 行是选项列表,会使用参数列表样式表示。参数列表中的每一项以 .TP 请求来标记;.TP 后的行是参数,再之后是该项的文本。例如,第 14-16 行:

.TP
\fB-h\P
Brew hot coffee. Cold is the default.

将会显示如下:

-h     Brew hot coffee. Cold is the default.

第 26-29 行创建该 man 手册页的 FILES 节,它用于描述该命令可能使用的文件。可以使用 .TP 请求来表示文件列表。

第 30-31 行,给出了 SEE ALSO 节,它提供了其它可以参考的 man 手册页。注意,第 30 行的 .SH 请求中 "SEE ALSO" 使用括号扩起来,这是因为 .SH 使用第一个空格来分隔该节的标题。任何超过一个单词的标题都需要使用引号扩起来成为一个单一参数。

最后,第 32-34 行,是 BUGS 节。

格式化和安装 man 手册页

为了在你的屏幕上查看这个手册页格式化的样式,你可以使用如下命令:

$ groff -Tascii -man coffee.man | more

-Tascii 选项告诉 groff 生成普通 ASCII 输出;-man 告诉 groff 使用 man 手册页宏集合。如果一切正常,这个 man 手册页显示应该如下。

COFFEE(1)                                               COFFEE(1)
NAME
       coffee - Control remote coffee machine
SYNOPSIS
       coffee [ -h | -b ] [ -t type ] amount
DESCRIPTION
       coffee  queues  a  request to the remote coffee machine at
       the device /dev/cf0\. The required amount  argument  speci-
       fies the number of cups, generally between 0 and 12 on ISO
       standard coffee machines.
   Options
       -h     Brew hot coffee. Cold is the default.
       -b     Burn coffee. Especially useful when executing  cof-
              fee on behalf of your boss.
       -t type
              Specify  the  type of coffee to brew, where type is
              one of columbian, regular, or decaf.
FILES
       /dev/cf0
              The remote coffee machine device
SEE ALSO
       milk(5), sugar(5)
BUGS
       May  require  human  intervention  if  coffee  supply   is
       exhausted.

格式化的 man 手册页

如之前提到过的,groff 能够生成其它类型的输出。使用 -Tps 选项替代 -Tascii 将会生成 PostScript 输出,你可以将其保存为文件,用 GhostView 查看,或用一个 PostScript 打印机打印出来。-Tdvi 会生成设备无关的 .dvi 输出,类似于 TeX 的输出。

如果你希望让别人在你的系统上也可以查看这个 man 手册页,你需要安装这个 groff 源文件到其它用户的 %MANPATH 目录里面。标准的 man 手册页放在 /usr/man。第一部分的 man 手册页应该放在 /usr/man/man1 下,因此,使用命令:

$ cp coffee.man /usr/man/man1/coffee.1

这将安装该 man 手册页到 /usr/man 中供所有人使用(注意使用 .1 扩展名而不是 .man)。当接下来执行 man coffee 命令时,该 man 手册页会被自动重新格式化,并且可查看的文本会被保存到 /usr/man/cat1/coffee.1.Z 中。

如果你不能直接复制 man 手册页的源文件到 /usr/man(比如说你不是系统管理员),你可创建你自己的 man 手册页目录树,并将其加入到你的 %MANPATH%MANPATH 环境变量的格式同 %PATH 一样,举个例子,要添加目录 /home/mdw/man%MANPATH ,只需要:

$ export MANPATH=/home/mdw/man:$MANPATH

groff 和 man 手册页宏还有许多其它的选项和格式化命令。找到它们的最好办法是查看 /usr/lib/groff 中的文件; tmac 目录包含了宏文件,自身通常会包含其所提供的命令的文档。要让 groff 使用特定的宏集合,只需要使用 -m macro (或 -macro) 选项。例如,要使用 mgs 宏,使用命令:

groff -Tascii -mgs files...

groff 的 man 手册页对这个选项描述了更多细节。

不幸的是,随同 groff 提供的宏集合没有完善的文档。第 7 部分的 man 手册页提供了一些,例如,man 7 groff_mm 会给你 mm 宏集合的信息。然而,该文档通常只覆盖了在 groff 实现中不同和新功能,而假设你已经了解过原来的 nroff/troff 宏集合(称作 DWB:the Documentor's Work Bench)。最佳的信息来源或许是一本覆盖了那些经典宏集合细节的书。要了解更多的编写 man 手册页的信息,你可以看看 man 手册页源文件(/usr/man 中),并通过它们来比较源文件的输出。

这篇文章是《Running Linux》 中的一章,由 Matt Welsh 和 Lar Kaufman 著,奥莱理出版(ISBN 1-56592-100-3)。在本书中,还包括了 Linux 下使用的各种文本格式化系统的教程。这期的《Linux Journal》中的内容及《Running Linux》应该可以给你提供在 Linux 上使用各种文本工具的良好开端。

祝好,撰写快乐!

Matt Welsh ([email protected])是康奈尔大学的一名学生和系统程序员,在机器人和视觉实验室从事于时时机器视觉研究。

(题图:wikimedia.org)


via: http://www.linuxjournal.com/article/1158

作者:Matt Welsh 译者:wxy 校对:wxy

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

Linux 的帮助手册其实拥有很多有用的信息,而且比你想象中更容易使用

我们通常通过 google 来查询 Linux 中的命令说明,但是其实还有一个更好的办法:那就是通过 Linux 自带的 man 帮助页来查询命令详尽完整的使用说明。

man 页面的历史本身比 Linux 还长,可以追溯到 Unix 早期那个年代。 通过这个 Wikipedia 可以知道,Dennis Ritchie 和 Ken Thompson 在 1971 年写了第一个 man 帮助页,那个年代的计算器使用的还是像烤箱一样的计算机,个人电脑还未出世。man 帮助页也有它自己的一套设计精炼的语法,和 Unix 与 Linux 一样,man 帮助页也不是一成不变的,它就像 Linux 内核一样不停地发展更新。

Man 帮助页通过数字标识符来分成不同类型的内容:

  1. 一般用户命令
  2. 系统调用命令
  3. 库函数
  4. 特殊的文件和驱动程序
  5. 文件格式
  6. 游戏和屏保
  7. 杂项
  8. 系统管理命令和守护进程

尽管如此,用户一般也不需要知道他们想查询的命令是属于哪一个类型的。

这些文件格式化的方式在当今许多用户看来有点古怪。因为最开始他们是用 trooff 的方式,通过 PostScript 打印机来打印,所以包含了头部和布局方面的格式化信息。在 Linux 中,取而代之使用了一种叫做 groff) 的方法。

在我的 Fedora 系统中,man 帮助页相关的文件存储在 /usr/share/man 下的子目录中(比如 man1 存储第一部分的命令),还有进一步的子目录用于存储 man 帮助页的翻译。

如果你在 Shell 中查找 man 命令的 man 帮助页,你时间看到将是 gzip 工具压缩的 man.1.gz 文件。想要查询 man 帮助页,需要输入类似如下命令:

man man

这个例子会显示 man 命令的 man 帮助页,这将先解压 man 帮助页文件,然后解释格式化指令并用 less 显示结果,所以导航操作和在 less 中一样。

所有的 man 帮助页都应该显示这些子段落:NameSynopsisDescriptionExamplesSeeAlso。有些还会添加一些额外的子段落,比如 OptionsExitStatusEnvironmentBugsFilesAuthorReportingBugsHistoryCopyright

详细说明一个 man 帮助页

为了更详细地介绍一个典型的 man 帮助页,就用 ls 命令的帮助页来分析吧,在 Name 分段下,我们可以看到如下内容:

ls - list directory contents

它会简要地告诉我 ls 这条命令的作用.

Synopsis 分段下,我们可以看到如下的内容:

ls [OPTION]... [FILE]…

任何在中括号中的元素都是可选的。你可以只输入 ls 命令,后面不接任何参数。参数后面的省略号表示你可以添加任意多个彼此兼容的参数,以及许多文件名。对于 [FILE] 参数,你可以指定具体的目录名,或者可以使用通配符 *,比如这个例子,它会显示 Documents 文件夹下的 .txt 文件:

ls Documents/*.txt

Description 分段下, 我们可以看到关于这条命令更加详细的信息,还有关于这条命令各个参数作用的详细介绍的列表,比如说 ls 命令第一个选项 -a 参数,它的作用是显示包括隐藏文件/目录在内的所有文件:

-a, --all 

如果我们想用这些参数,要么用它们的别名,比如 -a,要么用它们的全名,比如 --all(两条中划线)。然而并不是所有参数都有全名和别名(比如 --author 只有一种),而且两者的名字并不总是相互关联的(-F--classify)。当你想用多个参数时,要么以空格隔开,要么共用一个连字符 -,在连字符后连续输入你需要的参数(不要添加空格)。比如下面两个等价的例子:

ls -a -d -l
ls -adl

但是 tar 这个命令有些例外,由于一些历史遗留原因,当参数使用别名时可以不用添加连字符 -,因此以下两种命令都是合法的:

tar -cvf filearchive.tar thisdirectory/

tar cvf filearchive.tar thisdirectory/

lsDescription 分段后是 AuthorReporting BugsCopyrightSee Also 等分段。

See Also 分段会提供一些相关的 man 帮助页,没事的话可以看看。毕竟除了命令外还有许多其他类型的 man 帮助页。

有一些命令不是系统命令,而是 Bash 特有的,比如 aliascd。这些 Bash 特有的命令可以在 BASH\_BUILTINS man 帮助页中查看,和上面的比起来它们的描述更加精炼,不过内容都是类似的。

其实通过 man 帮助页让你可以获得大量有用的信息,特别是当你想用一个已经很久没用过的命令,需要复习下这条命令的作用时。这个时候 man 帮助页饱受非议的简洁性反而对你来说是更好的。


作者简介:

Greg Pittman - Greg 是住在肯塔基州路易斯维尔的一位退休神经学家,但是却对计算机和编程保持着长久的兴趣,从二十世纪六十年代就开始捣腾 Fortran IV 了。随着 Linux 和开源软件的到来,更加激起了他去学习的兴趣并投身于这项事业中,并成为 Scribus 组织的一员。


via: https://opensource.com/article/17/7/using-man-pages

作者:Greg Pittman 译者:吴霄/toyijiu 校对:wxy

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

最近在做中文MAN手册的翻译,发现MAC系统中的MAN命令不能像多数Linux发行版那样很好的显示中文MAN手册。

根据查找的资料,找到了解决方法:

1、首先要更新你的系统中的 groff 包,MAC中(10.8和10.9)的groff是1.18,是几年的版本了,需要升级,可以下载最新的groff 1.22 编译或者通过 port 来安装。

2、需要修改MAN的配置文件:

sudo vi /private/etc/man.conf

修改NROFF配置为:

NROFF preconv -e utf8 | /opt/local/bin/groff -Wall -mtty-char -Tutf8 -mandoc -c

这样就可以将UTF8编码的MAN页面通过转码而被groff识别。

修改PAGER配置为:

PAGER /usr/bin/less -isR

这样可以避免MAN手册页面中的ANSI Escape字符序列干扰(用于控制显示粗体等格式)

保存即可。

顺便,也说下如何彩色显示MAN的方法。

在环境变量中增加如下:

export GROFF_NO_SGR=1
export LESS_TERMCAP_mb=$'\E[01;36m'
export LESS_TERMCAP_md=$'\E[01;36m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;33m'

这样MAN就是彩色了,如果希望调整颜色,可以相应修改上述的Escape代码。

不过这种方法有个副作用就是,会扰乱env这样的命令输出的显示。

所以,更好的解决方式是,使用env命令来重新定义man命令的环境:

man() {
  env GROFF_NO_SGR=1 \
    LESS_TERMCAP_mb=$'\E[1;36m' \
    LESS_TERMCAP_md=$'\E[1;36m' \
    LESS_TERMCAP_me=$'\E[0m' \
    LESS_TERMCAP_se=$'\E[0m' \
    LESS_TERMCAP_so=$'\E[1;44;33m' \
    LESS_TERMCAP_ue=$'\E[0m' \
    LESS_TERMCAP_us=$'\E[1;33m' \
    man "$@"
}

以上可以放到你的/etc/bashrc 里面。