Hash: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 10: Zeile 10:
* Nur wenn der Pfad zu einem Kommando dort nicht erfasst wird, werden die Verzeichnispfade durchsucht
* Nur wenn der Pfad zu einem Kommando dort nicht erfasst wird, werden die Verzeichnispfade durchsucht
** Es sei denn ''hashall'' ist nicht gesetzt (siehe [[set]])
** Es sei denn ''hashall'' ist nicht gesetzt (siehe [[set]])
* Beim nächsten Zugriff auf das Kommando wird man den Geschwindigkeitszuwachs spüren.
* Beim nächsten Zugriff auf das Kommando wird haman den Geschwindigkeitszuwachs spüren.


== Pfad-Cache ==
== Pfad-Cache ==
Zeile 19: Zeile 19:
* Wird ein Programm erneut gestartet, kann die zeitaufwendige Suche entlang des Pfades entfallen.  
* Wird ein Programm erneut gestartet, kann die zeitaufwendige Suche entlang des Pfades entfallen.  
* Bei der Gelegenheit wird auch gleich angezeigt, wie oft das Programm gestartet wurde.  
* Bei der Gelegenheit wird auch gleich angezeigt, wie oft das Programm gestartet wurde.  
* Wer am Abend wissen will, womit er sich den ganzen Tag über beschäftigt hat, kann mit diesem Kommando zumindest Hinweise bekommen (oder er wirft einen Blick auf die '''.bash_history''')


=== Verwerfen alle gespeicherten Pfade ===
=== Verwerfen alle gespeicherten Pfade ===

Version vom 28. Januar 2023, 15:29 Uhr

hash - Verwaltung der Hash-Tabelle für Kommando-Pfade

Beschreibung

Ein angegebenes Kommando muss von der Shell gesucht werden
  • Die Suche, vor allem wenn sie die Angaben aus PATH einschließt, kostet Zeit.
  • Deswegen merkt sich die Bash die Zugriffspfade zu allen externen Kommandos in einer Hashtabelle.
Hashtabelle wird zuerst konsultiert
  • Nur wenn der Pfad zu einem Kommando dort nicht erfasst wird, werden die Verzeichnispfade durchsucht
    • Es sei denn hashall ist nicht gesetzt (siehe set)
  • Beim nächsten Zugriff auf das Kommando wird haman den Geschwindigkeitszuwachs spüren.

Pfad-Cache

$ hash 
  • (ohne Parameter) zeigt die Liste der gemerkten Pfade zu den Programmen an.
  • Um die Zugriffe auf Programme zu beschleunigen, verwaltet die Bash einen internen Cache der Pfade auf bereits gestartete Programme.
  • Wird ein Programm erneut gestartet, kann die zeitaufwendige Suche entlang des Pfades entfallen.
  • Bei der Gelegenheit wird auch gleich angezeigt, wie oft das Programm gestartet wurde.

Verwerfen alle gespeicherten Pfade

$ hash -r

Anzeige der Hashtabelle

$ hash
hits    command
   2    /bin/ls
   1    /bin/mv
   6    /bin/sh
   8    /usr/bin/vi
   1    /bin/chmod
   3    /bin/date
   1    /usr/bin/id
   1    /usr/bin/man

Gleichnamigen Kommandos

  • Liegt eines in der Hashtabelle vor, so kann auf das andere nur über die vollständige Pfadangabe zugegriffen werden
  • Soll dieses "benachteiligte" Kommando nun vermehrt eingesetzt werden, ist ein Löschen der Hashtabelle mittels »-r« sinnvoll
$ hash -r
$ hash
hash: hash table empty

Indem »hash« mit einem oder mehreren Kommandonamen aufgerufen wird, werden diese Kommandos gesucht und in die Hashtabelle aufgenommen; sie werden jedoch nicht gestartet (sinnvoll ist dies eventuell in Startskripten).

Pfad zur Tabelle hinzufügen

$ hash -p <Pfad_zum_Kommando>