2002032

Clevere Terminal- und Bash-Tricks für Linux

28.09.2018 | 15:03 Uhr | Hermann Apfelböck

Das Gnome-Terminal und die darin laufende Kommando-Shell bieten reichliche Optionen, um sie optisch und funktional zu optimieren. Das ist zum Teil einfach, zum Teil knifflig. Die notwendigen Tipps finden Sie hier.

Ohne Terminalbenutzung werden Sie mittelfristig nicht durch Linux ( Mint ) kommen. Es kommt unvermeidlich die Situation, wo Sie rekursiv Dateirechte ändern müssen, manuelles Kopieren durch rationales Rsync- oder Tar-Backup ersetzen wollen oder nur noch auf die Textkonsole des Systems gelangen. Und wer nicht nur ein Desktop-Mint, sondern auch einen Linux-Datenserver nutzen will, kommt ohne Terminal via SSH schon gar nicht aus. Dieser Artikel zeigt alle wichtigen Optionen, um das grafische Terminal, aber auch die virtuellen Konsolen und die SSH-Konsole komfortabel einzurichten. Punkt 1 bezieht sich ausschließlich das grafische Terminalfenster. Alle anderen Punkte 2 bis 5 zur Bash-Optimierung gelten auch für SSH und für die Konsolen (Strg-Alt-F1 und weitere). Bei den grafischen Terminalemulatoren nehmen wir das Gnome-Terminal als Referenz, wie es in der Hauptedition von Linux Mint zum Einsatz kommt. Das Mate-Terminal und das Xfce4-Terminal bieten ganz ähnliche Einstellungen, aber nicht immer an gleicher Stelle. Bei der Shell selbst, also dem eigentlichen Kommandointerpreter, ist überall die Bash-Shell Standard.

Dieser Beitrag kann keine Einführung in die Bash-Befehle leisten, sondern konzentriert sich auf den Bedienkomfort des Terminals. Beachten Sie in diesem Zusammenhang den Hefteinleger mit seiner Übersicht der wichtigsten Terminalkommandos.

Crashkurs: Samba und SSH

1. Das grafische Terminal

Terminalemulatoren sind grafische Programme mit zahlreichen Einstellungen. Sie sind unabhängig von der Shell, die im Terminal läuft. Die Optionen und Optimierungen, die Sie im grafischen Terminal vornehmen, haben daher mit der Bash-Shell zunächst nichts zu tun. Lediglich bei Farbeinstellungen für das grafische Terminal und solchen für die Bash-Shell gibt es Kombinationen, welche die Lesbarkeit fördern – oder eben nicht.

Insbesondere engagierte Nutzer, die sich das Terminal optisch bestmöglich einrichten möchten, sollten sich beim Aussehen des grafischen Terminals farblich festlegen, bevor sie Ausgabefarben und Prompt der Bash-Shell optimieren.

Einstellungen und Profile: Das Gnome-Terminal zeigt im Menü „Bearbeiten“ die Untermenüs „Einstellungen“ und „Profileinstellungen“. Beides sind benutzerspezifische Optionen: Was unter „Einstellungen“ festgelegt wird, gilt für jedes Terminal im aktuellen Benutzerkonto. Die „Profileinstellungen“ erlauben darüber hinaus verschiedene Layouts, die man entweder im Gnome-Terminal selbst mit „Terminal –› Profil wechseln“ umschalten kann. Verschiedene Profile sind unnötiger Luxus, jedoch sollten Sie das als „Unbenannt“ betitelte Standardprofil unter „Bearbeiten –› Profileinstellungen“ in jedem Fall bearbeiten. Die Registerkarte „Allgemein“ bestimmt die Größe des Terminalfensters über die Spaltenzahl (Breite) und Zeilenzahl (Länge) sowie die verwendete Schriftart. Beachten Sie, dass Sie das Terminalfenster unabhängig von der Schrift jederzeit mit Strg-+ und Strg-- skalieren können. Die Registerkarte „Farben“ definiert die Farb- und Transparenzeinstellungen. Wer Experimente mit eventuell kontrastarmen Ergebnissen vermeiden will, sollte bei den Vorgaben bleiben („Integrierte Schemata“) wie etwa „Schwarz auf hellgelb“ oder „Grün auf schwarz“.

