Bash-Verlauf regelmäßig speichern

Bash-Verlauf regelmäßig speichern

Ich habe Bash so eingerichtet, dass der Verlauf in einer Datei gespeichert wird. Dies geschieht jedes Mal, wenn Bash [ordnungsgemäß] beendet wird. Da Bash manchmal nicht ordnungsgemäß beendet wird, geht der Verlauf verloren.

Die Frage ist also, kann ich Bash so einrichten, dass der Verlauf regelmäßiger gespeichert wird?


Ich verwende Debian Gnu (Version 6, Squeeze) mit einem Linux-Kernel.

Bash-Version: GNU Bash, Version 4.1.5(1)-Release (i486-PC-Linux-Gnu)

Antwort1

Speichern Sie dies in Ihrem Bash-Profil oder Bashrc.

shopt -s histappend

PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

Antwort2

Ich habe mich entschieden, in meinen .bash_aliases zu verwenden export PROMPT_COMMAND='history -a', was bei jeder Eingabeaufforderung aus der Verlaufsliste im Speicher in die Verlaufsdatei schreibt. Ich hatte einige Probleme mit der Deduplizierung, aber sie wurden behoben. Ich habe auch auf cron.daily und monthly zurückgegriffen, um die Datei zu sichern. Wenn das Terminal unterbrochen wird, ohne es zu beenden, wird es nicht gespeichert. Sogar das Abfangen des Beendens funktioniert nicht. Leider kann der Cron-Job auch die Verlaufsliste nicht speichern, die im Speicher gespeichert ist. Ich konnte keine Möglichkeit finden, einen Befehl an die aktuell laufende Shell zu senden, um history -waus der Liste in die Datei zu schreiben. Das könnte verwendet werden, aber es müsste für jede Shell, die in einem Tab geöffnet ist, ein separater Befehl vorhanden sein, wenn man die Arbeit getrennt halten möchte. Falls nicht, gibt es einen anderen Link, der erklärt, wie man bei jeder Eingabeaufforderung schreibt und gleichzeitig Deduplizierung durchführt.

https://unix.stackexchange.com/questions/697314/any-way-to-resolve-export-prompt-command-history-a-and-histcontrol-ignored/720637#720637

Antwort3

Es ist möglich, dass Ihr $HISTFILE root gehört. Vorausgesetzt, Sie verwenden Bash als Login-Shell. So können Sie das überprüfen:

$ [ -z $HISTFILE ] && echo need to set HISTFILE || ls -l $HISTFILE
-rw------- 1 root root 36639 May 21 19:48 /home/joeb/.bash_history

Der Standardwert für HISTFILE sollte ~/.bash_history sein. Wenn die Fehlermeldung „HISTFILE muss festgelegt werden“ angezeigt wird oder wenn $HISTFILE nicht ~/.bash_history ist, sollten Sie ~/.profile oder ~/.bash_profile oder ~/.bashrc überprüfen, um sicherzustellen, dass es nicht falsch festgelegt oder zurückgesetzt wird.

Normalerweise gehört es nur dem Root, also setzen Sie es einfach zurück:

$ chown joeb.joeb $HISTFILE
$ ll $HISTFILE
-rw------- 1 joeb joeb 36639 May 21 19:48 /home/joeb/.bash_history

Abmelden und dann anmelden.

$ history

Sollte den letzten Satz an Befehlen anzeigen, der eingegeben wurde, bevor die Datei dem Root-Benutzer gehörte, gefolgt von den Befehlen, die eingegeben wurden, nachdem der Dateieigentümer geändert wurde.

verwandte Informationen