ENVIRON(7) Linux-Programmierhandbuch ENVIRON(7)

environ - Umgebung des Benutzers

extern char **environ;

Die Variable environ zeigt auf die »Umgebung«, ein Feld von Zeigern auf Zeichenketten. Der letzte Zeiger in diesem Feld hat den Wert NULL. Die Umgebung wird dem Prozess von dem exec(2)-Aufruf verfügbar gemacht, wenn ein neues Programm gestartet wird. Wenn ein Kindprozess mit fork(2) erstellt wird, erbt es eine Kopie der Umgebung seines Elternprozesses.

Die Zeichenketten in environ haben die Form »Name=Wert«. Groß- oder Kleinschreibung wird für den Namen berücksichtigt; außerdem darf der Name nicht das Zeichen »=« enthalten. Der Wert kann alles sein, was als Zeichenkette dargestellt werden kann. Weder der Name noch der Wert dürfen ein eingebettetes Null-Byte enthalten (»\0«), da dieses als Ende der Zeichenkette interpretiert wird.

Umgebungsvariablen können in die Umgebung der Shell mit dem Befehl export von sh(1) oder dem Befehl setenv von csh(1) gelegt werden.

Die anfängliche Umgebung der Shell wird auf verschiedenen Arten aufgebaut, wie Definitionen aus /etc/environment, die (auf Systemen, die pam(8) einsetzen) durch pam_env(8) für alle Benutzer zum Anmeldezeitpunkt verarbeitet wird. Zusätzlich können verschiedene Shell-Initialisierungsskripte, wie das systemweite Skript /etc/profile oder benutzerbezogene Initialisierungsskripte Befehle enthalten, die Variablen zu der Umgebung der Shell hinzufügen. Lesen Sie dafür die Handbuchseite Ihrer bevorzugten Shell für weitere Details.

Bourne-artige Shells unterstützen die Syntax

NAME=Wert Befehl

um eine Umgebungsvariablendefinition zu erstellen, deren Geltungsbereich nur den Prozess, der Befehl ausführt, umfasst. Mehrere Variablendefinitionen, getrennt durch Leerraumzeichen, können Befehl vorangestellt werden.

Argumente können auch beim Aufruf von exec(3) an die Umgebung weitergegeben werden. C-Programme können ihre Umgebung mit den Funktionen getenv(3), putenv(3), setenv(3) und unsetenv(3) beeinflussen.

Es folgt eine Liste der typischerweise in einem System enthaltenen Umgebungsvariablen. Diese Liste ist unvollständig und enthält nur häufige Variablen, die von durchschnittlichen Benutzern in täglichen Routinen gesehen werden. Die spezifischen Umgebungsvariablen eines Programms oder einer Bibliotheksfunktion finden Sie im Abschnitt UMGEBUNG oder UMGEBUNGSVARIABLEN der jeweiligen Handbuchseite.

