Linux Shell-Umgebung und Konfiguration verwalten

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Labor lernen Sie die Grundlagen der Verwaltung der Shell-Umgebung und Konfiguration in Linux kennen. Sie beginnen mit der Erstellung lokaler Variablen und Umgebungsvariablen und verwenden Befehle wie echo, export und env, um die wichtigsten Unterschiede in ihrem Geltungsbereich und ihrer Verfügbarkeit innerhalb einer Shell-Sitzung zu verstehen.

Aufbauend auf diesem Fundament werden Sie untersuchen, wie Variablen und Aliase in Kind-Shells vererbt werden. Sie lernen auch, wie Sie den automatischen Export von Variablen mit der Option set -o allexport steuern und wie Sie Ihre benutzerdefinierten Konfigurationen über Sitzungen hinweg persistent machen, indem Sie die Datei .bashrc ändern.

Lokale und Umgebungsvariablen erstellen und unterscheiden

In diesem Schritt lernen Sie, wie Sie Shell-Variablen erstellen und verwalten. In einer Linux-Shell wie Zsh werden Variablen verwendet, um Informationen zu speichern. Es gibt zwei Haupttypen: lokale Variablen und Umgebungsvariablen.

  • Eine lokale Variable (oder Shell-Variable) ist nur in der Shell verfügbar, in der sie erstellt wurde.
  • Eine Umgebungsvariable ist nicht nur in der aktuellen Shell, sondern auch in allen von dieser Shell gestarteten Kind-Prozessen verfügbar.

Wir werden Befehle wie echo, export und env verwenden, um mit ihnen zu arbeiten. Alle Befehle werden im Terminal ausgeführt.

Zuerst erstellen wir eine lokale Variable. Geben Sie in Ihrem Terminal, das sich bereits im Verzeichnis ~/project befindet, den folgenden Befehl ein, um eine Variable namens flower zu erstellen und ihr den Wert rose zuzuweisen. Beachten Sie, dass um das Gleichheitszeichen (=) keine Leerzeichen stehen dürfen.

flower=rose

Um zu überprüfen, ob die Variable erstellt wurde, können Sie den Befehl echo verwenden, um ihren Wert auszugeben. Das Dollarzeichen ($) vor dem Variablennamen weist die Shell an, die Variable durch ihren Wert zu ersetzen.

echo $flower

Sie sollten den Wert der Variablen im Terminal ausgegeben sehen:

rose

Überprüfen wir nun, ob diese lokale Variable Teil der Shell-Umgebung ist. Der Befehl env listet alle Umgebungsvariablen auf. Wir können seine Ausgabe an grep weiterleiten, um nach unserer Variablen zu suchen.

env | grep flower

Dieser Befehl wird keine Ausgabe erzeugen. Dies ist das erwartete Ergebnis und bestätigt, dass flower eine lokale Variable und keine Umgebungsvariable ist.

Als Nächstes erstellen wir eine Umgebungsvariable. Der Prozess ist ähnlich, aber wir verwenden den Befehl export. Dieser Befehl erstellt eine Variable und markiert sie, damit sie an alle Kind-Prozesse der aktuellen Shell weitergegeben wird. Erstellen wir eine Umgebungsvariable namens nut mit dem Wert almond.

export nut=almond

Überprüfen wir sie mit echo, genau wie wir es zuvor getan haben.

echo $nut

Der Befehl gibt den Wert der Variablen nut aus:

almond

Überprüfen wir sie nun mit dem Befehl env erneut, ob sie in der Umgebung vorhanden ist.

env | grep nut

Dieses Mal findet und zeigt der Befehl die Variable an, was bestätigt, dass nut eine Umgebungsvariable ist:

nut=almond

Sie haben nun erfolgreich sowohl eine lokale als auch eine Umgebungsvariable erstellt und den grundlegenden Unterschied in ihrer Behandlung durch die Shell-Umgebung gesehen. Wir lassen diese Variablen für die nächsten Schritte gesetzt.

Testen der Vererbung von Variablen und Aliassen in einer Kind-Shell

