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 HISTSIZEist dies die Anzahl der Befehle, die während Ihrer aktuellen Sitzung gespeichert wurden, und HISTFILESIZEdie 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 HISTSIZE10 festgelegt ist, wird historyeine Liste mit 10 Befehlen zurückgegeben. Wenn Sie sich jedoch abmelden und dann wieder anmelden, historywerden nur 5 Befehle zurückgegeben, da dieser HISTFILESIZEauf 5 gesetzt ist. Dies liegt daran, dass nach dem Beenden Ihrer Sitzung Ihre HISTFILESIZEZeilen Ihres Verlaufs in Ihrer Verlaufsdatei gespeichert werden ( ~/.bash_historystandardmäßig, aber gesteuert von HISTFILE). Mit anderen Worten, Befehle werden hinzugefügt, HISTFILEbis die $HISTFILESIZELinien 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_profilefalls diese Datei vorhanden ist) festlegen . Legen Sie sie nicht in Ihrer ~/.bashrcersten 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, dfoder duignoriert 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=ignoredupsdass doppelte Befehle nur einmal gespeichert werden. Andere Optionen sind ignorespacedas Ignorieren von Befehlen, die mit Leerzeichen beginnen. Dadurch werden erasedupsalle vorherigen Zeilen, die mit der aktuellen Zeile übereinstimmen, aus der Verlaufsliste entfernt, bevor diese Zeile gespeichert wird. ignorebothist 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 bashfür Details.
Für die weitere Feinabstimmung haben Sie:
Die histappendBash-Option. Dies kann durch Ausführen shopt -s histappendoder 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 historyBefehl 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.