“哪个别名”和“whereis 别名”不返回任何内容

“哪个别名”和“whereis 别名”不返回任何内容

我最近安装了 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情况下,会给出相同的输出:whichcommand -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不仅向你展示了外部命令的位置,还试图向你展示与该命令相关的其他一些重要文件的位置。如果这是你要找的,你可以同时运行typewhereis以避免被误导。在大多数情况下,运行 justtype会告诉你你需要知道的内容。

最后,关于alias您询问的命令:由于alias是 shell 内置命令,因此它没有自己的手册页。在大多数 Ubuntu 系统上,运行 的man alias效果与运行 相同man bash_builtins,显示 Bash 内置命令列表,但不提供任何内置命令的具体信息。

要获取有关 Bash 中的 shell 内建命令和 shell 关键字的帮助,可以使用命令help,它本身就是一个 shell 内建命令。help alias将显示有关 的帮助aliashelp help将显示有关help它自身的帮助。(另请参阅help type。)

您还可以找到Bash 参考手册-- 以及Bash 手册页,您可以通过运行man bash-- 来查看,它们很有用。它们有记录各种 shell 内置命令和 shell 关键字的部分。

答案2

这可能是你的 shell 的问题,你使用的是 bash 吗?

您无法找到带有which或的别名wheris,因为它不是一个程序而是一个 shell 函数。

相关内容