Linux: Wo werden Umgebungsvariablen gespeichert?


Antworten:


113

Die Umgebungsvariablen eines Prozesses sind zur Laufzeit vorhanden und werden in keiner Datei oder so gespeichert. Sie werden im eigenen Speicher des Prozesses gespeichert (dort werden sie an Kinder weitergegeben). Es befindet sich jedoch eine virtuelle Datei in

/ proc / pid / environ

Diese Datei zeigt alle Umgebungsvariablen an, die beim Aufrufen des Prozesses übergeben wurden (es sei denn, der Prozess hat diesen Teil seines Speichers überschrieben - die meisten Programme tun dies nicht). Der Kernel macht sie durch diese virtuelle Datei sichtbar. Man kann sie auflisten. Zum Beispiel kann man die Variablen des Prozesses 3940 anzeigen

cat /proc/3940/environ | tr '\0' '\n'

Jede Variable wird durch eine binäre Null von der nächsten begrenzt. tr ersetzt die Null in eine neue Zeile.


11
Der Kernel speichert die Umgebungsvariablen nicht, sondern im Benutzermodus. / proc / <pid> / environ gibt möglicherweise die falschen Werte zurück, wenn der Umgebungsblock neu zugewiesen wurde.
Atomice

1
@atomice Ich hatte den Eindruck, dass der Kernel sie speichert und für Benutzerprogramme sichtbar macht, die für Benutzerprogramme beschreibbar sind. Stellt die environDatei die falschen Werte dar, wenn eine Umgebungsvariable auf definierte Weise geändert wurde? Können Sie vielleicht ein Programm zeigen, das das ausnutzt?
Johannes Schaub - litb

14
Der Kernel speichert sie an einem bestimmten Ort im Benutzerbereich, und genau das macht / proc / <pid> / environ verfügbar. Wenn Sie jedoch die Umgebung in einem Programm mit putenv oder setenv ändern, wird der anfängliche Umgebungsblock möglicherweise neu zugewiesen (um die neue Variable aufzunehmen). Die neuen Variablen werden in der Ausgabe von / proc / <pid> / environ nicht angezeigt.
Atomice

1
@atomice Also, wo wird die neue aktualisierte Umgebung bleiben? Welcher Befehl soll es zeigen?
user2431763

1
@atomice: an welcher virtuellen adresse werden sie dann gespeichert? Es ist im Fall von x86_64.
user2284570

41

Geben Sie "set" ein und Sie erhalten eine Liste aller aktuellen Variablen. Wenn Sie möchten, dass etwas bestehen bleibt, geben Sie es in ~ / .bashrc oder ~ / .bash_profile ein (wenn Sie bash verwenden).


15

Wenn Sie die Umgebung systemweit nutzen möchten, können Sie dies mit /etc/environmentDatei tun .


Die Frage ist, wo in ʀᴀᴍ.
user2284570

8
@ user2284570 wo in der Frage angegeben, dass? Können Sie bitte näher darauf eingehen?
JohnnyQ

8

Es wird im Prozess (Shell) gespeichert, und seit Sie es exportiert haben, werden alle Prozesse, die verarbeitet werden, erzeugt.

Wenn Sie dies tun, wird es nirgendwo im Dateisystem wie / etc / profile gespeichert. Sie müssen es explizit dort platzieren, damit dies geschieht.


-8

Diese Variable ist in keinem Skript gespeichert. Es wird einfach durch die X-Server-Skripte festgelegt. Sie können die aktuell eingestellten Umgebungsvariablen mit set überprüfen .


Tatsächlich wird es von der Shell für die X-Clients festgelegt.
Paxdiablo

Natürlich wird es durch die Skripte festgelegt, die den X-Server hochfahren.
Eduard - Gabriel Munteanu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.