type 命令是内置的 bash shell 命令可以提供指定命令的类型。
“命令的类型”是什么意思? 这意味着您可以获取诸如 Linux 命令是否是内置 shell 命令、其可执行文件位于何处以及它是否与其他命令具有别名等信息。
它可能看起来没有多大用处,但相信我在调查命令以某种方式运行的原因时会派上用场。
在 Linux 中使用 type 命令
type 命令的语法很简单:
type [options] name
首先,让我们在著名的 echo 命令上使用不带选项的 type 命令:
[email protected]:~$ type echo
echo is a shell builtin
它告诉我们回声是一个 贝壳 内置命令。 如果名称 echo 由命令行解释,这是将运行的命令类型。
让我们试试别的东西:
[email protected]:~$ type mkdir
mkdir is /usr/bin/mkdir
在上述情况下,它会定位 mkdir 命令的可执行文件。 这类似于 which 命令,但 type 更快,因为它是一个内置的 shell 命令。
如果你将它与不是命令的东西一起使用,它会给出一个未找到的错误。
[email protected]:~$ type no_command
bash: type: no_command: not found
2.别名命令的类型
您可能已经熟悉 Linux 中的别名。 快速回忆一下,这些是类似于快捷方式的伪命令。 它们可以在您的 shell 配置文件中设置。
让我们看看当您在别名命令上使用它时会找到什么样的信息类型命令:
[email protected]:~$ type ll
ll is aliased to `ls -alF'
如您所见,它显示了别名背后的真实命令。
3.获取多个命令的类型
您还可以将 type 与多个命令一起使用,并将结果回显给我们。
[email protected]:~$ type ls ll
ls is aliased to `ls --color=auto'
ll is aliased to `ls -alF'
在 Ubuntu 和其他一些发行版上, ls 是别名以向您显示彩色输出。 这有助于您区分符号链接、硬链接、目录、可执行文件和其他不同类型的文件。
4.强制类型返回命令的路径
如果你想定位一个命令的可执行文件并且类型不断地给出输出,比如内置的 shell 和别名信息,你可以使用 -P 选项强制获取路径。
[email protected]:~$ type -P ls
/usr/bin/ls
这将返回路径名,即使它是别名、内置或函数。
5.获取命令的所有信息
我们可以使用选项 -a 获得最完整的信息。
[email protected]:~$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
这向我们显示了文件的类型信息和系统路径上的每个位置。
6.只返回命令类型,不返回路径
这是您可以获得的不同类型:
- 别名
- 内置
- 文件
- 功能
- 关键词
您可以仅使用 -t 选项提示输入类型。 这里有一些例子:
[email protected]:~$ type -t ls
alias
[email protected]:~$ type -t echo
builtin
[email protected]:~$ type -t sort
file
[email protected]:~$ type -t _mac_addresses
function
[email protected]:~$ type -t if
keyword
奖励:为什么你会看到“命令被散列”?
有时您会看到类似命令的输出与可执行文件的路径一起散列:
[email protected]:~$ type man
man is hashed (/usr/bin/man)
为了避免在搜索可执行文件的路径上花费太多时间,shell 通常会保留一份它过去找到的程序的列表。 该列表称为“哈希”。
当您看到类似“command is hashed”这样的输出时,这意味着 type 命令正在返回已经执行的搜索的结果。 您可以使用 哈希 -r 强制外壳从头开始搜索。
结论
我希望你今天通过在 Linux 中引入 type 命令学到了一些新东西。 我发现它类似于用于获取文件信息的文件命令。
如果您喜欢本指南,请在社交媒体上分享。 如果您有任何意见或问题,请在下方留言。 如果您对希望看到的主题有任何建议,也请随时留下。 谢谢阅读。