fatmawati achmad zaenuri/Shutterstock
Unter Linux gibt es mehr als einen Typ von Umgebungsvariablen. Erfahren Sie, wie Sie sie sehen, für lokale und Remote-Anmeldungen erstellen und Neustarts überleben.
Funktionsweise von Umgebungsvariablen
Wenn Sie ein Terminalfenster starten und die Schale darin, wird auf eine Sammlung von Variablen verwiesen, um sicherzustellen, dass die Shell richtig konfiguriert ist. Diese Variablen stellen auch sicher, dass alle Informationen verfügbar sind, auf die das Terminalfenster und die Shell möglicherweise verweisen müssen. Zusammen enthalten diese Variablen Einstellungen, die die Umgebung definieren, die Sie in Ihrem Terminalfenster finden, bis hin zum Aussehen der Eingabeaufforderung. Daher werden sie natürlich als Umgebungsvariablen bezeichnet.
Einige Umgebungsvariablen sind systemweit oder global. Andere sind sitzungsweit und können nur von Ihnen gesehen werden. Andere können nicht auf Ihre Sitzungsumgebungsvariablen verweisen. In der Shell ist ein dritter Satz von Umgebungsvariablen definiert. Ihre Gebietsschema-, Zeitzonen- und Tastatureinstellungen, die Verzeichnisse, die durchsucht werden, wenn die Shell versucht, einen Befehl zu finden, und Ihr Standardeditor werden alle in Shell-Umgebungsvariablen gespeichert.
Wir zeigen Ihnen, wie Sie die auf Ihrem System vorhandenen Umgebungsvariablen anzeigen und beschreiben, wie Sie Ihre eigenen erstellen. Wir zeigen Ihnen auch, wie Sie sie für untergeordnete Prozesse verfügbar machen und über Neustarts hinweg persistent bleiben.
Umgebungen und Vererbung
Wenn eine Shell gestartet wird, durchläuft sie eine Initialisierungsphase. An diesem Punkt liest es die Umgebungsvariablen, die die Umgebung der Shell definieren.
Wenn ein Programm oder ein Befehl von dieser Shell – bekannt als Kindprozess – gestartet wird, erbt es die Umgebung des Elternprozesses – aber Vorsicht! Wie wir sehen werden, können Sie Variablen erstellen, die nicht zu Ihrer Umgebung hinzugefügt werden, damit sie nicht von einem untergeordneten Prozess geerbt werden.
Wenn der untergeordnete Prozess eine Shell ist, wird diese Shell aus ihrem eigenen, neuen Satz von Variablen initialisiert. Wenn Sie also die Eingabeaufforderung in der aktuellen Shell ändern und dann eine untergeordnete Shell starten, erbt die untergeordnete Shell nicht die geänderte Eingabeaufforderung der übergeordneten Shell.
Globale Umgebungsvariablen
Konventionsgemäß erhalten Umgebungsvariablen Namen in Großbuchstaben. Hier sind einige der globalen Umgebungsvariablen und was die darin enthaltenen Werte darstellen:
- HÜLSE: Der Name der Shell, die gestartet wird, wenn Sie ein Terminalfenster öffnen. Bei den meisten Linux-Distributionen das wird bash es sei denn, Sie haben die Standardeinstellung geändert.
- BEGRIFF: Terminalfenster sind eigentlich Emulationen eines Hardware-Terminals. Dies enthält den Typ des Hardware-Terminals, der emuliert wird.
- BENUTZER: Der Benutzername der aktuellen Person, die das System verwendet.
- PWD: Der Pfad zum aktuellen Arbeitsverzeichnis.
- OLDPWD: Das Verzeichnis, in dem Sie sich befanden, bevor Sie in das aktuelle Arbeitsverzeichnis verschoben wurden.
- LS_FARBEN: Die Liste der Farbcodes, die von den
ls
Markieren Sie verschiedene Dateitypen.
- MAIL: Wenn die
mail
System auf Ihrem Linux-Computer eingerichtet wurde (standardmäßig ist dies nicht der Fall), dies wird die Pfad zum Postfach des aktuellen Benutzers.
- WEG: Eine Liste von Verzeichnissen, die die Shell durchsucht, um ausführbare Befehlsdateien zu finden.
- SPRACHE: Die Einstellungen für Sprache, Lokalisierung und Zeichencodierung.
- HEIMAT: Das Home-Verzeichnis des aktuellen Benutzers.
- _: Der Unterstrich (
_
) Die Umgebungsvariable enthält den zuletzt eingegebenen Befehl.
Wir können sehen, was einige von ihnen auf nichts Anspruchsvolleres als eingestellt haben echo
, welches wird schreibe die Werte in das Terminalfenster. Um den von einer Umgebungsvariablen gehaltenen Wert anzuzeigen, müssen Sie ein Dollarzeichen ($
) an den Anfang seines Namens.
Eine nette Geste ist, dass Sie verwenden können Tab-Vervollständigung um den Umgebungsvariablennamen für Sie auszufüllen. Geben Sie ein paar Buchstaben des Namens ein und drücken Sie die Tabulatortaste. Der Name der Variablen wird von der Shell vervollständigt. Wenn dies nicht der Fall ist, müssen Sie noch ein paar Buchstaben eingeben, um die Umgebungsvariable von anderen Befehlen mit Namen zu unterscheiden, die mit denselben Buchstaben beginnen:
echo $SHELL
echo $LANG
echo $HOME
echo $PWD