In diesem Schritt untersuchen Sie, wie sich Variablen und Aliase verhalten, wenn Sie eine neue Shell aus Ihrer aktuellen starten. Diese neue Shell wird als "Kind-Shell" bezeichnet, und die ursprüngliche Shell ist die "Eltern-Shell". Dieses Konzept ist entscheidend für das Verständnis, wie Shell-Umgebungen strukturiert sind und wie Skripte ausgeführt werden. Wir werden testen, ob die Variablen flower und nut aus dem vorherigen Schritt an eine Kind-Shell weitergegeben oder "vererbt" werden.

Zuerst identifizieren wir die Prozess-ID (PID) unserer aktuellen Eltern-Shell. Jeder Prozess in Linux hat eine eindeutige PID. Sie können sie mit dem Befehl echo $$ anzeigen.

echo $$

Ihre Ausgabe wird eine Zahl sein, die die PID Ihrer aktuellen Shell ist. Zum Beispiel:

123

Starten Sie nun eine Kind-Shell, indem Sie einfach zsh eingeben und Enter drücken. Dies erstellt einen neuen Shell-Prozess innerhalb Ihres aktuellen.

zsh

Sie befinden sich nun in einer neuen Shell-Sitzung. Um dies zu bestätigen, können wir den Befehl ps -f verwenden, der detaillierte Prozessinformationen anzeigt, einschließlich der Eltern-Prozess-ID (PPID).

ps -f

Betrachten Sie die Ausgabe. Sie werden zwei zsh-Prozesse sehen. Die PID des neuen zsh-Prozesses sollte eine PPID haben, die mit der PID der zuvor notierten Eltern-Shell übereinstimmt.

UID          PID    PPID  C STIME TTY          TIME CMD
labex        123       1  0 10:00 pts/0    00:00:00 zsh
labex        456     123  0 10:01 pts/0    00:00:00 zsh
labex        457     456  0 10:01 pts/0    00:00:00 ps -f

In diesem Beispiel ist die neue Shell (PID 456) ein Kind der ursprünglichen Shell (PPID 123).

Testen wir nun die Variablen. Versuchen Sie in dieser Kind-Shell, den Wert der lokalen Variable flower anzuzeigen.

echo $flower

Der Befehl erzeugt keine Ausgabe. Das liegt daran, dass lokale Variablen auf die Shell beschränkt sind, in der sie erstellt werden, und nicht von Kind-Shells geerbt werden.

Überprüfen Sie als Nächstes die Umgebungsvariable nut.

echo $nut

Dieses Mal gibt die Shell den Wert der Variable aus:

almond

Dies zeigt, dass Umgebungsvariablen, im Gegensatz zu lokalen Variablen, von Kind-Shells geerbt werden.

Kehren wir nun zur Eltern-Shell zurück, indem wir den Befehl exit verwenden.

exit

Sie sind nun zurück in Ihrer ursprünglichen Shell. Führen wir einen ähnlichen Test mit einem Alias durch. Ein Alias ist eine Abkürzung für einen Befehl. Erstellen Sie einen Alias namens ldetc, der ls -ld /etc ausführt.

alias ldetc='ls -ld /etc'

Überprüfen Sie, ob der Alias erstellt wurde, indem Sie alias eingeben.

alias ldetc

Sie sollten die Definition Ihres Alias sehen:

ldetc='ls -ld /etc'

Testen Sie nun den Alias, indem Sie ihn ausführen.

ldetc

Der Befehl führt ls -ld /etc aus und zeigt Ihnen die Details des Verzeichnisses /etc an.

drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc

Öffnen Sie nun eine weitere Kind-Shell, um zu sehen, ob der Alias geerbt wird.

zsh

Versuchen Sie innerhalb der neuen Kind-Shell, den Alias ldetc zu verwenden.

ldetc

Sie erhalten eine Fehlermeldung, da Aliase, wie lokale Variablen, nicht von Kind-Shells geerbt werden.

zsh: command not found: ldetc

Kehren Sie zur Eltern-Shell zurück.

exit

Schließlich räumen wir auf, indem wir den Alias mit dem Befehl unalias aus der Eltern-Shell entfernen.

unalias ldetc

Überprüfen Sie die Entfernung, indem Sie versuchen, ihn erneut aufzulisten.

