Was ist Umgebungsvariable?

Ein Paar „Name=Wert“ aus der Menge solcher Paare, die ein Prozess besitzt; damit wird das Verhalten eines Programms von außen eingestellt. Beim Start eines Prozesses erbt das Kind eine Kopie der Umgebungsvariablen des Elternprozesses. In der Shell werden nur exportierte Variablen wie bei export X=1 zu Umgebungsvariablen und an Kindprozesse weitergegeben; eine Variable, der nur ein Wert zugewiesen wurde, gilt nur innerhalb dieser Shell. Neben PATH (die nach Befehlen durchsuchten Verzeichnisse), HOME (das Home-Verzeichnis) und LD_LIBRARY_PATH (wo Shared Libraries gesucht werden) dienen sie etwa auch zur Angabe des Lizenzservers von EDA-Werkzeugen. env oder printenv listet sie auf.

Japanische Bezeichnung: 環境変数

„Umgebungsvariable“ kommt in 5 Übungsfragen aus 3 Themen vor, z. B. Grundlagen von Linux und der Kommandozeile, Linker, Loader und ausführbare Formate, Grundlagen der Webtechnologien.

Fachgebiet: Grundlagen von Linux und der Kommandozeile

Jetzt üben: Fragen zu Umgebungsvariable

Was tut der Loader des Betriebssystems beim Start eines Programms (z. B. unter Linux mit execve)?

  1. AEr liest Quellcode ein, kompiliert ihn sofort und führt ihn dann aus
  2. BEr legt die einzelnen Teile gemäß den Program Headern der ausführbaren Datei im Speicher ab, bereitet Argumente usw. auf dem Stack vor und beginnt die Ausführung an der Einsprungadresse
  3. CEr zeigt alle Symbolnamen der ausführbaren Datei auf dem Bildschirm an und führt sie dann aus
Antwort und Erläuterung anzeigen

Antwort: B. Er legt die einzelnen Teile gemäß den Program Headern der ausführbaren Datei im Speicher ab, bereitet Argumente usw. auf dem Stack vor und beginnt die Ausführung an der Einsprungadresse

Der Loader liest den Header der ausführbaren Datei und bildet die in den Program Headern angegebenen Teile (Segmente) mit Lese-, Schreib- und Ausführungsrechten in den virtuellen Adressraum ab. Er stellt den mit 0 gefüllten Bereich für das BSS und den Stack bereit und legt Kommandozeilenargumente und Umgebungsvariablen auf den Stack. Bei dynamischem Linken beginnt die Ausführung im dynamischen Linker, sonst an der Einsprungadresse der ausführbaren Datei.

Ein ausführbares Skript run.sh im aktuellen Verzeichnis ergibt bei Eingabe von „run.sh“ die Meldung „command not found“, lässt sich aber durch Eingabe von „./run.sh“ ausführen. Was ist der Grund?

  1. Arun.sh hat kein Ausführungsrecht, und nur mit vorangestelltem ./ lässt es sich auch ohne dieses Recht ausführen
  2. BEin Befehlsname ohne Schrägstrich wird nur in den Verzeichnissen der Umgebungsvariable PATH gesucht, und das aktuelle Verzeichnis gehört in der Regel nicht dazu
  3. CDas #!/bin/bash in der ersten Zeile von run.sh (Shebang) wird nur gelesen, wenn das Skript mit vorangestelltem ./ ausgeführt wird
Antwort und Erläuterung anzeigen

Antwort: B. Ein Befehlsname ohne Schrägstrich wird nur in den Verzeichnissen der Umgebungsvariable PATH gesucht, und das aktuelle Verzeichnis gehört in der Regel nicht dazu

Erhält die Shell einen Befehlsnamen ohne Schrägstrich, durchsucht sie der Reihe nach die Verzeichnisse, die in der Umgebungsvariable PATH durch Doppelpunkte getrennt aufgeführt sind (/usr/local/bin:/usr/bin usw.), und führt das Gefundene aus. Das aktuelle Verzeichnis wird in der Regel nicht in PATH aufgenommen, damit nicht versehentlich ein bösartiges Programm gleichen Namens ausgeführt wird, das an anderer Stelle abgelegt wurde. Schreibt man einen Pfad mit Schrägstrich wie ./run.sh, wird diese Datei direkt ausgeführt, ohne PATH zu durchsuchen. Das #!/bin/bash in der ersten Zeile (Shebang) legt unabhängig von der Startweise den Interpreter fest, der das Skript ausführt.

„Umgebungsvariable“ in den Erläuterungen

Fragen mit „Umgebungsvariable“ (5)

  1. Was tut der Loader des Betriebssystems beim Start eines Programms (z. B. unter Linux mit execve)?
  2. Ein ausführbares Skript run.sh im aktuellen Verzeichnis ergibt bei Eingabe von „run.sh“ die Meldung „command not found“, lässt sich aber durch Eingabe von „./run.sh“ ausführen. Was ist der Grund?
  3. Welche Kombination der Ausgaben der beiden bash -c-Befehle ergibt sich, wenn die obigen Befehle nacheinander ausgeführt werden?
  4. In cron wurde „30 2 * * 1 /home/alice/backup.sh“ eingetragen. Wann wird backup.sh ausgeführt?
  5. Bei CGI startet der Webserver bei jeder Anfrage das Programm als neuen Prozess, und der Prozess endet, wenn die Verarbeitung abgeschlossen ist. Was ist der Hauptgrund dafür, dass FastCGI und Anwendungsserver viele Anfragen effizienter verarbeiten können als CGI?

Verwandte Begriffe

Shell Lader (Loader) Stack (Stapelspeicher) Linker Variable cron Ein-/Ausgabeumleitung Git grep Hardlink

Zur Glossarübersicht