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整个哈希表的操作。
有很多这样的小情况。我不知道我是否将其称为“最有用的”命令之一,但确实有一些用例。