Zurück zum Blog

Wie man Umgebungs- und Shell-Variablen auf einem Linux-VPS liest und setzt

Wie man Umgebungs- und Shell-Variablen auf einem Linux-VPS liest und setzt

Die Mehrheit der Tech-Community interagiert gerne über die Befehlszeilenschnittstelle (CMD) oder die Shell mit Systemen. Im Allgemeinen erleichtert dies ihre Arbeit. Sie können beispielsweise einen Shell-Befehl erstellen, der mehrere Aufgaben automatisch ausführen kann, anstatt sich durch mehrere Schaltflächen einer GUI klicken zu müssen.

Wenn Sie ein Shell- oder CMD-Programm starten, stellt es verschiedene Informationen zusammen. Diese Informationen legen fest, wie das Programm auf die zugrunde liegenden Systemressourcen zugreift, sowie das allgemeine Verhalten. Sie können sie an einem Ort namens Umgebung (Environment) speichern. Die Umgebung besteht aus Zeichenfolgen, die Schlüssel-Wert-Paare darstellen. In diesem Tutorial verwenden wir Ubuntu 20.04 VPS als Beispiel, um Sie bei der Einrichtung von Umgebungs- oder Shell-Variablen zu unterstützen. Die Anleitung sollte auch für andere Linux-Distributionen gelten.

Was ist der Unterschied zwischen Umgebungsvariablen und Shell-Variablen?

Wenn Sie eine Sitzung starten, werden Informationen aus den Einstellungen und Konfigurationsdateien des Systems gesammelt. Anschließend stehen sie dem Shell-Prozess und seinen Unterprozessen zur Verfügung. Diese Informationen sind ein Satz von Schlüssel-Wert-Paaren in diesem Format:

Die Namen der Variablen, d. h. die Schlüssel, unterscheiden zwischen Groß- und Kleinschreibung. Es ist jedoch konventionell üblich, sie in GROSSBUCHSTABEN zu schreiben. Dies hilft Ihnen, sie in anderen Kontexten zu unterscheiden. Mit dem Doppelpunkt-Zeichen ‘:’ können Sie derselben Variablen mehrere Werte zuweisen. Es ist auch wichtig, darauf zu achten, kein Leerzeichen um das = zu lassen. Die Schlüssel sind die Variablen und werden in zwei Kategorien unterteilt: Umgebungsvariablen und Shell-Variablen. Umgebungsvariablen enthalten alle systemweit definierten Variablen, die für alle untergeordneten Shells oder Prozesse verfügbar sind. Sie helfen dabei, Informationen an die Prozesse zu übergeben, die Sie über die Shell-Befehle starten. Shell-Variablen umfassen nur Variablen, die in der spezifischen Shell-Sitzung definiert sind. Darüber hinaus umfassen sie nur Variablen, die ausschließlich innerhalb ihrer Shell-Instanz verfügbar sind.

Auflisten von Umgebungs- und Shell-Variablen

Standardmäßig stellt das Terminal zwei Befehle bereit, um die Umgebungs- und Shell-Variablen aufzulisten: env oder printenv. Sie zeigen in ihrem Standardzustand dieselben Informationen an. Hier ist eine Beispielausgabe dieser Befehle:

Verwendung von env:

environment variables Environmental and Shell Variables

Verwendung von printenv:

printenv

Wie Sie sehen können, ist die Ausgabe dieselbe. Der Unterschied zeigt sich, wenn Sie den Wert eines bestimmten Schlüssels abrufen möchten. In diesem Fall verwenden Sie printenv mit dem Namen der Variablen:

printenv shell

Um mehrere Werte anzuzeigen, können Sie dem Befehl printenv mehr als ein Argument übergeben. Die Werte werden in der Reihenfolge angezeigt, in der Sie die Argumente eingegeben haben:

printenv multiple commands

Sie können auch den Befehl echo mit dem Variablennamen verwenden, um den Wert einer Variablen anzuzeigen:

echo variable

Der Befehl env ermöglicht es Ihnen, die Umgebung, in der Programme ausgeführt werden, zu ändern, indem Sie Variablendefinitionen in einer Syntax wie der folgenden übergeben:

Dies ermöglicht es Ihnen, Werte zu überschreiben oder neue Werte festzulegen, die vom Unterprozess verwendet werden können. Die Befehle printenv und env listen Umgebungsvariablen auf, wie oben zu sehen ist. Diese waren bereits für die Systemprozesse definiert. Wenn Sie eine Liste der Shell-Variablen sehen möchten, können Sie den Befehl set verwenden. Die Eingabe von set ohne Variablen gibt eine Liste aller Umgebungsvariablen, Shell-Variablen, lokalen Variablen und Shell-Funktionen zurück:

