hash是bash内置命令。哈希表的一项功能是bash  ,$PATH将结果缓存在内存中,从而使您不必在每次键入命令时都进行搜索。在明显使结果无效的事件(例如,修改$PATH)上清除该表
该hash命令就是您与该系统进行交互的方式(无论您出于何种原因而需要)。
一些用例:
例:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
如果您只想$PATH通过键入名称而不是在目录中包含所有文件(如果将其添加到$PATH),便可以运行该目录之外的目录中的单个可执行文件,这可能会很有用。
别名通常也可以做到这一点,但是由于您正在修改当前shell的行为,因此别名不会映射到您启动的程序中。到单独的可执行文件的符号链接可能是此处的首选。hash是做到这一点的一种方法。
- 您可以使用它来取消记住文件路径。如果新的可执行文件在较早的PATH目录中弹出或进入mv其他位置,并且您想强制bash再次找到它而不是记住它的最后一个位置,则这很有用。
例:
[root@policyServer ~]# hash
hits    command
   1    /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits    command
   1    /bin/cp
   1    /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif  newDIT.ldif  notes.txt  users.ldif
[root@policyServer ~]# hash
hits    command
   1    /bin/cp
   1    /lol-wut/ls
[root@policyServer ~]#
该cp命令使ls可执行文件的新版本早些时候出现在我的计算机中,$PATH但没有触发哈希表的清除。我曾经hash -d选择性地清除ls哈希表中的条目。然后,Bash被迫$PATH再次浏览,当它这样做时,它在较新的位置(比以前运行的$ PATH更早)找到了它。
但是,您可以有选择地调用此“从中查找可执行文件的新位置$PATH”行为:
[root@policyServer ~]# hash
hits    command
   1    /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits    command
   0    /lol-wut/ls
[root@policyServer ~]#
如果您想从哈希表中获得某些东西,而又不是100%可以注销然后再成功登录,或者想要保留对shell所做的一些修改,则通常只想这样做。
为了摆脱过时的映射,您还可以执行hash -r(或export PATH=$PATH)有效清除bash整个哈希表的操作。
有很多这样的小情况。我不知道我是否将其称为“最有用的”命令之一,但确实有一些用例。