Unter „Bildlauf“ sollte der „Zeilenpuffer“ deutlich vierstellig eingestellt sein, damit Sie auch bei umfangreichen Dateilisten (find, ls, rsync) bis zum Beginn der Ausgabe zurückblättern können.

Der allgemeinere Punkt „Bearbeiten –› Einstellungen“ spielt für die Terminaloptik keine Rolle. Hier können Sie aber unter „Tastenkürzel“ die Hotkeys ermitteln oder neu bestimmen, die in Ihrem Terminal gelten. Der Tipp, hier auch die Hotkeys für Kopieren (Strg-Umschalt-C) und Einfügen (Strg-Umschalt-V) auf gebräuchliches Strg-C und Strg-V umzustellen, ist zweischneidig, weil Strg-C in der Bash-Shell traditionell für den Abbruch des aktuellen Befehls reserviert ist.

2. Bash-Zeileneditor und History

Der Historyfilter in der Datei „/etc/inputrc“.
Vergrößern Der Historyfilter in der Datei „/etc/inputrc“.

Kaum ein Terminalthema klingt langweiliger als die Regeln des „line editing“ – also Texteingabe, Textbearbeitung, Autovervollständigung und Befehlssuche am Bash-Prompt. Es entscheidet aber fundamental darüber, wie viel oder wenig Sie tippen müssen – und „Tippen“ bedeutet hier ja nicht das Schreiben von natürlicher Sprache, sondern von oft komplexen Befehlen. Eine Abkürzung hier vorab, da diese nachfolgend häufig erscheint: Die Tilde „~“ ist für die Bash-Shell die Variable für das Home-Verzeichnis des angemeldeten Kontos („/home/[kontoname]“). Die wichtigste Initialisierungsdatei bei jedem Terminalstart ist „~/.bashrc“, also „/home/[kontoname]/.bashrc“).

Autocompletion: Lange Dateinamen müssen nicht getippt werden: Wenn Sie die ersten zwei, drei Buchstaben eingeben und dann die Tab-Taste drücken, ergänzt das Terminal den vollständigen Namen automatisch, desgleichen Ordnerpfade, sofern die eingegebenen Buchstaben stimmen (Groß- und Kleinschreibung beachten!).

History: Das Terminal vergisst nichts – jedenfalls nicht so schnell. Die Befehle werden im Speicher sowie dauerhaft in der „~/. bash_history“ gespeichert. Dafür die Befehle über Sitzungen und Neustarts hinaus gesammelt werden, sorgt diese Anweisung:

shopt -s histappend  

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

HISTSIZE=5000 
HISTFILESIZE=5000

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 höher die Zahlen, desto umfangreicher wird das Gedächtnis der Bash-Shell. Mit der Variablen

HISTCONTROL=ignoredups  

können Sie verhindern, dass die History von Dubletten wimmelt: Bereits vorhandene identische Kommandos werden dann nicht aufgenommen.

Diese Seite erspart das Hantieren mit den unzugänglichen Farbcodes.
Vergrößern Diese Seite erspart das Hantieren mit den unzugänglichen Farbcodes.

Soviel zur Optimierung der History. Im praktischen Alltag gibt es mehrere Möglichkeiten. Fast jedem Anwender bekannt ist das Zurückblättern zu den letzten Kommandos mit der Taste Cursor-oben, die den gewünschten Befehl wieder auf den Prompt holt. Eine systematische Suche bietet der Hotkey Strg-R: Nach Eintippen etwa von „apt“ erscheint der letztgenutzte apt-Befehl in kompletter Länge. Ist dieser passend, kann er mit Eingabetaste sofort ausgeführt oder mit Alt-Eingabetaste zum Editieren auf den Prompt geholt werden. Ist der angezeigte Historytreffer nicht der passende, geht es mit Strg-R zum vorletzten und so fort.

