Das Verhalten der Shell via Bashrc steuern

Aus LinuxUser 03/2018

Das Verhalten der Shell via Bashrc steuern

© JunichiSuzuki, 123RF

Schaltpult

Die Bashrc ist eine der wichtigen Steuerdateien für Anwender der Kommandozeile. Profis integrieren hier zusätzlich einige Kniffe, die den Alltag einfacher machen.

Auf der Kommandozeile lassen sich viele Aufgaben einfacher und schneller erledigen als mit grafischen Anwendungen. Wie gut das klappt, hängt nicht zuletzt von der Konfigurationsdatei Bashrc ab, die Einstellungen für die Shell festlegt.

Bei dieser Shell, die mit jedem Aufruf einer Konsole oder eines Terminals startet, handelt es sich meist um die Bash (Bourne-Again Shell) oder alternativ die etwas kompaktere Dash (Debian-Almquist-Shell). Andere Kommandozeilen-Interpreter, wie die bei versierten Anwendern oft anzutreffende Zsh, nutzen eigene Konfigurationsdateien.

Eine Shell fungiert generell als Interpreter, der vom Benutzer eingetippte Befehle annehmen und ausführen kann, um Operationen wie das Navigieren im Dateisystem, das Ausführen von Programmen und die Interaktion mit Geräten auszuführen.

Viele Skripte starten mit dem sogenannten Shebang #!/bin/sh. Er weist das Betriebssystem an, die folgenden Anweisungen mit dem Interpreter-Programm /bin/sh auszuführen. Dabei handelt es sich um einen symbolischen Link, der auf die Standard-Systemshell verweist, also die Bash, Dash oder einen der zahlreichen anderen Kommandozeilen-Interpreter.

Möchten Sie ein Skript stets mit einer bestimmten Shell ausführen, beginnen Sie es mit einem entsprechenden Shebang, wie beispielsweise #!/bin/bash, um explizit die Bash zu nutzen.

Global oder lokal

Die Bash interpretiert Ihre Eingaben im Terminal und führt die entsprechenden Befehle aus. Bei der Bashrc gilt es, zwischen systemweiter und benutzerspezifischer Konfiguration zu unterscheiden. Für systemweite Einstellungen, also global für alle Benutzer, dient je nach Distribution die Datei /etc/bashrc oder /etc/bash.bashrc.

Die benutzerspezifische Bashrc liegt unter ~/.bashrc, also versteckt im Home des jeweiligen Users. Auch der User root hat eine eigene Bashrc. Im Normalfall passt man die Bashrc im eigenen Home den individuellen Vorlieben an – das gilt auch für diesen Artikel, sofern nicht anders angegeben.

Bei der Bashrc handelt es sich um nichts anderes als ein Shell-Skript, das das System beim Start jeder interaktiven Shell auswertet. Sie darf jeden Befehl enthalten, den Sie auch am Prompt eingeben können. Zudem lassen sich Skripte einbinden, die das Arbeiten auf der Kommandozeile erleichtern.

In Login-Shells wird die Bashrc nicht ausgewertet, dort kommt die .bash_profile (Debian: .profile) zum Zug. Möchten Sie also bei einer Login-Shell einen Eintrag einmalig ausführen, ist die .bash_profile der richtige Ort. Sollen die Veränderungen dagegen bei jedem Start eines Terminals oder einer Konsole greifen, tragen Sie das fragliche Kommando in die .bashrc ein.

Die Distributionen befüllen die Bashrc nach der Installation unterschiedlich. Hier bleibt also Raum für eigene Änderungen oder Ergänzungen. Was aber kann man in der Bashrc definieren, um sich den Alltag auf der Kommandozeile zu erleichtern? Zu den häufigsten Änderungen an der Bashrc zählen vermutlich die individuelle Gestaltung des Prompts, also der Eingabeaufforderung in der Shell, und die Definition von Stellvertreterbegriffen, in der Bashrc Alias genannt.

Sauber arbeiten

