Wie lange dauert der Inhalt der Datei .bash_history?

10

Wie kann ich den Inhalt meiner bash_historyDatei ändern ? Welche Werte oder Variablen steuern, wie lange der Verlauf dauert? Gibt es noch andere Dinge, die ich ändern kann, um meine BASH-Geschichte genauer kontrollieren zu können?

nbro
quelle
1
Siehe auch: Verwendung von Bash-
Verlaufsbefehlen
2
Ich glaube nicht, dass diese Datei durch die Zeitdauer gesteuert wird, sondern durch die endgültige Größe der Datei. Siehe hier: Gibt es eine Möglichkeit, die Größe der Verlaufsliste in Bash auf mehr als 5000 Zeilen festzulegen? . Also die Umgebung. Variablen HISTSIZEund HISTFILESIZEsind die einzigen Steuerflächen, die Sie steuern müssen, wie viel Verlauf verwaltet wird.
slm

Antworten:

11

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.

terdon
quelle
2

Die Standardgröße der Verlaufsdatei beträgt 500 Zeilen. Sobald die Datei .bash_history 500 Zeilen erreicht, werden die frühen Einträge entfernt, um Platz für die neueren Zeilen zu schaffen, wie im FIFO. Sie können dies ändern, indem Sie den Wert der Variablen ändern, die HISTFILESIZEstandardmäßig den Wert 500 hat.

Wenn Sie ein HISTFILESIZE=10000in Ihre .bashrc-Datei einfügen, erhöht sich die Anzahl der Zeilen, die die Verlaufsdatei enthalten kann, auf 10000, wodurch sich die Lebensdauer des Inhalts verlängert.

Sree
quelle
2
Hinweis: Wenn Sie das HISTSIZELimit erhöhen , sollten Sie auch eine Änderung in Betracht ziehen HISTFILE. Wenn Sie ausführen bash --norc HISTSIZE, kehren Sie zum Standardwert zurück und kürzen Sie HISTFILEbeim Beenden.
llua
Danke, @llua. In ähnlicher Weise scheint Bash an dem Punkt, an dem es gelesen wird (oder zumindest an einem Punkt, bevor Ihr neues Limit in Ihren eigenen Bash-Init-Dateien festgelegt wird), abzuschneiden, wenn Ihr System a /etc/bash.bashrcfestlegt HISTFILESIZE(oder vielleicht HISTSIZE; ich habe nicht überprüft, welches ). Um dies zu vermeiden, stellen Sie Ihre eigene so ein, dass Ihr realer Verlauf dort abläuft und nicht in die Datei, die Bash abschneidet. .bash_history/etc/bash.bashrcHISTFILE.bash_history
Chris Povirk
(Aber nicht export, da dies es für alle Kinderschalen sichtbar machen würde, die dann versuchen könnten, es abzuschneiden, anstatt .bash_history!)
Chris Povirk
0

Lesen Sie man bashfür weitere Informationen über bedeckt bash Geschichte wie:

HISTCONTROL
       Eine durch Doppelpunkte getrennte Liste von Werten, die steuern, wie Befehle in der Verlaufsliste gespeichert werden.
       Wenn die Liste der Werte Ignorraum enthält, sind Zeilen, die mit einem Leerzeichen beginnen
       nicht in der Verlaufsliste gespeichert. Ein Wert von ignoreups führt dazu, dass Zeilen mit den vorherigen übereinstimmen
       Verlaufseintrag nicht gespeichert werden. Ein Wert von ignoreboth ist eine Abkürzung für ignorespace und
       ignorierte Ups. Ein Wert von erasedups bewirkt, dass alle vorherigen Zeilen mit der aktuellen Zeile übereinstimmen
       aus der Verlaufsliste entfernt werden, bevor diese Zeile gespeichert wird. Jeder Wert, der nicht oben angegeben ist
       Liste wird ignoriert. Wenn HISTCONTROL nicht gesetzt ist oder keinen gültigen Wert enthält, werden alle Zeilen angezeigt
       Vom Shell-Parser gelesene werden vorbehaltlich des Werts von HISTIG in der Verlaufsliste gespeichert
       NORE. Die zweite und die folgenden Zeilen eines mehrzeiligen zusammengesetzten Befehls werden nicht getestet.
       und werden unabhängig vom Wert von HISTCONTROL zum Verlauf hinzugefügt.
HISTFILE
       Der Name der Datei, in der der Befehlsverlauf gespeichert ist (siehe GESCHICHTE unten). Der Standard
       Wert ist ~ / .bash_history. Wenn nicht gesetzt, wird der Befehlsverlauf beim Beenden einer Shell nicht gespeichert.
HISTFILESIZE
       Die maximale Anzahl von Zeilen in der Verlaufsdatei. Wenn diese Variable zugewiesen ist
       Bei einem Wert wird die Verlaufsdatei bei Bedarf abgeschnitten, um nicht mehr als diese Zahl zu enthalten
       von Zeilen durch Entfernen der ältesten Einträge. Die Verlaufsdatei wird ebenfalls auf diese Größe gekürzt
       nach dem Schreiben, wenn eine Shell beendet wird. Wenn der Wert 0 ist, wird die Verlaufsdatei auf abgeschnitten
       Nullgröße. Nicht numerische Werte und numerische Werte unter Null verhindern das Abschneiden. Das
       Shell setzt den Standardwert auf den Wert von HISTSIZE, nachdem alle Startdateien gelesen wurden.
HISTIGNORE
       Eine durch Doppelpunkte getrennte Liste von Mustern, mit denen entschieden wird, in welchen Befehlszeilen gespeichert werden soll
       die Verlaufsliste. Jedes Muster ist am Anfang der Linie verankert und muss übereinstimmen
       die vollständige Zeile (kein implizites "*" wird angehängt). Jedes Muster wird gegen die Linie getestet
       nachdem die von HISTCONTROL angegebenen Prüfungen angewendet wurden. Neben der normalen Schale
       Mustervergleichszeichen, `& 'entspricht der vorherigen Verlaufszeile. `& 'kann maskiert werden
       mit einem Backslash; Der Backslash wird entfernt, bevor ein Match versucht wird. Der zweite und
       Nachfolgende Zeilen eines mehrzeiligen zusammengesetzten Befehls werden nicht getestet und dem hinzugefügt
       Geschichte unabhängig vom Wert von HISTIGNORE.
HISTSIZE
       Die Anzahl der Befehle, die im Befehlsverlauf gespeichert werden sollen (siehe GESCHICHTE unten). Wenn die
       Wert ist 0, Befehle werden nicht in der Verlaufsliste gespeichert. Numerische Werte kleiner als Null
       führen dazu, dass jeder Befehl in der Verlaufsliste gespeichert wird (es gibt keine Begrenzung). die Muschel
       Setzt den Standardwert nach dem Lesen von Startdateien auf 500.
HISTTIMEFORMAT
       Wenn diese Variable gesetzt und nicht null ist, wird ihr Wert als Formatzeichenfolge für strftime (3) verwendet.
       um den Zeitstempel zu drucken, der jedem im Verlauf angezeigten Verlaufseintrag zugeordnet ist
       eingebaut. Wenn diese Variable festgelegt ist, werden Zeitstempel in die Verlaufsdatei geschrieben
       über Shell-Sitzungen hinweg erhalten bleiben. Dies verwendet das Verlaufskommentarzeichen, um zu unterscheiden
       Zeitstempel aus anderen Geschichtslinien erraten.

Besonders HISTFILESIZEund HISTSIZEmögen Sie suchen und Ihnen helfen.

Pandya
quelle