跳转至内容

man page

来自 ArchWiki
(重定向自 Manpage)

man pages——"manual pages" 的缩写——是几乎所有类 UNIX 操作系统(包括 Arch Linux)都提供的文档形式。用于显示它们的命令是 man(1)

尽管 man page 的范围很广,但它们被设计成独立的文档,因此在讨论相关主题时,只会有限地引用其他 man page。这与支持超链接的 Info 文档形成了鲜明对比——这是 GNU 试图取代传统 man page 格式的尝试。

安装

man-db 在 Arch Linux 上实现了 man 命令,而 lessman 命令默认使用的分页器。也可以使用 mandoc

man-pages 提供了 Linux 和 POSIX.1 的 man page [1]

也提供了一些本地化的 man page

您还可以 在官方仓库AUR 中搜索所有可用的本地化 man page。

访问 man page

要阅读 man page,只需输入

$ man page_name

手册被分为几个 部分。每个部分都有一个介绍,例如 intro(1)intro(2) 等等。完整的列表请参见 man-pages(7) § 手册页的章节

Man page 通常通过其名称后跟括号中的节号来引用。通常有多个同名 man page,例如 man(1)man(7)。在这种情况下,请在 man 命令后跟节号,然后是 man page 名称,例如

$ man 5 passwd

以阅读关于 /etc/passwd 的 man page,而不是 passwd 工具。

或者等效地,man page 后跟节号,用句点分隔

$ man passwd.5

搜索手册

当不确定 man page 的确切名称时,可以使用以下任一等效命令来搜索 man page

$ man -k expression
$ man --apropos expression
$ apropos expression

expression 默认被解释为正则表达式。

要搜索整个页面文本中的关键字,请改用 -K 选项。

注意 搜索功能由专用缓存提供。默认情况下,该缓存的维护由 man-db.service 处理,它会由 man-db.timer 定期触发。如果您收到“没有合适的结果”的消息,请尝试以 root 身份运行 mandb 来手动重新生成缓存。

可以使用 whatis 命令显示 man page 的单行描述。例如,要简要描述关于 ls 的 man page 章节,请键入

$ whatis ls
ls (1p)              - list directory contents
ls (1)               - list directory contents

页面宽度

man page 的宽度由 MANWIDTH 环境变量控制。

如果终端的列数太少(例如窗口宽度很窄),换行符将不正确。这会严重影响阅读。您可以通过在调用 man 命令时设置 MANWIDTH 来解决此问题。使用 Bash,则会是

~/.bashrc
man() {
    local width=$(tput cols)
    [ $width -gt $MANWIDTH ] && width=$MANWIDTH
    env MANWIDTH=$width \
    man "$@"
}

阅读本地 man page

您可以使用一些应用程序来查看 man pages

  • Emacs — 可扩展且自文档化的编辑器,也可以使用内置的 M-x man 命令来阅读 man pages。
https://gnu.ac.cn/software/emacs/ || emacs
  • GNOME Help — GNOME 的帮助查看器。属于 gnome。它可以通过 yelp man:<name> 或从现有窗口中未公开的 Ctrl+L 快捷键来显示 man pages。
https://apps.gnome.org.cn/Yelp/ || yelp
  • KHelpCenter — 显示 KDE 应用程序文档的应用程序。属于 kde-system。Man pages 位于 UNIX manual pages 中,或通过运行 khelpcenter man:<name>
https://apps.kde.org/khelpcenter/ || khelpcenter
  • Konqueror — KDE 文件管理器和网页浏览器。它可以通过 man:<name> 显示 man pages。
https://konqueror.org/ || konqueror
  • neovim — 该编辑器可以使用内置的 :Man name 命令来阅读 man pages,或者通过 export MANPAGER='nvim +Man!' 配置为 man 分页器。支持高亮显示和在命令行标志、关键字以及其他 man pages 之间导航。使用节标题、命令行标志和关键字作为条目自动生成大纲(通过 gO 可用)。
https://neovim.cn/ || neovim
  • xman — 提供 man pages 的分类视图。
https://xorg.freedesktop.org/ || xorg-xman

使用 lynxFirefox 等浏览器查看 man pages 可以让用户获得 info pages 的主要好处,即超文本链接。替代方法包括以下选项

转换为 HTML

mandoc

安装 mandoc 包。要转换一个页面,例如 free(1)

$ mandoc -Thtml -Ostyle=style.css /usr/share/man/man1/free.1.gz > free.html

现在在您喜欢的浏览器中打开名为 free.html 的文件。

man2html

首先,从官方仓库安装 man2html

现在,转换一个 man page

$ man free | man2html -compress -cgiurl man$section/$title.$section$subsection.html > ~/man/free.html

man2html 的另一个用途是导出为纯文本,适合打印

$ man free | man2html -bare > ~/free.txt

man -H

man-db 的实现也能够自己完成这项工作

$ man -H free

这将读取您的 BROWSER 环境变量来确定浏览器。您可以通过将二进制文件传递给 -H 选项来覆盖此设置。

roffit

首先安装 roffitAUR

要转换一个 man page

$ gunzip -c /usr/share/man/man1/free.1.gz | roffit > free.html

转换为 PDF

man pages 始终是可打印的:它们是用 troff(1) 编写的,而 troff 本质上是一种排版语言。因此,您可以轻松地将 man pages 转换为 man-db 使用的 groff 支持的任何输出格式。输出设备的列表,请参见 groff(1) (或如果您使用 mandoc 包,请参见 mandoc(1)) 中的 -T 选项。

这将生成一个 PDF 文件

$ man -Tpdf manpage > filename

注意:字体通常限于 Times 字体,并使用硬编码的尺寸。有些 man pages 是专门为终端查看设计的,在 PS 或 PDF 格式下看起来不会很好。

Qman

如果您需要一个支持现代功能(如超链接和历史记录)的 man pages 阅读替代界面,请安装 qmanAURqman-gitAUR。您现在可以使用 qman 来代替 man

$ qman ls    # Display the manual page for ls
$ qman -k ls # Perform apropos on 'ls'
注意 Qman 在没有正确配置的 mandb 搜索缓存的情况下将无法运行。有关如何设置此缓存的说明,请参见 #搜索手册 部分。

有关更多信息和故障排除,请参见项目的 GitHub 页面

在线 man page

警告 一些发行版提供的 man pages 经过修改或已过时,与 Arch Linux 提供的 man pages 不同。

请注意,虽然 man-pages 提供了 POSIX.1-2017 的 man pages(参见 [2]),但也有一个官方在线参考

还有一个 在线数据库的比较表

提示 可以使用此命令在终端中渲染在线 Arch man pages:curl -sL 'https://man.archlinux.org/man/clang.raw' | man -l -

值得注意的 man page

以下是一个非详尽列表,其中包含值得注意的页面,它们可能会帮助您更深入地理解许多内容。其中一些页面可能是一个很好的参考(例如 ASCII 表)。

更广泛地说,可以查看 第 7 类(杂项)页面

$ man -s 7 -k ".*" 

Arch Linux 特有页面

本文章或章节需要扩充。

原因: 添加一个关于编写 man pages 的章节,包括转换工具,如 pandoc-cliruby-ronn-ngasciidochelp2mango-md2mantxt2manscdocinfo2manAURpod2manAURruby-md2manAUR 等。(请在 Talk:Man page 中讨论)

参见