雜湊命令的目的是什麼?
如果你執行
hash
它,它會顯示自上次重置雜湊以來執行的所有命令的路徑 (hash -r
)[root@c04c ~]# hash hash: hash table empty [root@c04c ~]# whoami root [root@c04c ~]# hash hits command 1 /usr/bin/whoami [root@c04c ~]# whoami root [root@c04c ~]# hash hits command 2 /usr/bin/whoami
根據手冊頁,雜湊的目的是:
/usr/bin/hash 實用程序會影響目前 shell 環境記住找到的實用程序位置的方式。根據指定的參數,它會將實用程序位置添加到其記住的位置列表中,或者清除列表的內容。當沒有指定參數時,它會報告列表的內容。該
-r
選項會導致 shell 忘記所有記住的位置。作為 shell 的內置工具提供的實用程序不會由散列報告。
除了看到我輸入了多少次命令之外,我看不到
hash
.它甚至出現在 thegeekstuff.com 的15 個有用命令中
在哪些方面
hash
有用?
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
’d 到其他地方,並且您想強制 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
(orexport PATH=$PATH
) 來有效地清除 bash 的整個雜湊表。像這樣的小情況還有很多。我不知道我是否稱它為“最有用”的命令之一,但它確實有一些案例。