set command Environmental and Shell Variables

Es könnten zu viele Variablen sein. Bei Bedarf können Sie diese mit folgendem Befehl seitenweise anzeigen lassen:

Sie können die Ausgabe weiter bereinigen, indem Sie festlegen, dass der Befehl set in POSIX ausgeführt wird, wodurch die Shell-Funktionen nicht ausgegeben werden. Hier führen wir den Befehl in einer Subshell (einer separaten Instanz des Befehlsprozessors) aus, um zu verhindern, dass der Befehl die aktuelle Umgebung ändert:

Die obige Liste führt alle im System verfügbaren Umgebungs- und Shell-Befehle auf. Sie können die Ausgabe mit dem folgenden Befehl einschränken, um zu versuchen, nur Shell-Variablen zu erhalten:

Eine Beispielausgabe des obigen Befehls ist:

lists all environmental and shell commands Environmental and Shell Variables

Obwohl der Befehl einige Umgebungsvariablen enthalten kann, hilft er Ihnen, zwischen Shell- und Umgebungsvariablen zu unterscheiden. Das liegt daran, dass der Befehl set die Werte der Variablen in Anführungszeichen setzt, während die Befehle printenv und env die Werte nicht in Anführungszeichen setzen. Shell-Variablen sind nützlich, um persistente Werte für Sitzungen festzulegen, ohne Änderungen dauerhaft in Dateien zu schreiben.

Häufige Umgebungsvariablen

USER – Der aktuell angemeldete Benutzer.
SHELL – Die Shell, die die von Ihnen eingegebenen Befehle interpretiert. Der Standardwert ist bash, aber Sie können dies ändern.
HOME – Das Home-Verzeichnis des aktuellen Benutzers.
TERM – Gibt den Typ des zu emulierenden Terminals an. Zeigt das aktuell emulierte Terminal an.
PWD – Das aktuelle Arbeitsverzeichnis.
OLDPWD – Das vorherige Arbeitsverzeichnis. Dies hilft der Shell, in das vorherige Verzeichnis zu wechseln, wenn Sie den Befehl zum Ändern des Verzeichnisses als cd eingeben.

EDITOR – Der Standard-Texteditor, wenn Sie edit in Ihrem Terminal eingeben.
LS_COLORS – Definiert Farbcodes, die verwendet werden, um eine farbige Ausgabe hinzuzufügen, wenn Sie den Befehl ls eingeben. Dies hilft, Dateitypen zu unterscheiden und Benutzern Informationen bereitzustellen.
LOGNAME – Der Name des aktuellen Benutzers.
MAIL – Definiert den Pfad zum Postfach des aktuellen Benutzers.
LANG – Definiert die aktuelle Locale-Einstellung.
PATH – Gibt eine Liste von Verzeichnissen an, die beim Ausführen von Befehlen durchsucht werden sollen. Während der Ausführung eines Befehls durchsucht das System diese Verzeichnisse und verwendet die erste gefundene ausführbare Datei.
_ – Der zuletzt ausgeführte Befehl.

Häufige Shell-Variablen:

BASH_VERSION – Die Version von bash in menschenlesbarer Ausgabe.
BASH_VERSINFO – Die Version von bash in maschinenlesbarer Ausgabe.
BASHOPTS – Die Liste der Optionen, die beim Ausführen von bash verwendet wurden. Nützlich, um festzustellen, ob die Shell-Umgebung wie erwartet funktioniert.

COLUMNS – Die Anzahl der Spalten Breite, die zur Darstellung der Ausgabe auf dem Bildschirm verwendet wird.
DIRSTACK – Der Stapel von Verzeichnissen, die mit den Befehlen pushd und popd verfügbar sind.
HOSTNAME – Der Hostname des Computers zu diesem Zeitpunkt.
HISTFILESIZE – Anzahl der Zeilen des Befehlsverlaufs, die in einer Datei gespeichert sind.
HISTSIZE – Anzahl der Zeilen des Befehlsverlaufs, die im Speicher zulässig sind.
IFS – Der interne Feldtrenner, um Eingaben auf der Befehlszeile zu trennen. Standardmäßig ist dies ein Leerzeichen.
SHELLOPTS-Wird verwendet, um Shell-Optionen festzulegen.
UID-Die UID des aktuellen Benutzers.
PS1– Die primäre Definition der Eingabeaufforderung. Dies wird verwendet, um festzulegen, wie Ihre Eingabeaufforderung aussieht, wenn Sie eine Shell-Sitzung starten.
PS2 – Deklariert sekundäre Eingabeaufforderungen für den Fall, dass sich ein Befehl über mehrere Zeilen erstreckt.

Umgebungs- und Shell-Befehle festlegen