Eine nützliche Ergänzung zur Rückwärtssuche mit Strg-R ist eine Filtersuche mit der Taste Bild-oben. Nach Eingabe etwa von apt befördert diese Taste den letzten kompletten apt-Befehl direkt auf den Prompt, ein weiteres Bild-oben den vorletzten und so fort. Diese Suche funktioniert aber nur, wenn Sie Bild-Tasten entsprechend belegen – und zwar in der Datei „/etc/inputrc“. Das Editieren erfordert root-Recht (sudo xed /etc/inputrc). Sie werden dort die beiden Zeilen

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

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

Zum Editieren vorhandener Zeilen, seien es selbst getippte oder aus der History gefischte, helfen Lösch- und Rücktaste, Pos1, Ende, Strg-Cursor-rechts/links (wortweise springen), Strg-K und Strg-U (Löschen nach und vor der Cursorposition, siehe dazu auch Punkt 4).

Tipp: Linux-Probleme und ihre Lösungen

3. Farben am Prompt und in Dateilisten

Hübsche Prompts sind hartes Handwerk.
Vergrößern Hübsche Prompts sind hartes Handwerk.

Der Prompt, also die Anzeige bei jeder Befehlseingabe, kann beliebige statische und dynamische Informationen anbieten. Die Promptanzeige definieren Sie temporär mit dem Befehl „PS1='…'“. und dauerhaft in der Datei „~/.bashrc“. Einige dynamische Variablen wie das aktuelle Verzeichnis, Datum oder Uhrzeit bietet der Prompt durch vordefinierte Escape-Zeichenfolgen selbst an, etwa „\w“ für das aktuelle Verzeichnis, „\u“ für das angemeldete Konto oder „\h“ für den Rechnernamen. Einfache Prompts sehen dann so aus:

PS1="\w => "
PS1="\u@\h:\w => " 

Eine gute Infoquelle für alle Promptoptionen ist die Seite https://wiki.archlinux.de/title/Bash-Prompt_anpassen . Über die eingebauten Codes hinaus können Sie jede allgemeine oder selbst definierte Variable einfach mit „$Variable“ in die PS1-Definition setzen:

PS1="\w [$LOGNAME] => "  

