hash
ist ein in Bash integrierter Befehl. Die Hash-Tabelle ist eine Funktion bash
, die verhindert, dass bei $PATH
jeder Eingabe eines Befehls eine Suche durchgeführt werden muss, indem die Ergebnisse im Speicher zwischengespeichert werden. Die Tabelle wird bei Ereignissen gelöscht, die die Ergebnisse offensichtlich ungültig machen (z. B. Ändern $PATH
).
Der hash
Befehl ist nur, wie Sie mit diesem System interagieren (aus welchem Grund Sie das Gefühl haben, dass Sie es brauchen).
Einige Anwendungsfälle:
Wie Sie gesehen haben, gibt es aus, wie oft Sie welche Befehle gedrückt haben, wenn Sie es ohne Argumente eingeben. Hier erfahren Sie möglicherweise, welche Befehle Sie am häufigsten verwenden.
Sie können es auch verwenden, um ausführbare Dateien an nicht standardmäßigen Speicherorten zu speichern.
Beispiel:
[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 ~]#
Dies kann nützlich sein, wenn Sie nur eine einzige ausführbare Datei in einem Verzeichnis außerhalb des $PATH
gewünschten Verzeichnisses haben, indem Sie einfach den Namen eingeben, anstatt alles in dieses Verzeichnis aufzunehmen (was der Effekt wäre, wenn Sie es hinzufügen $PATH
).
Ein Alias kann dies normalerweise auch, und da Sie das Verhalten der aktuellen Shell ändern, wird es nicht in von Ihnen gestarteten Programmen abgebildet. Ein Symlink zur einzelnen ausführbaren Datei ist hier wahrscheinlich die bevorzugte Option. hash
ist ein Weg, es zu tun.
- Sie können es verwenden, um Dateipfade nicht mehr zu merken. Dies ist nützlich, wenn eine neue ausführbare Datei in einem früheren
PATH
Verzeichnis auftaucht oder mv
an eine andere Stelle gelangt und Sie möchten, dass Bash herauskommt und sie wieder findet, anstatt an der Stelle, an der sie sich zuletzt daran erinnert, sie zu finden.
Beispiel:
[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 ~]#
Der cp
Befehl führte dazu, dass eine neue Version der ls
ausführbaren Datei früher in my $PATH
angezeigt wurde, löschte jedoch nicht die Hash-Tabelle. Früher habe ich hash -d
den Eintrag für selektiv ls
aus der Hash-Tabelle entfernt. Bash wurde dann gezwungen, $PATH
erneut zu suchen , und als es dies tat, fand es es an der neueren Position (früher in $ PATH als zuvor ausgeführt).
Sie können dieses $PATH
Verhalten "Neuen Speicherort der ausführbaren Datei finden von " jedoch selektiv aufrufen :
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
Meistens möchten Sie dies nur tun, wenn Sie möchten, dass sich etwas aus der Hash-Tabelle entfernt und nicht zu 100% abgemeldet und dann wieder erfolgreich angemeldet wird, oder wenn Sie einige Änderungen beibehalten möchten, die Sie an Ihrer Shell vorgenommen haben.
Um veraltete Zuordnungen zu entfernen, können Sie auch hash -r
(oder export PATH=$PATH
) die gesamte Hash-Tabelle von bash löschen.
Es gibt viele kleine Situationen wie diese. Ich weiß nicht, ob ich es als einen der "nützlichsten" Befehle bezeichnen würde, aber es gibt einige Anwendungsfälle.