Environment Variables: PATH & HOME (Artikel 289)
Verständnis der Umgebungsvariablen unter Linux. Erfahren Sie alles über den Suchpfad PATH, Home-Verzeichnisse und die persistente Konfiguration von Systemvariablen.
# Environment Variables: Das Gedächtnis Ihrer Shell
TL;DR / Management Summary Ohne Umgebungsvariablen wäre Linux unbedienbar. Variablen wie
$PATHentscheiden, ob Sie einen Befehl durch Tippen des Namens oder nur durch den vollen Pfad aufrufen können.$HOMEund$USERdefinieren Ihre Identität im System. Ein Senior Admin muss wissen, wie er Variablen sicher setzt, wie sie an Kind-Prozesse vererbt werden und wo er systemweite Standards definiert, die für alle Benutzer gelten.
# 1. Einführung & Architektur
Vererbung und Export.
- Shell Variable: Existiert nur in der aktuellen Shell-Instanz.
- Environment Variable: Wird mit
exportmarkiert und an jeden Kind-Prozess (Subshell, Programm) weitergereicht.
# Die Variablen-Hierarchie (Mermaid)
graph TD
A[Parent Shell: Bash] -->|export NAME=val| B[Child Process: Script]
A -->|VAR=val| C[Local memory only]
B -->|Inherit| D[Sub-Child: curl/ssh]
subgraph "Standard Variables"
E[PATH: Search list]
F[HOME: User Root]
G[LANG: Encoding]
end
A --- E
A --- F
A --- G
# 2. Die wichtigsten Systemvariablen
Die ‘Big Four’.
- $PATH: Eine durch Doppelpunkt getrennte Liste von Verzeichnissen. Hier sucht die Shell nach ausführbaren Dateien.
- $HOME: Der Pfad zum Home-Verzeichnis des aktuellen Benutzers.
- $USER: Der Login-Name des Benutzers.
- $PWD: Das aktuelle Arbeitsverzeichnis (Print Working Directory).
# Den Pfad erweitern (Best Practice)
# Fügt ~/bin am Anfang des Pfades hinzu (höchste Priorität)
export PATH="$HOME/bin:$PATH"
# 3. Persistenz: Wo werden Variablen gespeichert?
Damit sie den Reboot überleben.
| Ort | Geltungsbereich | Wann genutzt? |
|---|---|---|
/etc/environment |
Systemweit | Für alle Logins (einfache Key=Value Syntax). |
/etc/profile |
Systemweit | Für alle interaktiven Login-Shells. |
~/.profile |
Benutzerspezifisch | Für Ihre eigene Login-Sitzung. |
~/.bashrc |
Benutzerspezifisch | Für jede interaktive Shell (ideal für Aliase). |
# 4. Day-2 Operations: Variablen im Skripting
Sicherer Umgang.
# Fallback-Werte nutzen
Wenn eine Variable nicht gesetzt ist, nutzen wir einen Standardwert:
LOG_DIR="${LOG_VAR:-/var/log/myapp}"
# Variablen verstecken (Security)
Geben Sie niemals Passwörter in Umgebungsvariablen weiter, die in der Prozessliste (ps) sichtbar sein könnten. Nutzen Sie stattdessen read oder File-Inputs.
# 5. Troubleshooting & “War Stories”
Wenn der Pfad in die Irre führt.
# Story 1: “Der falsche Compiler”
Symptom: Ein Admin installiert eine neue Version von Java, aber java -version zeigt immer noch die alte Version an.
Ursache: Der Pfad zur alten Version steht im $PATH weiter vorne als der Pfad zur neuen Version.
Lösung: Prüfen Sie die Reihenfolge mit echo $PATH. Platzieren Sie die neue Version an den Anfang des Strings oder nutzen Sie update-alternatives.
# Story 2: “Variablenverlust bei Sudo”
Symptom: Ein User setzt export MY_API_KEY=123. Er führt ein Skript mit sudo ./script.sh aus, aber der Key ist im Skript leer.
Ursache: Sudo setzt aus Sicherheitsgründen die Umgebung zurück (env_reset).
Lösung: Nutzen Sie sudo -E ./script.sh (Preserve Environment) oder konfigurieren Sie keep_env in der /etc/sudoers.
# 6. Fazit & Empfehlung
- Export: Vergessen Sie niemals das
export, wenn eine Variable in einem Skript verfügbar sein soll, das Sie gerade starten. - Debugging: Nutzen Sie
envoderprintenv, um alle aktuell gesetzten Umgebungsvariablen zu sehen. - Wahl: Nutzen Sie
/etc/environmentfür einfache Variablen ohne Logik und/etc/profile.d/für komplexe Pfad-Berechnungen.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Alle Variablen sehen | env |
| Eine Variable sehen | echo $VARIABLE |
| Variable exportieren | export NAME="Value" |
| Variable löschen | unset NAME |
| Pfad temporär ändern | PATH=/tmp:$PATH ./binary |
| Letzter Befehl Status | $? |
| Shell PID | $$ |
| Sprache ändern | export LANG=en_US.UTF-8 |
| Editor festlegen | export EDITOR=vim |