关于linux:Linux-命令-man-全知全会

10次阅读

共计 8376 个字符,预计需要花费 21 分钟才能阅读完成。

摘要
对 man 的各种用法做一次整顿,顺便也能够当作参考手册。
<!–MORE–>

引子

man 是一个 Linux 命令行实用程序,用于显示 linux 命令、零碎调用、库函数等的帮忙手册。

手册页 ,即 Manual pages,又称作 man page,是在 Unix 或 类 Unix 操作系统 在线 软件文档 的一种广泛的模式。内容包含计算机程序(包含库和零碎调用),正式的规范和常规,甚至是形象的概念。用户能够通过执行man 命令)调用手册页。

man 手册页被设计成独立的文档,不能引用其它手册页面。这与反对超链接的 Info 文档 造成鲜明对比,GNU 正在将 man 手册替换成 info 文档。

手册页的默认格局是 troff,应用 man 宏软件包(着重展示)或 mdoc 宏软件包(着重语义)。能够把手册页排版成 PostScript、PDF 和其余各种格局进行查看或打印。

装置

man-db 提供了 man 命令,less 是 man 的默认分页器。

man-pages 提供了 Linux man 页面的内容。

上面是一些语言的翻译版本:

  • man-pages-cs for Czech
  • man-pages-de for German
  • man-pages-zh_cn for Simplified Chinese
  • man-pages-zh_tw for Traditional Chinese

上面程序也能够用来浏览手册:

  • GNOME Help — GNOME 帮忙阅读程序。通过 yelp man:<name>Ctrl+L 快捷键浏览手册页面。
  • KHelpCenter — KDE 帮忙阅读程序,能够通过 khelpcenter man:<name> 浏览手册。
  • Konqueror — KDE 文件和网页浏览器,也能够通过 man:<name> 显示手册。
  • xman — 能够分类查看手册。

对于 Linux 发行版来说,man 是标准配置,任何一个最小零碎均蕴含了 man 命令(即,man-db 包总是被预装的),但手册页的文档内容局部则不肯定了,依据理论状况进行选装。

对于像 Ubuntu 这样的零碎来说,应用程序的手册页经常当前缀 -doc 的独立包形式存在,例如 flex 包的配套手册页为 flex-doc 包。

sudo apt install flex flex-doc
sudo apt install bison bison-doc
sudo apt install git git-doc

对于 POSIX 可移植性较为关注的人,可能会须要装置:

sudo apt install manpages-poxis*

而后就能够查阅 POSIX 调用,例如:

man 3p connect

等等。

浏览手册页

通过以下命令浏览 man 手册页:

$ man 手册名

man 手册页分为很多区块。残缺的列表能够参考: man-pages(7)。

man 手册页通过名称和所属分类标识。有些不同分类的 man 手册页名字可能雷同,比方 man(1) 和 man(7),这时须要额定指明分类以拜访须要的手册。例如:

$ man 5 passwd

会显示无关文件/etc/passwd,而非命令 passwd,的内容。

快捷键(less

在手册页浏览界面中,能够应用快捷键来帮忙浏览。

因为手册页的显示是应用操作系统 Shell 环境中的默认 PAGER 来实现的,所以快捷键遵循相应 PAGER 的性能映射。

大多数零碎中当初默认采纳 less 作为默认 PAGER,因而请参考 less 命令全知全会。

布局

所有的手册页遵循一个常见的布局,其为通过简略的 ASCII 文本展现而优化,而这种状况下可能没有任何模式的高亮或字体管制。个别包含以下局部内容:

  • NAME(名称)

    该命令或函数的名称,接着是一行简介。

  • SYNOPSIS(概要)

    对于命令),正式的形容它如何运行,以及须要什么样的命令行参数。对于函数,介绍函数所需的参数,以及哪个头文件蕴含该函数的定义。

  • DESCRIPTION(阐明)

    命令或函数性能的文本形容。

  • EXAMPLES(示例)

    罕用的一些示例。

  • SEE ALSO(参见)

    相干命令或函数的列表。

也可能存在其余局部内容,但这些局部没有失去跨手册页的标准化。常见的例子包含:OPTIONS(选项),EXIT STATUS(退出状态),ENVIRONMENT(环境),BUGS(程序破绽),FILES(文件),AUTHOR(作者),REPORTING BUGS(已知破绽),HISTORY(历史)和 COPYRIGHT(著作权)。

