
Jeder Linux-Prozess erbt einen Satz Umgebungsvariablen von seinem Elternprozess. Diese Schlüssel-Wert-Paare steuern das Verhalten von Shells, legen fest, wo Programme nach ausführbaren Dateien suchen, und bestimmen, welche Konfiguration eine laufende Anwendung verwendet. Stimmt etwas nicht, geht dein Deployment um 2 Uhr nachts kaputt. Stimmt alles, hast du eine saubere, portable Systemkonfiguration, die mit deinem Benutzerprofil oder deinem gesamten Server mitreist.
Ob du einen neuen VPS einrichtest, eine defekte CI-Pipeline debuggst oder eine Python-App deployst, die ihre Datenbank nicht findet: Umgebungsvariablen stehen immer im Mittelpunkt. Sie gehören zu den grundlegenden Linux-Konzepten, die du jeden Tag nutzen wirst, sobald du sie einmal verstanden hast.
Dieser Leitfaden führt dich durch die Befehle, die du tatsächlich im Alltag brauchst: Auflisten, Ausgeben, Setzen, Persistieren und Löschen von Linux-Umgebungsvariablen. Außerdem behandeln wir Best Practices und häufige Stolperfallen, die selbst erfahrene Sysadmins ins Straucheln bringen.
Was sind Umgebungsvariablen in Linux?
Umgebungsvariablen sind dynamische Schlüssel-Wert-Paare, die das Verhalten von Shells und Prozessen auf einem Linux-System beeinflussen. Führe printenv in einem Terminal aus, und du siehst Dutzende davon: PATH teilt der Shell mit, wo sie ausführbare Dateien findet, HOME zeigt auf dein Benutzerverzeichnis, SHELL gibt an, welche Shell du verwendest, und LANG legt deine Locale fest.
Admins nutzen sie, um Konfigurationen anwendungsübergreifend zu teilen, ohne Werte fest im Code zu verankern. Eine einzige PATH Variable ermöglicht es zum Beispiel jedem Programm auf dem System, Binaries zu finden, ohne dass jedes seine eigene Suchliste pflegen muss. Stell dir Umgebungsvariablen wie ein gemeinsames schwarzes Brett vor, das jeder Prozess auf dem System lesen kann.
Linux unterscheidet klar zwischen zwei Arten von Variablen. Umgebungsvariablen haben einen globalen Geltungsbereich. Sie sind für Kindprozesse, Subshells und jedes Programm sichtbar, das aus der jeweiligen Sitzung heraus gestartet wird. Shell-Variablen hingegen existieren nur in der aktuellen Sitzung. Starte eine Subshell mit bash und sie sind weg.
Dieser Unterschied ist wichtiger, als er zunächst klingt. Genau das ist der Grund, warum dein Skript interaktiv einwandfrei läuft, aber scheitert, wenn es von ‚cron‘, ’systemd‘ oder einem anderen Benutzer gestartet wird. Der aufrufende Prozess nimmt deine Shell-Variablen nicht mit, und das Skript findet einen leeren Wert, wo es einen Pfad erwartet hat.
Linux-Umgebungsvariablen verwalten
Umgebungsvariablen auf einem Linux-System zu verwalten bedeutet, vier Operationen zu kennen: auflisten, einzelne Werte ausgeben, neue setzen und nicht mehr benötigte entfernen. Alles Folgende funktioniert auf jeder gängigen Linux-Distribution, von Ubuntu und Debian bis CentOS und Arch. Verbinde dich per SSH oder öffne dein lokales Terminal, und schon kann es losgehen.
Umgebungsvariablen in Linux auflisten
Am schnellsten listest du Umgebungsvariablen in Linux mit dem printenv Befehl auf:
printenvDas gibt jede Variable samt Wert auf Standardausgabe (stdout) aus. Die Ausgabe wird schnell lang. Leite sie deshalb durch less damit du durchblättern kannst:
printenv | lessDer env Befehl funktioniert nahezu identisch wie printenv. Der Unterschied: Der set Befehl in Linux gibt sowohl Umgebungs- als auch Shell-Variablen aus und liefert dir damit das Gesamtbild. Wenn du nur Shell-Variablen sehen willst, filtere mit grep:
set | grep -i my_varEinige Variablen begegnen dir ständig auf allen Linux-Distributionen:
PATH– Verzeichnisse, in denen die Shell nach ausführbaren Dateien suchtHOME– das Home-Verzeichnis des aktuellen BenutzersUSER– der Name des angemeldeten BenutzerkontosSHELL– Pfad zur Shell des aktuellen BenutzersPWD– das aktuelle ArbeitsverzeichnisEDITOR– der Standard-Texteditor des Systems
Diese sind in praktisch jeder Linux-Distribution voreingestellt. Du kannst eigene Variablen für beliebige Zwecke definieren: individuelle Anwendungskonfigurationen, Deployment-Flags, Service-Endpunkte. Und genau hier wird es interessant.
Umgebungsvariablen in Linux ausgeben
Um eine einzelne Umgebungsvariable in Linux auszugeben, verwendest du den echo Befehl mit einem Dollarzeichen als Präfix:
echo $PATHDer Linux echo Befehl liest den aktuellen Wert der Variable und gibt ihn im Terminal aus. Groß- und Kleinschreibung spielt eine Rolle, also $path und $PATH sind zwei verschiedene Dinge.
Du kannst auch printenv direkt mit dem Variablennamen verwenden:
printenv HOMEDu willst prüfen, ob eine Variable überhaupt existiert? Leite printenv durch grep:
printenv | grep USERUm mehrere Variablen auf einmal abzufragen:
printenv HOME PATH SHELLJeder Wert wird in einer eigenen Zeile ausgegeben. Schnell und unkompliziert. Das ist praktisch, wenn du ein Setup-Skript schreibst und vor dem Fortfahren sicherstellen musst, dass mehrere Werte gesetzt sind.
Umgebungsvariable in Linux mit ‚export‘ setzen
Der export Befehl in Linux erstellt eine temporäre globale Umgebungsvariable. Hier die grundlegende Syntax:
export MY_VAR="some_value"Die Variable ist jetzt für die aktuelle Shell und jeden daraus gestarteten Kindprozess sichtbar. Gib sie zur Kontrolle aus:
echo $MY_VARDu kannst mehrere Werte durch Doppelpunkte getrennt zuweisen. Genau so funktioniert PATH:
export PATH="$PATH:/opt/myapp/bin"Aber Achtung: Das ist nur temporär. Starte dein System neu, öffne eine neue Terminal-Sitzung, und die Variable ist weg. Der Linux export Befehl wirkt sich nur auf die laufende Sitzung und deren Kindprozesse aus. Darüber stolpern Einsteiger ständig. Sie setzen eine Variable, es funktioniert, sie starten neu, und die Variable ist verschwunden.
Für eine lokale Shell-Variable (eine, die nicht an Kindprozesse weitergegeben wird) lässt du das Schlüsselwort ‚export‘ einfach weg:
my_local_var="test"Die Konvention: Kleinschreibung für lokal, Grossschreibung für global. Halte dich daran. Dein zukünftiges Ich wird die Klarheit zu schätzen wissen, wenn du um Mitternacht Fehler suchst.
Persistente Umgebungsvariablen erstellen
Temporäre Variablen verschwinden beim Neustart. Für permanente Umgebungsvariablen in Linux musst du sie in Konfigurationsdateien eintragen. Welche Datei die richtige ist, hängt davon ab, wer die Variable sehen soll.
Benutzerspezifische Umgebungsvariablen
Bearbeite die bashrc Datei, um Variablen festzulegen, die für einen einzelnen Benutzer dauerhaft gelten. Öffne sie mit einem beliebigen Texteditor:
nano ~/.bashrcFüge deine ‚export‘-Anweisung am Ende hinzu:
export API_URL="https://api.example.com"Speichern und beenden. Die Variable wird in deiner aktuellen Sitzung erst wirksam, wenn du die Datei neu lädst:
source ~/.bashrcDer source bashrc Befehl liest die Datei erneut ein, ohne dass du dich ab- und wieder anmelden musst. Das ist der Befehl, den Leute am häufigsten vergessen, wenn sie eine neue Variable hinzufügen und sich dann wundern, warum sie nicht auftaucht.
Du kannst auch ~/.profile verwenden, wenn du Variablen in Login-Shells verfügbar machen willst. Der Unterschied: .bashrc wird bei jeder interaktiven Shell ausgeführt, .profile wird nur einmal beim Login ausgeführt. Wähle die Datei, die zu deinem Anwendungsfall passt. Wenn du dir nicht sicher bist, .bashrc ist für die meisten Szenarien die sichere Wahl.
Systemweite Umgebungsvariablen
Für Variablen, die jeder Benutzer auf dem System braucht, bearbeitest du /etc/environment:
sudo nano /etc/environmentTrage einfache Schlüssel-Wert-Paare ohne das export Schlüsselwort ein:
JAVA_HOME="/usr/lib/jvm/java-17"Speichere die Datei und starte dann neu oder melde dich erneut an, damit die Änderungen wirksam werden.
Eine Alternative: Erstelle ein Shell-Skript in /etc/profile.d/. Dieses Verzeichnis wird beim Login für alle Benutzer eingelesen:
sudo nano /etc/profile.d/custom_env.shIn der Datei verwendest du export wie gewohnt:
export LOG_LEVEL="info"Gib der Datei einen aussagekräftigen Namen. Du wirst dir selbst danken, wenn das Verzeichnis 15 Skripte enthält und du genau das finden musst, das die Proxy-Konfiguration setzt. Starte neu, um die Änderungen zu übernehmen, und prüfe dann mit printenv. Der /etc/profile.d/ Ansatz ist übersichtlicher, wenn du mehrere Gruppen von Variablen verwaltest, weil jeder Bereich seine eigene Datei bekommt.
Umgebungsvariablen in Linux löschen
Der unset Befehl entfernt eine Umgebungsvariable aus der aktuellen Sitzung:
unset MY_VARWeg. Aber nur für diese Sitzung. Wenn die Variable in ~/.bashrc oder /etc/environment definiert ist, taucht sie nach einem Neustart wieder auf. Der unset Befehl ist von Natur aus temporär.
Um eine Umgebungsvariable in Linux dauerhaft zu entfernen, öffnest du die Konfigurationsdatei, in der sie definiert ist, und löschst die Zeile (oder kommentierst sie aus). Auskommentieren ist sicherer und erspart dir späteren Ärger:
# export API_URL="https://api.example.com"Ein Hash-Zeichen am Anfang deaktiviert die Zeile, ohne sie zu löschen. Wenn drei Wochen später die unvermeidliche Frage „Warum haben wir das entfernt?“ aufkommt, kannst du die Zeile in Sekunden wieder aktivieren, statt den Wert aus dem Gedächtnis zu rekonstruieren.
Umgebungsvariablen in der Entwicklung nutzen
Hier zeigen Umgebungsvariablen ihren wahren Wert. Wenn du Datenbank-Zugangsdaten, API-Schlüssel und Service-URLs als Umgebungsvariablen speicherst, bleiben sie aus deiner Codebasis heraus. Keine ‚Secrets‘ in der Versionskontrolle. Kein versehentliches Pushen eines Produktionsdatenbank-Passworts in ein öffentliches GitHub-Repo. Falls du schon einmal ein Unternehmen in den Nachrichten wegen geleakter Zugangsdaten gesehen hast: Die Wahrscheinlichkeit ist groß, dass jemand genau diesen Schritt übersprungen hat.
Das Muster funktioniert so: Du definierst für jede Stufe unterschiedliche Variablen:
export APP_ENV="staging"export DB_HOST="staging-db.internal"Beim Deployment in die Produktion tauschst du die Werte aus. Der Anwendungscode liest $APP_ENV und $DB_HOST und verhält sich entsprechend. Keine Codeänderungen zwischen den Umgebungen. Dasselbe Docker-Image, dasselbe Binary, dasselbe Skript läuft überall mit unterschiedlichem Verhalten, ausschließlich gesteuert durch die vererbten Variablen.
Dieser Ansatz vereinfacht auch die Automatisierung. Ein Deployment-Skript kann Umgebungsvariablen setzen, bevor es eine Anwendung startet. So kommen alle Konfigurationswerte aus einer einzigen Quelle. Vergleiche das mit der Pflege separater Konfigurationsdateien pro Umgebung, wobei jede eine potenzielle Quelle für Abweichungen und Fehler ist. Drei Umgebungen mit je fünf Konfigurationsdateien ergeben fünfzehn Dateien, die synchron gehalten werden müssen. Mit Umgebungsvariablen reduzierst du das auf einen einzigen Mechanismus.
Best Practices für Umgebungsvariablen
Die Befehle zu kennen ist die halbe Miete. Der richtige Umgang damit macht den Unterschied zwischen einem sauberen System und einem, das auf rätselhafte Weise ausfällt.
Aussagekräftige Variablennamen verwenden
VAR1 sagt dir nichts. POSTGRES_CONNECTION_STRING sagt dir alles. Aussagekräftige Namen verhindern, dass du vor 40 exportierten Variablen sitzt und nicht herausfindest, welche das Log-Ausgabeverzeichnis steuert.
Halte dich an eine einheitliche Namenskonvention. Stelle zusammengehörigen Variablen den Anwendungs- oder Servicenamen voran: MYAPP_DB_HOST, MYAPP_DB_PORT, MYAPP_LOG_PATH. Wenn ein anderes Teammitglied deinen Server übernimmt, wird es das System in Minuten statt in Stunden durchschauen. Vage Namen erzeugen Insiderwissen. Aussagekräftige Namen schaffen Dokumentation genau dort, wo sie tatsächlich gebraucht wird.
Variable Scopes korrekt handhaben
Eine häufige Falle: Du erstellst eine Shell-Variable mit demselben Namen wie eine globale Umgebungsvariable. Die Shell weiß dann nicht, welche du meinst, und plötzlich liest deine Anwendung den falschen Wert. Ich habe erlebt, wie das ein Produktions-Deployment lahmgelegt hat, weil jemand eine lokale PATH Überschreibung vergessen hatte.
Verwende lokale (Shell-)Variablen für kurzlebige Aufgaben: einen Schleifenzähler in einem Skript, einen temporären Dateipfad, einen einmaligen Testwert. Verwende globale Umgebungsvariablen für alles, was prozessübergreifend geteilt wird: Datenbank-URLs, Log-Level, Feature-Flags.
Halte dich an die Konvention. Kleinbuchstaben für lokale Shell-Variablen, Großbuchstaben für globale. PATH ist systemweit. path_to_tmp ist nur für die Sitzung gültig. Diese visuelle Unterscheidung sorgt für Klarheit.
Umgebungsvariablen regelmäßig überprüfen
Variablen sammeln sich an. Alte API-Schlüssel bleiben liegen. Veraltete Service-URLs werden nicht aufgeräumt. Jemand hat vor sechs Monaten ein Debug-Flag gesetzt und vergessen. Jetzt schreibt dein Produktionsserver ausführliche Logs auf eine Festplatte, die zu 94 % voll ist. Das passiert häufiger, als irgendjemand zugeben möchte.
Speichere deine aktuellen Variablen regelmäßig in einer Datei:
set > env_audit_$(date +%Y%m%d).txtVergleiche sie mit früheren Exporten. Entferne, was nicht mehr gebraucht wird. Rotiere Zugangsdaten, die in der Exportliste auftauchen. Stelle sicher, dass nichts Sensibles in eine systemweite Datei gelangt ist, die jeder Benutzer lesen kann. Das ist keine glamouröse Arbeit, aber genau die Art von Hygiene, die Sicherheitsvorfälle und rätselhafte Produktionsausfälle verhindert. Betrachte es wie einen Ölwechsel: langweilig, notwendig und katastrophal, wenn es vernachlässigt wird.
FAQ zu Linux-Umgebungsvariablen
Führe printenv oder env aus, um alle Umgebungsvariablen aufzulisten. Mit echo $VARIABLE_NAME prüfst du eine bestimmte Variable. Der set Befehl zeigt sowohl Shell- als auch Umgebungsvariablen zusammen an. Leite die Ausgabe eines dieser Befehle durch grep, um gezielt zu filtern. Für eine scrollbare Ansicht aller Variablen probiere printenv | less.
Linux kennt zwei Hauptkategorien. Lokale (Shell-)Variablen existieren nur in der aktuellen Sitzung und verschwinden, sobald du das Terminal schliesst oder eine Subshell startest. Globale Umgebungsvariablen bleiben über Kindprozesse hinweg erhalten und gibt es in zwei Varianten: benutzerspezifisch (gespeichert in ~/.bashrc oder ~/.profile) und systemweit (gespeichert in /etc/environment oder als Skripte in /etc/profile.d/).
Lokale Variablen sind auf die aktuelle Shell beschränkt. Starte eine Subshell, und sie sind weg. Globale Variablen werden an jeden Kindprozeß, jede Subshell und jedes Programm vererbt, das aus der Sitzung heraus gestartet wird. Wenn dein Skript einen Wert braucht und als Kindprozess läuft, muss es eine globale (exportierte) Variable sein. Verwende Kleinbuchstaben für lokale und Großbuchstaben für globale Variablen, um sie eindeutig zu unterscheiden.
Benutzerspezifische persistente Variablen stehen typischerweise in ~/.bashrc oder ~/.profile im Home-Verzeichnis des Benutzers. Systemweite Variablen gehören in /etc/environment oder als einzelne Shell-Skripte in /etc/profile.d/. Temporäre Variablen existieren nur im Speicher der aktuellen Sitzung und werden in keiner Datei gespeichert. Sie verschwinden beim Logout oder Neustart.
Für eine temporäre Variable verwendest du export VAR="value" im Terminal. Trage dieselbe ‚export‘-Zeile in ~/.bashrc ein und führe source ~/.bashrc aus, um sie sofort zu laden. So wird daraus eine permanente, benutzerspezifische Variable. Für eine systemweite Variable trägst du das Schlüssel-Wert-Paar in /etc/environment (ohne das ‚export‘-Schlüsselwort) ein und startest neu oder meldest dich erneut an.