2.3 线上求助——指令帮助与手册
# 线上求助——指令帮助与手册
在终端输入 l[tab][tab]
后可以看到:
[gocifer@centos7 ~]$ l
Display all 160 possibilities? (y or n)
2
光是以 l
开头的命令就有160多个,那么Linux 中的命令更是难以计数,那么是不是要把所有的命令都背记住呢?首先 linux 中很大一部分命令(可执行文件)并不会经常被用户直接调用,用户经常使用的也就只有少数最核心的指令;其次人的大脑保护机制会经常清理内存——遗忘掉大脑认为不经常使用或没有用处的记忆,因此就算你花费大量时间记忆住了许多命令,过了一段时间不用也还是会忘记许多,得不偿失。
那么不记忆住指令和指令的详细功能,万一用到难道还要去请教”谷哥“或”度娘“吗?其实不用担心,因为Linux上的软件大多都是自由软件/开源软件,开源工作有着完整且严谨的流程,开源工作者在编写软件/指令的时候都会编写完善的说明文件,使用者可以很方便的查看相关说明。
# --help
选项
事实上,几乎所有Linux上面的指令,在开发的时候,开发者就将可以使用的指令语法与参数写入指令操作过程中,只要使用 help
这个选项,就能够获得该指令的大概用法,比如之前查看日历的 cal
指令:
[gocifer@centos7 ~]$ man --help
Usage: man [OPTION...] [SECTION] PAGE...
-C, --config-file=FILE use this user configuration file
-d, --debug emit debugging messages
-D, --default reset all options to their default values
--warnings[=WARNINGS] enable warnings from groff
Main modes of operation:
-f, --whatis equivalent to whatis
-k, --apropos equivalent to apropos
-K, --global-apropos search for text in all pages
-l, --local-file interpret PAGE argument(s) as local filename(s)
-w, --where, --path, --location
print physical location of man page(s)
-W, --where-cat, --location-cat
print physical location of cat file(s)
-c, --catman used by catman to reformat out of date cat pages
-R, --recode=ENCODING output source page encoded in ENCODING
Finding manual pages:
-L, --locale=LOCALE define the locale for this particular man search
-m, --systems=SYSTEM use manual pages from other systems
-M, --manpath=PATH set search path for manual pages to PATH
-S, -s, --sections=LIST use colon separated section list
-e, --extension=EXTENSION limit search to extension type EXTENSION
-i, --ignore-case look for pages case-insensitively (default)
-I, --match-case look for pages case-sensitively
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
基本上,通过 --help
这个指令就可以快速获得常见的选项、参数的说明,不过通常 --help
也只会提供简略的说明——主要包含选项参数,更加详细的说明就需要通过 man page
来进行查询了。
# man page
文档
man是mannual(操作手册)的缩写,首先使用刚学习的--help
选项来查看一下man
的简单说明:
$ man --help
man, version 1.6g
usage: man [-adfhktwW] [section] [-M path] [-P pager] [-S list]
[-m system] [-p string] name ...
a : find all matching entries
c : do not use cat file
d : print gobs of debugging information
D : as for -d, but also display the pages
f : same as whatis(1)
h : print this help message
k : same as apropos(1)
K : search for a string in all pages
t : use troff to format pages for printing
w : print location of man page(s) that would be displayed
(if no name given: print directories that would be searched)
W : as for -w, but display filenames only
C file : use `file' as configuration file
M path : set search path for manual pages to `path'
P pager : use program `pager' to display pages
S list : colon separated section list
m system : search for alternate system's man pages
p string : string tells which preprocessors to run
e - [n]eqn(1) p - pic(1) t - tbl(1)
g - grap(1) r - refer(1) v - vgrind(1)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# man man
然后使用man
命令查询它本身的 page 说明文档 man man
:
MAN(1) Manual pager utils MAN(1)
NAME
man - an interface to the on-line reference manuals
SYNOPSIS
man [-C file] [-d] [-D] [--warnings[=warnings]] [-R encoding] [-L
locale] [-m system[,...]] [-M path] [-S list] [-e extension] [-i|-I]
[--regex|--wildcard] [--names-only] [-a] [-u] [--no-subpages] [-P
pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justifi‐
………………
DESCRIPTION
man is the system's manual pager. Each page argument given to man is
normally the name of a program, utility or function. The manual page
associated with each of these arguments is then found and displayed. A
section, if provided, will direct man to look only in that section of
the manual. The default action is to search in all of the available
sections, following a pre-defined order and to show only the first page
found, even if page exists in several sections.
The table below shows the section numbers of the manual followed by the
types of pages they contain.
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
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 [Non standard]
A manual page consists of several sections.
Conventional section names include NAME, SYNOPSIS, CONFIGURATION,
DESCRIPTION, OPTIONS, EXIT STATUS, RETURN VALUE, ERRORS, ENVIRONMENT,
FILES, VERSIONS, CONFORMING TO, NOTES, BUGS, EXAMPLE, AUTHORS, and
SEE ALSO.
………………
EXAMPLES
man ls
Display the manual page for the item (program) ls.
man -a intro
Display, in succession, all of the available intro manual pages
contained within the manual. It is possible to quit between suc‐
cessive displays or skip any of them.
………………
OVERVIEW
Many options are available to man in order to give as much flexibility
as possible to the user. Changes can be made to the search path, sec‐
tion order, output processor, and other behaviours and operations
detailed below.
If set, various environment variables are interrogated to determine the
operation of man. It is possible to set the `catch all' variable
$MANOPT to any string in command line format with the exception that
……………………
DEFAULTS
man will search for the desired manual pages within the index database
caches. If the -u option is given, a cache consistency check is per‐
formed to ensure the databases accurately reflect the filesystem. If
this option is always given, it is not generally necessary to run mandb
after the caches are initially created, unless a cache becomes corrupt.
However, the cache consistency check can be slow on systems with many
manual pages installed, so it is not performed by default, and system
administrators may wish to run mandb every week or so to keep the data‐
base caches fresh. To forestall problems caused by outdated caches,
man will fall back to file globbing if a cache lookup fails, just as it
would if no cache was present.
……………………
OPTIONS
Non argument options that are duplicated either on the command line, in
$MANOPT, or both, are not harmful. For options that require an argu‐
ment, each duplication will override the previous argument value.
General options
-C file, --config-file=file
Use this user configuration file rather than the default of
~/.manpath.
-d, --debug
Print debugging information.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 功能键
在man命令帮助信息的界面中,所包含的常用操作按键及其用途如下表所示:
按键 | 作用 |
---|---|
空格键 | 向下翻一页 |
PaGe down | |
PaGe up | 向上翻一页 |
home | 直接前往首页 |
end | 直接前往尾页 |
/ | 从上至下搜索某个关键词,如“/linux” |
? | 从下至上搜索某个关键词,如“?linux” |
n | 定位到下一个搜索到的关键词 |
N | 定位到上一个搜索到的关键词 |
q | 退出帮助文档 |
# man type
在分析上面 man
的帮助说明文档之前,先注意一个细节——第一行 man(1)
,第一行标志是哪个命令的说明文档是可以理解的——man,为什么后面括号里要再加上一个数字编号呢?其实机灵的小伙伴已经可以在上面man
说明文档的26行开始的表格中找到答案:
1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
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 [Non standard]
2
3
4
5
6
7
8
9
10
编号 | 内容 |
---|---|
1 | 在shell可以操作的指令或可执行文件 |
2 | 由Linux内核提供的系统调用函数 |
3 | 程序函数库(Library)提供的函数调用 |
4 | 特殊设备文件(通常在 /dev 目录下) |
5 | 配置文件的格式和约定 |
6 | 游戏 |
7 | 各种各样的惯例和协议,比如Linux文件系统、网络协议、ASCII code等等的说明 |
8 | 系统管理员可用的管理命令 |
9 | 跟系统内核(kernel)有关的文件 |
man 常用编号
常用的编号是 1、5、8,尤其要记得相应的含义。
# man section
在之前 man man
得到的结果第37行:
A manual page consists of several sections.
Conventional section names include NAME, SYNOPSIS, CONFIGURATION,
DESCRIPTION, OPTIONS, EXIT STATUS, RETURN VALUE, ERRORS, ENVIRONMENT,
FILES, VERSIONS, CONFORMING TO, NOTES, BUGS, EXAMPLE, AUTHORS, and
SEE ALSO.
2
3
4
5
6
man由不同结构化的章节组成,一般来讲,使用man命令查看到的帮助内容信息都会很长很多,如果读者不了解帮助文档信息的目录结构和操作方法,乍一看到这么多信息可能会感到头疼。man命令的帮助信息结构如下:
结构名称 | 代表意义 |
---|---|
NAME | 命令的名称 |
SYNOPSIS | 参数的大致使用方法 |
DESCRIPTION | 介绍说明 |
EXAMPLES | 演示(附带简单说明) |
OVERVIEW | 概述 |
DEFAULTS | 默认的功能 |
OPTIONS | 具体的可用选项(带介绍) |
ENVIRONMENT | 环境变量 |
FILES | 用到的文件 |
SEE ALSO | 相关的资料 |
HISTORY | 维护历史与联系方式 |
# man 选项
看一下常见的man选项
# man -f
之前看到man指令本身是一个shell命令,类型编号为1的page就是对man指令说明,那么有没有可能还有其他编号的文档呢:
[gocifer@centos7 ~]$ man -f man
man (1) - an interface to the on-line reference manuals
man (1p) - display system documentation
man (7) - macros to format man pages
2
3
4
使用 -f
选项可以查看到某个命令更多的说明信息,上面的信息表明:man命令除了有个类型编号为1的page记录了关于man指令的使用信息,此外还有一个类型编号为7的page记录了开发人员为软件编写man page时的一些协议和约定:
MAN(7) Linux Programmer's Manual MAN(7)
NAME
man - macros to format man pages
SYNOPSIS
groff -Tascii -man file ...
groff -Tps -man file ...
man [section] title
DESCRIPTION
This manual page explains the groff an.tmac macro package (often called
the man macro package). This macro package should be used by develop‐
ers when writing or porting man pages for Linux. It is fairly compati‐
ble with other versions of this macro package, so porting man pages
should not be a major problem (exceptions include the NET-2 BSD
release, which uses a totally different macro package called mdoc; see
mdoc(7)).
………………
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# man -k
man -f
输出结果左边是搜索匹配到的指令,右边是说明,man -f
搜寻时是对左边的指令完全匹配,如果想要完成特定的任务但是忘记了指令的完整名称,可以通过 -k
选项查找到说明信息(左边和右边)中包含有关键字的指令,比如新建文件夹的指令 mkdir
:
[gocifer@centos7 ~]$ man -f mkdir
mkdir (1) - make directories
mkdir (1p) - make directories
mkdir (2) - create a directory
mkdir (3p) - make a directory
[gocifer@centos7 ~]$ man -k mkdir
gvfs-mkdir (1) - (unknown subject)
mkdir (1) - make directories
mkdir (1p) - make directories
mkdir (2) - create a directory
mkdir (3p) - make a directory
mkdirat (2) - create a directory relative to a directory file descriptor
2
3
4
5
6
7
8
9
10
11
12
# mandb特殊指令
除了man
命令本身,其实还有两个其他命令和man page
有关,而这两个指令等效 man 的命令:
[gocifer@centos7 ~]$ whatis mkdir
mkdir (1) - make directories
mkdir (1p) - make directories
mkdir (2) - create a directory
mkdir (3p) - make a directory
[gocifer@centos7 ~]$ apropos mkdir
gvfs-mkdir (1) - (unknown subject)
mkdir (1) - make directories
mkdir (1p) - make directories
mkdir (2) - create a directory
mkdir (3p) - make a directory
mkdirat (2) - create a directory relative to a directory file descriptor
2
3
4
5
6
7
8
9
10
11
12
是不是发现有点熟悉,是的,和上面的输出结果一样,也就是说:
whatis
等效man -f
apropos
等效man -k
注意
这两个特殊指令要能使用,必须要先创建 mandb
数据库才可以,mandb
必须拥有root权限才可以运行成功。
[gocifer@centos7 ~]$ mandb
Purging old database entries in /usr/share/man...
Processing manual pages under /usr/share/man...
fopen: Permission denied
[gocifer@centos7 ~]$ su root
Password:
[root@centos7 gocifer]# mandb
Purging old database entries in /usr/share/man...
mandb: warning: /usr/share/man/man8/fsck.fat.8.manpage-fix.gz: ignoring bogus filename
Processing manual pages under /usr/share/man...
Purging old database entries in /usr/share/man/hu...
Processing manual pages under /usr/share/man/hu...
Purging old database entries in /usr/share/man/ja...
Processing manual pages under /usr/share/man/ja...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# man 配置
既然有man page,自然本机肯定在哪里存储有相应的说明文档,所以man page才能够读取出来!那么这些man page说明文档存放在哪里呢?不同的Linux distribution可能有所差异,不过,通常是放 在/usr/share/man这个目录里头,然而,我们可以通过修改他的man page的配置文件来更改其搜寻路径——/etc/man_db.conf (有的版本为man.conf或manpath.conf或man.config 等)。
[gocifer@centos7 ~]$ ls /etc/man*
/etc/man_db.conf
2
在manpage配置文档中还有很多其他配置,比如:未指明文档编号时优先显示哪种文档。如果希望下次man man
时优先显示 man 7 man
的结果,就可以修改man 配置文件中搜索优先级顺序。
# info page
文档
在所有Unix like系统中,都可以使用 man 来查询指令或相关文件的用法;但是,在Linux里面则又额外提供了一种线上求助的方法——info
指令。
基本上,info与man的用途其实差不多,都是用来查询指令的用法或者是文件的格式。但是与 man page一口气输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写, 并且在各个页面中还有类似网页的“超链接”来跳到各不同的页面中,每个独立的页面也被称为一个节点(node)。
不过你要查询的目标数据的说明文档必须要以info的格式来写成才能够使用info的特殊功能 (例如超链接)。 info指令的文件默认存放在/usr/share/info/这个目录当中的。 举例来说,info这个指令的说明文档有写成info格式,所以,你使用 info info
可以得到下面的输出:
【N】翻到下一节点段落:
在顶部嘴上一行的显示结果输出了很多额外的信息。第一行的数据意义是:
- File:代表正在阅读的文档名称——info.info;
- Node:当前正在读的page的段落信息或名称,【Top】表示第一段落;
- Next:下一个节点的名称,【N】直接跳到下个节点的段落;
- Prev:上一个节点的名称,【P】返回到上一个节点;
- Up:上一层父节点,可以通过【U】返回到上一层节点;
在上面 * Menu
一行的下面前面带有 *
标志的都是可以跳转的超链接,通过方向键或者Tab键将光标移动到文字或者 *
上面,再按下 Enter
键就可以跳转到超链接所在的文档位置了。
Info page的层级和顺序node大概如下:
下面是info page下的快捷键:
按键 | 进行工作 |
---|---|
空白键 | 向下翻一页 |
PgDn | |
PgUp | 向上翻一页 |
Tab | 在 node 之间移动,有 node 的地方,通常会以 * 显示。 |
Enter | 当光标在 node 上面时,按下 Enter 可以进入该 node 。 |
b | 移动光标到该 info 画面当中的第一个 node 处 |
e | 移动光标到该 info 画面当中的最后一个 node 处 |
n | 前往下一个 node 处 |
p | 前往上一个 node 处 |
u | 向上移动一层 |
s(/) | 在 info page 当中进行搜寻 |
h, ? | 显示求助菜单 |
q | 结束这次的 info page |
# doc 文档
一般而言,指令或者软件制作者,都会将自己的指令或者是软件的说明制作成“线上说明文档”! 但是,毕竟不是每个软件都合适制作成man或者info格式的文档,很多软件会有自己的说明文档格式——比如javadoc、html、markdown;另外,很多软件发布时还会有额外的文档内容——安装须知、预计工作事项、未来工作规划、还有包括可安装的程序……
如果软件通过系统包管理器安装的话,说明文档一般以软件包为单位存放在/usr/share/doc
目录: