【发布时间】:2016-01-18 05:54:10
【问题描述】:
我想找出Linux中命令的文件路径,例如ls的文件路径为/bin/ls。如何找出某些命令的确切路径?
【问题讨论】:
-
使用which 例如:
which ls -
which是要走的路。但因为我还没有被提及:locate有时也很有用。
我想找出Linux中命令的文件路径,例如ls的文件路径为/bin/ls。如何找出某些命令的确切路径?
【问题讨论】:
which ls
which 是要走的路。但因为我还没有被提及:locate 有时也很有用。
正如所指出的,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.
whereis -b 对type 不起作用是正常情况吗?
您可以使用which,它会为您提供命令路径:
$ which ls
/bin/ls
你可以使用type:
$ type ls
ls is /bin/ls
【讨论】:
type 做得很好,它通常是内置的,如果 POSIX 没有提供的话。 type -p(如果该选项可用)将返回一个可以分配并用作命令的修剪结果。例如myprog=$(type -p someexename).
您可以使用which 命令。如果您的$PATH 中有命令,它将显示完整路径:
mureinik@computer ~ $ which cp
/usr/bin/cp
它还会显示别名的详细信息:
mureinik@computer ~ $ which ls
alias ls='ls --color=auto'
/usr/bin/ls
【讨论】:
是的,您可以使用which 命令找到它
which <command>
例如which cat
/bin/cat
【讨论】:
您没有指定您将使用哪个 shell,但我强烈建议您使用 which,因为它不一定如您所愿。这里有两个例子,结果可能不是你所期望的:
(1) bash 示例,命令echo:
which echo
会输出/usr/bin/echo,但如果您在 bash 脚本中使用echo 命令,/usr/bin/echo 将不执行。而是执行内置命令echo,这与此类似,但在行为上并不相同。
(2) zsh 示例,命令which:
which which
将输出消息which: shell built-in command(这是正确的,但肯定不是您要求的文件路径),而
/usr/bin/which which
将输出文件路径/usr/bin/which,但是(如在 bash 示例中)这不是您只需键入 which 时执行的内容。
在某些情况下,当您确定知道(因为您了解您的应用程序)时,which 会产生正确的结果,但请注意,一旦内置命令、别名和 shell涉及到函数,您首先需要决定如何处理这些情况,然后根据您使用的 shell 类型选择合适的工具。
【讨论】: