1、第二部分第八课:RTFM 阅读那该死的手册
2、第二部分第九课预告:查找文件,无所遁形
今天这一课也会很轻松。
一般Windows的用户不太习惯看使用手册。有些Windows下的软件下载后是带有使用手册的,但是谁会花时间看呢?
在Linux下,阅读手册应该成为一个反射动作,一个自然而然的反应。虽说一开始要我们去看手册会有点让人生畏,但是我们学习各种Linux命令的使用方法的最好去处就是手册了。
我们这个系列教程也绝不能和手册相比,因为我们的教程里对于每一个知识点,不可能做到巨细靡遗,全盘托出。比如,对于某个Linux的命令,我们不可能详尽地列出每个参数及其用法,只能举几个最常用的参数。所以,如果要深入了解一个命令,阅读命令的手册就是最好方式了。
这一课就是为了揭开Linux手册的神秘面纱,带大家学习如何阅读手册。
这一课是系列课程中极重要的,因为如果你学会了如何阅读手册,那么大部分问题都可以自己解决。
今天的题目里的RTFM稍微有点小“暴*力”,因为它是Read The F*cking Manual的缩写,翻成中文是“阅读那该死的手册”。这个缩写经常被Linux老鸟用来回复一些初学者,并无侮辱之意,只是提醒及表示无奈,因为这些初学者的问题大多在手册中可以轻松找到解答。就好比我们会说:“我晕,这么简单的问题,百度或google一下就出来了,何必要来论坛里问。”
man命令,显示使用手册
man是manual的缩写,就是英语“使用手册”的意思。
man命令用法很简单,后接你想要显示使用手册的命令,函数或者其他。
用来查看系统中自带的各种参考手册,但是手册页分为好几个部分,如下所示:
可执行程序或shell命令
系统调用(Linux内核提供的函数)
库调用(程序库中的函数)
特殊文件(通常在/dev下)
文件格式和惯例(例如 /etc/passwd)
游戏
杂项(包括宏包和惯例,比如man(7),groff(7))
系统管理命令(通常只能被root用户使用)
内核子程序
在shell中输入 man+数字+命令/函数,即可以查到相关的命令和函数。若不加数字,那man命令默认从数字较小的手册中寻找相关命令和函数。
例如,本来是想寻找C语言标准库中的rand()函数,直接使用man rand得到的是一个rand命令的手册,直接用来产生一个随机数,这个内容在手册第1部分中。如果使用man 3 rand就可以得到想要的库函数中rand()的用法了。
man这个词本身又是英语“男人”的意思,所以Linux和Unix世界流行着一句有趣的话:不懂就问一问“男人”。
比如,我们举个例子,用man命令来显示ls命令的使用手册:
man ls
如上图所见,运行man ls后,就显示了ls命令的使用手册,这里有你想知道的关于ls命令的一切。
在手册中移动
我们来学习如何在手册页面中移动:
键盘上的方向键:向上键和向下键可以使我们实现上一行和下一行的跳转。
键盘上的PgUp和PgDn(或者空格键)键:实现上一页和下一页的跳转。
键盘上的Home和End键:实现开始和结尾的跳转。
键盘上的/键(斜杠):实现搜索,和之前在less命令中功能类似。
键盘上的Q键:退出手册页。
如果我们使用图形界面的终端来打开手册页,那么可以使用鼠标的滚轮来实现上下滚动。
手册页的不同区域
正如我们在上图中所看到的,手册页分为不同的区域。这些区域的名字是用大写和粗体表示,且靠左对齐:
NAME:手册页对应的命令或函数名字,后接简单描述。
SYNOPSIS: 使用此命令的所有方法。下面我们会详述这个区域,因为此区域的内容极为关键。
DESCRIPTION: 命令的更深入的描述。这个区域也会包括所有参数及其用法。一般来说这个区域是文字最多的。
AUTHOR: 命令的作者。有时候不止一个作者。
REPORTING BUGS: 如果使用时遇到bug(程序的缺陷),有汇报问题的联系方式,通常是邮件。
COPYRIGHT: 版权。也就是用了什么许可证(Licence)。大多数命令都是在GPL许可证之下的开源代码。
SEE ALSO: 与此命令有关的其他命令。扩展阅读。
一般来说,前三个区域(NAME, SYNOPSIS, DESCRIPTION)是最重要的。
手册页的语言
不好意思,如你所见,手册页的语言全是英语。并不是所有人都精通英语,那假如你英语不好怎么办呢?
我只能给出一个最好的建议,也许你不会喜欢:花点时间学学英语。
不需要精通英语,但至少要会阅读,而且大胆使用什么金山词霸,灵格斯翻译家,有道词典,谷歌翻译等等。
如果你做编程工作,在信息技术领域做研究,那么英语可以说是必不可少的语言。
接下来我们学习一下SYNOPSIS这个区域。
SYNOPSIS区域
SYNOPSIS这个区域是手册页很重要的一个区域,但也是最难理解的区域之一。
SYNOPSIS这个区域的作用就是列出使用命令的所有可能方法。简单地说,SYNOPSIS这个区域显示了所有可能的参数组合。
有些命令的SYNOPSIS区域比较简单,但有些就很复杂了,会是一长串,看得人头大。
我们下面就用一些实际的例子来学习。
man mkdir
我们从mkdir命令的使用手册开始。
如上图所见,mkdir命令的使用手册的NAME区域是:
mkdir - make directories
make是英语“创建”的意思,directories是directory(目录)的复数。所以我们知道mkdir命令是用于创建目录。
mkdir命令的SYNOPSIS区域如下:
虽然这个SYNOPSIS区域比较短,但已经包含不少信息了。它告诉我们如何使用mkdir命令。
我们一点点解析此SYNOPSIS区域:
mkdir:使用mkdir命令,我们当然需要先输入mkdir,这是很好理解的。
[OPTION]:option是英语“选项”的意思。表示在mkdir之后,我们可以加选项参数(就是 -v,-h之类)。在SYNOPSIS区域中,中括号中的内容表示可选,所以我们并不一定要添加选项参数。
DIRECTORY:directory是英语“目录”的意思。就是需要用mkdir命令创建的目录。这个参数是必须的,因为并没有用中括号括起来。这也不难理解,因为mkdir命令就是用于创建目录的,那最少也要输入一个目录的名字吧。
... :省略号表示可以有多个此类内容。在[OPTION]和DIRECTORY后都有省略号,分别表示可以有多个选项和多个目录名。也即是说可以同时指定多个选项参数,也可以用mkdir同时创建多个目录。
那么为什么mkdir使用粗体,而OPTION和DIRECTORY都是用下划线呢?
SYNOPSIS区域中,粗体的文字表示要原封不动地输入,下划线的文字表示要用实际的内容替换。
这也不难理解:mkdir命令肯定要原封不动地输入,而DIRECTORY就要替换成实际要创建的目录名称。
用例
根据SYNOPSIS区域的语法,我们使用mkdir命令时至少要输入一个创建的目录名。
例如:
mkdir photo
用于创建一个名为photo的目录。
而且,DIRECTORY之后的省略号表明我们可以同时输入多个目录名,用于同时创建多个目录,例如:
mkdir photo video music
用于创建photo,video,music三个目录。
我们也可以加选项参数,选项参数在DESCRIPTION区域中:
以上所有的选项参数都可以替换[OPTION],而且可以同时写多个选项参数,例如-pv。
man cp
我们再来看一个比较复杂的SYNOPSIS区域的例子:cp命令的SYNOPSIS区域。
我们之前学过cp命令,它用于拷贝文件或目录。
上图是cp命令的手册,可以看到SYNOPSIS区域如下:
是否有些惊讶?一下子来了三行...
为什么有三行而不是一行呢?原因很简单,因为没法只用一行表达清楚cp命令的使用方法。
逐行来解释:
cp [OPTION]... [-T] SOURCE DEST 拷贝源文件到目标文件。除了cp是原封不动输入外,还必须输入SOURCE和DEST这两部分内容,分别用实际的源文件名和目标文件名代替。也可以加上一个或多个选项参数(替换OPTION),还可以加上-T参数。
cp [OPTION]... SOURCE... DIRECTORY 拷贝一个或多个源文件到目录,除了cp是原封不动输入外,还必须输入SOURCE和DIRECTORY这两部分内容,分别用实际的源文件名和目录名代替。也可以加上一个或多个选项参数(替换OPTION)。
cp [OPTION]... -t DIRECTORY SOURCE... 拷贝一个或多个源文件到目录。除了cp是原封不动输入外,还必须输入DIRECTORY和SOURCE这两部分内容,分别用实际的目录名和源文件名代替。与第二种方法其实效果是一样的,只不过这里把目录名放在了前面,后接需要拷贝到目录的文件名(一个或多个)。但是这里的-t参数是必须加的。也可以加上一个或多个选项参数(替换OPTION)。
比如我们可以这样用:
cp file.jpg file_copy.jpg
是将file.jpg拷贝为file_copy.jpg。
cp file.jpg file_copy.jpg photo/
是将file.jpg和file_copy.jpg两个文件拷贝到photo这个文件夹中。
man apt-get
我们最后来看一个更复杂一些的实例:apt-get的使用手册。
如上图所见,我们的apt-get命令的手册的SYNOPSIS区域如下:
虽然这次的SYNOPSIS区域多得有点吓人,这酸爽...
但是比起cp命令,至少这个SYNOPSIS区域只有一行,虽然这一行略长。
我们逐步分析:
apt-get:这个粗体部分是必须原封不动输入的,这不难理解。
[-sqdyfmubV]:我们可以使用-s,-q,-d,-y,-f,-m,-u,-b,-V这些选项参数中的一个或多个。例如-s,-sqfm,-bV,等等。
-o,-c,-t:这三个选项参数比较特别,也是可选的参数,但是如果要使用它们,必须要接上=xxx,xxx是参数的值。
用大括号括起来的(从update,到最后的-h | --help):大括号括起来的是一个整体,而每个部分又由|号隔开,说明必须要使用大括号里的某一项,但是每次只能使用一项,不能多项同时使用。
例如:
update:更新软件包的缓存。
upgrade:更新所有已安装的软件。
install pkg:安装pkg字段对应的软件包。实际使用时,用实际的软件包名替换pkg。
等等。
当然,可以仔细阅读DESCRIPTION区域,以便了解每个参数的不同含义。
用例
根据apt-get的手册的SYNOPSIS区域的语法,我们使用apt-get时,须要选择大括号里用一竖隔开的任意一个选项。因此,我们可以这样使用:
apt-get install xxx
或者
apt-get update
或者
apt-get autoclean
等等。
但是我们不能同时使用两个或以上大括号里用一竖隔开的选项。例如,下面的用法是错误的:
apt-get update install xxx
SYNOPSIS区域的语法总结
粗体:原封不动地输入。
下划线的部分:用实际的内容替换。
[-hvc]:-h,-v和-c选项都是可选的,非强制性的。
a|b:你可以输入a或者b选项,但是不能够同时输入a和b。
option...:省略号表示前面的内容可以输入任意多个。
apropos命令:查找命令
在使用man命令时,我们需要先知道我们要显示使用手册的那个命令的名字。那如果不知道那个命令叫什么怎么办呢?
这时候我们就需要请apropos命令上场了,apropos是英语“关于”的意思。
apropos命令的用法很简单,只要后接一个关键字,apropos命令就会为你在所有手册页中查找相关的命令。
因此apropos命令与man命令有点对立的关系,man命令用于显示命令的使用手册,而apropos命令用于根据手册中的关键字来找到命令。
我们用实际例子来学习:你想要知道如何用终端的命令来控制音量。
你可以这样查找:
apropos sound
为什么用sound这个关键字呢?因为sound是英语“声音,音量”的意思。
如上图所见,运行apropos sound之后,就列出了所有使用手册中有sound这个关键字的命令。
可以看到,左侧是命令的名字,后边是命令的手册中出现关键字的句子。
我们就知道了要调节音量可以用的命令是:
alsamixer
我们运行此命令:
可以用加号和减号来调节。
其他阅读手册的方式
虽说man命令和apropos命令是最常用的两个有关手册的命令,但是还有其他查阅手册的方式。
那么哪些是man的替代品呢?
-h或--help参数
虽然并不一定,但是大多数命令都接受-h这个参数(有时候它等价的参数--help也可以)。
-h参数中的h是help的首字母,help是英语“帮助”的意思。所以-h或--help参数的作用是显示帮助文档。
虽说一般帮助文档没有man命令显示的使用手册那么详细,但是也很有用,且往往比man显示的手册易于阅读。
比如我们要查看apt-get命令的帮助文档,可以这样:
apt-get -h
whatis命令
what是英语“什么”的意思,is是英语“是”的第三人称单数形式。所以连起来what is就是“是什么”的意思。
whatis命令可以说是man命令的精简版,它只会列出man命令显示的手册的开头部分,就是概述命令的作用。
例如用whatis命令来查看ls命令的作用:
whatis ls
只显示list directory contents,就是说ls命令用于列出目录的内容。
在网络上查看手册
我们不仅仅能在Linux系统里查找到手册,在网络上也可以找到。
如果你暂时不在Linux系统里,又想查一个命令或函数的使用手册,可以用搜索引擎如google或者百度来搜索。
例如,我要查看ls命令的手册,可以在google或百度里搜索:
man ls
一般搜索结果的第一个就是你要找的。
总结
在Linux中,命令和函数都有使用手册。每次遇到命令和函数的用法不明确的情况,都可以通过查考手册来解决。
man命令可以显示命令或函数的使用手册。man后接要显示使用手册的名字。比如:man touch
在手册页时,我们可以用键盘上的上下箭头,PgUp,PgDn,空格来移动到手册的其他部分,用/(斜杠)键来查找,用q键来退出手册。
手册的SYNOPSIS区域很重要,列出了我们使用此命令的所有方法。中括号里的内容是可选的。
apropos命令可以用来查找有相应关键字的命令,比如我们要找和音量,声音有关的命令,可以用apropos sound。
今天的课就到这里,一起加油吧!
下一课我们学习:查找文件,无所遁形