Shell - 如何查找某些命令的目录?

时间:2010-05-19 20:21:55

标签: linux shell command-line

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

我来到贝壳并写道:

$ lshw

我想知道shell上的一个命令可以告诉我这个命令的位置。换句话说,这个“可执行文件”位于何处?

类似的东西:

$ location lshw
/usr/bin

任何?

8 个答案:

答案 0 :(得分:149)

如果您使用的是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没有)。

答案 1 :(得分:52)

像这样:

which lshw

答案 2 :(得分:17)

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

echo $PATH

这是由冒号字符“:

分隔的路径列表

which命令告诉您在运行命令时执行哪个文件:

which lshw

有时你得到的是符号链接的路径;如果要跟踪指向实际可执行文件所在位置的链接,可以使用readlink并将其输入which的输出:

readlink -f $(which lshw)

-f参数指示readlink递归地跟踪符号链接。

这是我机器上的一个例子:

$ which firefox
/usr/bin/firefox

$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh

答案 3 :(得分:5)

~$ 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

答案 4 :(得分:1)

在TENEX C Shell中, tcsh ,可以使用where命令列出命令的位置,或者它是否是内置命令例如:

tcsh% where python
/usr/local/bin/python
/usr/bin/python

tcsh% where cd
cd is a shell built-in
/usr/bin/cd

答案 5 :(得分:0)

Korn shell ksh提供whence内置函数,用于标识其他shell内置函数,宏等。which命令更具可移植性。 / p>

答案 6 :(得分:0)

type -a的替代方法是command -V

由于大多数时候我只对第一个结果感兴趣,所以我也从头开始。这样,在使用bash函数的情况下,屏幕不会充满代码。

command -V lshw | head -n1

答案 7 :(得分:0)

TLDR 答案

使用:whereis -b lshw

说明

使用 whereis 命令。从man page:

<块引用>

whereis - 查找命令的二进制文件、源文件和手册页文件

常用开关

此外,您可以指定您要查找的内容:

  • whereas -b packagename :二进制文件位置的来源。
  • whereas -m packagename :手册位置来源。
  • whereas -s packagename :源代码位置的来源。

就您而言,由于您正在寻找二进制文件,因此您需要:whereis -b lshw

此命令还有其他开关,请在 man page. 处查看它们。如果没有与包名关联的文件,您将看到一个空行。

示例

以下是一些实际用途:

holdoffhunger@tower:~$ whereis grep
grep: /bin/grep /usr/share/man/man1/grep.1.gz /usr/share/man/man1/grep.1posix.gz

holdoffhunger@tower:~$ whereis -m grep
grep: /usr/share/man/man1/grep.1.gz /usr/share/man/man1/grep.1posix.gz

holdoffhunger@tower:~$ whereis -s grep
grep: