Kurze Antwort:
HISTSIZE
ist die Anzahl der Zeilen oder Befehle, die während einer laufenden Bash-Sitzung im Speicher einer Verlaufsliste gespeichert sind.
HISTFILESIZE
ist die Anzahl der Zeilen oder Befehle, die (a) zum Startzeitpunkt einer Sitzung in der Verlaufsdatei zulässig sind und (b) am Ende Ihrer Bash-Sitzung zur Verwendung in zukünftigen Sitzungen in der Verlaufsdatei gespeichert werden.
Beachten Sie den Unterschied zwischen file
: auf Festplatte - und list
: im Speicher.
Lange Antwort:
Alle Infos oben + einige Beispiele:
Beispiel 1 :
HISTFILESIZE=10
undHISTSIZE=10
- Sie starten Ihre Sitzung.
- Ihre HISTFILE (Datei, in der Ihr Bash-Befehlsverlauf gespeichert ist) wird abgeschnitten und enthält HISTFILESIZE = 10 Zeilen.
- Sie schreiben 50 Zeilen.
- Am Ende Ihrer 50 Befehle befinden sich nur die Befehle 41 bis 50 in Ihrer Verlaufsliste, deren Größe durch HISTSIZE = 10 bestimmt wird.
- Sie beenden Ihre Sitzung.
- Vorausgesetzt, es
histappend
ist nicht aktiviert, werden die Befehle 41 bis 50 in Ihrer HISTFILE gespeichert, die jetzt die 10 Befehle enthält, die zu Beginn gehalten wurden, sowie die 10 neu geschriebenen Befehle.
- Ihre HISTFILE wird abgeschnitten, um HISTFILESIZE = 10 Zeilen zu enthalten.
- Sie haben jetzt 10 Befehle in Ihrem Verlauf - die letzten 10, die Sie gerade in der Sitzung eingegeben haben, die Sie gerade beendet haben.
- Wenn Sie eine neue Sitzung starten, beginnen Sie bei 1 mit einer HISTFILE von HISTFILESIZE = 10.
Beispiel 2 :
HISTFILESIZE=10
undHISTSIZE=5
- Sie starten Ihre Sitzung.
- Ihre HISTFILE (Datei, in der Ihr Bash-Befehlsverlauf gespeichert ist) ist so abgeschnitten, dass sie höchstens HISTFILESIZE = 10 Zeilen enthält.
- Sie schreiben 50 Zeilen.
- Am Ende Ihrer 50 Befehle befinden sich nur die Befehle 46 bis 50 in Ihrer Verlaufsliste, deren Größe durch HISTSIZE = 5 bestimmt wird.
- Sie beenden Ihre Sitzung.
- Vorausgesetzt, es
histappend
ist nicht aktiviert, werden die Befehle 46 bis 50 in Ihrer HISTFILE gespeichert, die jetzt die 10 Befehle enthält, die zu Beginn gehalten wurden, sowie die 5 neu geschriebenen Befehle.
- Ihre HISTFILE wird abgeschnitten, um HISTFILESIZE = 10 Zeilen zu enthalten.
- Sie haben jetzt 10 Befehle in Ihrem Verlauf - 5 aus einer vorherigen Sitzung und die letzten 5, die Sie gerade in der Sitzung eingegeben haben, die Sie gerade beendet haben.
- Wenn Sie eine neue Sitzung starten, beginnen Sie bei 1 mit einer HISTFILE von HISTFILESIZE = 10.
Beispiel 3 :
HISTFILESIZE=5
undHISTSIZE=10
- Sie starten Ihre Sitzung.
- Ihre HISTFILE (Datei, in der Ihr Bash-Befehlsverlauf gespeichert ist) ist so abgeschnitten, dass sie höchstens HISTFILESIZE = 5 Zeilen enthält.
- Sie schreiben 50 Zeilen.
- Am Ende Ihrer 50 Befehle befinden sich nur die Befehle 41 bis 50 in Ihrer Verlaufsliste, deren Größe durch HISTSIZE = 10 bestimmt wird.
- Sie beenden Ihre Sitzung.
- Vorausgesetzt, es
histappend
ist nicht aktiviert, werden die Befehle 41 bis 50 in Ihrer HISTFILE gespeichert, die nun die 5 Befehle enthält, die zu Beginn gehalten wurden, sowie die 10 neu geschriebenen Befehle.
- Ihre HISTFILE wird abgeschnitten, um HISTFILESIZE = 5 Zeilen zu enthalten.
- Sie haben jetzt 5 Befehle in Ihrem Verlauf - die letzten 5, die Sie gerade in der Sitzung eingegeben haben, die Sie gerade beendet haben.
- Wenn Sie eine neue Sitzung starten, beginnen Sie bei Schritt 1 mit einer HISTFILE von HISTFILESIZE = 5.
Infos von elixir_sinari :
Die Verlaufsdatei wird während der Eingabe der Befehle nicht aktualisiert. Die Befehle werden separat in einer "Liste" gespeichert (Zugriff über den Befehl history). Die Anzahl dieser gespeicherten Befehle wird durch den Wert HISTSIZE gesteuert. Wenn die Shell (interaktiv) beendet wird, werden die letzten $ HISTSIZE-Zeilen aus dieser "Liste" kopiert / an $ HISTFILE angehängt. Wenn HISTFILESIZE festgelegt ist, wird nach diesem Vorgang sichergestellt, dass in $ HISTFILE nur (neueste) $ HISTFILESIZE-Zeilen vorhanden sind. Und wenn die Shell startet, wird die "Liste" von $ HISTFILE bis zu maximal $ HISTSIZE-Befehlen initialisiert.
Und von der man bash
Seite:
Der Wert der Variablen HISTSIZE wird als Anzahl der Befehle verwendet, die in einer Verlaufsliste gespeichert werden sollen. Der Text der letzten HISTSIZE-Befehle (Standard 500) wird gespeichert. (...)
Beim Start wird der Verlauf aus der Datei initialisiert, die von der Variablen HISTFILE (Standard ~ / .bash_history) benannt wird. Die durch den Wert von HISTFILE benannte Datei wird bei Bedarf abgeschnitten, um nicht mehr als die durch den Wert von HISTFILESIZE angegebene Anzahl von Zeilen zu enthalten. (...) Wenn eine interaktive Shell beendet wird, werden die letzten $ HISTSIZE-Zeilen aus der Verlaufsliste nach $ HISTFILE kopiert. Wenn die Shell-Option histappend aktiviert ist (siehe die Beschreibung von shopt unter SHELL BUILTIN COMMANDS unten), werden die Zeilen an die Verlaufsdatei angehängt, andernfalls wird die Verlaufsdatei überschrieben. Wenn HISTFILE nicht festgelegt ist oder wenn die Verlaufsdatei nicht beschreibbar ist, wird der Verlauf nicht gespeichert. (...) Nach dem Speichern des Verlaufs wird die Verlaufsdatei so abgeschnitten, dass sie nicht mehr als HISTFILESIZE-Zeilen enthält. Wenn HISTFILESIZE nicht festgelegt ist,
Aufbauend auf dem, was arturomp gesagt hat, und um es ein bisschen klarer zu machen.
Vorausgesetzt, Sie haben eine 2000-jährige Geschichte.
Sie können reduzieren, was Ihnen angezeigt wird
HISTSIZE
Unabhängig davon, wie viele Befehle Sie eingeben, werden nur die letzten 5 aufgezeichnet.
Wir können deutlich sehen, dass unser erster Befehl ("ABC") nicht in der Geschichte enthalten ist, da nur die letzten 5 Befehle aufgezeichnet wurden.
Jetzt wird der gesamte Verlauf in einer Datei (
.bash_history
) gespeichert und Sie können ändern, wie lange diese Datei mit dem dauertHISTFILESIZE
. Zum Beispiel mit einem2033
HISTFILESIZE
, in meinem Fall hätte ich folgendes:quelle
HISTSIZE=-1
undHISTFILESIZE=-1
.bash
Manpage sagt:Non-numeric values and numeric values less than zero inhibit truncation
aber dann hatte ich nicht den Mut zu überprüfen, ob dies wahr ist, weil ich meine Geschichte nicht verlieren möchte :-)HISTSIZE='INFINITY'
und geändertHISTFILESIZE='ANDBEYOND'
. Da sie nicht numerisch sind, speichern sie alles. Danke für den Tipp!