如何找到某些命令的目录?
- 2024-11-06 08:35:00
- admin 原创
- 38
问题描述:
我知道,当您使用 shell 时,唯一可以使用的命令是可以在 PATH 上设置的某个目录中找到的命令。即使我不知道如何查看 PATH 变量上有哪些目录(这是另一个可以回答的好问题),我想知道的是:
我来到 shell 并写道:
$ lshw
我想知道 shell 上的一个命令,它可以告诉我这个命令位于哪里。换句话说,这个“可执行文件”位于哪里?
类似于:
$ location lshw
/usr/bin
解决方案 1:
如果你使用 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
没有)。
解决方案 2:
像这样:
which lshw
要查看路径中匹配的所有命令:
which -a lshw
解决方案 3:
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
解决方案 4:
~$ 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
解决方案 5:
TLDR 答案
使用:whereis -b lshw
。
解释
使用whereis
命令。来自手册页:
whereis
- 找到命令的二进制文件、源文件和手册页文件
常用开关
此外,您还可以指定要查找的内容:
whereis -b packagename
:二进制位置的来源。whereis -m packagename
:手册位置的来源。whereis -s packagename
:源代码位置的来源。
就您而言,由于您正在寻找二进制文件,因此您会需要: whereis -b lshw
。
此命令还有其他开关,请查看手册页。 如果没有与包名关联的文件,您将看到一个空白行。
示例
以下是一些实际用途:
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:
解决方案 6:
在 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
解决方案 7:
另一种选择type -a
是command -V
由于大多数时候我只对第一个结果感兴趣,所以我也从 head 进行管道传输。这样,如果出现 bash 函数,屏幕就不会被代码淹没。
command -V lshw | head -n1
解决方案 8:
Korn shellksh
提供了whence
内置功能,可以识别其他 shell 内置功能、宏等等。which
不过,该命令的可移植性更强。
解决方案 9:
在zsh中(我的情况是当前版本是 5.9),你可以使用作为前缀来检查某些命令的目录=
。例如,如果你想知道命令位于何处,mkdir
你可以使用:
$> ls -l =mkdir
-rwxr-xr-x 1 root root 76216 Jun 14 20:49 /usr/bin/mkdir
或者更简化:
$> echo =mkdir
/usr/bin/mkdir
注意:此方法仅适用于根据$PATH
环境变量在当前 shell 中可用的命令。因此,如果您的$PATH
值为“/home/user/bin:/usr/bin:/usr/local/bin”,则只有这 3 个路径下的命令可用。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件