如何知道命令在linux中运行的位置

时间:2015-01-03 16:21:46

标签: linux bash unix

假设我在unix中运行了一个命令,如lsrm,路径变量设置如下

PATH=$JAVA_HOME/bin:.:$ORACLE_HOME/bin:/sbin:/usr/sbin:/usr/bin:/usr/ccs/bin:$COBDIR/bin:/sbin:/bin:/usr/local/bin:/bin

我们如何知道ls命令从哪条路径运行? ls /sbin也可以/usr/bin({1}}

所以我想知道它在哪里跑?

我无法负担搜索所有目录并知道所有目录ls所在的位置。有没有直接的方法来搜索ls从哪里开始?

3 个答案:

答案 0 :(得分:6)

当您在bash中运行外部命令时,bash会对该命令进行哈希处理以避免必须执行两次路径查找。 hash命令可以告诉您运行了哪个命令。如果该命令尚未在哈希的生命周期中运行,则会出错。

$ hash -t ls
-bash: hash: ls: not found

$ ls foo
$ hash -t ls
/bin/ls

了解hashwhichtype命令的不同之处是有利的。

  • hash告诉您 使用/散列的路径/命令。如果您的PATH或文件系统在hash生命周期内发生变化,hash可以告诉您在更改之前发生的命令。
  • which是一个外部命令,用于在PATH环境变量中查找命令。
  • type是一个内置命令,用于在本地PATH变量中查找命令,该命令可以(但几乎没有)与环境中的命令不同。

请参阅bash中的help hash,详细了解其工作原理。

答案 1 :(得分:4)

只需使用哪个来定位从

中拾取的确切位置
$ which ls
  /bin/ls

它将列出从中获取该可执行文件的路径。所以从上面的命令,我的ls命令在/ bin目录中。

答案 2 :(得分:0)

除了提及whichtypehash的其他答案之外,您还可以使用whereis(1)命令(如果它已安装在您的系统上)。

whereis告诉您命令所在的标准位置。

如果您的互动外壳为zsh,您还可以使用=ls字词,例如echo =lsls =ls找出shell提到的ls

你也可以别名ls,或者有一个shell函数ls来设置/bin/ls可执行文件等等......当然,程序可以启动/bin/ls < em>没有分支shell(例如,使用普通fork + execve ...)

另请阅读execvp(3)&amp; environ(7)