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

Gab*_*ira 118 linux shell command-line

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

我来讨论并写道:

$ lshw
Run Code Online (Sandbox Code Playgroud)

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

就像是:

$ location lshw
/usr/bin
Run Code Online (Sandbox Code Playgroud)

任何人?

Pau*_*ce. 171

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

type -a lshw
Run Code Online (Sandbox Code Playgroud)

这将显示目标是内置函数,函数,别名还是外部可执行文件.如果是后者,它会显示它出现在你的每个地方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
Run Code Online (Sandbox Code Playgroud)

在Bash中,for函数type -a也会显示函数定义.你可以declare -f functionname用来做同样的事情(你必须将它用于zsh,因为type -a没有).


Ign*_*ams 58

像这样:

which lshw
Run Code Online (Sandbox Code Playgroud)

  • 还有哪些 - 可以看到你路径中匹配的所有命令. (7认同)

has*_*sen 17

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

echo $PATH
Run Code Online (Sandbox Code Playgroud)

它是由冒号字符' :' 分隔的路径列表

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

which lshw
Run Code Online (Sandbox Code Playgroud)

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

readlink -f $(which lshw)
Run Code Online (Sandbox Code Playgroud)

-f参数指示readlink递归地遵循符号链接.

这是我机器的一个例子:

$ which firefox
/usr/bin/firefox

$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh
Run Code Online (Sandbox Code Playgroud)


Jac*_*ack 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
Run Code Online (Sandbox Code Playgroud)