Um Ihre eigenen Umgebungsvariablen zu erstellen, fügen Sie diese zum /etc/environment
Datei. Sie müssen verwenden sudo
um diese Datei zu bearbeiten:
sudo gedit /etc/environment

Um eine Umgebungsvariable hinzuzufügen, geben Sie ihren Namen, ein Gleichheitszeichen (=
) und den Wert, den die Umgebungsvariable enthalten soll. Kein Leerzeichen vor oder nach dem Gleichheitszeichen (=
). Der Name der Umgebungsvariablen kann Buchstaben, einen Unterstrich (_
) oder Zahlen. Das erste Zeichen eines Namens darf jedoch keine Zahl sein.
Wenn der Wert Leerzeichen enthält, stellen Sie sicher, dass Sie den gesamten Wert in Anführungszeichen ("
).

Speichern Sie die Datei und melden Sie sich dann ab und wieder an. Verwenden echo
um zu testen, ob eine neue Variable existiert und den von Ihnen festgelegten Wert enthält:
echo $WEBSITE

Da es sich um eine globale Umgebungsvariable handelt, die für jeden verfügbar ist, Benutzer mary
kann auf die Umgebungsvariable verweisen, wenn sie sich das nächste Mal anmeldet:
echo $WEBSITE

Zu alle Umgebungsvariablen anzeigen tippe auf einmal printenv
. Es gibt viel Output, daher ist es sinnvoll, es durchzuleiten sort
, und dann in less
:
printenv | sort | less

Die sortierte Liste der Umgebungsvariablen wird uns angezeigt in less
.

Wir können die Ausgabe weiterleiten grep
nach Umgebungsvariablen suchen zu einem bestimmten Thema.
printenv | grep GNOME

Shell-Umgebungsvariablen
Dies sind einige der Shell-Umgebungsvariablen, die in verwendet werden bash
um sein Verhalten und seine Funktionalität zu diktieren oder aufzuzeichnen. Einige der Werte werden aktualisiert, während Sie das Terminal verwenden. Zum Beispiel die COLUMNS
Die Umgebungsvariable wird aktualisiert, um Änderungen widerzuspiegeln, die Sie möglicherweise an der Breite des Terminalfensters vornehmen:
- BASHOPTEN: Die Befehlszeilenoptionen, die verwendet wurden, wenn
bash
wurde gestartet.
- BASH_VERSION: Die
bash
Versionsnummer als Zeichenfolge aus Wörtern und Zahlen.
- BASH_VERSINFO: Die
bash
Version als Ziffer.
- SÄULEN: Die aktuelle Breite des Terminalfensters.
- DIRSTACK: Die Verzeichnisse, die zum Verzeichnisstapel hinzugefügt bis zum
pushd
Befehl.
- HISTDATEIGRÖSSE: Maximale Anzahl von erlaubte Zeilen im
history
Datei.
- HISTGRÖSSE: Anzahl der Zeilen von
history
im Gedächtnis erlaubt.
- HOSTNAME: Der Hostname des Computers.
- IFS: Die Interner Feldtrenner Wird verwendet, um Eingaben in der Befehlszeile zu trennen. Standardmäßig ist dies ein Leerzeichen.
- PS1: Die
PS1
Die Umgebungsvariable enthält die Definition für die Primär-, Standard- und Eingabeaufforderung. Eine Reihe von Token, die als Escape-Sequenzen bezeichnet werden, können in die Definition Ihrer Eingabeaufforderung aufgenommen werden. Sie repräsentieren solche Dinge wie den Host- und Benutzernamen, das aktuelle Arbeitsverzeichnis und die Uhrzeit.
- PS2: Wenn ein Befehl mehr als eine Zeile umfasst und mehr Eingaben erwartet werden, wird die sekundäre Eingabeaufforderung angezeigt. Die
PS2
Umgebungsvariable enthält die Definition dieser sekundären Eingabeaufforderung, die standardmäßig das Größer-als-Zeichen (>
).
- SCHALLOTEN: Shell-Optionen, die Sie mit dem einstellen können
set
Möglichkeit.
- UID: Die Benutzerkennung des aktuellen Benutzers.
Lassen Sie uns einige dieser Shell-Variablen überprüfen:
echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID

