在Linux中使用type命令获取有关命令的信息

时间:2020-03-05 15:29:57  来源:igfitidea点击:

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从头开始搜索。