Die Command History in Linux Shell Umgebungen ist ein sehr nützliches Werkzeug um automatisch eine Dokumentation der ausgeführten Kommandos zu erstellen. Die History ist automatisch aktiviert, kann jedoch um etliche sinnvolle Funktionen erweitert werden:
Datum der Eingabe protokollieren
# echo 'export HISTTIMEFORMAT="%d/%m/%y %T "' >> ~/.bash_profile
Kommandopuffer erhöhen
Standardmäßig werden in der History eines Debian System nur 500 Kommandos protokolliert. Um eine umfassende Liste (nahezu) aller Kommandos zu erhalten, ist es sinnvoll den Puffer zu erhöhen. Hier auf 10.000:
# echo 'export HISTSIZE=10000' >> ~/.bash_profile
Abgesetzte Kommandos sofort abspeichern
Wer mit mehreren Konsolensitzungen gleichzeitig arbeitet stößt früher oder später auf das Problem, dass eingegebene Kommandos in der History fehlen. Dies ist durch das grundsätzliche Handling der History bedingt.
Wenn eine Konsole A gestartet wird, liest die Shell den Inhalt der Datei .bash_history
in ihren Speicher. Werden nun Kommandos eingegeben, werden diese erst nur im Puffer an den eingelesenen Inhalt angehängt. Beim Schließen der Konsole wird die Datei .bash_history
mit dem Inhalt des Puffers überschrieben.
Haben Sie nun zwei Konsolensitzungen A und B geöffnet und werden diese zB gleichzeitig gestartet, haben beide Konsolensitzungen den identischen Inhalt aus der Datei .bash_history
geladen, entwickeln sich aber unterschiedlich weiter, weil idR in jeder Konsole andere Kommandos eingegeben werden. Wird nun Konsole A geschlossen, wird der Puffer dieser Konsole in die Datei .bash_history
geschrieben. Wird nun aber Konsole B geschlossen passiert das gleiche, jedoch werden die Eingaben der Konsole A dann mit dem aktuellen Inhalt der Konsole B überschrieben.
Das ganze lässt sich abschalten, in dem man die Shell dazu auffordert jedes Kommando sofort in die Datei .bash_history
zu speichern. Dazu sind folgende Einstellungen in der Datei .bash_profile
vorzunehmen:
shopt -s histappend PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
Das shopt
-Kommando zeigt und ändert den Status der Variablen zur Steuerung der optionalen Funktionen der Bash. Der histappend
Parameter führt dazu, dass alle neuen Kommandos in der .bash_history
angehängt werden und stellt sicher, dass mehrere Konsolen den Verlauf der jeweils anderen nicht überschreiben.
Um zu gewährleisten, dass die eingegebenen Kommandos nicht verloren gehen, falls die Bash abnormal beendet wird, kann das Shell Builtin Kommando history -a
verwendet werden, um ein sofortiges Schreiben aller neuen History-Zeilen zu veranlassen. Das kann automatisiert werden, indem sie zur Variable PROMPT_COMMAND
hinzugefügt wird. Diese Variable enthält einen Befehl, der ausgeführt wird, bevor ein neuer Command Prompt angezeigt wird, und wird daher nach der Ausführung jedes interaktiven Befehls ausgeführt. Mit dem neu Belegen der PROMPT_COMMAND
Variable wird verhindert, dass bereits vorhandene Parameter überschrieben werden.
Das ganze Setup hat jedoch auch einen Haken. Wenn Sie vorher gewohnt waren die History der vorausgegangenen Kommandos zu benutzen, müssen Sie nun damit rechnen, dass das letzte Kommando nicht jenes ist, welches Sie in dieser Konsole eingetippt haben, sondern jenes ist, welches Sie in irgendeiner Konsole als letztes eingetippt haben. Schlimmer noch, wenn mehrere Personen gleichzeitig mit dem gleichen Benutzer in ihren jeweiligen Konsolen arbeiten, muss man davon ausgehen, dass das letzte Kommando auch von anderen Benutzern stammen könnte. Da empfiehlt es sich wachsam zu sein!
Einlesen der neuen Konfiguration
Um die neuen Einstellungen wirksam zu machen, können Sie sich entweder vom System ab- und wieder anmelden oder die editierte Konfigurationsdatei neu einlesen:
# source ~/.bash_profile