如何知道命令在linux中运行的位置

Gau*_*ana 4 unix linux bash

假设我在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
Run Code Online (Sandbox Code Playgroud)

我们怎么知道ls命令从哪条路走?ls(只是一个例子)可以是在存在/sbin以及/usr/bin

所以我想知道它在哪里运行?

我无法负担搜索所有目录并知道所有目录ls所在的位置.有没有直接的方法来搜索ls它的运行位置?

koj*_*iro 6

当您在bash中运行外部命令时,bash会对该命令进行哈希处理,以避免必须两次执行路径查找.该hash命令可以告诉您运行了哪个命令.如果该命令尚未在哈希的生命周期中运行,则会出错.

$ hash -t ls
-bash: hash: ls: not found

$ ls foo
$ hash -t ls
/bin/ls
Run Code Online (Sandbox Code Playgroud)

这是有利的,知道如何hash,which以及type命令不同.

  • hash告诉你的路径/命令什么使用/散列.如果PATH或文件系统在hash生命周期内发生变化,hash可以告诉您在更改之前发生的命令.
  • which是一个外部命令,用于在PATH环境变量中查找命令.
  • type是一个内置命令,用于查找局部PATH变量中的命令,该命令可以(但几乎没有)与环境中的命令不同.

请参阅help hash您的bash,了解有关其工作原理的更多信息.