Intelligente Lösungen
in neuer Dimension

Linux: Bash-Historie - Kommandos aus der Vergangenheit

Ich arbeite viel auf der Kommandozeile und da dann hauptsächlich mit der BASH. Leider kommt es immer wieder vor, dass Kommandos aus meiner BASH-Historie “verschwinden”, was ein ziemlicher Ärgernis ist. Ich weiß, ich habe Kommando XYZ mal verwendet, finde es aber nicht in meiner BASH-Historie (mit “Pfeil-hoch”, “Strg-p” oder “Strg-r”).

Konfigurationsdatei

Grundsätzlich legt man die Eigenschaften der BASH-Historie für sich selbst in der Datei “~/.bashrc” fest.

Größe der Historie erhöhen

Ein sehr einfacher Grund für das Verschwinden von Einträgen aus der Historie ist deren Längenbeschränkung. Die erhöhe ich auf “unlimitiert”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
uli@ulicsl:~$ diff -u .bashrc~ .bashrc
--- .bashrc~ 2020-06-06 07:29:04.000000000 +0200
+++ .bashrc  2021-02-11 21:45:15.743728201 +0100
@@ -16,8 +16,11 @@
 shopt -s histappend

 # for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
-HISTSIZE=1000
-HISTFILESIZE=2000
+HISTSIZE=
+HISTFILESIZE=

 # check the window size after each command and, if necessary,
 # update the values of LINES and COLUMNS.

Mehrere Fenster

Wenn ich mit mehreren Fenstern arbeite, dann tauchen Kommandos von Fenster-1 nicht in der Historie von Fenster-2 auf. Für mich bewährt sich diese Trennung überhaupt nicht. Ich empfinde es als störend, dass ich mich immer an das Fenster erinnern muß, in dem ich gewisse Aktionen gemacht habe um diese zu wiederholen. Ich habe gerne in allen Fenstern dieselbe Historie:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uli@ulicsl:~$ diff -u .bashrc~ .bashrc
--- .bashrc~ 2020-06-06 07:29:04.000000000 +0200
+++ .bashrc  2021-02-11 21:45:15.743728201 +0100
@@ -16,8 +16,11 @@
 shopt -s histappend

 # for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
 HISTSIZE=10000
 HISTFILESIZE=20000
+
+# After each command, append to the history file
+PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a;"

 # check the window size after each command and, if necessary,
 # update the values of LINES and COLUMNS.

Zeitstempel als Bonus

Die Historie sieht üblicherweise grob so aus:

1
2
3
4
5
6
7
8
9
10
11
$ history
...
 1967  cd git/datenschutz-public/
 1968  emacs README.md&
 1969  git diff
 1970  git rm bin/start-chrome-pag.sh 
 1971  ls etc/
 1972  rm etc/dp-proxy.pac etc/pag-proxy.pac.orig 
 1973  git commit -m "Gelöscht: start-chrome-pag.sh" .
 1974  git push
...

Manchmal hilft es mir, wenn ich den Zeitstempel in der Historie sehen kann. So kann ich die Historie auch nach Zeitstempel durchsuchen. Wenn ich beispielsweise noch grob ahne, dass ich im Oktober oder November 2020 irgendwelche “interessanten” Aktionen gemacht habe, dann schaue ich meine Historie in diesem Bereich an und sehe grob sowas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ history
...
 1850  2020-10-30 13:30:39 apt install chkrootkit
 1851  2020-10-30 13:31:48 cd /var/log
 1852  2020-10-30 13:31:52 cd dovecot
 1853  2020-10-30 13:31:58 less dovecot.log
 1854  2020-10-30 13:32:06 grep elsi dovecot.log
 1855  2020-10-30 13:32:37 grep zammad dovecot.log
 1856  2020-10-30 13:32:50 grep zammad dovecot.log|tail
 1857  2020-10-30 13:33:25 grep -C2 zammad dovecot.log|tail
 1858  2020-10-30 13:34:17 tail -f dovecot.log|grep -C2 zammad
 1859  2020-10-30 13:35:15 ls -ltra
 1860  2020-10-30 13:31:02 chkrootkit 
...

Zur Aktivierung muß ich diese Änderungen vornehmen:

1
2
3
4
5
6
7
8
9
10
11
$ diff -u ~/.bashrc~ ~/.bashrc
--- /home/uli/.bashrc~   2021-02-11 21:45:15.000000000 +0100
+++ /home/uli/.bashrc    2021-02-12 08:38:09.170487512 +0100
@@ -18,6 +18,7 @@
 # for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
 HISTSIZE=
 HISTFILESIZE=
+HISTTIMEFORMAT="[%F %T] "

 # After each command, append to the history file
 PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a;"

Links

Historie

  • 2022-04-26: Komplett überarbeitete Version
  • 2020-02-12: Erste Version