Umgebungsvariablen & PATH
Prozesse & System
Was sind Umgebungsvariablen?
Umgebungsvariablen sind benannte Werte, die an Prozesse weitergegeben werden und ihr Verhalten beeinflussen. Sie funktionieren wie kleine Zettel, die jeder Prozess an seine Kindprozesse weiterreicht. Typische Beispiele sind HOME (dein Heimatverzeichnis), USER (dein Benutzername), LANG (Sprache/Zeichensatz) und das besonders wichtige PATH.
Variablen anzeigen
Alle aktuell gesetzten Umgebungsvariablen zeigt env oder printenv. Einzelne Variablen liest du mit dem Dollarzeichen aus:
$ env | head HOME=/home/anna USER=anna SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin $ echo $HOME /home/anna $ printenv PATH
Variablen setzen: lokal vs. export
Hier liegt eine zentrale Stolperfalle. Setzt du eine Variable einfach mit NAME=wert, gilt sie nur in der aktuellen Shell – gestartete Programme sehen sie nicht. Erst mit export wird sie an Kindprozesse vererbt.
$ GREETING=hallo # nur in dieser Shell sichtbar $ export GREETING=hallo # auch für gestartete Programme $ export EDITOR=nano # legt den Standard-Editor fest $ unset GREETING # Variable wieder entfernen
Du kannst eine Variable auch nur für einen einzelnen Befehl setzen, indem du sie voranstellst:
$ LANG=C ls -l # Ausgabe in englischer Sprache
PATH: wo die Shell Programme sucht
PATH ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen. Tippst du einen Befehl ohne Pfad ein, durchsucht die Shell diese Verzeichnisse der Reihe nach. Deshalb kannst du ls schreiben, ohne /usr/bin/ls anzugeben. Wo ein Befehl tatsächlich gefunden wird, zeigt which:
$ which python3 /usr/bin/python3 $ echo $PATH /usr/local/bin:/usr/bin:/bin
Eigene Skripte machst du verfügbar, indem du ihr Verzeichnis dem PATH hinzufügst – vorhandenes $PATH immer mit anhängen, sonst überschreibst du alles:
$ export PATH="$HOME/bin:$PATH"
Dauerhaft: ~/.bashrc vs. ~/.profile
Änderungen in der Shell sind nach dem Schließen weg. Um sie dauerhaft zu machen, trägst du sie in eine Startdatei ein. Die Unterscheidung ist wichtig:
| Datei | Wann geladen? | Wofür? |
|---|---|---|
~/.bashrc | bei jeder interaktiven Shell | Aliase, Prompt, Funktionen |
~/.profile | beim Login | Umgebungsvariablen, PATH |
~/.bash_profile | beim Login (Bash) | lädt oft .bashrc nach |
Als Faustregel: Umgebungsvariablen und PATH gehören in ~/.profile (gilt für die gesamte Login-Sitzung und alle Programme), Aliase und Shell-Anpassungen in ~/.bashrc. Nach dem Bearbeiten lädst du die Datei mit source sofort neu, ohne dich abzumelden:
$ source ~/.bashrc $ . ~/.profile # Punkt ist Kurzform für source
Hinweise & Sicherheit
Sei vorsichtig, was du in PATH aufnimmst: Steht das aktuelle Verzeichnis (.) im PATH – besonders weit vorne – kann ein Angreifer ein bösartiges Programm namens ls in einem Verzeichnis ablegen, das dann statt des echten ls ausgeführt wird. Deshalb gehört . niemals in den PATH von root. Speichere außerdem keine Geheimnisse (API-Schlüssel, Passwörter) dauerhaft in Umgebungsvariablen in Startdateien, da andere Programme die Umgebung über /proc/PID/environ auslesen könnten. Mehr zum Thema Prozesse und zur Automatisierung mit knapper Umgebung unter Geplante Aufgaben.
Wodurch wird eine Variable auch an gestartete Programme vererbt?