Um Infos gegeneinander abzugrenzen, sind ferner Farbdefinitionen vorgesehen, die stets mit der Sequenz „\[\033“ starten. Ein Prompt wie

PS1="\n\[\033[47;30m\]\d, \A \ [\033[41;37m\] \u on \H \ [\033[47;30m\] MB free=$freemem \ [\033[41;37m\] $CPU \ [\033[40;37m\] [$timediff] \ [\033[42;30m\] \w \[\033[0m\]\n"  

ist aber praktisch unlesbar. Immerhin geht es Schritt für Schritt von einer Escape-Sequenz zur nächsten – „\n“ bedeutet einen Zeilenumbruch, „\[\033“ schaltet dann die Farben um, „\d“ setzt das Datum ein, „\A“ die Uhrzeit. Erläuternder Text oder Zeichen wie Komma oder Blank sind an jeder Stelle möglich, ferner auch Variablen mit „$“. Wichtig ist, Farbdefinitionen am Ende wieder zurückzusetzen („\[\033[0m\]“).

Hotkeys für die Bash-Shell.
Vergrößern Hotkeys für die Bash-Shell.

Easy Bash PS1 Generator: Bei den unsäglichen Farbsequenzen sollten Sie sich helfen lassen: Auf der Seite http://ezprompt.net/ können Sie von ersten Position zur letzten durchgehen, was der Prompt zeigen soll. Dabei bestimmen Sie für das jeweils markierte Element Vorder- und Hintergrundfarbe („FG“ und „BG“). Im untersten Feld erscheint dann der resultierende Code für die PS1-Variable, den Sie einfach kopieren, im Terminal einfügen und testen. Wenn das Ergebnis passt, übernehmen Sie diese Codezeile in Ihre Datei „~/.bashrc“. Die Webseite deckt zwar längst nicht alle Möglichkeiten des Bash-Prompts ab, liefert aber die heiklen Farbcodes.

Dynamische Infos durch Prompt_Command: Wenn Variablen echtzeitaktuell im Prompt landen sollen (etwa die CPU-Auslastung), dann muss diese Variable unmittelbar vor der Promptdarstellung ermittelt werden. Dafür bietet die Bash einen speziellen Service: Mit

PROMPT_COMMAND=[function-name]  

definieren Sie eine Funktion der Datei „~/. bashrc“, die bei jedem Befehl in der Kommandozeile abgerufen wird. Da dies häufig geschieht, sollten Sie den Rechenaufwand in Grenzen halten. Ein Beispiel für einen selbst gebauten Prompt mit Echtzeitinfos aus einem Prompt_Command sehen Sie in der Abbildung auf dieser Seite. Den Code können Sie auch der Datei „bashrc“ entnehmen, die wir auf Pastebin bereitgestellt haben.

Farbige Dateien und Ordner: Das Terminal stellt Dateitypen und Ordner standardmäßig in unterschiedlichen Farben dar. Wenn Sie bestimmte Farben ändern möchten, erstellen Sie mit folgendem Befehl eine persönliche Konfigurationsdatei im Home- Verzeichnis:

dircolors -p > ~/.dircolors  

Die versteckte Datei „.dircolors“ können Sie dann mit einem beliebigen Editor bearbeiten. So werden zum Beispiel Ordnernamen gelb gefärbt:

DIR 01;33  

Die Einstellungen dieser eigenen Farbtabelle dominieren über die Standardeinstellungen. Die Farbcodes können Sie der Seite https://wiki.archlinux.de/title/Bash-Prompt_anpassen entnehmen. Achten Sie auf die Tatsache, dass solche Farbdefinitionen durch Umstellen der allgemeinen Terminalfarben (siehe Punkt 1) unter Umständen unlesbar werden. Wer hier Zeit investiert, sollte an der allgemeinen Terminaloptik nichts mehr verändern.

Siehe auch: Die 10 wichtigsten Linux-Befehle für Netzwerk und Internet

4. Bash-Aliases und Bash-Hotkeys

Alias-Definitionen machen komplexe Bash-Kommandos deutlich komfortabler.
Vergrößern Alias-Definitionen machen komplexe Bash-Kommandos deutlich komfortabler.

Ohne in das Bash-Scripting einzusteigen, können einfachste Alias-Kurzbefehle und Bind-Hotkeys die Effektivität der Bash-Shell enorm steigern.

Bash-Hotkeys: Mit Tastendefinitionen sollte man sparsam umgehen, damit der Durchblick nicht verlorengeht, jedoch sind einige Nachbesserungen produktiv. So ist etwa beim Editieren am Prompt zwar das Löschen vor und nach der Cursorposition mit den Hotkeys Strg-U und Strg-K vorgesehen, aber nicht das Löschen der kompletten Zeile mit einem Hotkey. Folgendes Bind-Kommando

bind '"\C-l":kill-whole-line' 

legt den internen Befehl „kill-whole-line“ auf den Hotkey Strg-L. Die Strg-Taste ist mit „\C“ einzugeben.

Folgender Befehl

bind '"\e[15~":"xdg-open . \n"'  

belegt die Funktionstaste F5 so, dass sie im aktuellen Verzeichnis den Dateimanager startet. Die Funktionstasten sind mit „\e[nn~“ anzugeben, wobei die Ziffer „nn“ in der Regel den Wert plus 10 der tatsächlichen Taste benötigt. Im Zweifel kann der Befehl „read“ und anschließendes Drücken der Funktionstaste über die Ziffer „nn“ informieren.

Bind-Befehle können Sie interaktiv ausprobieren. Sie gelten bis zum Schließen des Terminals. Für permanente Gültigkeit benötigen Sie einen Eintrag in der „~/.bashrc“.

Aliases: Kurzbefehle sorgen für schnelle Ordnernavigation oder vereinfachen komplexe Befehle. Der Platz für Aliases ist wieder die Datei „~/.bashrc“,und die Befehle werden in einfachsten Fällen so aussehen:

alias ini='xed ~/bashrc'
alias mc='mc /srv/dev-disk-bylabel-Data /srv'
alias ll='ls -alF --groupdirectories-first'  

Aliases entschärfen die interaktive Nutzung mächtiger Terminaltools erheblich. Ein Beispiel ist etwa folgendes Alias für den Find-Befehl:

alias fn='read -p "Dateimaske (z.B. *.pdf): " TMP; find . -type f -name "$TMP"'  

Nach Aufruf des Kürzels „fn“ werden Sie mittels „read“ nach der Dateimaske gefragt, die dann etwa „*.odt“ oder auch „2018*. jpg“ lauten kann (ohne Anführungszeichen). Diese Eingabe wird mit der Variable „$TMP“ an find weitergereicht. Das Alias geht davon aus, dass man zuerst in das gewünschte Verzeichnis gewechselt hat, denn dort (Punkt nach „find .“) startet find die Suche. Ähnlich übergibt

alias ft='read -p "Alter in Tagen (z.B. 7): " TMP; find . -type f -mtime "-$TMP"'  

die Variable „$TMP“ eine Zahl an find, das dann über den Schalter „-mtime“ alle Dateien ermittelt, die in den letzten Tagen erstellt wurden.

5. Ordnernavigation im Terminal

Einträge wichtiger Verzeichnisse in die Variable „CDPATH“ erlauben den direkten Ordnerwechsel.
Vergrößern Einträge wichtiger Verzeichnisse in die Variable „CDPATH“ erlauben den direkten Ordnerwechsel.

Verzeichniswechsel mit cd gehören zu den häufigsten Kommandos. Auch hier gibt es eine Reihe kleiner Optimierungen.

1. Die häufigsten Zielordner sind am besten über ein knappes Alias zu erreichen, um etwa nach

alias d='cd ~/Schreibtisch'  

mit der Eingabe „d“ zum Desktop zu gelangen.

2. Eine hübsche Lösung für schnelles Springen in wichtige Verzeichnisse ist die Variable „CDPATH“. In ihr lassen sich mehrere Ordnerpfade speichern. Danach kann man überall mit „cd [Verzeichnis]“ in ein Unterverzeichnis eines der gespeicherten Verzeichnisse springen. Um also etwa den Pfad „/var/www/html“ in die Variable „CDPATH“ aufzunehmen, geben Sie

export CDPATH='.:/var/www/html/'  

ein. Danach wechseln Sie von beliebiger Stelle mit cd htdocs und cd logs in Unterordner von „/var/www/html/“. Die CDPATH-Variable lässt sich durch eine beliebige Anzahl weiterer Verzeichnisse erweitern – jeweils durch Doppelpunkt getrennt:

export CDPATH='.:~:/var/www/ html/:/media/985c9fb3-14a6-449ebec5-4666a283fbf4/'  

Hier besteht der „CDPATH“ aus dem aktuellen Verzeichnis („.“), dem Home-Verzeichnis („~“), dem Webserver-Verzeichnis und einem Mountordner. Am Anfang sollte mit „.:“ immer das aktuelle Verzeichnis stehen, damit dieses immer die höchste Priorität behält. Für einen dauerhaften „CDPATH“ müssen Sie die Exportanweisung in die Datei „~/.bashrc“ eintragen.

Tipp: Linux Mint: Das macht die Distribution so erfolgreich

PC-WELT Marktplatz

2002032