Linux/Unix中的commands(命令)究竟什么?
一个命令可以是以下四种之一:
1. 一个可执行的程序,就像我们在/usr/bin中看到的那些文件。在这个类别中,程序可以是编译的二进制文件,如用C和C++编写的程序,或用脚本语言编写的程序,如shell、Perl、Python、Ruby等等。
2. 一个内置于shell本身的命令。bash内部支持一些被称为shell内置的命令。例如,cd命令就是一个shell内置的命令。
3. 一个shell函数。shell函数是纳入环境变量中的微型shell脚本。
4. 一个别名(alias)。别名是我们可以自己定义的命令,由其他命令组成。
那如何识别这些命令?
使用type和which命令可以帮助我们。
type - 显示一个命令的类型
type命令是一个shell内建程序,它显示shell将执行的命令的类型或路径。
可以接多个命令名称参数,一起查找。
语法:
type [-afptP] cmd_name [cmd_name ...]
Arguments (参数):
cmd_name - 要解析的命令名称
Exit Status (退出状态值):
如果所有的命令名称都找了返回成功,如果有没找到的返回失败。
常用选项 Options:
Option | Long Option | Meaning |
-a | - | 显示这个命令可以被查找到的所有的路径。 |
-f | - | 不对shell function进行查找。这个类似与内置的command -v命令。 |
-P | - | 搜索给定命令名称的Path(路径),并输出。 |
-p | - | 如果-t返回的是file的话,输出查找到的这个命令的文件路径名。 |
-t | - | 只输出一个单词,表示命令的类型。为以下之一:alias、keyword、function、builtin、file。如果没找到则输出为空。 |
示例
$ type grep
grep is aliased to `grep --color=auto'
$ type -a grep
grep is aliased to `grep --color=auto'
grep is /usr/bin/grep
grep is /bin/grep
$ type -f grep
grep is aliased to `grep --color=auto'
$ type -P grep
/usr/bin/grep
$ type -t grep
alias
$ type type
type is a shell builtin
$ type -t type
builtin
===== ===== ===== ===== ===== ===== =====
which - 显示可执行文件的路径
有时,一个系统上安装的可执行程序有不止一个版本。
虽然这种情况在桌面系统上并不常见,但在大型服务器上却并不罕见。为了确定某个可执行程序的确切位置,可以使用which命令。
which命令只用查找于可执行程序,而不是内置程序(builtin),也不是实际可执行程序的别名(alias)。
所以当我们试图在一个shell内置程序上使用which时,例如cd,我们要么没有得到回应,要么得到一个错误信息。
$ which cd
/usr/bin/which: no cd in (/usr/local/bin:/usr/bin:/bin:/usr/local
/games:/usr/games)
语法:
which [-a] filename ...
Arguments (参数):
filename - 要查找路径的文件名
Exit Status (退出状态值):
0 - 所有的可执行文件都找到了
1 - 至少一个文件没找到,或者是不可执行的
2 - 使用参数错误
常用选项 Options:
Option | Long Option | Meaning |
-a | - | 显示这个命令可以被查找到的所有的路径。 |
示例
$ which which
/usr/bin/which
$ which grep
/usr/bin/grep
$ which -a which
/usr/bin/which
/bin/which