你能够在 man-pages(7) 查阅到这些手册页内的区块的形容,如同咱们前文中所形容的那样。

一个较完整的列表节录如下:

NAME
SYNOPSIS
CONFIGURATION [Normally only in Section 4]
DESCRIPTION
OPTIONS [Normally only in Sections 1, 8]
EXIT STATUS [Normally only in Sections 1, 8]
RETURN VALUE [Normally only in Sections 2, 3]
ERRORS [Typically only in Sections 2, 3]
ENVIRONMENT
FILES
VERSIONS [Normally only in Sections 2, 3]
ATTRIBUTES [Normally only in Sections 2, 3]
CONFORMING TO
NOTES
BUGS
EXAMPLES
AUTHORS [Discouraged]
REPORTING BUGS [Not used in man-pages]
COPYRIGHT [Not used in man-pages]
SEE ALSO

手册区块

在操作系统中,所有的手册页被依照其主题分类划分为多个区块,例如零碎调用,Shell 命令,C 库函数等等。这些区块次要定位在 /usr/share/man/man1/usr/share/man/man9 文件夹中。

在 Arch Linux、Research Unix、BSD、OS X 和 Linux 中,手册通常被分为 8 个区块,安顿如下:

区块 阐明
1 个别命令)
2 零碎调用
3 库函数,涵盖 C 规范函数库
4 非凡文件(通常是 /dev 中的设施)和驱动程序
5 文件格式和约定
6 游戏和屏保
7 杂项
8 系统管理命令)和守护过程

Unix System V 采纳了相似的编号计划,但程序不同:

区块 阐明
1 个别命令)
1M 系统管理命令)和守护过程
2 零碎调用
3 C 函数库函数
4 文件格式和约定
5 杂项
6 游戏和屏保
7 非凡文件(通常是 /dev 中的设施)和驱动程序

在某些零碎中还有下述的区块可用:

区块 形容
0 C 函数库头文件
9 内核例程
n Tcl/Tk 关键字
x X 窗口零碎

一些区块利用后缀进一步细分了。例如在一些零碎中,区块 3C 是 C 函数库调用,3M 是数学(Math)函数库,等等。这样做的后果是区块 8(系统管理命令)有时也被挪动到区块 1M(作为命令)区块的子区块)。一些子区块后缀有跨区块的个别含意:

子区块 阐明
p POSIX 标准
x X 窗口零碎文档
pm Perl Module 函数

综述

综上所述,手册页的次要的类别和对应的编号有:

0     Header files
0p    Header files (POSIX)
1     Executable programs or shell commands
1p    Executable programs or shell commands (POSIX)
2     System calls (functions provided by the kernel)
3     Library calls (functions within program libraries)
3n    Network Functions
3p,3pm    Perl Modules
4     Special files (usually found in /dev)
5     File formats and conventions eg /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)
9     Kernel routines
l     Local documentation
n     New manpages

翻译过去粗略是:

  • 0, 0p:已过期,相应的条目曾经被合并到 section 3 之中了。
  • l, n:基本上不存在于发行版中,但开发者能够用于开发周期中。
  • 1:可执行程序或是 shell 指令。
  • 2:零碎调用(system calls,Linux 外围所提供的函數)。
  • 3:个别库函數,C 库函数。
  • 4:非凡文件(通常位于 /dev 之中)。
  • 5:文件格式于协定,如 /etc/passwd
  • 6:游戏。
  • 7:杂项(宏解决等,如 man(7)groff(7))。
  • 8:系统管理员指令(通常是管理者 root 专用指令)。
  • 9:Kernel routines(非标准)。

留神前文曾经提及,绝大多数零碎中,只有区块 1 到 8 这几个类别。你能够在 man-pages(7) 查阅到这些区块的形容,如同咱们前文中所形容的那样。

在手册页零碎中的会用小括号来注明手册所属的区块,例如 ls(1) 示意 Shell 命令 ls 隶属于区块 1。

有时候一个主题名称可能会在不同的区块中有不同的阐明文件,若是查问一个主题时未能在指定区块中找到,那么 man 会按照 1 n l 8 3 2 3posix 3pm 3perl 5 4 9 6 7 的程序顺次检索相应的其它区块,而后显示第一个搜寻到的章节内容。

