Channel Header
2423826

Linux: Terminal-Amnesie und Gedächtnisstützen

30.04.2019 | 15:05 Uhr | Hermann Apfelböck

Der Terminalprompt blinkt geduldig, aber die Synapsen haben keine Munition: Wie lautet der gesuchte Befehl? Welcher Schalter war der entscheidende? Das Terminal blinkt und schweigt gnadenlos …

Am Prompt muss man wissen, was zu tun ist. Es gibt zwar nicht unzählige, aber doch sehr, sehr viele Befehle mit noch mehr Parametern. Wahrscheinlich kommt man mit fünf bis zehn Prozent dessen ganz gut durchs Linux-Leben, aber ls und cd werden nicht reichen. Dabei hat die Ratlosigkeit am Prompt zwei unterschiedliche Facetten: Ganz ärgerlich ist die Amnesie – einen mit Gewissheit bereits genutzten Befehl nicht mehr erinnern oder rekonstruieren zu können. Ferner stößt man aber auch auf Aufgaben, die man noch nie gelöst hat und für die man daher die passenden Werkzeuge nicht kennt. Für beides gibt es keine Allheilmittel, aber bewährte Therapien.

Alte Befehle erneut abrufen

Das typische Amnesie-Problem: „Wie ging das noch?“. Was Sie schon einmal am Terminalprompt erledigt haben, können Sie über lange Zeiträume hinweg erneut abrufen. Das Terminal vergisst nichts – jedenfalls nicht so schnell. Die Befehle werden im Speicher und dauerhaft in der „~/.bash_history“ gespeichert. Dafür, dass die Befehle über Sitzungen und Neustarts hinaus gesammelt werden, sorgt diese Anweisung:

shopt -s histappend

Diese Zeile werden Sie in jeder Standardstartdatei „~/.bashrc“ antreffen. Bei welcher Zeilenmenge Schluss sein soll, also die ältesten Einträge gelöscht werden, bestimmen folgende Variablen:

HISTSIZE=5000
HISTFILESIZE=20000

Auch diese stehen in jeder „~/.bashrc“, wenn auch eventuell mit geringeren Zeilenangaben. „HISTSIZE“ ist die maximale Zeilenmenge im Speicher, „HISTFILESIZE“ die maximale Zeilenmenge in der Datei „~/.bash_history“. Je größer die Werte, desto umfangreicher wird das Gedächtnis der Bash-Shell. Die oben genannten Werte sollten Platz für Eingaben über viele Monate bieten.

Siehe auch: Die 10 wichtigsten Linux-Befehle für Einsteiger

Trotzdem ist es sinnvoll, die History von vornherein vor unnötigem Datenmüll zu bewahren. Die Anweisung

HISTCONTROL=ignoreboth:erasedups

in der Datei „~/.bashrc“ verhindert erstens, dass die History von Dubletten wimmelt: Bereits vorhandene, identische Kommandos werden dann nicht aufgenommen. Sie ermöglicht zweitens die bewusste Eingabe von Befehlen mit führendem Leerzeichen, die zwar normal ausgeführt, aber wegen „ignoreboth“ nicht in die History aufgenommen werden. „ignoreboth“ ist eine Sammelanweisung für „ignoredups“ (Dubletten vermeiden) und „ignorespace“.

Eine weitere Option, die History effizienter zu machen, ist der Ausschluss von Allerweltsbefehlen:

HISTIGNORE="free*:exit:clear:man*:mc*:mkdir*:rm*"

Soviel zur Optimierung der History. Für die eigentliche praktische Verwendung gibt es mehrere Methoden.

Zurückblättern in der History

Vereinfachte Historysuche: Ein einfaches Grep-Alias grenzt die Ergebnisse ein.
Vergrößern Vereinfachte Historysuche: Ein einfaches Grep-Alias grenzt die Ergebnisse ein.