Der Vollständigkeit halber sind hier die Token, die Sie in den Eingabeaufforderungsdefinitionen verwenden können:
- T: Die aktuelle Uhrzeit im Format HH:MM:SS.
- D: Das aktuelle Datum, ausgedrückt als Wochentag, Monat, Datum.
- n: Ein Zeilenumbruchzeichen.
- S: Der Name Ihrer Shell.
- W: Der Name Ihres aktuellen Arbeitsverzeichnisses.
- w: Der Pfad zu Ihrem aktuellen Arbeitsverzeichnis.
- u: Der Benutzername der eingeloggten Person.
- h: Der Hostname des Computers.
- #: Jeder Befehl innerhalb einer Shell ist nummeriert. Auf diese Weise können Sie die Nummer des Befehls in Ihrer Eingabeaufforderung sehen. Dies ist nicht die gleiche Nummer wie der Befehl im
history
aufführen.
- $: Setzt das letzte Zeichen der Eingabeaufforderung auf ein Dollarzeichen (
$
) für einen normalen Benutzer und ein Raute-Symbol (#
) für den Root-Benutzer. Dies funktioniert, indem die UID des Benutzers überprüft wird. Wenn es null ist, ist der Benutzer root.
Sie finden die Definition Ihres PS1
Umgebungsvariable in Ihrem .bashrc
Datei.
Erstellen von Sitzungsumgebungsvariablen
Um Umgebungsvariablen für Ihren eigenen Gebrauch zu erstellen, fügen Sie sie am Ende Ihres .bashrc
Datei. Wenn Sie die Umgebungsvariablen für Remote-Sitzungen verfügbar haben möchten, z. B. SSH-Verbindungen, müssen Sie sie zu Ihrem .bash_profile
auch Datei.
Das Format der Umgebungsvariablendefinition ist für beide Dateien gleich. Um Ihrem eine Definition hinzuzufügen .bash_profile
Datei, geben Sie diese in Ihr Home-Verzeichnis ein:
gedit .bashrc

Wir haben eine Umgebungsvariable namens . hinzugefügt INHERITED_VAR
. Beachten Sie das Wort „Export“ am Zeilenanfang.

Speichern und schließen Sie Ihre Datei, nachdem Sie die Bearbeitung abgeschlossen haben. Sie können sich ab- und wieder anmelden, oder Sie können die Shell veranlassen, die .bash_profile
Datei mit dem Punktbefehl (.
) so was:
. .bashrc

Erstellen wir nun eine Umgebungsvariable in der Befehlszeile:
LOCAL_VAR="This session only"

Wenn wir verwenden echo
, können wir sehen, dass uns beide Umgebungsvariablen zugänglich sind:
echo $LOCAL_VAR
echo $INHERITED_VAR

Sie werden die Definition von the . bemerken INHERITED_VAR
Umgebungsvariable hatte das Wort „export“ am Anfang der Zeile. Dies bedeutet, dass die Umgebungsvariable von Kindprozessen der aktuellen Shell geerbt wird. Wenn wir einen anderen mit dem . starten bash
Befehl können wir die beiden Variablen erneut aus der untergeordneten Shell heraus überprüfen:
bash
echo $LOCAL_VAR
echo $INHERITED_VAR

Wie Sie sehen können, ist die INHERITED_VAR
ist in der untergeordneten Shell zugänglich, aber LOCAL_VAR
ist nicht. Wir bekommen einfach eine Leerzeile.
Obwohl „export“ den Umgebungsvariablenteil zur Umgebung hinzufügt, die untergeordnete Prozesse erben, INHERITED_VAR
ist keine globale Umgebungsvariable. Zum Beispiel Benutzer mary
kann nicht darauf verweisen:
echo $INHERITED_VAR

