壳牌 – 如何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
命令更加便携。