命令可以是下面四种形式之一:
-
是一个可执行程序,就像我们所看到的位于目录/usr/bin 中的文件一样。 属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++语言写成的程序, 也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等。
-
是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,cd 命令,就是一个 shell 内部命令。
-
是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。 在后续的章节里,我们将讨论配置环境变量以及书写 shell 函数。但是现在, 仅仅意识到它们的存在就可以了。
-
是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。
识别命令
这经常很有用,能确切地知道正在使用四类命令中的哪一类。Linux 提供了一对方法来 弄明白命令类型。
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 的输出结果是有颜色的!
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)
说“命令没有找到”,真是很奇特。