例如 passwd 这个主题 passwd(1)passwd(5) 两个章节,如果不指定章节的话:

man passwd

会显示 passwd(1),而若要查问 passwd(5) 的话,就应该明确指定区块编号:

man 5 passwd

如果你对这种语法感到困惑的话,能够采纳如下的格局:

man passwd.5

两者是等效的。

列出所有章节

因为具体主题的复杂性,所以有的条目未必在你认为的分区中,例如 recv C 函数的参考并不是在分区 3 中,而是在分区 2 中,因为它是 Linux 内核调用之一。这种状况在零碎调用和 C 库函数重名时经常可见。

有时候咱们对某主题很感兴趣,但却并不知道该主题有哪些章节能够被查问,这时候就能够用 -aw 参数进行查问:

man -aw printf

典型的后果可能是这样:

/usr/share/man/man1/printf.1.gz
/usr/share/man/man1/printf.1posix.gz
/usr/share/man/man3/printf.3.gz
/usr/share/man/man3/printf.3posix.gz

但你或者更喜爱 whatis 返回的后果:

$ whatis printf
printf (1)           - format and print data
printf (3)           - formatted output conversion
printf (1posix)      - write formatted output
printf (3posix)      - print formatted output

它更直观。

whatis 等价于 man -f

$ man -f printf
printf (1)           - format and print data
printf (3)           - formatted output conversion
printf (1posix)      - write formatted output
printf (3posix)      - print formatted output

一次查阅所有章节

如果要一次性查阅某个主题的所有章节,能够用 -a 参数,这会令 man 顺次显示所有章节:

man -a printf

当你看完一个章节并按 q 退出之后,man 会显示:

--Man-- next: printf(3) [view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]

j 简略地回车(按下 Enter 键)就能够持续浏览下一个章节。你也能够用 Ctrl-C 终止 man 返回到 Shell 提示符状态。

搜寻手册页

如果用户压根儿不晓得要查阅的手册的名称,该怎么办呢?没事,通过 -k 或者 --apropos 参数就能够按给定关键词搜寻相干手册。例如,要查阅无关明码的手册(“password”):

$ 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
...
pam_unix (8)         - Module for traditional password authentication
passwd (1)           - change user password
passwd (1ssl)        - compute password hashes
passwd (5)           - the password file
passwd2des (3)       - RFS password encryption
...
pwd.h (7posix)       - password structure
...
shadow (5)           - shadowed password file
shadowconfig (8)     - toggle shadow passwords on and off
smbpasswd (5)        - The Samba encrypted password file
smbpasswd (8)        - change a user's SMB password
...
xdecrypt (3)         - RFS password encryption
xencrypt (3)         - RFS password encryption

man -k 会筛选主题名称以及简短形容文字来尝试匹配给定的关键字。

当初你能够开始搜寻了。例如,要查阅无关明码的手册(“password”), 能够应用上面的命令:

$ man -k password
$ man --apropos password
$ apropos password

它们是同义词。

关键字能够应用正则表达式。

例如

$ man -k sprintf
asprintf (3)         - print to allocated string
sprintf (3)          - formatted output conversion
Text::sprintfn (3pm) - Drop-in replacement for sprintf(), with named parameter support
vasprintf (3)        - print to allocated string
vsprintf (3)         - formatted output conversion

留神失去下面的后果须要首先装置:

sudo apt install libtext-sprintfn-perl

以保障 Text::sprintfn (3pm) 条目曾经存在。

/usr/share/man/man3/Text::sprintfn.3pm.gz

全文检索某个关键字

如果你想全文搜寻的话,你能够用 -K 选项:

$ man -K sprintf

它会关上第一个手册页供你浏览,你能够 q 退出浏览界面,而后会有一个提醒:

--Man-- next: gcc-7(1) [view (return) | skip (Ctrl-D) | quit (Ctrl-C) ]

此时你能够回车(Enter)浏览下一个匹配的手册页,也能够 Ctrl-C 退出 man -K 状态。

其它性能

在浏览器中显示手册页

man -Hfirefox printf

此性能可能须要 groff 命令可能在 PATH 门路中可被搜寻到。所以你兴许须要显式地装置 groff