Erstens werden wir, wie zuvor erklärt, die Variablennamen komplett in Großbuchstaben schreiben. Als Nächstes werden wir die Erstellung von Shell-Variablen durchgehen. Schließlich werden wir Umgebungsvariablen erstellen.

Erstellen von Shell-Variablen

Fangen wir mit dem üblichen Hello World an. Geben Sie Folgendes in Ihr Terminal ein:

Die Anführungszeichen werden verwendet, weil die Variable ein Leerzeichen enthält. Beachten Sie, dass wir einfache Anführungszeichen verwendet haben, da das Ausrufezeichen ein Sonderzeichen ist und entweder maskiert oder in einfache Anführungszeichen gesetzt werden sollte. Nun haben Sie Ihre erste Shell-Variable erstellt. Sie ist nur in der aktuellen Shell-Sitzung verfügbar. Shell-Variablen stehen untergeordneten Shells und Prozessen nicht zur Verfügung. Sie können sie mit dem Befehl set in Kombination mit grep im Terminal ausgeben:

print variable

Oder zeigen Sie den Wert mit echo an, indem Sie mit dem $-Zeichen und dem Variablennamen darauf verweisen:

echo variable

Wenn Sie versuchen, die Ausgabe mit printenv anzuzeigen, wird nichts ausgegeben. Dies hilft Ihnen zu bestätigen, dass es sich nicht um eine Umgebungsvariable handelt:

printenv variable

Erstellen von Umgebungsvariablen

Die zuvor erstellte Shell-Variable kann mit dem Befehl export in eine Umgebungsvariable umgewandelt werden. Zuerst erstellen Sie eine Shell-Variable. Um dann eine Umgebungsvariable zu erstellen, müssen Sie den Befehl export verwenden. Nach dem Ausführen dieses Befehls ist die Variable für untergeordnete Shells und Prozesse verfügbar:

Wenn Sie nun mit dem Befehl printenv testen, sollten Sie die Variable und den Wert sehen:

printenv variable value

Sie können eine Umgebungsvariable auch in einem einzigen Schritt mit der folgenden Syntax erstellen:

Umgebungsvariablen werden nur an die Child-Shells und nicht an die Parent-Shell übergeben. Dies verhindert, dass Child-Prozesse die Umgebung des Programms beeinflussen, das sie aufgerufen hat.

Variablen herabstufen und zurücksetzen

Wenn Sie dem Tutorial bis zu diesem Moment gefolgt sind, ist MY_FIRST_VAR immer noch als Umgebungsvariable definiert. Sie können sie wieder in eine Shell-Variable umwandeln, indem Sie den export-Befehl mit dem Flag –n eingeben:

Wenn Sie mit printenv testen, wird keine Ausgabe angezeigt. Der echo-Befehl zeigt sie jedoch an, da es sich immer noch um eine Shell-Variable handelt:

echo vs prinenv command

Sie können sowohl eine Shell- als auch eine Umgebungsvariable mit dem Befehl unset löschen. Und Sie können mit echo bestätigen, dass sie nicht mehr existiert. Wie Sie sehen können, wird keine Ausgabe angezeigt:

unset variable Environmental and Shell Variables

Festlegen von Umgebungsvariablen beim Login

Viele Programme hängen zur Ausführung von Umgebungsvariablen ab. Da es nicht effizient ist, die Variablen jedes Mal neu zu definieren, wenn Sie ein Programm ausführen möchten, bietet Linux eine Möglichkeit, sie zu definieren und in einer Datei zu speichern. Auf diese Weise können sie beim Login automatisch gesetzt werden. Die Shell liest je nachdem, wie die Sitzung gestartet wird, unterschiedliche Konfigurationsdateien. Diese werden im Folgenden besprochen:

Arten von Shell-Sitzungen und ihre Unterschiede

  • Login-Shell-Sitzung – beginnt mit der Authentifizierung des Benutzers. Die Sitzung wird eingerichtet, wenn Sie sich über SSH oder eine Terminalsitzung anmelden.
  • Non-Login-Shell-Sitzung – beginnt, wenn Sie eine neue Shell aus Ihrer authentifizierten Shell heraus starten. Sie können eine neue Shell mit dem Befehl bash starten. Es sind keine Authentifizierungsdaten erforderlich.
  • Interaktive Shell-Sitzung – eine Shell-Sitzung, die an eine Terminalsitzung gebunden ist.
  • Nicht-interaktive Shell-Sitzung – eine Shell-Sitzung, die nicht an eine Terminalsitzung gebunden ist – läuft im Hintergrund.

