hashist ein in Bash integrierter Befehl. Die Hash-Tabelle ist eine Funktion bash , die verhindert, dass bei $PATHjeder 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 hashBefehl 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 $PATHgewü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. hashist 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
PATHVerzeichnis auftaucht oder mvan 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 cpBefehl führte dazu, dass eine neue Version der lsausführbaren Datei früher in my $PATHangezeigt wurde, löschte jedoch nicht die Hash-Tabelle. Früher habe ich hash -dden Eintrag für selektiv lsaus der Hash-Tabelle entfernt. Bash wurde dann gezwungen, $PATHerneut 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 $PATHVerhalten "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.