alias ldetc

Es wird nichts zurückgegeben.

Diese Übung hat Ihnen ein wichtiges Prinzip des Shell-Verhaltens gezeigt: Umgebungsvariablen werden von Kind-Prozessen geerbt, lokale Variablen und Aliase jedoch nicht.

Automatischen Variablenexport mit set -o allexport steuern

In diesem Schritt lernen Sie eine leistungsstarke Shell-Option namens allexport kennen. Normalerweise müssen Sie beim Erstellen einer Variable explizit den Befehl export verwenden, um sie zu einer Umgebungsvariable zu machen. Durch die Aktivierung der Option allexport können Sie die Shell jedoch anweisen, jede von Ihnen definierte neue Variable automatisch zu exportieren. Dies kann eine praktische Abkürzung sein, insbesondere in Skripten, in denen alle Variablen für Unterprozesse verfügbar sein müssen.

Shell-Optionen sind interne Einstellungen, die das Verhalten Ihrer Shell ändern. Sie können sie mit set -o [optionsname] aktivieren und mit set +o [optionsname] deaktivieren.

Zuerst überprüfen wir den aktuellen Status der Option allexport. Sie können alle Shell-Optionen auflisten und mit grep nach allexport filtern.

set -o | grep allexport

Standardmäßig ist diese Option deaktiviert. Die Ausgabe zeigt ihren Status als off an:

allexport              off

Nun aktivieren wir die Option allexport.

set -o allexport

Überprüfen Sie durch erneutes Ausführen des Prüfbefehls, ob die Einstellung geändert wurde.

set -o | grep allexport

Dieses Mal bestätigt die Ausgabe, dass die Option on ist:

allexport              on

Wenn allexport aktiviert ist, wird jede von Ihnen erstellte Variable automatisch zu einer Umgebungsvariable. Testen wir dies. Erstellen Sie eine neue Variable namens truck, ohne den Befehl export zu verwenden.

truck=chevy

Überprüfen Sie nun mit dem Befehl env, ob truck in der Umgebung vorhanden ist.

env | grep truck

Sie werden sehen, dass die Variable truck aufgelistet ist, obwohl Sie export nicht verwendet haben. Dies liegt daran, dass die Option allexport aktiv war.

truck=chevy

Diese Funktion kann sehr nützlich sein, aber es ist eine gute Praxis, sie zu deaktivieren, wenn Sie sie nicht mehr benötigen, um unbeabsichtigtes Exportieren von Variablen zu vermeiden. Deaktivieren wir allexport.

set +o allexport

Überprüfen Sie abschließend, ob sie deaktiviert wurde.

set -o | grep allexport

Die Ausgabe zeigt erneut, dass die Option off ist.

allexport              off

Alle neuen Variablen, die Sie ab diesem Zeitpunkt erstellen, sind standardmäßig lokale Variablen, es sei denn, Sie verwenden explizit den Befehl export.

Shell-Optionen dauerhaft speichern mit der .bashrc-Datei

In diesem Schritt lernen Sie, wie Sie Ihre Shell-Anpassungen dauerhaft machen. Alle Aliase, Funktionen oder Shell-Optionen, die Sie festlegen, sind temporär und gehen verloren, wenn Sie Ihre Terminal-Sitzung schließen. Um sie dauerhaft zu speichern, müssen Sie sie zu einer Shell-Konfigurationsdatei hinzufügen.

Obwohl der Titel .bashrc erwähnt, was die Konfigurationsdatei für die Bash-Shell ist, verwendet unsere Laborumgebung die Zsh-Shell. Die entsprechende Konfigurationsdatei für Zsh ist ~/.zshrc. Diese Datei ist ein Skript, das jedes Mal automatisch ausgeführt wird, wenn Sie eine neue interaktive Shell öffnen, was sie zum perfekten Ort macht, um Ihre persönlichen Einstellungen zu speichern.

Wir werden dies üben, indem wir die Shell-Option noclobber dauerhaft machen. Die Option noclobber verhindert, dass Sie versehentlich eine vorhandene Datei überschreiben, wenn Sie die Ausgabeumleitung (>) verwenden.

