在 Linux 中使用 Type Command 获取有关命令的信息
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 配置文件中设置。
让我们看看在别名命令上使用它时命令类型会找到什么样的信息:
christopher@linux-handbook:~$ type ll
ll is aliased to `ls -alF'
如您所见,它显示了别名背后的真实命令。
获取多个命令的类型
您还可以将类型与多个命令一起使用并将结果反馈给我们。
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@linux:~$ type -t _mac_addresses
function
christopher@linux:~$ type -t if
keyword
奖励:为什么你会看到“命令已被散列”?
有时您会看到类似“命令已散列”的输出以及可执行文件的路径:
christopher@linux-handbook:~$ type man
man is hashed (/usr/bin/man)
为了避免花费太多时间搜索可执行文件的路径,shell 通常会保存一个它过去找到的程序列表。这个列表称为“哈希”。
当您看到类似“command is hashed”的输出时,这意味着 type 命令正在返回已执行的搜索的结果。您可以使用hash -r强制 shell 从头开始搜索。
结论
我希望你今天通过对 Linux 中的 type 命令的介绍学到了一些新东西。我发现它类似于用于获取文件信息的file 命令。
如果您喜欢本指南,请在社交媒体上分享。如果您有任何意见或问题,请在下面留言。如果您对希望涵盖的主题有任何建议,也请随时留言。感谢您的阅读。