在Linux中使用type命令获取有关命令的信息
type命令是内置的bash shell命令,可以提供指定命令的类型。
“命令类型”是什么意思?
这意味着我们可以获得诸如Linux命令是否为内置shell命令,其可执行文件位于何处以及是否为其他命令的别名之类的信息。
似乎它没什么用,但相信我在调查命令以某种方式表现时可能会派上用场。
在Linux中使用type命令
type命令的语法很简单:
type [options] name
首先,让我们在众所周知的echo命令上使用不带选项的type命令:
Hyman@theitroad:~$type echo echo is a shell builtin
它告诉我们echo是Shell内置命令。
如果名称echo由命令行解释,则这是将运行的命令类型。
让我们尝试其他方法:
Hyman@theitroad:~$type mkdir mkdir is /usr/bin/mkdir
在上述情况下,它将找到mkdir命令的可执行文件。
这类似于which命令,但是类型更快,因为它是内置的shell命令。
如果将其与非命令一起使用,则会出现未找到的错误。
Hyman@theitroad:~$type no_command bash: type: no_command: not found
2.别名命令的类型
我们可能已经熟悉Linux中的别名。
为了快速调用,这些是伪指令,其作用类似于快捷方式。
可以在shell配置文件中设置它们。
让我们看看在别名命令上使用命令时会发现什么样的信息类型:
Hyman@theitroad:~$type ll ll is aliased to `ls -alF'
如我们所见,它在别名后面显示了真实的命令。
3.获取多个命令的类型
我们还可以将type与多个命令结合使用,并将结果回显给我们。
Hyman@theitroad:~$type ls ll ls is aliased to `ls --color=auto' ll is aliased to `ls -alF'
在Ubuntu和其他发行版中,ls别名为我们显示了色彩鲜艳的输出。
这可以区分符号链接,硬链接,目录,可执行文件和其他不同类型的文件。
4.强制类型返回命令路径
如果要查找命令的可执行文件并键入,并保持输出诸如内置shell和别名信息之类的信息,则可以使用-P选项强制获取路径。
Hyman@theitroad:~$type -P ls /usr/bin/ls
这将返回路径名,即使它是别名,内置函数或者函数。
5.获取命令的所有信息
我们可以使用-a选项获得最完整的信息。
Hyman@theitroad:~$type -a ls ls is aliased to `ls --color=auto' ls is /usr/bin/ls ls is /bin/ls
这向我们显示了类型信息以及带有文件的系统路径上的每个位置。
6.仅返回命令类型,不返回路径
我们可以得到以下不同的类型:
- 别名
- 内建
- 文件
- 函数
- 关键词
我们可以使用-t选项仅提示输入类型。
这里有一些例子:
Hyman@theitroad:~$type -t ls alias Hyman@theitroad:~$type -t echo builtin Hyman@theitroad:~$type -t sort file Hyman@theitroad:~$type -t _mac_addresses function Hyman@theitroad:~$type -t if keyword
为什么我们看到“命令is hashed”?
有时,我们会看到类似命令的输出与可执行文件的路径一起被散列:
Hyman@theitroad:~$type man man is hashed (/usr/bin/man)
为了避免在搜索可执行文件的路径上花费过多的时间,shell通常会保留其过去找到的程序列表。
此列表称为“哈希”。
当我们看到类似“命令是散列”的输出时,表示type命令正在从已执行的搜索中返回结果。
我们可以使用hash -r强制shell从头开始搜索。