Wer regelmäßig auf der Linux-Kommandozeile arbeitet, kennt das Problem: Man weiß noch, dass man einen bestimmten Befehl schon einmal verwendet hat, aber nicht mehr genau, wie die Syntax lautete.
War das nun f3write oder f3probe? Welche Optionen hatte ich damals bei rsync verwendet? Wie lautete der lange ffmpeg-Befehl?
Natürlich speichert die Bash alle eingegebenen Befehle in der History. Doch viele Nutzer schöpfen dieses Potenzial nicht aus. Mit wenigen Anpassungen lässt sich die Bash-History zu einem persönlichen Wissensarchiv ausbauen.
Ein eigenes ~/bin-Verzeichnis
Zunächst lohnt es sich, ein Verzeichnis für eigene Skripte anzulegen:
mkdir -p ~/bin
Damit die darin liegenden Programme ohne Pfadangabe aufgerufen werden können, ergänzt man in der ~/.bashrc:
export PATH="$HOME/bin:$PATH"
Nach einem
source ~/.bashrc
oder dem Öffnen eines neuen Terminals können Skripte aus ~/bin direkt wie normale Befehle aufgerufen werden.
Das Hilfsskript greb
Um bequem in der Bash-History zu suchen, habe ich ein kleines Skript namens greb angelegt – ein Kofferwort aus grep und bash.
Datei: ~/bin/greb
#!/usr/bin/env bash
if [[ $# -eq 0 ]]; then
echo "Verwendung: greb <Suchbegriff>"
exit 1
fi
grep --color=auto -i "$*" ~/.bash_history
Anschließend ausführbar machen:
chmod +x ~/bin/greb
Nun genügt beispielsweise:
greb f3
um alle früheren Befehle mit Bezug zu F3 anzuzeigen.
Ebenso praktisch:
greb rsync
greb ffmpeg
greb docker
greb proxmox
Durch die farbliche Hervorhebung (--color=auto) springen die Treffer sofort ins Auge. Die Option -i sorgt dafür, dass Groß- und Kleinschreibung ignoriert wird.
Die Bash-History vergrößern
Viele Distributionen speichern standardmäßig nur einige tausend Befehle. Wer die History als Nachschlagewerk verwendet, sollte deutlich großzügiger sein.
In die ~/.bashrc:
HISTSIZE=100000
HISTFILESIZE=200000
Damit bleiben auch Jahre später noch selten verwendete Befehle erhalten.
Selbst 200.000 Einträge benötigen auf heutigen Systemen nur wenige Megabyte Speicherplatz.
History nicht überschreiben
Standardmäßig kann es passieren, dass beim Beenden einer Shell die vorhandene History-Datei überschrieben wird.
Abhilfe schafft:
shopt -s histappend
Dadurch werden neue Einträge angehängt statt überschrieben.
Sofortiges Schreiben der History
Besonders nützlich ist:
PROMPT_COMMAND='history -a; history -n'
Die beiden Befehle bewirken:
history -aschreibt neue Befehle sofort in die Datei~/.bash_historyhistory -nlädt neue Befehle, die andere laufende Shells bereits gespeichert haben
Wer mehrere Terminalfenster geöffnet hat, profitiert davon enorm. Neue Befehle stehen praktisch sofort überall zur Verfügung und werden damit auch unmittelbar von greb gefunden.
Nützliche Aliases
Neben Skripten verwende ich gern Aliases für häufig benötigte Befehle.
Die Datei ~/.bash_aliases wird von Ubuntu, Kubuntu, Lubuntu und vielen anderen Distributionen automatisch über die ~/.bashrc eingebunden.
Ein Beispiel:
alias l='ls -CF'
alias ll='ls -lh'
alias la='ls -Ah'
alias lla='ls -lAh'
alias lt='ls -lht'
alias lsd='ls -lhd */'
Was bedeuten diese Aliases?
| Alias | Bedeutung |
|---|---|
l | Kompakte Verzeichnisansicht |
ll | Lange Liste mit menschenlesbaren Größen |
la | Alle Dateien inklusive versteckter Dateien |
lla | Lange Liste inklusive versteckter Dateien |
lt | Nach Änderungszeit sortiert, neueste zuerst |
lsd | Nur Unterverzeichnisse anzeigen |
Besonders praktisch finde ich:
lt
um schnell zu sehen, welche Dateien zuletzt verändert wurden, sowie:
lsd
um in einem Verzeichnis nur die vorhandenen Unterordner aufzulisten.
Die Suche nicht in die Suchbasis aufnehmen
Da greb lediglich zum Durchsuchen der Historie dient und keinen fachlichen Arbeitsbefehl darstellt, wird es mittels HISTIGNORE="greb *" von der Bash-History ausgeschlossen. Dadurch bleibt die Historie übersichtlich und enthält nur die tatsächlich ausgeführten Arbeitsbefehle.
Fazit
Viele Anwender betrachten die Bash-History lediglich als Komfortfunktion. Tatsächlich ist sie oft die beste Dokumentation der eigenen Arbeitsweise.
Mit einer großzügig dimensionierten History, sofortiger Synchronisation zwischen mehreren Shells und einem kleinen Suchwerkzeug wie greb entsteht ein persönliches Wissensarchiv, das mit den Jahren immer wertvoller wird.
Oft genügt dann ein einfaches:
greb stichwort
und die eigene Vergangenheit verrät einem wieder, wie man das Problem damals gelöst hat. Man muss nur daran denken, dass man es bereits einmal gelöst hatte.