GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der Zweck des Hash-Befehls?

Wenn Sie hash ausführen es zeigt den Pfad aller Befehle, die seit dem letzten Zurücksetzen des Hashs ausgeführt wurden (hash -r )

[[email protected] ~]# hash
hash: hash table empty

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   1    /usr/bin/whoami

[[email protected] ~]# whoami
root

[[email protected] ~]# hash
hits    command
   2    /usr/bin/whoami

Laut den Manpages ist der Zweck von Hash:

Das Dienstprogramm /usr/bin/hash beeinflusst, wie sich die aktuelle Shell-Umgebung
die Orte der gefundenen Dienstprogramme merkt.
Abhängig von den angegebenen Argumenten fügt es Dienstprogramm-Standorte
zu seiner Liste der gemerkten Orte hinzu oder es löscht den
Inhalt der Liste. Wenn keine Argumente angegeben werden, berichtet es
über den Inhalt der Liste. Das -r Option bewirkt, dass
die Shell alle gespeicherten Orte vergisst.

Dienstprogramme, die in die Shell eingebaut sind, werden
nicht per Hash gemeldet.

Außer zu sehen, wie oft ich einen Befehl eingegeben habe, kann ich den Nutzen von hash nicht sehen .

Es wurde sogar in den 15 nützlichsten Befehlen von thegeekstuff.com erwähnt

Inwiefern ist hash nützlich?

Akzeptierte Antwort:

hash ist ein in Bash integrierter Befehl. Die Hash-Tabelle ist ein Feature von bash das verhindert, dass $PATH gesucht werden muss Jedes Mal, wenn Sie einen Befehl eingeben, indem Sie die Ergebnisse im Speicher zwischenspeichern. Die Tabelle wird bei Ereignissen gelöscht, die die Ergebnisse offensichtlich ungültig machen (z. B. das Ändern von $PATH )

Der hash Befehl ist einfach, wie Sie mit diesem System interagieren (aus welchem ​​Grund auch immer Sie das für nötig halten).

Einige Anwendungsfälle:

  • Wie Sie gesehen haben, gibt es aus, wie oft Sie welche Befehle gedrückt haben, wenn Sie es ohne Argumente eingeben. Dies könnte Ihnen sagen, welche Befehle Sie am häufigsten verwenden.

  • Sie können es auch verwenden, um sich ausführbare Dateien an nicht standardmäßigen Speicherorten zu merken.

Beispiel:

[[email protected] ~]# hash -p /lol-wut/whoami whoami
[[email protected] ~]# whoami
Not what you're thinking
[[email protected] ~]# which whoami
/usr/bin/whoami
[[email protected] ~]# /usr/bin/whoami
root
[[email protected] ~]#

Dies kann nützlich sein, wenn Sie nur eine einzelne ausführbare Datei in einem Verzeichnis außerhalb von $PATH haben die Sie ausführen möchten, geben Sie einfach den Namen ein, anstatt alles in dieses Verzeichnis aufzunehmen (was der Effekt wäre, wenn Sie es zu $PATH hinzufügen würden ).

Ein Alias ​​kann dies normalerweise auch tun, aber da Sie das Verhalten der aktuellen Shell ändern, wird es nicht in Programmen abgebildet, die Sie starten. Ein Symlink auf die einsame ausführbare Datei ist hier wahrscheinlich die bevorzugte Option. hash ist eine Möglichkeit, dies zu tun.

  • Sie können es verwenden, um sich an Dateipfade zu erinnern. Dies ist nützlich, wenn eine neue ausführbare Datei in einem früheren PATH auftaucht Verzeichnis oder erhält mv woanders hingegangen ist und Sie Bash zwingen möchten, es wieder zu finden, anstatt den letzten Ort zu finden, an dem es sich erinnert, es gefunden zu haben.
Verwandte:Linux – sysrq wird nicht mit einem Tastendruck neu gestartet, aber mit echo „b“> /proc/sysrq-trigger?

Beispiel:

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# cp /bin/ls /lol-wut
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /bin/ls
[[email protected] ~]# hash -d ls
[[email protected] ~]# ls
default.ldif  newDIT.ldif  notes.txt  users.ldif
[[email protected] ~]# hash
hits    command
   1    /bin/cp
   1    /lol-wut/ls
[[email protected] ~]#

Der cp Befehl verursachte eine neue Version des ls ausführbar, um früher in meinem $PATH zu erscheinen hat aber keine Bereinigung der Hash-Tabelle ausgelöst. Ich habe hash -d verwendet um den Eintrag für ls selektiv zu löschen aus der Hash-Tabelle. Bash war dann gezwungen, $PATH zu durchsuchen erneut und wenn es das tat, fand es es an der neueren Stelle (früher in $PATH als es vorher lief).

Sie können dies „neuen Speicherort der ausführbaren Datei von $PATH suchen“ selektiv aufrufen ” Verhalten, obwohl:

[[email protected] ~]# hash
hits    command
   1    /bin/ls
[[email protected] ~]# hash ls
[[email protected] ~]# hash
hits    command
   0    /lol-wut/ls
[[email protected] ~]#

Sie würden dies meistens nur tun wollen, wenn Sie etwas aus der Hash-Tabelle entfernen möchten und nicht zu 100% sicher sind, dass Sie sich erfolgreich abmelden und wieder anmelden können, oder wenn Sie einige Änderungen, die Sie an Ihrer Shell vorgenommen haben, beibehalten möchten.

Um veraltete Zuordnungen loszuwerden, können Sie auch hash -r ausführen (oder export PATH=$PATH ), wodurch praktisch nur die gesamte Hash-Tabelle von bash gelöscht wird.

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.


Linux
  1. Einführung in den Alternativen-Befehl in Linux

  2. Eine Einführung in den diff-Befehl

  3. Wie verwende ich den basename-Befehl?

  4. Der Zweck des Befehls „install“?

  5. Erklären Sie die Optionen des Readlink-Befehls?

Ansible Guide:Das Ad-hoc-Kommando

Der Linux-tar-Befehl erklärt

Meistern Sie die Linux-Befehlszeile

Der Choose-Befehl unter Linux

Der Timer-Befehl in Linux

Wesentliche Beispiele des ps-Befehls in Linux