如何知道命令在linux中的运行位置
假设我在unix中运行了一个命令,如如何知道命令在linux中的运行位置,linux,bash,unix,Linux,Bash,Unix,假设我在unix中运行了一个命令,如ls或rm,路径变量设置如下 PATH=$JAVA_HOME/bin:.:$ORACLE_HOME/bin:/sbin:/usr/sbin:/usr/bin:/usr/ccs/bin:$COBDIR/bin:/sbin:/bin:/usr/local/bin:/bin 我们如何知道ls命令从哪个路径运行ls(只是一个示例)可能也在/sbin中 所以我想知道它是从哪里来的 我无法搜索所有目录并知道所有目录ls位于哪个目录。有没有一种直接的方法可以从它运行的地方
ls
或rm
,路径变量设置如下
PATH=$JAVA_HOME/bin:.:$ORACLE_HOME/bin:/sbin:/usr/sbin:/usr/bin:/usr/ccs/bin:$COBDIR/bin:/sbin:/bin:/usr/local/bin:/bin
我们如何知道ls
命令从哪个路径运行ls
(只是一个示例)可能也在/sbin
中
所以我想知道它是从哪里来的
我无法搜索所有目录并知道所有目录
ls
位于哪个目录。有没有一种直接的方法可以从它运行的地方搜索ls呢?只需使用它就可以准确地从哪里找到它
$ which ls
/bin/ls
它将列出从哪个路径获取该可执行文件。因此,从上面的命令来看,我的ls命令位于/bin目录中。在bash中运行外部命令时,bash会对该命令进行哈希运算,以避免必须执行两次路径查找。
hash
命令可以告诉您运行了哪个命令。如果该命令在哈希的生存期内没有运行,它将给出一个错误
$ hash -t ls
-bash: hash: ls: not found
$ ls foo
$ hash -t ls
/bin/ls
了解散列
、哪个
和类型
命令的区别是有利的
告诉您使用/哈希了什么路径/命令。如果路径或文件系统在hash
的生命周期内发生更改,hash
可以告诉您更改之前发生的命令hash
是一个外部命令,可在其中
环境变量中查找命令路径
是一个内置命令,它在本地type
变量中查找命令,该变量可能(但几乎永远不会)与环境中的命令不同PATH
请参阅bash中的
帮助哈希
,以了解有关其工作原理的更多信息。除了提及哪个
,键入
,哈希
的其他答案外,您还可以使用该命令(如果系统上安装了该命令)
whereis
告诉您命令应放置的标准位置
如果您的交互式shell是,您也可以使用=ls
单词,例如echo=ls
或ls=ls
来找出shell引用的ls
您还可以使用别名ls
,或者使用shell函数ls
屏蔽/bin/ls
可执行文件,等等。。。。当然,程序可以启动/bin/ls
,而无需分叉shell(例如,使用普通分叉+执行程序
…)
同时阅读&where is
是一个特别糟糕的选择,因为它提供了可以运行的内容的超集。因为whereis first“尝试在标准Linux位置定位所需的程序”和/usr/lib
是这些位置之一,不应该在PATH中,它很可能会产生完全误导性的结果。类型
可能是大多数情况下的最佳选择,因为它可以正确识别shell内置、函数和其他类似的东西。这一点起到了作用,概念也变得清晰。问题是在我当前的目录中有一个文件名为“ls”。所以实际的ls命令不起作用。使用hash命令,我可以知道它是从当前目录中选取的。而不是/bin。