Bash verwaltet die Liste der Befehle im internen Speicher, während sie ausgeführt wird. Sie werden .bash_history
beim Verlassen beschrieben :
Wenn eine interaktive Shell beendet wird, werden die letzten $ HISTSIZE-Zeilen aus der Verlaufsliste in die Datei mit dem Namen $ HISTFILE kopiert
Wenn Sie das Ausschreiben des Befehlsverlaufs erzwingen möchten, können Sie den folgenden history -a
Befehl verwenden:
Hängen Sie die neuen Verlaufszeilen (die seit Beginn der aktuellen Bash-Sitzung eingegebenen Verlaufszeilen) an die Verlaufsdatei an.
Es gibt auch eine -w
Option:
Schreiben Sie den aktuellen Verlauf in die Verlaufsdatei.
Was Ihnen besser gefällt, hängt davon ab, wie Sie Ihre Vorgeschichte verwenden.
Wenn Sie sicherstellen möchten, dass sie immer sofort geschrieben werden, können Sie diesen Befehl in Ihre PROMPT_COMMAND
Variable einfügen:
export PROMPT_COMMAND='history -a'
.bash_history
Datei versehentlich root gehört, funktionieren die Dinge nicht mehr. Überprüfen Sie in diesem Fall den Besitz undsudo
korrigieren Sie ihn bei Bedarf.(Keine Antwort, aber ich kann keine Kommentare hinzufügen)
Wenn Sie überprüfen,
.bash_history
weil Sie nur einen bestimmten Befehl löschen möchten (z. B. ein Passwort in clear enthalten), können Sie den Eintrag im Speicher direkt durch löschenhistory -d <entry_id>
.Angenommen, eine Ausgabe lautet wie folgt:
Wenn Sie die
export
Leitung löschen möchten , können Sie dies einfach erreichen, indem Sie:quelle
bash speichert es im Arbeitsspeicher. bash kann so konfiguriert werden, dass es beim Schließen von bash oder nach jedem Befehl gespeichert und beim Starten von bash oder auf Anfrage geladen wird.
Wenn Sie das Speichern nach jedem Befehl konfigurieren, sollten Sie berücksichtigen, dass mehrere Bashs gleichzeitig ausgeführt werden. (Kommandozeilen werden verschachtelt)
quelle
bash
Exetable gespeichert ist. Ich würde schreiben "Es wirdbash
im Speicher gespeichert , ..."Befehle werden im Arbeitsspeicher (RAM) gespeichert, während Ihre Sitzung aktiv ist. Sobald Sie die Shell schließen, wird die Befehlsliste
.bash_history
vor dem Herunterfahren beschrieben.Daher wird der Verlauf der aktuellen Sitzung in nicht angezeigt
.bash_history
.quelle
bash
Beenden aktualisiert , was keinen Neustart bedeutet (insbesondere in grafischen Umgebungen, in denen Sie Terminals nach Wunsch öffnen und schließen können).Während der Ausführung wird der Verlauf (standardmäßig) nur gespeichert, wenn:
H
inecho "$-"
) wird gesetzt.0
und*
(oder ein anderes sehr restriktives Muster).Wenn einer der oben genannten Vorgänge fehlschlägt, wird kein Verlauf im Speicher gespeichert und folglich kann oder wird kein Verlauf auf die Festplatte geschrieben.
Der Verlauf im Speicher wird auf die Festplatte geschrieben, wenn:
Aber nur, wenn die Shell beendet wird oder wenn die Befehle
history -a
(Anhängen) oderhistory -w
(Schreiben) ausgeführt werden.Um ein sofortiges Schreiben auf die Festplatte auszulösen, können Sie die Variable verwenden:
In diesem Fall wird
append
dernew
Verlauf in die Verlaufsdatei geschrieben. Hierbei handelt es sich um Verlaufszeilen, die seit Beginn der aktuellen Bash-Sitzung eingegeben, jedoch nicht bereits an die Verlaufsdatei angehängt wurden.Oder:
Den Verlauf in der HISTFILE mit der Liste aus dem Speicher überschreiben .
So können Sie einen Befehl aus dem Verlauf im Speicher entfernen:
Und schreibe es mit dem letzten Befehl auf die Festplatte:
quelle