1.man命令

回到顶部

有时候使用--help或者help命令并不能获取命令的完整帮助信息,只能帮助我们快速了解命令的概况。如果想要了解一条命令的详细帮助信息,可以用man命令, man为manual的简写,即手册的意思。例如想要了解ls的详细帮助信息,可以在命令行下输入man ls:

              [peter@initroot ~]$ man ls

              LS(1)                                              User Commands                                             LS(1)

              NAME
                  ls - list directory contents

              SYNOPSIS
                  ls [OPTION]... [FILE]...

              DESCRIPTION
                  List  information  about the FILEs (the current directory by default).  Sort entries alphabetically if none
                  of -cftuvSUX nor --sort is specified.

                  Mandatory arguments to long options are mandatory for short options too.

              -a, --all
                  do not ignore entries starting with .

              -A, --almost-all
                  do not list implied . and ..

              --author
                  with -l, print the author of each file
              ...省略...
            
大家可以自行比较和help输出的区别。
man的输出页面称为man page,man page中的信息都是从文件中读取出来的,这些文件一般都是存放在/usr/share/man目录下, 不同的distribution man page文件的路径可能会有差异。可以通过修改man的配置文件设置man page的搜索路径。 man的配置文件为/etc/man_db.conf(有的版本为man.conf或manpath.conf或man.config等)。 这些信息都可以在man man中查询到。
进入man page后,可以按空格键往下翻页,按下q键即可退出man page。

2.man信息分类

回到顶部

man page的第一行是:LS(1),LS为命令的名称,(1)表示一般用户可使用的命令! linux下不止有命令,还有各种文件、函数库、系统调用等等,这些数据也需要帮助信息, man将各种帮助信息进行分类,然后用数字进行编号,man将帮助信息分为9大类,可以使用man man查看man本身的帮助信息, 通过man man我们找到man的帮助信息分类和编号的对应关系如下:

编号 意义
1 标准命令的说明手册,即用户在shell环境中可以操作的命令或可执行文件;
2 系统调用的说明手册,由内核提供给应用程序的功能函数;
3 库函数(library)手册,大部分为C的函数库(libc);
4 设备特殊文件的说明手册,通常在/dev下的文件;
5 系统配置文件的格式说明;
6 游戏(games)手册;
7 一些杂项说明,包括惯例与协议,例如Linux文件系统、网络协议、ASCII code等的说明;
8 系统管理方面的命令说明,这些命令只有root用户才有权限使用; 9 kernel相关例程说明文件;
上面的数字和帮助信息分类对应关系需要牢记于心,特别是1,5,8这三项。
在用man查看相关帮助信息的时候,可以通过数字快速的判断出man page的说明对象,
例如上面LS(1)表示该man page是针对一条命令的说明手册, 那么我们就可以迅速判断出ls是一条可以在shell下执行的命令。
例如想要查看null的说明,man输出的信息为NULL(4),意思是该页是针对设备文件的说明手册, 那么我们就可以快速判断出原来null是一个设备文件, 在man的说明描述中会给出null文件的绝对路径/dev/null以及对该文件的详细说明。

3.man -f和whatis命令

回到顶部

上面man将帮助信息分为九大类,但是一个关键词往往可能对应多个分类,例如上面的ls,man默认列出的是ls命令的帮助手册。
但是ls有可能也和其他分类信息有关呢。如何查出和ls相关的所有分类信息呢?可以使用man的-f选项,列出和关键字相关的所有分类:

            [peter@study ~]$ man -f ls
            ls (1)               - list directory contents
            LS (6)               - display animations aimed to correct users who accidentally enter LS instead of ls .
            
            [peter@study ~]$ whatis ls
            ls (1)               - list directory contents
            LS (6)               - display animations aimed to correct users who accidentally enter LS instead of ls .
            
上面whatis和man -f是完全等价的,这两个可以交换使用。
不过在whatis使用之前需要先用mandb命令建立whatis数据库:
            [peter@study ~]$ mandb
          
man -f列出了和ls相关的所有分类信息,第一行ls (1)我们已经很清楚了,就是告诉你ls就是一个标准的命令,用来列出目录内容。
第二行LS (6),注意LS是大写字母,也就是说man -f会把和关键词相关的所有分类信息都列出了来,不区分大小写。
对应上表的6,可以看到LS (6)是和游戏有关的,后面给出了解释,原来LS可以显示动画,目的是为了防止用户在输入ls命令的时候,误输入大写的LS。
如果用户误输入了大写LS,那么界面就会显示一个动画,所以这还真是一条好玩的命令,我们运行一下试试:
LS命令 可以看到界面上竟然驶过一列火车,这还真是意外之喜,原来linux下也有这么好玩的命令。linux下还有很多好玩的命令参考。
如果我想对LS进一步了解,就可以使用man LS查看了,由于man是区分大小写的,所以man列出的就会是LS (6)的信息。

4.指定信息分类编号

回到顶部