Fast jedem Anwender bekannt ist das Zurückblättern zu den letzten Kommandos mit der Taste Cursor-oben, die den letzten Befehl wieder auf den Prompt holt, erneutes Cursor-oben den vorletzten – und so fort. Alle und damit auch die länger zurückliegenden Kommandos kann man sich mit dem Befehl „history“ auflisten lassen, der für jedes Kommando eine führende Zeilennummer anzeigt. Die gewünschte Zeile kann dann der Befehl „![Nummer]“ starten. Das Prozedere ist aufgrund der ellenlangen Historyliste nicht sonderlich komfortabel, wird aber sofort handlicher, wenn Sie es mit einem Vorabfilter kombinieren:

alias hs='history | grep $1'

Dann liefert etwahs blkid nur noch die hier gewünschten blkid-Kommandos samt Zeilennummer und mit „!“ und der zugehörigen Zeilennummer starten Sie das beste der gezeigten Kommandos.

Vorheriges Editieren des Kommandos ist bei Standardeinstellungen nicht vorgesehen. Vorsichtige werden es daher begrüßen, dass die Anweisung

shopt -s histverify

in der Datei „~/.bashrc“ den Standard ändern kann. Dann landet der aus der History mit „![Nummer]“ übernommene Befehl editierbar auf dem Prompt. Neben diesen beiden Optionen der Historyabfrage gibt es aber noch elaboriertere Möglichkeiten, die nachfolgend beschrieben werden.

Die Historysuche mit Strg-R

Zusätzlicher Historyfilter.
Vergrößern Zusätzlicher Historyfilter.

Eine systematische Historysuche bietet der Hotkey Strg-R: Nach Eintippen etwa von rsync erscheint der letztgenutzte rsync-Befehl in kompletter Länge. Ist dieser passend für die aktuelle Aufgabe, kann er mit der Eingabetaste sofort ausgeführt werden; geht der Befehl zumindest in die passende Richtung, kann er mit der Taste Esc zum Editieren auf den Prompt geholt werden. Ist der angezeigte Historytreffer nicht geeignet, geht es mit Strg-R zum vorletzten einschlägigen Befehl und so weiter.

Strg-R filtert nicht nur nach dem Befehlsanfang, also dem eigentlichen Bash-Befehl: Nach Strg-R kann etwa eine Eingabe „Schreib“ die Aktionen filtern, die im Pfad „~/Schreibtisch“ ausgeführt wurden – unabhängig vom eigentlichen Kommando.

Historysuche mit Bild-oben/unten

Eine Alternative und empfehlenswerte Ergänzung zur Rückwärtssuche mit Strg-R ist eine Filtersuche mit der Taste Bild-oben. Nach Eingabe etwa vontar befördert diese Taste den letzten kompletten tar-Befehl direkt zum Editieren auf den Prompt, ein weiteres Bild-oben den vorletzten und so fort. Dieser Filter ist simpler als die Suche mit Strg-R, setzt aber anders als diese voraus, dass der Befehlsanfang richtig eingegeben ist. Die Rückwärtssuche mit Strg-R findet, wie schon angesprochen, auch Befehle nach Eingaben, die in der Befehlsmitte oder am Ende stehen.

Standardmäßig sind die Bild-Tasten nicht für die Historysuche aktiviert. Diese Suchvariante funktioniert erst, wenn Sie die Tasten Bild-oben und Bild-unten entsprechend belegen – und zwar in der Datei „/etc/inputrc“. Das Editieren erfordert root-Recht. Sie werden dort die beiden Zeilen

\"e[5~\": history-search-backward
\"e[6~\": history-search-forward

antreffen und müssen dort nur das führende Kommentarzeichen „#“ entfernen.

Siehe auch: Die Linux-Konsole im Griff: Shell-Tipps und -Tricks

Schalter-Experimente an der Basissyntax

Komplexe Rsync-, dd-oder Find-Befehle mit diversen Schaltern müssen erst einmal im Detail getestet werden, bis man sie als Alias oder in einem Script ablegen kann. Dafür sind eventuell diverse Fehlversuche und nachfolgende Schalterkorrekturen vonnöten. Trotzdem werden Sie sich, um Tipparbeit zu sparen, als Grundgerüst schon mal ein funktionsähnliches Basiskommando aus dem Web kopieren. Damit Sie dieses dann jederzeit über die Bash-History wieder abrufen können, setzen Sie am besten an die erste Stelle das Kommentierungszeichen „#“ und schreiben das Kommando mit Eingabetaste in die Bash-History. Danach können Sie es mit Cursor-oben oder mit der Suchfunktion Strg-R wieder abrufen und die Detailanpassungen der Schalter und Ordnerpfade vornehmen.

