bashrc
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Die bashrc ist eine Konfigurations-Datei für die Bash, welche bei jedem Öffnen eines Terminals[1] geladen wird. In ihr kann man Abkürzungen für Befehle (also ein alias) eintragen, man verändert hier das Aussehen des Prompts oder man kann zusätzliche Skripte einfügen, welche einem das Arbeiten mit der Shell erleichtern.
Die bash_profile kann man genauso verändern und mit dem gleichen Inhalt füllen wie die bashrc, deswegen kann dieser Artikel fast 1:1 für die bash_profile übernommen werden. Der Unterschied liegt darin, dass die bashrc bei jedem Starten einer interaktiven Shell wie einem Terminal ausgeführt wird und die bash_profile ausschließlich beim Starten einer Login-Shell.
Will man also bei einer Login-Shell etwas einmalig ausführen, ist die bash_profile der richtige Ort. Will man, dass die Veränderungen bei jedem Start eines Terminals oder einer Konsole ausgeführt werden, ist die bashrc der richtige Ort.
Wo liegt die bashrc?¶
Man hat grundsätzlich zwei bashrc-Dateien. Eine findet man unter /etc/bash.bashrc. Dies ist die globale bashrc, was bedeutet, dass Änderungen. die man in dieser vornimmt, Auswirkungen auf die Bash von sämtlichen Benutzern des Systems haben.
Die zweite bashrc findet man versteckt im Homeverzeichnis als .bashrc. In dieser kann jeder Benutzer Änderungen nur für sich vornehmen und in dieser sollte man grundsätzlich seine Änderungen auch eintragen, außer man hat einen gewichtigen Grund, dass sie für alle Benutzer gelten sollen.
Die globale bash_profile befindet sich in /etc/profile und die des Benutzers unter ~/.bash_profile. Letztere existiert meist noch nicht und muss erst von Hand erstellt werden.
Hinweis:
Je mehr man in die bashrc hinzufügt, desto mehr hat die Bash vor dem Starten zu lesen und desto länger dauert auch der Start eines Terminals. Merkt man also, dass der Start der Bash merklich langsamer wird, sollte man versuchen, die bashrc zu verkleinern.
Wie führt man einen Befehl beim Öffnen eines Terminals aus?¶
Dazu muss man nur den gewünschten Befehl in die bashrc eintragen. Ausprobieren kann man dies zum Beispiel indem man:
echo "Das ist ein Test."
an den Anfang oder das Ende der bashrc einfügt [2] und dann ein neues Terminal öffnet [1] oder die .bashrc auf einer bereits geöffneten Konsole erneut einliest:
. .bashrc
Nun sollte noch vor dem Prompt Das ist ein Test.
in das Terminal-Fenster geschrieben werden.
Anwendungsbeispiele¶
Wenn man möchte, dass man sich nach dem Öffnen eines Terminals nicht im Homeverzeichnis befindet, sondern im Root-Verzeichnis, fügt man einfach:
cd /
in die bashrc ein.
Wenn automatisch der von einem ausgeführten Programm oder Skript zurückgegebene Fehlercode angezeigt werden soll, fügt man diese Zeile zu ~/.bashrc hinzu:
PROMPT_COMMAND='set -- $? ; test $1 = 0 || echo "*** Fehlercode: $* ***" >&2'
Wie definiert man ein Alias über die bashrc?¶
Innerhalb der bashrc¶
Die einfachste Möglichkeit ist es, einfach das Alias als normalen alias-Befehl in die bashrc einzutragen. Der alias-Befehl wird beim Starten des Terminals dann automatisch ausgeführt. Will man zum Beispiel seine Distribution aus der Konsole updaten, kann man sich folgenden alias anlegen:
alias checkupdates='sudo apt-get update && sudo apt-get upgrade'
Jetzt kann man, wenn man ein Terminal öffnet, bequem über den Befehl:
checkupdates
sein System aktualisieren, anstatt die zwei im Alias hinterlegten Befehle von Hand auszuführen. Standardmäßig stehen schon einige Aliase in der ~/.bashrc eines Nutzers wie zum Beispiel:
alias ls='ls --color=auto'
was dafür sorgt, dass die Ausgabe des ls-Befehls immer farbig dargestellt wird.
Außerhalb der bashrc¶
Anstatt die bashrc mit alias-Befehlen voll zuschreiben, kann man der Übersichtlichkeit wegen diese auch in eine eigene Datei auslagern. Dazu fügt man (sofern noch nicht vorhanden) in die bashrc Folgendes ein:
if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi
Dies sorgt dafür, dass bashrc den Inhalt der Datei ~/.bash_aliases, wenn sie existiert behandelt, als wäre er direkt in die bashrc geschrieben worden. Man schreibt die alias-Befehle also dann einfach in die Datei ~/.bash_aliases und hat so eine kleinere und übersichtlichere bashrc.
Dies kann man natürlich auch benutzen, um Skripte oder Befehle auszulagern und die bashrc noch übersichtlicher zu machen. Dann sollte man jedoch für jeden Punkt wie Aliase, Befehle und Skripte eigene Dateien mit sinnvollen Namen wählen wie ~/.bash_befehle oder ~/.bash_skripte.
Wie fügt man zusätzliche Skripte in die bashrc ein?¶
Skripte sind meist erweiterte Befehle, die man innerhalb des Terminals benutzen kann, und sind zugleich meist ganz normale Shell-Skripte. Ein Beispiel wäre das up N-Skript. Wenn man dieses Skript in die bashrc einfügt, kann man, wenn man ein Terminal öffnet, durch den Befehl
up N
N
Ordner im Terminal hochwandern.
Stellt die bashrc eine Gefahr dar?¶
Die Datei ~/.bashrc kann mit normalen Benutzer-Rechten geändert und manipuliert werden. Malware, ein Virus oder ein Hacker kann ein alias definieren, welches sudo oder su abfängt und so das User-Passwort stehlen kann, um Root-Access auf dem System zu bekommen.
Die Meinungen über die davon ausgehende Gefahr gehen auseinander. Die überwiegende Mehrheit denkt, ein einmal kompromittiertes System sei ohnehin nicht mehr zu retten und ein User solle potentiell gefährliche Skripte oder Programme gar nicht erst ausführen, nicht einmal nur mit normalen Benutzer-Rechten.
Der Minderheitenmeinung zufolge bestehe darin jedoch eine große Gefahr. So sei der Unterschied zwischen Linux und Windows aus sicherheitstechnischer Sicht vor allem wegen der starken Abstraktion zwischen User und Root gegeben. Durch die bashrc und deren Manipulation könne sich jedoch jedes x-beliebige Programm Root-Rechte erschleichen.
Ein mögliches Workaround dazu ist es, die Datei ~/.bashrc (und natürlich auch die ~/.bash_aliases, ..., wenn man sie angelegt hat) unveränderlich zu machen, zum Beispiel mit diesem Befehl:
sudo chattr +i ~/.bashrc
Will man danach eine Änderung an der Datei vornehmen, muss man zuvor erst wieder das i
-Flag entfernen mit:
sudo chattr -i ~/.bashrc
Nachdem man die gewünschten Änderungen vorgenommen hat, sollte man die Flag wieder setzen. Oder man arbeitet generell nur mit einem unprivilegierten Benutzer-Account, der nicht Mitglied der Gruppe admin
ist und somit niemals sudo oder su ausführen darf.