Um unser Kind zu schließen bash
Sitzung, wir verwenden exit
:
exit
Geerbte Umgebungen wirken sich auch auf Skripte aus. Hier ist ein einfaches Skript, das die Werte unserer drei Umgebungsvariablen in das Terminalfenster schreibt:
#!/bin/bash
echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR
Dies wurde in einer Datei namens . gespeichert envtest.sh
, und dann mit folgendem ausführbar gemacht:
chmod +x envtest.sh
Wenn wir das Skript ausführen, kann es auf zwei von drei Umgebungsvariablen zugreifen:
./envtest.sh

Das Skript kann das sehen WEBSITE
globale Umgebungsvariable und die INHERITED_VAR
exportierte Umgebungsvariable. Es kann nicht darauf zugreifen LOCAL_VAR
, obwohl das Skript in derselben Shell ausgeführt wird, in der die Variable erstellt wurde.
Bei Bedarf können wir eine Umgebungsvariable über die Befehlszeile exportieren. Das machen wir mit unserem LOCAL_VAR
, und führen Sie das Skript dann erneut aus:
export LOCAL_VAR
./envtest.sh

Die Umgebungsvariable wurde der Umgebung der aktuellen Shell hinzugefügt und erscheint daher in der Umgebung, die vom Skript geerbt wird. Das Skript kann auch auf diese Umgebungsvariable verweisen.
Remote-Verbindungen
Globale Umgebungsvariablen sind für Remote-Login-Sitzungen zugänglich, aber wenn Sie möchten, dass Ihre lokal definierten Umgebungsvariablen remote für Sie verfügbar sind, müssen Sie sie zu Ihrem . hinzufügen .bash_profile
Datei. Sie können dieselbe Umgebungsvariable im .bashrc
und .bash_profile
Dateien mit unterschiedlichen Werten. Dies könnte beispielsweise von einem Skript erfasst werden, um sein Verhalten für Personen zu ändern, die das System lokal oder aus der Ferne verwenden.
(Auf die Gefahr hin, die Dinge zu verwirren, gibt es auch eine .profile
Datei. Es kann auch Umgebungsvariablendefinitionen enthalten. Allerdings ist die .profile
Datei wird nicht gelesen, wenn die .bash_profile
Datei vorhanden ist. Also, das Sicherste – und die bash
-konformer Weg – ist die Verwendung der .bash_profile
Datei.)
Um die zu bearbeiten .bash_profile
Datei, wir verwenden gedit
wieder:
gedit .bash_profile

Wir werden dieselbe Umgebungsvariable mit demselben Wert hinzufügen, den wir zuvor verwendet haben.

Speichern Sie Ihre Änderungen und schließen Sie gedit
.
Auf einem anderen Computer erstellen wir ein SSH
Verbindung zum Testrechner.
ssh dave@howtogeek.local

Sobald wir verbunden sind, führen wir das Skript noch einmal aus:
./envtest.sh

Die .bash_profile
Datei im Rahmen der Initialisierung des Remote-Logins gelesen wurde und die INHERITED_VAR
Umgebungsvariable ist für uns und das Skript zugänglich.
Aufheben einer Umgebungsvariablen
Um eine Umgebungsvariable aufzuheben, verwenden Sie die unset
Befehl. Wenn wir die globale Umgebungsvariable deaktivieren, WEBSITE
, und die exportierte Umgebungsvariable, INHERITED_VAR
, sind sie weder in der Befehlszeile noch in untergeordneten Prozessen mehr verfügbar:
unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE

Beachten Sie, dass dies nur die Verfügbarkeit globaler Umgebungsvariablen für Sie in dieser Sitzung ändert. Eine andere Person, die gleichzeitig angemeldet ist, kann weiterhin auf ihre Instanz dieser globalen Umgebungsvariablen zugreifen. Seine Instanz wurde initialisiert und aus dem gelesen /etc/environment
-Datei während seines Anmeldevorgangs und ist unabhängig von der Kopie der Variablen durch andere.
Als Beispiel, Benutzer mary
kann immer noch auf die zugreifen WEBSITE
Umgebungsvariable und lesen ihren Wert, obwohl Benutzer dave
hat unset
es in seiner Sitzung:
echo $WEBSITE

Umweltkontrolle
Umgebungsvariablen können verwendet werden, um Skripten und Anwendungen mitzuteilen, wie sie sich verhalten sollen. Sie können verwendet werden, um Einstellungen oder kleine Datenmengen zu speichern. Ein Skript kann beispielsweise eine Umgebung mit einem Wert füllen, auf den von anderen Skripten verwiesen werden kann, ohne sie in eine Datei schreiben zu müssen.