Bash-History mit Schlüsselwörter

Experimentieren mit Kommandos.
Vergrößern Experimentieren mit Kommandos.

Ein hübscher Trick, um interessante, aber seltener genutzte Befehle bei Bedarf schnell wiederzufinden, besteht in der Kommentierung der Kommandos durch Schlüsselwörter. Ein Beispiel:

lsblk -o name,fstype,uuid,size,owner,type,mountpoint # disk partition detail

Der interaktiv so eingegebene Befehl funktioniert wie gewohnt; alles ab dem Kommentarzeichen „#“ wird einfach ignoriert. Der Befehl landet aber inklusive Kommentar in der Datei „~/.bash_history“. Folglich können Sie später in der History-Suche mit Strg-R ein Schlüsselwort wie „detail“ oder „partition“ eingeben, und die Suche wird Ihnen die Befehle mit diesem Kommentar anbieten.

Die Wahl der Stichwörter ist dabei die anspruchsvollste Aufgabe: Sie sollten so assoziativ ausfallen, dass Sie bei späterer Suche die Sache schnell eingrenzen können – etwa durch Kategorien wie „task, folder, partition, disk, size, user, right, info, hardware“. Natürlich sind auch deutsche Kommentierungen möglich. Wer diese Möglichkeit nicht nur künftig, sondern rückwirkend nutzen möchte, kann seine „.bash_history“ nachträglich mit solchen Kommentaren erweitern.

Exkurs: Falls Ihre Bash-Shell interaktive Eingaben mit Kommentarzeichen nicht akzeptiert, ist eine Standardeinstellung verstellt. Sie lautet „interactive_comments“ und kann bei Bedarf mit

shopt -s interactive_comments

in der Datei „~/.bashrc“ explizit aktiviert werden.

Apropos: Programmsuche mit Stichwort

Kommentare in der History.
Vergrößern Kommentare in der History.

Eine gewaltige Hürde bei der Verwendung der Shell ist die schlichte Frage, welches Kommando sich für welche Aufgabe eignet. Infoportale im Internet sind da oft enttäuschend: Alphabetische Listen sind denkbar unpraktisch, vollständige Bash-Referenzen definitiv nicht das, was man für eine schnelle Kommandorecherche benötigt, und vorsortierte Präsentationen der „wichtigsten“ Befehle verzichten von vornherein auf Vollständigkeit.

Für eine grobe thematische Suche eignet sich der Befehl „apropos“, der die Datenbank der Manpages nach Stichwörtern durchsucht (identischer Befehl „man -k [Stichwort]“). So liefert apropos zumindest einen ersten Überblick:

apropos samba

Hier erhalten Sie alle Befehle, die im Zusammenhang mit Samba-Netzwerkfreigaben stehen. Mit dem Schalter „--and“

apropos --and file rename

ist ein UND-Suche nach mehreren Stichwörtern möglich.

Whatis: Was kann ein bestimmter Befehl?

Findet oft den passenden Befehl
Vergrößern Findet oft den passenden Befehl

Whatis ist das Gegenstück zu apropos: Es liefert für einen angegebenen Befehl genau dieselbe Kurzbeschreibung aus den Manpages wie apropos. Während Sie also mit apropos geeignete Programme für eine bestimmte Aufgabe suchen, fragen Sie mit whatis ab, was ein bestimmtes Programm kann:

whatis diff

Wer einen systematischen Überblick über alle auf seinem System installierten Kommandozeilenprogramme erreichen will, kann diese mit

compgen -c

auflisten und diese Liste gleich mit whatis kombinieren:

for p in $(compgen -c|sort);do whatis $p >> liste.txt;done

Das Ergebnis ist eine Textdatei „liste.txt“ mit alphabetischer Abfolge sämtlicher Systembefehle und jeweiliger Kurzcharakterisierung durch whatis.

PC-WELT Marktplatz

0 Kommentare zu diesem Artikel
2423826