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