Eine Sitzung wird entweder als Login- oder Non-Login-Sitzung und entweder als interaktive oder nicht-interaktive Sitzung klassifiziert. Wenn Sie sich anmelden und eine Shell-Sitzung über SSH starten, handelt es sich um eine interaktive Login-Shell-Sitzung. Wenn Sie ein Skript im Terminal ausführen, läuft es normalerweise in einer nicht-interaktiven Non-Login-Sitzung. Eine Shell-Sitzung kann auch eine Kombination aus beiden sein. Welche Konfigurationsdatei wird also ausgewählt?

Eine Login-Sitzung liest zuerst Konfigurationsdateien aus dem Verzeichnis /etc/profile. Zweitens überprüft sie die benutzerspezifischen Konfigurationsdateien aus dem Home-Verzeichnis des Benutzers. Nur die erste gefundene Datei aus ~/.bash_profile, ~/.bash_login und ~/.profile wird gelesen und alle anderen Dateien werden ignoriert. Eine Non-Login-Sitzung liest zuerst aus /etc/bash.bashrc, gefolgt von ~/.bashrc. Nicht-interaktive Sitzungen lesen die Umgebungsvariable namens BASH_ENV aus, um den Namen der Datei zu erhalten, die zur Definition der neuen Umgebung verwendet werden soll.

Implementieren von Umgebungsvariablen

Wenn Sie Ihre Variablen festlegen, achten Sie basierend auf unserer obigen Diskussion immer darauf, in welcher Datei Sie sie ablegen. Dies bietet Flexibilität, indem sichergestellt wird, dass bestimmte Variablen nur in bestimmten Sitzungen verfügbar sind. Sie möchten nicht, dass eine wichtige Variable in einer Sitzung fehlt.

In einigen Fällen möchten wir, dass die Variable sowohl in Login- als auch in Non-Login-Sitzungen existiert. Glücklicherweise haben die meisten Linux-Distributionen standardmäßig die Login-Konfigurationen so konfiguriert, dass sie die Non-Login-Konfigurationen lesen und für Ihre Prozesse verfügbar machen. Daher können Sie Ihre Variablen einfach in den Non-Login-Konfigurationsdateien definieren. Normalerweise legen wir benutzerspezifische Umgebungsvariablen fest und möchten, dass unsere Einstellungen sowohl in Login- als auch in Non-Login-Shell-Sitzungen verfügbar sind. Aus diesem Grund verwenden wir die Datei ~/.bashrc. Wir werden nano verwenden, um die Datei zu bearbeiten. Geben Sie Folgendes in Ihr Terminal ein, um die Datei zu öffnen:

In der geöffneten Konfigurationsdatei können Sie bereits mehrere Variablen sehen. Sie können Umgebungsvariablen auf dieselbe Weise hinzufügen wie über die Befehlszeile. Geben Sie einfach den Befehl ein:

Sie können sie an einer beliebigen Stelle in der Datei hinzufügen – in einer neuen Zeile und nicht innerhalb einer Schleifenfunktion. Speichern und schließen Sie dann die Datei. Jede nächste Shell-Sitzung, die Sie starten, wird aus der Datei lesen. Wenn Sie möchten, dass die aktuelle Shell die soeben hinzugefügten Einstellungen liest, ohne dass Sie sie neu starten müssen, können Sie folgenden Befehl verwenden:

Sie sollten systemweite Umgebungsvariablen in einer der folgenden Dateien hinzufügen: /etc/profile, /etc/bash.bashrc oder /etc/environment.

Fazit

Schließlich können Sie nun Shell- und Umgebungsvariablen festlegen und die enorme Leistung nutzen, die diese Tools für Ihren VPS mit sich bringen! Dies bietet viele Vorteile, wie z. B. die Automatisierung der Ausführung einiger Prozesse oder die automatische Bereitstellungskonfiguration, die Authentifizierungsinformationen erfordert, die Übergabe von Variablen an Kindprozesse und vieles mehr. Umgebungsvariablen helfen Ihnen unter anderem dabei, sensible Daten wie Authentifizierungsinformationen vor öffentlichen Repos zu verbergen. Mit dieser Grundlage können Sie komplexe Skripte erstellen, die Sie automatisch über die Befehlszeile ausführen können, ohne dass ständige Benutzereingaben erforderlich sind.

Frohes Schaffen!

author

Akshay Nagpal

Autor · CloudSigma

Preslav Dobrev ist ein kreativer Designer bei CloudSigma und konzentriert sich auf eine konsistente Unternehmensidentität durch traditionelle und innovative Marketingkanäle. Er versteht es meisterhaft, künstlerische Vision mit strategischem Marketing zu verbinden, um wirkungsvolle Markengeschichten zu schaffen.

Kommentare

Noch keine Kommentare. Schreiben Sie den ersten.