但是如果man -f列出的信息恰好都是小写或者大写呢?该如何区分呢?例如我们查看一下和man相关的所有信息分类:

            [peter@study ~]$ man -f man
            man (1) - an interface to the on-line reference manuals 
            man (7) - macros to format man pages 
            
可以看到和man有关的信息有两类man (1)和man (7),可以看到man除了是一条命令外,还是一个格式化man page的宏。
但是在用man man查询man信息的时候只列出了man (1)的信息,怎么查看man (7)的信息呢?
只需要指定信息分类编号就可以了:
            #列出man(1)的信息
            [peter@study ~]$ man 1 man
            #列出man(7)的信息
            [peter@study ~]$ man 7 man 
            
通过指定分类信息编号,man就会读取并显示和该分类相关的man page信息了。
如果不指定编号,man按照配置文件/etc/man_db.conf中的设置顺序搜索man page,先找到哪个就显示哪个。
一般man会先找到编号小的man page, 所以man man最先找到的是和man(1)有关的man page文件,man就会只显示man(1)的信息。

5.man -k和apropos命令

回到顶部

尽管不区分大小写,man -f找到的是和关键字字符数完全匹配的信息,例如man -f man只会找man和MAN先关的信息分类,并不会找manage或manipulate, 尽管这些单词中也有man。
如果只要存在'man'关键字的man page就列出来可以使用-k选项:

            [peter@study ~]$ man -k man
            npm (1)              - javascript package manager
            npm-cache (1)        - Manipulates packages cache
            npm-config (1)       - Manage the npm configuration files
            ...省略...
            
可以看到只要man page中含有'man'这三个字符,man -k都会列出来。这在某些情况是非常有帮助了,例如只记住了某条命令的部分字符,这时候就可以通过man -k查询了。
另外一个和man -k等价的命令,就是apropos命令:
            [peter@study ~]$ apropos man
            npm (1)              - javascript package manager
            npm-cache (1)        - Manipulates packages cache
            npm-config (1)       - Manage the npm configuration files
            ...省略...
            
和whatis一样,在使用之前也需要用mandb建立whatis数据库。

6.man page章节

回到顶部

man page手册页将信息分为几个章节,每个章节都是一个独立的主题。
按照顺序这些章节包括但不限于NAME, SYNOPSIS, CONFIGURATION, DESCRIPTION, OPTIONS, EXIT STATUS, RETURN VALUE, ERRORS, ENVIRONMENT, FILES, VERSIONS, CONFORMING TO, NOTES, BUGS, EXAMPLE, AUTHORS, COPYRIGHT, SEE ALSO等
以上并不是所有的章节都会存在,有的可能只有NAME与DESCRIPTION等章节。
以下是对几个经常出现的章节的简单说明:

man page各章节说明
man page各章节说明
章节名称 章节说明
NAME 简短的命令、数据名称说明
SYNOPSIS 简短的命令下达语法(syntax)简介
DESCRIPTION 较为完整的说明,这部分最好仔细看看!
OPTIONS 针对 SYNOPSIS 部分中,有列举的所有可用的选项说明
COMMANDS 当这个程序(软件)在执行的时候,可以在此程序(软件)中下达的命令
FILES 这个程序或数据所使用或参考或连结到的某些文件
SEE ALSO 可以参考的和这个命令或数据有相关的其他说明!
EXAMPLE 一些可以参考的范例
大体上可以按照如下顺序查看man page:
1. 先察看NAME,大体了解的意思;
2. 再详看一下DESCRIPTION,这个部分会提到很多相关的资料与使用时机,从这个地方可以学到很多小细节;
3. 而如果这个命令其实很熟悉了,那么主要就是查询OPTIONS! 可以知道每个选项的意义,这样就可以下达比较细部的命令内容!
4. 最后看一下SEE ALSO跟这个资料有关的资料和文件;
5. 某些说明内容还会列举有关的文件FILES来提供我们参考!这些都是很有帮助的!

7.man page快捷键

回到顶部

man page可以使用各种快捷键快速查看,man page还有搜索功能,和vim编辑器的搜索功能一样,只要按下/或者?,光标就会出现在最后一行,输入搜索关键字后按回车即可搜索。
/为向下搜索,?为向上搜索,n为继续搜索,N为向相反方向搜索,总之这些搜索指令和vim中的是一样的。
直接按下q就可以离开man page并回到命令行。
man page常用的按键组合键如下所示:

man page快捷键
man page快捷键
快捷键 快捷键说明
空格键 向下翻一页
[Page Down] 向下翻一页
[Page Up] 向上翻一页
[Home] 到第一页
[End] 到最后一页
/string 向下搜寻string,例如搜索ls,就输入/ls
?string 向上搜寻string
n或N 利用/或?搜寻字符串时,可以用n来继续下一个搜寻(不论是/或?),利用N来进行反向搜寻。
例如/ls搜寻ls, 按下n继续往下查询,用N往上查询。
?ls向上查询ls, 按下n继续向上查询,用N反向查询。
q 退出man page,返回命令行

initroot编辑整理,转载请注明www.initroot.com