Die Bash als persönliches Wissensarchiv – mit greb, großer History und eigenen Aliases

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 -a schreibt neue Befehle sofort in die Datei ~/.bash_history
  • history -n lä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?

AliasBedeutung
lKompakte Verzeichnisansicht
llLange Liste mit menschenlesbaren Größen
laAlle Dateien inklusive versteckter Dateien
llaLange Liste inklusive versteckter Dateien
ltNach Änderungszeit sortiert, neueste zuerst
lsdNur 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.

Schreibe einen Kommentar