如何获取Linux命令的完整路径名

4
我想查找Linux中命令的文件路径,例如 ls 的文件路径为/bin/ls。怎样能够找到一些命令的确切路径?

2
使用 which 命令,例如:which ls - bansi
“which” 是首选,但因为 “i” 还没有被提及,有时候 “locate” 也非常有用。 - linluk
5个回答

8
正如指出的那样,which <progName>可以实现此功能。你也可以尝试以下命令:
whereis -b <progName>

这将列出所有包含progName的路径。例如,在我的机器上运行whereis -b gcc会返回:
gcc: /usr/bin/gcc /usr/lib/gcc /usr/bin/X11/gcc

在我的机器上,我有/bin/gcc/usr/bin/gcc(它们都是链接,经过多次链接后指向实际程序/usr/bin/x86_64-linux-gnu-gcc-9),但前者没有列在whereis gcc中。 - alx - recommends codidact
“whereis -b” 对于 “type” 不起作用,这是正常情况吗? - alper

4

您可以使用which命令,它会给出命令的路径:

$ which ls
/bin/ls

您可以使用type
 $ type ls
 ls is /bin/ls

使用 type 命令非常出色,它通常是一个内置命令,如果 POSIX 没有提供,则可以使用 type -p(如果该选项可用)返回修剪后的结果,该结果可以被分配并用作命令。例如:myprog=$(type -p someexename) - David C. Rankin
@DavidC.Rankin 是的,谢谢你的信息。 - Hackaholic

1
你可以使用which命令。如果在你的$PATH中有该命令,它将显示完整路径:
mureinik@computer ~ $ which cp
/usr/bin/cp

同时它也会显示关于别名的详细信息:
mureinik@computer ~ $ which ls
alias ls='ls --color=auto'
    /usr/bin/ls

我的Ubuntu v16.04上没有别名的详细信息。 - Sopalajo de Arrierez

1

是的,您可以使用which命令找到它。

which <command>

eg which cat

/bin/cat

1
您没有指定使用哪个 shell,但我强烈建议使用 which,因为它不一定会执行您所期望的操作。以下是两个示例,结果可能与您期望的不同:
(1)使用 bash 和命令 echo 的示例:
 which echo

输出将会是/usr/bin/echo,但如果您在bash脚本中使用echo命令,则不会执行/usr/bin/echo。相反,将执行内置命令echo,它的行为类似,但并非完全相同。

(2) 使用zshwhich命令的示例:

which which

会输出消息which: shell内置命令(这是正确的,但肯定不是您请求的文件路径),而

/usr/bin/which which

这会输出文件路径/usr/bin/which,但是(如bash示例中所示),当你只输入which时,这不是正在执行的内容。

有些情况下,你可以肯定地知道(因为你了解你的应用程序),which将产生正确的结果,但请注意,一旦涉及到内置命令、别名和shell函数,你需要先决定如何处理这些情况,然后选择适合你所使用的shell类型的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接