Es gibt zwei Variablen, die die Verlaufsgröße steuern:
HISTFILESIZE Die maximale Anzahl von Zeilen, die in der Verlaufsdatei enthalten sind. Wenn dieser Variablen ein Wert zugewiesen wird, wird die Verlaufsdatei bei Bedarf abgeschnitten, um nicht mehr als diese Anzahl von Zeilen zu enthalten, indem die ältesten Einträge entfernt werden. Die Verlaufsdatei wird auch nach dem Schreiben beim Beenden einer Shell auf diese Größe gekürzt. Wenn der Wert 0 ist, wird die Verlaufsdatei auf die Größe Null abgeschnitten. Nicht numerische Werte und numerische Werte unter Null verhindern das Abschneiden. Die Shell setzt den Standardwert auf den Wert von HISTSIZE, nachdem alle Startdateien gelesen wurden.
und
HISTSIZE Die Anzahl der Befehle, die im Befehlsverlauf gespeichert werden sollen (siehe HISTORY unten). Wenn der Wert 0 ist, werden Befehle nicht in der Verlaufsliste gespeichert. Numerische Werte unter Null führen dazu, dass jeder Befehl in der Verlaufsliste gespeichert wird (es gibt keine Begrenzung). Die Shell setzt den Standardwert nach dem Lesen aller Startdateien auf 500.
Mit diesen beiden Variablen können Sie das Verhalten Ihres Verlaufs steuern. Grundsätzlich HISTSIZE
ist dies die Anzahl der Befehle, die während Ihrer aktuellen Sitzung gespeichert wurden, und HISTFILESIZE
die Anzahl der Befehle, die über Sitzungen hinweg gespeichert werden. Also zum Beispiel:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
Da im obigen Beispiel HISTSIZE
10 festgelegt ist, wird history
eine Liste mit 10 Befehlen zurückgegeben. Wenn Sie sich jedoch abmelden und dann wieder anmelden, history
werden nur 5 Befehle zurückgegeben, da dieser HISTFILESIZE
auf 5 gesetzt ist. Dies liegt daran, dass nach dem Beenden Ihrer Sitzung Ihre HISTFILESIZE
Zeilen Ihres Verlaufs in Ihrer Verlaufsdatei gespeichert werden ( ~/.bash_history
standardmäßig, aber gesteuert von HISTFILE
). Mit anderen Worten, Befehle werden hinzugefügt, HISTFILE
bis die $HISTFILESIZE
Linien erreicht sind. An diesem Punkt bedeutet jede nachfolgende hinzugefügte Zeile, dass der erste Befehl der Datei entfernt wird.
Sie können die Werte dieser Variablen in Ihrer ~/.profile
(oder ~/.bash_profile
falls diese Datei vorhanden ist) festlegen . Legen Sie sie nicht in Ihrer ~/.bashrc
ersten fest, da dort kein Geschäft eingerichtet ist, und zweitens, weil dies dazu führen würde, dass Sie sich beim Anmelden anders verhalten als bei Nicht-Anmelden-Shells, was zu anderen Problemen führen kann .
Weitere nützliche Variablen, mit denen Sie das Verhalten Ihres Verlaufs optimieren können, sind:
HISTIGNORE
: Auf diese Weise können Sie bestimmte allgemeine Befehle ignorieren, die selten von Interesse sind. Zum Beispiel könnten Sie einstellen:
export HISTIGNORE="pwd:df:du"
Das würde dazu führen , jeder Befehl , beginnend mit pwd
, df
oder du
ignoriert werden und nicht in Ihrer Geschichte gespeichert.
HISTCONTROL
: Hier können Sie auswählen, wie der Verlauf funktioniert. Persönlich habe ich es so eingestellt, HISTCONTROL=ignoredups
dass doppelte Befehle nur einmal gespeichert werden. Andere Optionen sind ignorespace
das Ignorieren von Befehlen, die mit Leerzeichen beginnen. Dadurch werden erasedups
alle vorherigen Zeilen, die mit der aktuellen Zeile übereinstimmen, aus der Verlaufsliste entfernt, bevor diese Zeile gespeichert wird. ignoreboth
ist eine Abkürzung für Ignorspace und Ignoratedups.
HISTTIMEFORMAT
: Hier können Sie das Zeitformat der Verlaufsdatei festlegen. Siehe Pandyas Antwort oder lesen Sie man bash
für Details.
Für die weitere Feinabstimmung haben Sie:
Die histappend
Bash-Option. Dies kann durch Ausführen shopt -s histappend
oder Hinzufügen dieses Befehls zu Ihrem festgelegt werden ~/.bashrc
. Wenn diese Option eingestellt ist
Die Verlaufsliste wird an die Datei angehängt, die beim Beenden der Shell durch den Wert der Variablen HISTFILE benannt wird, anstatt die Datei zu überschreiben.
Dies ist sehr nützlich, da Sie damit den Verlauf verschiedener Sitzungen kombinieren können (denken Sie beispielsweise an verschiedene Terminals).
Der history
Befehl verfügt über zwei nützliche Optionen:
history -a
: bewirkt, dass der letzte Befehl automatisch in die Verlaufsdatei geschrieben wird
history -r
: Importiert die Verlaufsdatei in die aktuelle Sitzung.
Sie können beispielsweise diese beiden Befehle zu Ihrem hinzufügen PROMPT_COMMAND
(der jedes Mal ausgeführt wird, wenn Ihre Shell die Eingabeaufforderung anzeigt, also jedes Mal, wenn Sie eine neue Shell starten und nach jedem Befehl, den Sie darin ausführen):
export PROMPT_COMMAND='history -a;history -r;'
Zusammen stellen sie sicher, dass jedes neue Terminal, das Sie öffnen, sofort den Verlauf aller anderen Shell-Sitzungen importiert. Das Ergebnis ist eine gemeinsame Historie für alle Terminals / Shell-Sitzungen.