USER
Der Name des angemeldeten Benutzers (wird von einigen Programmen aus der BSD-Welt ausgewertet). Wird zum Anmeldezeitpunkt gesetzt, siehe den nachfolgenden Abschnitt ANMERKUNGEN.
LOGNAME
Der Name des angemeldeten Benutzers (wird von einigen Programmen aus der System-V-Welt ausgewertet). Wird zum Anmeldezeitpunkt gesetzt, siehe den nachfolgenden Abschnitt ANMERKUNGEN.
HOME
Das Anmeldeverzeichnis eines Benutzers, das zum Anmeldezeitpunkt gesetzt wird. Siehe den nachfolgenden Abschnitt ANMERKUNGEN.
LANG
Der Name einer Locale (eines Gebietsschemas), die für Locale-Kategorien angewendet werden soll. Die Locale kann durch LC_ALL oder spezielle Umgebungsvariablen wie LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC und LC_TIME überschrieben werden (siehe locale(7) für weitere Details über die Umgebungsvariablen LC_*).
PATH
Die Abfolge der Verzeichnispräfixe, die von sh(1) und vielen anderen Programmen bei der Suche nach ausführbaren Dateien verwendet wird, wird als einfacher Dateiname angegeben (das heißt, als Pfadname ohne Schrägstriche). Die Präfixe werden durch Doppelpunkte getrennt (:). Die Liste der Präfixe wird vom Anfang bis zum Ende durchsucht, indem der Pfadname aus einem vorangestellten Präfix, einem Schrägstrich und dem Dateinamen gebildet wird, bis eine ausführbare Datei gefunden wird.
Außerdem kann als klassische Funktion ein Präfix der Länge Null verwendet werden (als zwei aufeinander folgende Doppelpunkte oder einen vorangestellten oder angehängten Doppelpunkt. Dies wird als das aktuelle Arbeitsverzeichnis interpretiert. Allerdings gilt diese Form der Angabe als veraltet. POSIX merkt an, dass eine konforme Anwendung einen expliziten Pfadnamen verwenden sollte (zum Beispiel .), um das aktuelle Arbeitsverzeichnis anzugeben.
Analog zu PATH benutzen einige Shells CDPATH, um das Ziel eines cd-Befehls zu finden, man(1) sucht in MANPATH nach Handbuchseiten, usw.
PWD
das aktuelle Arbeitsverzeichnis; gesetzt von einigen Shells
SHELL
Der absolute Pfadname der Anmeldeshell des Benutzers. Wird zum Anmeldezeitpunkt gesetzt, siehe den nachfolgenden Abschnitt ANMERKUNGEN.
TERM
Der Terminaltyp, für den Ausgaben aufbereitet werden.
PAGER
Das vom Benutzer bevorzugte Dienstprogramm zum Anzeigen von Textdateien. Jede als »command_string«-Operand zum Befehl sh -c akzeptierbare Zeichenkette sollte gültig sein. Falls PAGER Null oder nicht festgelegt ist, dann fallen Anwendungen, die ein Textanzeigeprogramm starten, auf ein Programm wie less(1) oder more(1) zurück.
EDITOR/VISUAL
Das vom Benutzer bevorzugte Dienstprogramm zum Bearbeiten von Textdateien. Jede als »command_string«-Operand zum Befehl sh -c akzeptierbare Zeichenkette sollte gültig sein.

Bitte beachten Sie, dass das Verhalten vieler Programme und Bibliotheksroutinen vom Vorhandensein oder dem Inhalt bestimmter Umgebungsvariablen beeinflusst wird. Zu den Beispielen gehören:

  • Die Variablen LANG, LANGUAGE, NLSPATH, LOCPATH, LC_ALL, LC_MESSAGES und so weiter beeinflussen die Handhabung der Locale, vgl. catopen(3), gettext(3) und locale(7).
  • TMPDIR beeinflusst die Pfadangabe für tempnam(3) beim Anlegen von Dateien und das temporäre Verzeichnis von sort(1) usw.
  • LD_LIBRARY_PATH, LD_PRELOAD und andere LD_*-Variablen beeinflussen das Verhalten des dynamischen Laders/Linkers. Siehe auch ld.so(8).
  • POSIXLY_CORRECT veranlasst bestimmte Programme und Bibliotheksroutinen, sich an die POSIX-Vorgaben zu halten.
  • Das Verhalten von malloc(3) wird von MALLOC_*-Variablen gesteuert.
  • Die Variable HOSTALIASES enthält den Namen der Datei, in der die Alias-Namen für gethostbyname(3) stehen.
  • TZ und TZDIR stellen Informationen über Zeitzonen für tzset(3) bereit und dadurch auch für Funktionen wie ctime(3), localtime(3), mktime(3) und strftime(3). Siehe auch tzselect(8).
  • TERMCAP informiert darüber, wie bestimmte Terminals angesteuert werden müssen (oder enthält den Namen einer Datei, die diese Informationen bereitstellt).
  • COLUMNS und LINES informieren Programme über die Größe des Fensters und setzen damit vielleicht die tatsächliche Größe außer Kraft.
  • PRINTER oder LPDEST können den gewünschten Drucker angeben, siehe lpr(1).

Aus historischen Gründen muss environ standardmäßig im Programm des Benutzers deklariert sein. Dennoch kann environ als (nicht standardmäßiges) Zugeständnis an Programmierer in der Header-Datei <unistd.h> deklariert sein, falls das Feature-Test-Makro _GNU_SOURCE definiert ist (siehe feature_test_macros(7)).

Die Aktionen prctl(2) PR_SET_MM_ENV_START und PR_SET_MM_ENV_END können zur Steuerung des Orts der Umgebung des Prozesses verwandt werden.

Die Variablen HOME, LOGNAME, SHELL und USER werden gesetzt, wenn der Benutzer über die Sitzungsverwaltungs-Schnittstelle gewechselt wird, was typischerweise durch ein Programm wie login(1) aus der Benutzerdatenbank (wie passwd(5)) geschieht. (Der Wechsel zum Systembenutzer »root« mittels su(1) kann zu einer gemischten Umgebung führen, in der LOGNAME und USER vom vorherigen Benutzer übernommen werden, siehe su(1).)

Es ist offensichtlich, dass es hier ein Sicherheitsproblem gibt. Schon mancher Systembefehl hat den Pfad der Tugend verlassen, weil ein Benutzer ungebräuchliche Werte für IFS oder LD_LIBRARY_PATH angegeben hat.

Es besteht auch die Gefahr der »Verschmutzung des Namensraums«. Programme wie make und autoconf erlauben Überschreiben der Namen von Standard-Dienstprogrammen aus der Umgebung mit ähnlich benannten Variablen in Großbuchstaben. So verwendet man CC, um den gewünschten C-Compiler zu wählen (und analog MAKE, AR, AS, FC, LD, LEX, RM, YACC, usw.). Aber in einigen traditionellen Nutzungen gibt eine Umgebungsvariable keinen Pfadnamen, sondern Programmoptionen an. So gibt es MORE, LESS und GZIP. Diese Verwendung wird als falsch verstanden angesehen und sollte für neue Programme vermieden werden. Die Autoren von gzip sollten erwägen, ihre Option in GZIP_OPT umzubenennen.

bash(1), csh(1), env(1), login(1), printenv(1), sh(1), su(1), tcsh(1), execve(2), clearenv(3), exec(3), getenv(3), putenv(3), setenv(3), unsetenv(3), locale(7), ld.so(8), pam_env(8)

Diese Seite ist Teil der Veröffentlichung 5.11 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Dr. Tobias Quathamer <toddy@debian.org>, Helge Kreutzmann <debian@helgefjell.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Übersetzer.

22. März 2021 Linux