Bei der Bashrc handelt es sich um eine komplexe Datei, in der man leicht den Überblick verlieren kann. Zwei Regeln sind hier wichtig: Gliedern Sie die von Ihnen zugefügten Teile übersichtlich, und kommentieren Sie Ihre Ergänzungen, sodass Sie auch in einigen Jahren noch verstehen, was Sie dort aus welchem Grund geändert haben. Kommentarzeilen markieren Sie mit einem vorangestellten Doppelkreuz (#).

Modifizieren Sie bereits vorhandene Definitionen, dann kommentieren Sie am besten die Originalzeile mit einem vorangestellten Doppelkreuz aus und platzieren die Abwandlung in der nächsten Zeile. Am besten sichern Sie die gesamte Datei vorher, sodass Sie später zum Original zurückkehren können, falls etwas schiefgeht.

Sollten Sie trotzt aller Sorgfalt einen Fehler in die Bashrc eingebracht haben und beim Start der Shell eine Fehlermeldung vorfinden, ohne den Fehler beheben zu können, so bietet es sich an, die Datei auf Standardwerte zurückzusetzen. Dazu sichern Sie die vermurkste Version und ersetzen sie mit /etc/skel/.bashrc. Diese Standarddatei kopiert das System unter anderem beim Anlegen eines neuen Users in dessen Home.

Der farbige Prompt

Die individuelle farbliche Gestaltung des Prompts ist mehr als ein optisches Gimmick: So lässt sich beispielsweise der Root-Prompt in einer anderen Farbe gestalten als der User-Prompt und dient somit zum Beispiel in Rot als Warnsignal, dass das System die folgenden Eingaben mit Root-Rechten verarbeitet.

Dazu öffnen Sie als Root in einem beliebigen Editor die Bashrc des Users root. Hier findet sich bereits eine Vorlage, die den Prompt definiert. Dazu dient generell die Umgebungsvariable PS1. Für einen Prompt, bei dem der Name in Rot auf Schwarz erscheint, sorgt folgende Sequenz:

PS1='\[\033[0;31;40m\u@\h:\w\$ \]'

Die Teilsequenz 0;31;40m definiert Textauszeichnung und Farbe. Die Zahl 0 steht für normale Schrift, eine 1 würde für fetten Text sorgen. Die beiden folgenden Zahlen stehen für Vorder- und Hintergrundfarbe. Sie haben hier die Wahl zwischen den acht Farben Schwarz, Rot, Grün, Gelb, Blau, Magenta, Cyan und Weiß, die Sie über die Zahlenwerte 30 bis 37 für die Schriftfarbe im Vordergrund und 40 bis 47 für den Hintergrund festlegen. Die Steuerzeichen \[ und \] sorgen dafür, dass die Bash die darin eingeschlossenen Werte nicht fehlinterpretiert.

Auf diesem Weg legen Sie für den jeweiligen User, den Rechnernamen und bei Bedarf auch für Verzeichnisse eine Ausgabe in unterschiedlichen Farben fest. Ein durchgehend roter Prompt ergibt sich beispielsweise mit der Sequenz aus Listing 1. Während Sie mit den Zahlenwerten experimentieren, um die gewünschte Farbkombination zu erreichen, testen Sie die Sequenzen in einem Terminal mit dem Kommando export PS1='Sequenz'.

Listing 1

PS1='\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] '

Das sehr ausführliche “Bash Prompt HOWTO” [1] beschreibt alle nur erdenklichen Optionen, um den Prompt anzupassen. Erscheint Ihnen das zu kompliziert, klicken Sie sich im Easy Bash Prompt Generator [2] einfach einen farbigen Prompt mit der Maus zusammen (Abbildung 1).

Abbildung 1: Haben Sie keine Lust auf T&uuml;fteleien, dann klicken Sie sich im <span class="ui-element">Easy Bash Prompt Generator</span> mit der Maus einen farbigen Shell-Prompt aus vorgefertigten Elementen zusammen. Das Resultat kopieren Sie dann einfach in Ihre <code>.bashrc</code>.

Abbildung 1: Haben Sie keine Lust auf Tüfteleien, dann klicken Sie sich im Easy Bash Prompt Generator mit der Maus einen farbigen Shell-Prompt aus vorgefertigten Elementen zusammen. Das Resultat kopieren Sie dann einfach in Ihre .bashrc.

Aliase definieren

Für häufig wiederkehrende Begriffe auf der Kommandozeile bietet die Bashrc eine Möglichkeit, diese mit kürzeren Ersetzungen zu vereinfachen, den sogenannten Aliasen. Nehmen wir an, Sie nutzen eine rollende Debian-Installation, die Sie täglich aktualisieren. Dazu nutzen Sie den Befehl apt update && apt full-upgrade && apt clean. In der Bashrc können Sie definieren, diesen String künftig beispielsweise durch die Abkürzung fu zu ersetzen.

Die Bashrc hat üblicherweise bereits einen Abschnitt, der einige Aliase enthält. Diese sind meist noch mit dem Kommentarzeichen deaktiviert. Durch das Entfernen des Doppelkreuzes vor der Zeile aktivieren Sie sie. In diesem Abschnitt können Sie dann Ihren neuen Alias unten in einer eigenen Zeile anhängen. Die allgemeine Syntax dazu lautet folgendermaßen:

alias Kurzname='Befehl'

Öffnen Sie nun die .bashrc in Ihrem Home-Verzeichnis mit einem beliebigen Editor und definieren Sie den folgenden Alias:

alias fu ='apt update && apt full-upgrade && apt clean'

Damit die Änderung sofort greift, müssen Sie die Datei nach dem Speichern noch neu einlesen lassen. Dazu nutzen Sie den Befehl source ~/.bashrc; ein Ab- und Wiederanmelden hätte den gleichen Effekt.

Unser Update-Alias geht davon aus, dass Sie es als Root aufrufen. Um stattdessen den Befehl sudo im Alias verwenden zu können, müssen Sie dafür zusätzlich den eigenen Alias alias sudo='sudo ' definieren. Hier kommt es auf die Leerstelle am Ende des Befehls an. Nach dem Anlegen dieses zusätzlichen Alias müssen Sie das sudo noch im Update-Alias dem jeweiligen Befehl voranstellen, der Root-Rechte benötigt (Listing 2).

Listing 2

alias fu ='sudo apt update && sudo apt full-upgrade && sudo apt clean'

Eine Übersicht aller bereits definierten Aliase liefert der Befehl alias; den frisch definierten Update-Alias zeigt das Kommando alias fu im Detail an.

Da die Bashrc recht lang und unübersichtlich werden kann, besteht die Möglichkeit, Teile davon in eine eigene Datei auszulagern und dann beim Start der Shell über die Bashrc zu laden. Das ist insbesondere dann sinnvoll, wenn Sie eine größere Anzahl an Aliasen definieren möchten.

Dazu legen Sie eine Datei mit dem Namen .bash_aliases an. Darin definieren Sie alle gewünschten Aliase und entfernen danach bereits definierte Aliase in der Bashrc. Um nun die Datei durch die Bashrc einlesen zu lassen, fügen Sie an deren Stelle den Befehl aus Listing 3 ein. Danach lesen Sie die Datei mit source ~/.bash_aliases neu ein und verfahren mit der Bashrc ebenso.

Listing 3

if [ -f ~/.bash_aliases ]; then
  . ~/.bash_aliases
fi

Möchten Sie auf der Konsole einen Alias löschen, gelingt das in unserem Beispiel mit unalias fu. Mit unalias -a entfernen Sie sämtliche Aliase. Sie können Ihre Aliase auch mit einem Pager kombinieren, wo das sinnvoll ist – etwa, wenn der Alias größere Mengen an Daten ausgeben könnte. Einen Alias zum Anzeigen des Journals für den Befehl journalctl --since yesterday beispielsweise legen Sie sinnigerweise so an, dass er den Inhalt seitenweise ausgibt (Listing 4).

Listing 4

alias jour ='journalctl --since yesterday | less'

Über einen Alias lassen sich Ausgaben auch einfärben. So zeigt etwa der folgende Alias zur besseren Übersicht verschiedene Dateiformate farbig an:

alias ls='ls -alF --color=auto'

Sie können also mit einem Alias die Bedeutung eines Systembefehls überschreiben. Möchten Sie statt des entsprechenden Alias doch einmal das unmodifizierte Systemkommando nutzen, dann setzen Sie einen Backslash davor, in unserem Beispiel also \ls. Aliase können bei Bedarf auch Tippfehler abfangen, wie das Beispiel alias sl="ls" zeigt.

Wiederkehrende Befehle

Die Bashrc nimmt auch all jene Befehle auf, die das System jedesmal nach dem Start der Shell ausführen soll. Um beispielsweise von der Shell beim Öffnen freundlich begrüßt zu werden, fügen Sie am Ende der Datei den Befehl echo "Hallo, $USER!" ein. Ab sofort nimmt jedes Terminal Sie mit Ihrem Benutzernamen in Empfang.

Da es sich bei Skripten meist lediglich um erweiterte Befehlsfolgen handelt, können Sie sie auch aus der Bashrc heraus starten. Sollen Skripte dagegen nach jeder Anmeldung automatisch zum Einsatz kommen, legen Sie sie in den Dateien .profile oder .bash_profile ab.

So könnten Sie beispielsweise das Skript Up N [3] einbinden, das Ihnen auf dem Weg durch den Verzeichnisbaum lästige Eingaben erspart. Müssen Sie etwa eine bestimmte Anzahl von Verzeichnissen nach oben wechseln, geben Sie dann für drei Ebenen statt cd ../../.. schlicht up 3 ein. Den Code (Listing 5) legen Sie als Funktionsdefinition am Ende der Bashrc nach einer einleitenden Zeile mit Kommentar ab.

Listing 5

# Up N von Ubuntuusers.de
function up {
[ "${1/[^0-9]/}" == "$1" ] && {
  local ups=""
  for i in $(seq 1 $1); do
    ups=$ups"../"
  done
  cd $ups
  } || echo "usage: up INTEGER"
}

Hilfreiche Definitionen

Die Bashrc kann aber noch viele weitere Angaben enthalten, wie etwa für den Befehl history, der es ermöglicht, die zuletzt eingegebenen Kommandos mit den Pfeiltasten durchzublättern. Er speichert in der Vorgabe die letzten 500 Befehle. Mit dem Eintrag HISTSIZE=2000 erweitern Sie sein Gedächtnis auf das Vierfache.

Bauen Sie Debian-Pakete und laden die Änderungen regelmäßig nach Git hoch, definieren Sie in der Bashrc dazu die Variablen $DEBFULLNAME und $DEBEMAIL. Das Build-Skript dh_make übernimmt sie dann automatisch an den entsprechenden Stellen des Pakets oder Git-Commits. Die Verwendung der Befehlsvervollständigung aus der Datei bash_completion ist bei vielen Distributionen in der Bashrc zumindest eingebunden und bei manchen auch bereits aktiviert. Auch SSH-Logins aus der Bashrc ersparen überflüssige Tipparbeit (Listing 6).

Listing 6

alias server1='ssh devil@192.168.111.77'
alias server2='ssh devil@192.168.113.12'
alias mail='ssh devil@192.168.111.36'
alias qnap='ssh devil@192.168.113.22'
alias rpi1='ssh devil@192.168.112.14'
alias rpi2='ssh devil@192.168.112.15'

Gefahr erkannt …

Da sich die Bashrc mit normalen User-Rechten editieren lässt, geht von ihr eine potenzielle Gefährdung aus: Ein Angreifer könnte per Malware einen Alias definieren, der ihm Root-Rechte auf dem Gerät verschafft. Deshalb sollten Sie mittels des Befehls chattr [4] die Bashrc und ihre eventuellen Schwestern und Cousinen unveränderlich machen.

Chattr steht als Abkürzung für “change attribute”. Nachdem Sie die gewünschten Änderungen an der Bashrc vorgenommen haben, sperren Sie die Datei als Root gegen Änderungen jeglicher Art (Listing 7, Zeile 1). Möchten Sie die Datei wieder editieren, heben Sie den Schutz mit einem Kommando wieder auf (Zeile 4). Den Status der Datei prüfen Sie mit Lsattr (Zeile 3 und 5).

Listing 7

$ sudo chattr +i ~/.bashrc
$ lsattr ~/.bashrc
----i--------e-- /home/jluther/.bashrc
$ sudo chattr -i ~/.bashrc
$ lsattr ~/.bashrc
-------------e-- /home/jluther/.bashrc

Fazit

Die Bashrc ist ein mächtiges Skript zum Steuern der Bash oder einer der alternativen Shells. Je nach Distribution enthält sie eine unterschiedliche Vorbelegung und kann eine stattliche Größe erreichen. Wenn Sie die Bashrc editieren, achten Sie penibel auf Übersichtlichkeit und Kommentare, die auch nach einem Jahr noch einen Sinn ergeben. Prüfen Sie, ob es bereits einen Abschnitt gibt, in den Sie Ihre Änderungen sinnvoll einbauen können. In vielen Fällen sorgt insbesondere das Auslagern der Aliase für mehr Übersicht. Wenn Sie sich die Mühe machen, die Bashrc gut zu pflegen, erweist sie sich als nicht zu unterschätzende Hilfe und kann den Arbeitsfluss auf der Kommandozeile erheblich vereinfachen und beschleunigen. 

Glossar

Shebang

Diese Markierung mit Doppelkreuz und Ausrufezeichen (#!) am Anfang eines Skripts führt dazu, dass das folgende Kommando mitsamt aller angegebenen Argumente ausgeführt wird. Der Shebang wurde von Dennis Ritchie Anfang der 1980er-Jahre zwischen den Unix-Versionen 7 und 8 der Bell Laboratories eingeführt.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 03/2018 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben