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