sudo apt-get install groff

指定分页程序(PAGER)

咱们提到过显示主题内容应用的是通过环境变量 PAGER 指定的分页程序,默认时为 less。但你能够显式地指定其它分页程序作为显示工具,这是通过命令行参数 -P 来指定的:

man -P more printf

转换为纯文本、网页或 PDF

纯文本
man printf | col -b > printf.txt
网页

首先,装置软件包 man2html。

而后应用它转换 man 手册页:

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

此外,man2html 还能够把 man 页转换为便于打印的文本文件:

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

另一种形式是间接通过 groff 来做:

zcat `man -w printf` | groff -mandoc -T html > printf.html
PDF

将手册页转换为 PDF:

man -t printf | ps2pdf - printf.pdf

man pages 是能够打印的,遵循 troff 格局,原本就是一种打印设置语言,装置 ghostscript 后,能够用上面命令将 man 页面转换为 PDF man -t <manpage> | ps2pdf - <pdf>.

留神这里仅能应用 Times 字体,没有超链接,有些手册是转为终端设计,PS 或 PDF 格局看起来不太失常。

指定文字语言

你能够装置 manpages-zh 包来提供中文手册页反对。

在终端中,设置 LANG 环境变量为 UTF-8.zh_CN,则 man 会以中文形式显示主题章节内容。不过如果没有中文版的话,还是会 fallback 到英文版。

如果你不想扭转环境变量,也能够通过命令行参数 -L 来达到目标,例如

man -L en 5 passwd
man -L zh_CN 5 passwd

其它信息

手册页存储在哪里?

典型的地位在 /usr/share/man/usr/local/share/man 中。

此外,经常会有 /usr/man/usr/local/man 的符号链接。

manpath 命令是获知确切的存储地位的正确办法:

$ manpath
/usr/local/man:/usr/local/share/man:/usr/share/man

manpath 命令或者 man 命令都是通过 /etc/manpath.config 或者 /etc/man_db.conf 配置文件来获得正确的存储地位汇合的。但对于少数人来说咱们不倡议你去探索这些配置文件,它们遵循肯定的格局约定,但剖析和抽取后果往往对于 Shell 脚本来说过于繁冗了,远不如剖析 manpath 返回的后果来得简略易用。

要获知 /etc/manpath.config 的更多信息,能够查看手册页 man manpath

有的时候,$MANPATH$ 环境变量可能蕴含了正确的值。但绝大多数状况下可能它都是空值。

另一种办法是通过 whereis 命令来间接获知:

$ whereis man
man: /usr/bin/man /usr/local/man /usr/share/man /usr/share/man/man1/man.1.gz /usr/share/man/man7/man.7.gz

/usr/share/man-db/chconfig 是一个 perl 执行脚本,会从新生成 /etc/manpath.config,这是零碎级的外部行为。

应用在线手册页

许多网站提供在线 man 手册页,具体列表参见:Wikipedia:Man_page#Repositories_of_manual_pages。

  • Man7.org. Upstream for Arch Linux’s man-pages.
  • Debian GNU/Linux man pages
  • DragonFlyBSD manual pages
  • FreeBSD Hypertext Man Pages
  • Linux and Solaris 10 Man Pages
  • Linux/FreeBSD Man Pages[生效链接 2020-08-04 ⓘ] with user comments
  • Linux man pages at die.net
  • The Linux man-pages project at kernel.org
  • NetBSD manual pages[生效链接 2021-05-17 ⓘ]
  • Mac OS X Manual Pages[生效链接 2021-11-13 ⓘ]
  • On-line UNIX manual pages
  • OpenBSD manual pages
  • Plan 9 Manual — Volume 1
  • Inferno Manual — Volume 1
  • Storage Foundation Man Pages[生效链接 2020-08-04 ⓘ]
  • The Missing Man Project [dead link as of 9 July 2010]
  • Gobuntu Manual Pages[生效链接 2020-08-04 ⓘ] [dead link as of 9 July 2010]
  • The UNIX and Linux Forums Man Page Repository
  • Ubuntu Manpage Repository

参考

  • man man
  • man man-pages
  • man page (简体中文) – ArchWiki)
  • man page – Wikipedia

后记

本文中有的内容齐全复制于参考链接中。

🔚

正文完
 0