开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
@TOC
前言
每个命令都有自己奇妙的选项和参数,这一章节 我们将介绍以下命令:
- type –说明解释一个命令名
- which –显示会执行哪个可执行程序
- man –显示命令手册页
- apropos –显示一系列适合的命令
- info –显示命令 info
- whatis –显示一个命令的简洁描述
- alias –创建命令别名
一、使用命令
1.1 到底什么是命令
命令可以是下面四种形式之一:
是一个可执行程序
,就像我们所看到的位于目录/usr/bin 中的文件一样。属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++ 语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby 等等。是一个内建于shell 自身的命令
。bash 支持若干命令,内部叫做 shell 内部命令(builtins)。例如,cd命令,就是一个 shell 内部命令。是一个 shell 函数
。这些是小规模的 shell 脚本,它们混合到环境变量中。在后续的章节里,我们将讨论配置环境变量以及书写 shell 函数。但是现在,仅仅意识到它们的存在就可以了。是一个命令别名
。我们可以定义自己的命令,建立在其它命令之上。
1.2 识别命令
我们经常需要知道我们的命令是四大类的哪一类,Linux提供了一系列的方法让我们识别:
- type
- help
- which
- man
- apropos
- whatis
1.3 type -显示命令的类型
type 命令是 shell 内部命令,它会显示命令的类别,给出一个特定的命令名(做为参数)。它像这样工作:
type command
“command” 是你要检测的命令名。这里有些例子:
[me@linuxbox ~]$ type type
type is a shell builtins
[me@linuxbox ~]$ type ls
ls is aliased to `ls --color=tty`
[me@linuxbox ~]$ type cp
cp is /bin/cp
我们看到这三个不同命令的检测结果。
注意,ls 命令(在 Fedora 系统中)的检查结果,ls命令实际上是 ls 命令加上选项 “--color=tty” 的别名。现在我们知道为什么 ls 的输出结果是有颜色的!
1.4 which -显示一个可执行程序的位置
为了确定所给定的执行程序的准确位置,使用 which命令:
[me@linuxbox ~]$ which ls
/bin/ls
这个命令只对可执行程序有效,不包括内部命令和命令别名,别名是真正的可执行程序的替代物。
当我们试着使用 shell 内部命令时,例如,cd 命令,我们或者得不到回应,或者是个错误信息:
[me@linuxbox ~]$ which cd
/usr/bin/which: no cd in (/opt/jre1.6.0_03/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/opt/jre1.6.0_03/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/home/me/bin)
以上说明 cd命令找不到,间接说明了which 只能用来判断给定执行程序的准确位置而不能判断内建shell命令或别名
1.5 得到命令文档
知道了什么是命令,现在我们来寻找每一类命令的可得到的文档
1.6 help -得到 shell 内部命令的帮助文档
bash 有一个内建的帮助工具,可供每一个 shell 内部命令使用。输入 “help”,接着是 shell 内部命令名。例如:
[me@linuxbox ~]$ help cd
cd: cd [-L|-P] [dir]
Change ...
注意
[]
表示法:出现在命令语法说明中的方括号,表示可选的项目。
|
表示:一个竖杠字符表示互斥选项(或者的意思)。
在上面 cd 命令的例子中:
cd [-L|-P] [dir]
这种表示法说明,cd 命令可能有一个 “-L” 选项或者”-P” 选项,进一步,可能有参数“dir”。
1.7 --help - 显示用法信息
许多可执行程序支持一个 “--help” 选项,这个选项是显示命令所支持的语法和选项说明。
例如:
[me@linuxbox ~]$ mkdir --help
Usage: mkdir [OPTION] DIRECTORY...
Create ...
一些程序不支持 “--help” 选项,但不管怎样试一下。这经常会导致输出错误信息,但同时能揭示一样的命令用法信息。
1.8 man -显示程序手册页
许多希望被命令行使用的可执行程序,提供了一个正式的文档,叫做手册或手册页 (man page)。一个特殊的叫做 man
的分页程序,可用来浏览他们。它是这样使用的:
man program
“program
”是要浏览的命令名。
手册文档的格式有点不同,一般地包含一个标题,命令语法的纲要,命令用途的说明,和命令选项列表,及每个选项的说明。然而,通常手册文档并不包含实例,它打算作为一本参考手册,而不是教材。作为一个例子,浏览一下 ls 命令的手册文档:
[me@linuxbox ~]$ man ls
在大多数 Linux 系统中,man 使用 less 工具来显示参考手册,所以当浏览文档时,你所熟悉的 less 命令都能有效。man
所显示的参考手册,被分成几个章节,它们不仅仅包括用户命令,也包括系统管理员命令,程序接口,文件格式等等。
下表描绘了手册的布局:
章节号 | 内容 |
---|---|
1 | 用户命令 |
2 | 程序接口内核系统调用 |
3 | C 库函数程序接口 |
4 | 特殊文件,比如说设备结点和驱动程序 |
5 | 文件格式 |
6 | 游戏娱乐,如屏幕保护程序 |
7 | 其他方面 |
8 | 系统管理员命令 |
表-手册页的组织形式
我们这样使用 man 命令,来指定章节号:
man section search_term
例如:
[me@linuxbox ~]$ man 5 passwd
命令运行结果会显示文件 /etc/passwd 的文件格式说明手册。
1.9 apropos -显示适当的命令
也有可能搜索参考手册列表,基于某个关键字的匹配项。虽然很粗糙但有时很有用。
下面是一个以 “floppy” 为关键词来搜索参考手册的例子:
[me@linuxbox ~]$ apropos floppy
create_floppy_devices (8) - udev callout to create all possible
...
输出结果每行的第一个字段是手册页的名字,第二个字段展示章节。
注意,man 命令加上“-k” 选项,可以完成和apropos一样的功能
[me@linuxbox ~]$ man -k passwd
使用man -k passwd会找到很多和passwd相关的帮助页。
1.10 whatis -显示非常简洁的命令说明
whatis 程序显示匹配特定关键字的手册页的名字和一行命令说明:
[root@localhost mysql]# whatis bash
bash (1) - GNU Bourne-Again SHell
[root@localhost mysql]# whatis cd
cd (1) - bash built-in commands, see bash(1)
cd (1p) - change the working directory
简单说,就是简单介绍命令的含义
而不是显示命令手册的难以理解的解释
1.11 info - 显示程序 Info 条目
info 内容可通过 info 阅读器程序读取。
info 页是超级链接形式的,和网页很相似。 这有个例子:
File: coreutils.info, Node: ls invocation, Next: dir invocation,
Up: Directory listing
10.1 `ls': List directory contents
==================================
...
info 程序读取 info 文件,info 文件是树型结构,分化为各个结点,每一个包含一个题目。
info 文件包含超级链接,它可以让你从一个结点跳到另一个结点。一个超级链接可通过它开头的星号来辨别出来,把光标放在它上面并按下 enter
键,就可以激活它。
1.12 README 和其它程序文档
1.13 用别名(alias)创建你自己的命令
用 alias 命令创建我们自己的命令。
但在开始之前,我们需要展示一个命令行小技巧。可以把多个命令放在同一行上,命令之间用 “;” 分开。它像这样工作:
command1; command2; command3...
例如:
[me@linuxbox ~]$ cd /usr; ls; cd -
bin games kerberos lib64 local share tmp
...
[me@linuxbox ~]$
我们在一行上联合了三个命令。
- 首先更改目录到/usr,
- 然后列出目录内容,
- 最后回到原始目录(用命令 “cd ∼”), 结束在开始的地方。
现在,通过 alia 命令把这一串命令转变为一个命令。 我们要做几件事:
首先,创建一个没有被使用过的命令名
比如test
我们使用type命令查看一下test是否存在于系统中:
[me@linuxbox ~]$ type test
test is a shell builtin
可惜 test已经被使用了
[me@linuxbox ~]$ type foo
bash: type: foo: not found
foo没有被占用
创建命令别名:
[me@linuxbox ~]$ alias foo='cd /usr; ls; cd -'
注意命令结构:
alias name='string'
string指我们用分号分隔的多个命令
可以使用 type 命令来查看我们的别名:
[me@linuxbox ~]$ type foo
foo is aliased to `cd /usr; ls ; cd -'
删除别名
,使用 unalias 命令,像这样:
[me@linuxbox ~]$ unalias foo
[me@linuxbox ~]$ type foo
bash: type: foo: not found
把一个普遍用到的选项加到一个经常使用的命令后面
虽然我们有意避免使用已经存在的命令名来命名我们的别名,但这是常做的事情。
通常,会把一个普遍用到的选项加到一个经常使用的命令后面。
例如,之前见到的 ls 命令,会带有色彩支持
[me@linuxbox ~]$ type ls
ls is aliased to 'ls --color=tty'
1.14 拓展阅读
在网上,有许多关于 Linux 和命令行的文档。以下是一些最好的文档:
- bash 参考手册是一本 bash shell 的参考指南。它仍然是一本参考书,但是包含了很多实例,而且它比 bash 手册页容易阅读。 www.gnu.org/software/ba…
- Bash FAQ 包含关于 bash,而经常提到的问题的答案。这个列表面向 bash 的中高级用户,但它包含了许多有帮助的信息。 mywiki.wooledge.org/BashFAQ
- GUN 项目为它的程序提供了大量的文档,这些文档组成了 Linux 命令行实验的核心。这里你可以看到一个完整的列表:www.gnu.org/manual/manu…
- Wikipedia 有一篇关于手册页的有趣文章:en.wikipedia.org/wiki/Man pageBash 参考手册是一本 bash shell 的参考指南。它仍然是一本参考书,但是包含了很多实例,而且它比 bash 手册页容易阅读。 www.gnu.org/software/ba…
- Bash FAQ 包含关于 bash,而经常提到的问题的答案。这个列表面向 bash 的中高级用户,但它包含了许多有帮助的信息。mywiki.wooledge.org/BashFAQ
- GUN 项目为它的程序提供了大量的文档,这些文档组成了 Linux 命令行实验的核心。这里你可以看到一个完整的列表: www.gnu.org/manual/manu…
- Wikipedia 有一篇关于手册页的有趣文章:en.wikipedia.org/wiki/Man page
总结
在这一章中,我们主要学会认识:
- 命令是什么(可执行程序,shell命令,shell函数,命令别名)
- 如何识别命令(which,type)
- 怎么查看命令的含义(man,apropo,whatis)