共计 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:
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
后记
本文中有的内容齐全复制于参考链接中。
🔚