1、究竟什么是命令
一条命令不外乎以下四种情况:
- 可执行程序。可执行程序就像在/usr/bin目录里看到的所有文件一样。在该程序类别中,程序可以编译为二进制文件,比如C、C++语言编写的程序,也可以是shell、Perl、Python、Ruby等脚本语言编写的程序。
- shell内置命令。bash支持许多在内部称之为shell builtin的内置命令。例如,cd命令就是shell内置指令。
- shell函数。shell函数是合并到环境变量中的小型shell脚本。
- alias命令。我们可以在其他命令的基础上定义自己的命令。
2、识别命令
2.1、type–显示命令的类型
type命令是一个shell内置命令,可以根据指定的命令名显示shell将要执行的命令类型,格式如下:type command
2.2、which–显示可执行程序的位置
有时候,系统中可能会安装一个可执行程序的多个版本。这种现象虽然在桌面系统中不常见,但是在大型服务器中却是很常见的。使用which命令可以确定一个给定可执行文件的准确位置。
which命令只适用于内置命令和命令别名(真正可执行程序的替代物)。试图在shell内置命令(例如,cd)中使用which命令时,要么没响应,要么得到一条错误信息:
3、获得命令文档
3.1、help–获得shell内置命令的帮助文档
bash为每一个shell内置命令提供了一个内置的帮助工具。输入help,然后输入shell内置命令的名称即可使用该帮助工具,例如:
注意表示法:出现在命令语法描述中的方括号表示一个可选项。竖线符号代表的是两个互斥的选项。比如:cd [-L|-P][dir]
这种表示法说明,cd命令可能又一个-L参数,也可能是-P参数,甚至跟参数dir。
3.2、help–显示命令的使用信息
很多可执行程序都支持- -help选项,- -help选项描述了命令支持的语法和选项。例如:
一些程序不支持- -help选项,但是我们还是要试试。这通常会产生一条错误消息,该错误消息也能揭示相同的命令使用信息。
3.3、man–显示程序的手册页
大多数供命令行使用的可执行文件,提供一个称之为manual或者是man page的正式文档。该文档可以用一种称为man的特殊分页程序来查看,用法格式:man program
手册文档在格式上会有所不同,但是通常都包括标题、命令句法的摘要、命令用途的描述、命令选项列表以及每个命令选项的描述。但是,手册文档通常不包括实例,更多的是作为一个参考使用,而不是教程。例如,尝试查看ls
命令的手册文档:
在大多数Linux系统中,man命令调用less命令来显示手册文档。所有,当显示手册文档是,你熟悉的所有less命令都能奏效。
man命令显示的“手册文档”被分为多个部分(section),它不仅包括用户命令,也包括系统管理命令、程序接口、文件格式等。
手册文档的组织结构
部分 | 内容 |
1 | 用户命令 |
2 | 内核系统调用的程序接口 |
3 | C库函数程序接口 |
4 | 特殊文件,如设备结点和驱动程序 |
5 | 文件格式 |
6 | 游戏和娱乐,例如屏幕保护程序 |
7 | 其它杂项 |
8 | 系统管理命令 |
有时候我们需要查看手册文档的具体部分,以查找我们需要的信息。当我们所查找的一个文件格式同时也是一个命令名的时候,这一点就尤为重要了。如果没有指明部分编号(section number),通常我们会获得第一次匹配的实例(它可能会出现在第一部分)。为了指明具体在哪个部分,我们可以这样使用man命令:man section search-term
例如:man 5 passwd
。该命令将会显示文件/etc/passwd的文件格式描述手册。
3.4、apropos–显示合适的命令
我们有可能会搜索参考手册列表,才进行基于某个搜索条目的匹配。尽管有些粗糙,但是这种方法有时还是有用的。下面是一个使用floppy为搜索条目,来搜索参考手册的例子。
在输出中,每一行的第一个字段四手册页的名称,第二个字段显示部分。主要,带有-k选项的man命令与apropos命令在功能上基本是一致的。
3.5、whatis–显示命令的简要描述
whatis程序显示匹配具体关键字的手册页的名字和一行描述。
3.6、info–显示程序的info条目
GNU项目提供了info页面来代替手册文档。info页面可通过info阅读器来显示。info页面使用超链接,这与网页结构很相似。
info程序读取info文件,该文件是树形结构,分为各个单独的节点,可一个节点包含一个主题。info文件包含的超链接可以实现节点间的跳转。通过前置星号可以识别超链接,将光标放在超链接上并按Enter键,可以激活它。
可以通过输入info以及程序名(可选的)来调用info。
例如:info coreutils
用于控制阅读器的命令
命令 | 功能 |
? | 显示命令帮助 |
PAGE UP or BACKSPACE | 返回上一页 |
PAGE DOWN or Spacebar | 返回下一页 |
n | Next–显示下一个节点 |
p | Previous–显示上一个节点 |
u | Up–显示当前显示节点的父节点(通常是一个菜单) |
ENTER | 进入光标所指的超链接 |
q | 退出 |
3.7、README和其他程序文档文件
系统中安装的很多软件包都有自己的文档文件,它们存放在/usr/share/doc
目录中。其中大部分文档文件是以纯文本格式存储的,因此可以用less
命令来查看。有些文件是HTML格式,并且可以用Web浏览器来查看。我们可以会遇到一些以.gz
扩展名结尾的文件。这表明它们是使用gzip压缩程序压缩过的。gzip包包含一个特殊的less版本,称之为zless。zless可以显示由gzip压缩过的文本文件的内容。
4、使用别名创建自己的命令
我们可以使用alias
命令创建自己的命令,但是在开始前,我们需要展示一个命令行的小技巧,通过使用分号来分隔多条命令,就可以将多条命令输入在一行中,其工作方式为:command1;command2;command3...
我们可以看到,我们将3条命令放置在同一行中。首先我们将当前目录改变为/usr,然后列出这个目录内容,最后返回到原始目录(使用cd -)。那么程序结束的位置恰恰是开始的位置。现在,我们通过alias
命令将以上命令整合成一条新的命令,首先要为新命令虚构出一个名称,试试名称test。不过输入前,我们最好检查一下名称test是否已经被使用过了。为此,我们可以再次使用type
命令.。
这个名字已经用过了,试试foo
foo没有被使用。下面创建新命令的别名:
注意这个命令的结构:alias name='string'
在alias
命令之后输入name,紧接着是一个等号(没有空格),等号之后是一个用单引号括起来的字符串,该字符串的内容将赋值给name。定义好的别名可以用在shell期待的任何地方:
也可以再次使用type命令来查看别名:
要删除别名,可以使用unalias命令: