![“哪个别名”和“whereis 别名”不返回任何内容](https://linux22.com/image/1206130/%E2%80%9C%E5%93%AA%E4%B8%AA%E5%88%AB%E5%90%8D%E2%80%9D%E5%92%8C%E2%80%9Cwhereis%20%E5%88%AB%E5%90%8D%E2%80%9D%E4%B8%8D%E8%BF%94%E5%9B%9E%E4%BB%BB%E4%BD%95%E5%86%85%E5%AE%B9.png)
我最近安装了 Ubuntu 20.04。我找不到别名命令。当我输入时,which alias
什么也没有得到。 也是一样whereis alias
。
答案1
alias
是 shell 内置命令,因此which
找不到whereis
它。要找出某个命令的类型,以及它的可执行文件位于何处如果它有一个(即,如果它是一个外部命令),您可以使用type
:
$ type alias
alias is a shell builtin
type
也是一个 shell 内置命令:
$ type type
type is a shell builtin
当您运行type
外部命令(作为独立于 shell 的可执行文件存在的命令)时type
,将为您提供有关该命令的详细信息。例如,which
它本身就是一个外部命令:
$ type which
which is /usr/bin/which
因为which
它是一个外部命令,所以它不知道你的 shell 提供的命令,在 Bourne 风格的 shell 中,这些命令是 shell 内置命令和 shell 关键字。
它也不知道你自己创建的 shell 函数或别名的命令。例如:
$ f() { printf 'Hello, world.\n'; }
$ which f
$ type f
f is a function
f ()
{
printf 'Hello, world.\n'
}
$ alias g="printf 'Hello, world.\n'"
$ which g
$ type g
g is aliased to `printf 'Hello, world.\n''
此外,还可以有一个外部命令还作为其他类型的命令提供,例如 shell 内置命令。然后,外部命令被称为被其他命令“遮蔽”。运行which
将显示外部命令,即使它不是实际从 shell 运行的命令。例如,Bash 提供printf
内置命令:
$ which printf
/usr/bin/printf
$ type printf
printf is a shell builtin
同样,外部命令也可以被函数或别名所遮蔽。你很可能有一个ls
扩展为外部命令调用的别名ls
:
$ which ls
/usr/bin/ls
$ type ls
ls is aliased to `ls --color=auto'
所有 Bourne 风格的 shell 都有一个type
命令,可以像上述任何示例一样使用。一些 Bourne 风格的 shell(包括 Bash)还允许您将选项传递-a
给它type
,以便它向您显示全部您指定的名称的命令。例如:
$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls
该输出的含义是,当您ls
从 shell 运行时,它将运行一个扩展为 的别名ls --color=auto
,但如果您没有该别名(或者您要删除它),ls
则会运行可执行文件/usr/bin/ls
,如果不存在,则它将运行可执行文件/bin/ls
。 (在我的系统上,这两个可执行文件实际上是同一个文件,可通过不同的路径访问,但 shell 不知道或不关心这一点。)您的输出可能会有所不同。
使用 Bash 或其他 Bourne 风格的 shell 时,通常应使用type
而不是which
,因为它会提供更可靠的信息。如果在某个命令是外部命令的情况下,您只想查看路径(即,查看样式which
提供的输出),则可能需要使用commmand -v
而不是type
或。在正确的which
情况下,会给出相同的输出:which
command -v
$ type file
file is /usr/bin/file
$ which file
/usr/bin/file
$ command -v file
/usr/bin/file
在 where 错误的情况下which
(相对于您所使用的 shell 的实际行为),command -v
仍然不会误导您:
$ type ls
ls is aliased to `ls --color=auto'
$ which ls
/usr/bin/ls
$ command -v ls
alias ls='ls --color=auto'
相反,即使命令whereis
不知道你的 shell 中的任何内容,也没有哪个命令通常比 更受欢迎whereis
。原因是whereis
不仅向你展示了外部命令的位置,还试图向你展示与该命令相关的其他一些重要文件的位置。如果这是你要找的,你可以同时运行type
和whereis
以避免被误导。在大多数情况下,运行 justtype
会告诉你你需要知道的内容。
最后,关于alias
您询问的命令:由于alias
是 shell 内置命令,因此它没有自己的手册页。在大多数 Ubuntu 系统上,运行 的man alias
效果与运行 相同man bash_builtins
,显示 Bash 内置命令列表,但不提供任何内置命令的具体信息。
要获取有关 Bash 中的 shell 内建命令和 shell 关键字的帮助,可以使用命令help
,它本身就是一个 shell 内建命令。help alias
将显示有关 的帮助alias
;help help
将显示有关help
它自身的帮助。(另请参阅help type
。)
您还可以找到Bash 参考手册-- 以及Bash 手册页,您可以通过运行man bash
-- 来查看,它们很有用。它们有记录各种 shell 内置命令和 shell 关键字的部分。
答案2
这可能是你的 shell 的问题,你使用的是 bash 吗?
您无法找到带有which
或的别名wheris
,因为它不是一个程序而是一个 shell 函数。