壳牌 – 如何find一些命令的目录?

我知道,当你在shell上时,唯一可以使用的命令是在PATH上设置的某个目录中可以find的命令。 即使我不知道如何查看PATHvariables上的dir(这是另一个可以回答的好问题),我想知道的是:

我来炮弹写:

$ lshw 

我想知道一个shell命令,可以告诉我WHERE这个命令所在。 换句话说,这个“可执行文件”在哪里?

就像是:

 $ location lshw /usr/bin 

任何人?

如果您使用的是Bash或zsh,请使用以下命令:

 type -a lshw 

这将显示目标是内置函数,别名还是外部可执行文件。 如果是后者,它会显示每个出现在PATH

 bash$ type -a lshw lshw is /usr/bin/lshw bash$ type -a ls ls is aliased to `ls --color=auto' ls is /bin/ls bash$ zsh zsh% type -a which which is a shell builtin which is /usr/bin/which 

在Bash中,对于函数type -a也会显示函数定义。 你可以使用declare -f functionname做同样的事情(你必须使用zsh,因为type -a不)。

喜欢这个:

 which lshw 

PATH是一个环境variables,可以用echo命令显示:

 echo $PATH 

这是一个由冒号“ : ”分隔的path列表

which命令告诉你当你运行一个命令时执行哪个文件:

 which lshw 

有时你得到的是一个符号链接的path; 如果你想跟踪那个链接到实际的可执行文件所在的位置,你可以使用readlink并input它的输出:

 readlink -f $(which lshw) 

-f参数指示readlink以recursion方式继续符号链接。

以下是我的机器的一个例子:

 $ which firefox /usr/bin/firefox $ readlink -f $(which firefox) /usr/lib/firefox-3.6.3/firefox.sh 
 ~$ echo $PATH /home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games ~$ whereis lshw lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz 

Korn shell提供了内置的标识,它标识了其他的shell内build插件,macros等等。然而which命令更加便携。