Zuerst verwenden wir den Texteditor nano, um die Option noclobber zu Ihrer Datei ~/.zshrc hinzuzufügen. Das Symbol ~ ist eine Abkürzung für Ihr Home-Verzeichnis, /home/labex.

nano ~/.zshrc

Dieser Befehl öffnet die Datei ~/.zshrc im nano-Editor. Verwenden Sie die Pfeiltasten, um den Cursor ganz ans Ende der Datei zu bewegen, und fügen Sie die folgende Zeile hinzu:

set -o noclobber

Speichern Sie nun die Datei und beenden Sie nano. Tun Sie dies, indem Sie Ctrl+O (Write Out) drücken, Enter drücken, um den Dateinamen zu bestätigen, und dann Ctrl+X drücken, um zu beenden.

Sie sind nun zurück zur Eingabeaufforderung. Überprüfen wir, ob die Option noclobber in Ihrer aktuellen Shell aktiv ist.

set -o | grep noclobber

Die Ausgabe wird sein:

noclobber              off

Warum ist sie aus? Weil Ihre aktuelle Shell-Sitzung die Änderungen, die Sie gerade an der Datei ~/.zshrc vorgenommen haben, nicht gelesen hat. Die Datei wird nur gelesen, wenn eine neue Shell gestartet wird.

Um dies zu beweisen, starten wir eine neue Kind-Shell.

zsh

Sie befinden sich nun in einer neuen Shell. Überprüfen wir hier den Status von noclobber.

set -o | grep noclobber

Dieses Mal wird die Ausgabe lauten:

noclobber              on

Dies bestätigt, dass neue Shells die Datei ~/.zshrc korrekt lesen und die Einstellungen anwenden. Beenden Sie nun die Kind-Shell, um zu Ihrer ursprünglichen Eltern-Shell zurückzukehren.

exit

Wie können Sie also die Änderungen auf Ihre aktuelle Shell anwenden, ohne sie zu schließen und neu zu öffnen? Sie können den Befehl source verwenden, der die Befehle aus einer Datei im Kontext der aktuellen Shell liest und ausführt.

source ~/.zshrc

Der Befehl source hat nun die Zeile set -o noclobber aus Ihrer Konfigurationsdatei ausgeführt. Überprüfen wir, ob noclobber nun in unserer ursprünglichen Shell aktiviert ist.

set -o | grep noclobber

Die Ausgabe wird nun lauten:

noclobber              on

Sie haben erfolgreich gelernt, wie Sie Shell-Einstellungen durch Bearbeiten der Datei ~/.zshrc dauerhaft machen und wie Sie diese Änderungen mit dem Befehl source auf Ihre aktuelle Sitzung anwenden.

Zusammenfassung

In diesem Labor haben Sie die grundlegenden Konzepte der Verwaltung der Linux-Shell-Umgebung kennengelernt. Sie haben das Erstellen von lokalen Variablen, die auf die aktuelle Shell beschränkt sind, und von Umgebungsvariablen, die von allen Kindprozessen geerbt werden, geübt. Wichtige Befehle wie echo zur Anzeige von Variablenwerten, export zum Erstellen von Umgebungsvariablen und env zum Auflisten dieser wurden verwendet. Das Konzept der Vererbung wurde weiter untersucht, indem eine Kind-Shell gestartet wurde, um zu testen, welche Variablen und Aliase erfolgreich von der Eltern-Shell übernommen wurden.

Darüber hinaus haben Sie Methoden zur Steuerung und dauerhaften Speicherung Ihrer Shell-Konfiguration erkundet. Sie haben die Option set -o allexport verwendet, um alle nachfolgend definierten Variablen automatisch zu exportieren, wodurch der Prozess der Verfügbarkeit für Kindprozesse vereinfacht wurde. Um sicherzustellen, dass Ihre benutzerdefinierten Variablen, Aliase und Shell-Optionen in allen zukünftigen Terminal-Sitzungen verfügbar sind, haben Sie gelernt, wie Sie diese Konfigurationen in die Startdatei .bashrc aufnehmen, um Ihre Umgebungsanpassungen dauerhaft zu machen.