如何使用 man page
Linux 系统下命令繁多,每个命令又有不同的使用参数。要记住所有命令的使用方式不太现实,因为实在是太多了,而且大多数平常还用不到,即使一时记住了也会很快忘记。实际上工作时经常用到的命令很少,比如 ls、cd、tail、tar、top、ps 等等,用的多了自然就记住了。
有时候为了排查问题需要用到一些不常用的命令,一时想不起来怎么用也是很苦恼。通常的做法是到搜索引擎里搜索一下,找篇文章对照着操作即可。除此之外还可以通过 man page 查看命令的使用方法,说不定还能发现一些高级的用法。man page 并非是「男人的页面」,它的全称是 manual page,可以直译为「手册页面」,是 linux 或 unix 环境下各种命令和函数的帮助文档。
如何查看命令的 man page
使用 man 命令
查看指定命令的 man page,比如要查看 ln
命令的 man page 可以输入 man ln
如下是 mac 系统下 ln
命令的 man page,为方便查看对其进行了简化
1 | LN(1) BSD General Commands Manual LN(1) |
各个描述项的含义
man page 通常会介绍命令的语法,然后详细介绍每个参数的含义和用法,最后一般会给出关联的命令。除了这些,部分命令的 man page 还会有一些特定的描述项,比如 EXAMPLES(示例)、ENVIRONMENT(环境)等。
下面通过 ln
的 man page 说明下每一项内容的含义
LN(1) - 命令
如下这一行表示这是一个 BSD 通用命令的帮助手册,其中 1 表示在 shell 环境中的可执行命令或文件
1 | LN(1) BSD General Commands Manual LN(1) |
其他的数字表示的含义如下
数字 | 说明 |
---|---|
1 | 在 shell 环境中的可执行命令或文件 |
2 | 系统核心可调用的函数与工具等 |
3 | 一些常用的函数(function)、函数库(library),大部分为C的函数库(libc) |
4 | 设备文件的说明,通常是在 /dev 下的文件 |
5 | 配置文件或者是某些文件的格式 |
6 | 游戏(games) |
7 | 惯例与协议等,例如 Linux 文件系统、网络协议、ASCII code等等的说明 |
8 | 系统管理员可用的管理命令 |
9 | 跟kernel有关的文件 |
NAME - 名字
这是命令的名字。可以看出 link
和 ln
是同一个命令的两个名字。
1 | NAME |
SYNOPSIS - 语法
这是命令的语法说明。其中 []
内的是可选参数。
1 | SYNOPSIS |
DESCRIPTION - 详细说明
这是命令的详细说明。不仅介绍了命令的功能,还对命令的每一个参数做了详细的解释。
1 | DESCRIPTION |
COMPATIBILITY - 兼容性
这是对命令的兼容性说明,比如一些参数只有在特定的环境下才能生效。在编写可移植的脚本时需要考虑参数的兼容性。
1 | COMPATIBILITY |
SEE ALSO - 查看其它
这里给出了一些有关联的命令。
1 | SEE ALSO |
STANDARDS - 标准化
这是对命令标准化情况的说明。比如 ln
命令遵循 IEEE 1003.2-1992 标准。
1 | STANDARDS |
HISTORY - 历史
这是对命令的一些历史介绍。ln
命令首次出现在 AT&T UNIX 第一版中。
1 | HISTORY |
BSD - 版本
最后一行是对 man page 的说明。比如这里是 ln
命令的 BSD 版本,完成时间是 2006-02-14。在查看命令的参数说明时,如果有一些参数找不到,请留意下这一行,看是不是 man page 太旧了。
1 | BSD February 14, 2006 BSD |
如何搜索
man page 可能不止一页,要快速定位到关注的内容,需要了解一点在 man page 中搜索的技巧,如果你对 vim 比较熟悉,可以直接使用命令模式下的快捷键操作,比如翻页、搜索关键字等。
快捷键 | 功能 |
---|---|
空格键 | 向下翻一页 |
trl + f | 向下翻一页 |
ctrl + b | 向上翻一页 |
G | 到第一页 |
g | 到最后一页 |
/string | 向下搜索 string 这个字符串 |
?string | 向上搜寻 string 这个字符串 |
n, N | 利用 / 或 ? 来搜寻字符串时,可以用 n 来继续搜索下一个,用 N 搜索上一个 |
q | 退出 man page |
更新 man page
man page 是以文件的形式存储在系统中的,若版本较老可使用新的文件替代。大致流程如下:
- 打开 man page 的路径配置文件,找到
MANPATH
- 从
MANPATH
中找到要替换的 man page 文件,对于可执行命令来说,文件名为 [命令] + [.] + [1],其中 1 表示「可执行命令或文件」。例如java
命令的 man page 文件为java.1
- 将 man page 文件替换为所需版本。一般可在安装包里找到
替换 java 相关命令的 man page
以替换 java 相关命令的 man page 为例,实际操作下
查看 javac
命令的 man page,更新时间是 2004 年。实际使用的是 jdk 版本为 1.8,将 jdk 提供的命令的 man page 全部替换为新版
找到路径配置
man page 的文件路径通常配置在 /etc/man.conf
文件中,打开后大约在 42 行的位置能找到如下配置
1 | # Every automatically generated MANPATH includes these fields |
找到配置文件
切换到 /user/share/man
目录
1 | ➜ cd /usr/share/man |
因为 java
、 javac
等命令是「在 shell 环境中的可执行命令或文件」,对应类型为 1,所以切换到 man1 文件夹,可以看到相关的帮助文档都在这里
1 | ➜ cd man1 |
查看文件详情,是一个软连接,真正的文件在 /System/Library/Frameworks/JavaVM.framework/Resources/Documentation/man/
目录下
1 | ➜ ls -l java.1 |
替换文件
将整个文件夹重命名
1 | sudo mv /System/Library/Frameworks/JavaVM.framework/Resources/Documentation/man /System/Library/Frameworks/JavaVM.framework/Resources/Documentation/man_bak |
把当前 jdk 文件夹下的帮助文档复制过来
1 | sudo cp -r /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/man/man1 /System/Library/Frameworks/JavaVM.framework/Resources/Documentation/man |
查看效果
再次执行 man java
,翻到最后一行,已经是新版的帮助文档了
1 | JDK 8 03 March 2015 java(1) |