在学习命令帮助之前,我们先学习一下命令帮助的格式:
对于命令和参数大致有如下几种类型
没有任何修饰符参数 : 原生参数
- <> : 占位参数
- [] : 可选组合
- () : 必选组合
- | : 互斥参数
- … : 可重复指定前一个参数
- — : 标记后续参数类型
参数类型解读
原生参数
说明文档里的字符即为命令需要使用的字符,这种参数在使用时必需指定,且和说明文档里的一致
占位参数
表示方式:<>
和原生参数类似,都是必需指定的,只不过占位参数的实际字符是在使用时指定的,同时为了方便阅读会用一个描述词汇来表示,并以<>包围,比如
< paths>
表示路径,使用时可以指定为具体的路径,而paths只是起一个说明作用,有些帮助说明里也会用大写来表示占位参数,比如将以上参数说明写成PATHS
可选组合
表示方式: []
括号里的参数为可选参数,比如[-q]
,则-q
为可选参数
可选项和占位参数也可以同时使用,如
[< commit>]
表示该参数可以指定某次提交,也可以不指定
必选组合
表示方式: ()
括号里的参数必需指定,通常里面会是一些互斥参数,比如
(--patch | -p)
表示--patch
和-p
这两个参数必需指定一个
互斥参数
表示方式: |
互斥参数一般都在()和[]里,表示该参数只能指定其中一个,比如
[--mixed | --soft | --hard | --merge | --keep]
重复参数
表示方式: …
表示前一个参数可以被指定多个,比如
< paths>...
< paths>
是一个占位参数,使用时必需指定为路径,…并表示可以指定多个路径。重复参数的一个
典型使用场景就是移动文件,将多个文件移动到一个目录下,比如如下命令
mv [<options>] <source>... <destination>
我们可以这样使用
mv -f a.cpp b.py dir
此时options对应为-f参数,source对应为a.cpp b.py,destination对应为dir
标记后续参数类型
表示方式: —
表示后续参数的某种类型,这是shell命令的一个通用方式,比如我们有一个文件名为-h,如果想删除这个文件,执行
rm -h
肯定是无法删除的,因为这时-h会被认为是rm的一个参数选项,应该使用
rm -- -h
这时shell会将-h解释为一个文件名传递给rm命令
命令执行方式以及命令文件的路径
一般Linux中的命令都带有帮助文件。
shell中的命令一般是这样执行的:当用户在终端上输入命令并按回车后,系统内核会在当前用户的环境变量PATH中去读取环境变量的值,变量的值就是命令的路径,命令路径不只一个,于是系统会从这些路径中从左至右的顺序匹配要查找的命令文件,直到找到并执行为止;
当这个命令被执行过已后,系统会把这个命令对应的文件路径保存在系统的哈希表中,以便下次用户执行命令时更快速的查找,查看当前用户的 hash 表。
可以执行系统内置命令 hash
显示当前用户的哈希表。
要想获取命令文件的存储路径可以使用命令 which
:
# which 命令名
查看程序的搜索路径:
$whereis command
当系统中安装了同一软件的多个版本时,不确定使用的是哪个版本时,这个命令就能派上用场;
Linux内置命令与外部命令
在bash shell中,Linux的命令分为两种:
一种是系统shell自带的命令(builtin),这些我们叫作内置命令,通过执行 help 命令就能查看到当前系统所有内置命令;
二是外部命令,即在文件系统上的某位置有一个与命令名称对应的可执行文件。
三、命令帮助文档的获取方式
内置命令获取帮助文档的方式:
判断一个命令是否是Linux内置的,可以用type命令
,只有Linux的内置命令才能使用 help 命令
获得帮助。
# type cd
输出:cd is a shell builtin
说明这个命令是系统自带的内置命令,那么就可以使用 help命令来获取帮助。
# help 命令名
外部命令获取帮助文档的方式:
(1) 第一种办法是使用 --help
格式:# 命令名 --help
例如:# mkdir --help
当然有时候 -h
也代表帮助信息的意思 ,不过很多时候也有 human readable
的意思,所以 --help
是比较通用的用法
(2)whatis 命令 获取简短的用途信息
格式 :# whatis [命令]
例如:# whatis ls
这个命令的原理也是要建立搜索的索引数据库,文档会经常更新(比如装新软件,软件的帮助文档也会放在特定位置),想要获取最新的文档可以用下面的命令更新数据库
makewhatis
当使用whatis
和apropos
两个命令发生错误时,很可能就是whatis database
没有建立
(3)apropos 命令 列出所有包含该文件的信息
格式: # apropos [文件名]
例如:# apropos services
(2) 想要获取命令的完整帮助可以使用 man 命令
格式:# man 命令名
例如:# man mkdir
man命令是调用了less工具显示文档,man的具体的操作方法和less是一样的。
man命令常用快捷键:
空格键:向文件尾部翻一屏;
b
:向文件首部翻一屏;
回车键
:向文件尾部翻一行;
k
:向文件首部翻一行;
Ctrl+d
:向文件尾部翻半屏;
Ctrl+u
:向文件首部翻半屏;
1G
:回到项部;
/keyword
:向文件尾部搜索;
?keyword
:向文件首部搜索;
n
:跟搜索命令相同的方向(下一个);
N
:跟搜索命令相反的方向(上一个);
q
:退出;
man命令打印出的文档中的段落相关说明:
NAME
: 简短的指令,数据名称的说明;
SYNOPSIS
: 简短的指令下达语法(syntax)简介;
DESCRIPTION
:较为完整的说明;
OPTIONS
:针对SYNOPSIS部分中,有列举的所有可用的选项说明;
COMMANDS
:当这个程序(软件)在执行的时候,可以在此程序(软件)中下达的指令;
FILES
:这个程序或数据所使用或参考或连结到的某些档案;
SEE ALSO
:可以参考的,跟这个指令或数据有相关的其他说明;
EXAMPLE
:一些可以参考的范例;
BUGS
:是否有相关的漏洞;
一般看看EXAMPLE,再看看OPTIONS就可以,如果还不能解决问题,再SEE ALSO。
使用帮助中命令格式中的字符意义:
[]:可选的部分;
{a|b}:分组,a和b作为一个使用单元来使用;
|: 或者,只能选其一;
<>:必不能少的部分;
…:同类的内容可以出现多个;
man命令分段机制:
man命令可以加一个数字参数(1~8)查看相关命令的其它信息
数字”1″:可执行命令或shell命令
数字”2″: 系统调用(functions provided by the kernel)
数字”3″:C语言库函数
数字”4″:设备或特殊文件(通常在/dev下)
数字”5″:文件格式和规则(例如/etc/passwd)
数字”6″:游戏
数字”7″:杂项(宏、包及其他杂项)
数字”8″:系统管理员相关的命令(通常只给root)
数字”9″:跟kernel有关的文件
例如,使用man查看 passwd 命令5段的帮助内容
# man 5 passwd
查看某关键字在哪些段落中有使用帮助,可以使用whatis 命令
获取简短的帮助信息;
# whatis passwd //提示:如果whatis的数据尚未生成,可以使用makewhatis手动进行;
或者
# man -f passwd //精确匹配和whatis结果一样
# man -k passwd //模糊查找
输出:
passwd (1) - update user's authentication tokens
passwd (5) - password file
passwd [sslpasswd] (1ssl) - compute password hashes
(3) info 命令可以获取在线帮助文档,通常 info 命令是作为 man 命令的补充,unix里没有,跟man差不多,用法一样,只是呈现信息的形式有所差异
# info passwd
(4) 应用程序自带的帮助文档,通常在存放在目录 /usr/share/doc
参考链接:
http://littlewhite.us/archives/408
http://blog.51cto.com/wubinary/1358575
https://blog.linuxeye.cn/381.html
http://linuxtools-rst.readthedocs.io/zh_CN/latest/base/01_use_man.html
https://abcfy2.gitbooks.io/linux_basic/content/first_sense_for_linux/command_learning/show_help.html