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