92 votes

Linux : où sont stockées les variables d'environnement ?

Si je tape dans un terminal,

export DISPLAY=:0.0

... où le shell stocke-t-il cette variable d'environnement ?

J'utilise Ubuntu 8.10. J'ai regardé dans les fichiers ~/.profile et /etc/profile et je ne trouve aucune trace de DISPLAY.

2 votes

133voto

Johannes Schaub - litb Points 256113

Les variables d'environnement d'un processus existent au moment de l'exécution, et ne sont pas stockées dans un fichier ou autre. Elles sont stockées dans la propre mémoire du processus (c'est là qu'elles se trouvent pour être transmises aux enfants). Mais il existe un fichier virtuel dans

/proc/_pid_/environ

Ce fichier montre toutes les variables d'environnement qui ont été passées lors de l'appel du processus (à moins que le processus n'ait écrasé cette partie de sa mémoire - ce qui n'est pas le cas de la plupart des programmes). Le noyau les rend visibles à travers ce fichier virtuel. On peut les lister. Par exemple pour voir les variables du processus 3940, on peut faire

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

Chaque variable est délimitée par un zéro binaire de la suivante. tr remplace le zéro par une nouvelle ligne.

0 votes

Cletus, oui je pense que c'est spécifique à linux, mais je ne sais pas.

0 votes

@askveikau, notez que je ne propose pas d'utiliser ce fichier par un programme pour lire les variables d'environnement. J'ai montré que le noyau linux les exporte dans ce fichier - ni plus ni moins. Cela dit, je ne sais pas quelles garanties le noyau linux donne concernant ce fichier.

13 votes

Le noyau ne stocke pas les variables d'environnement, elles sont stockées en mode utilisateur. /proc/<pid>/environ peut retourner des valeurs erronées si le bloc d'environnement a été réalloué.

45voto

MrWiggles Points 6622

Tapez "set" et vous obtiendrez une liste de toutes les variables actuelles. Si vous voulez qu'une variable persiste, mettez-la dans ~/.bashrc ou ~/.bash_profile (si vous utilisez bash).

13voto

Guillaume Points 8549

Vous trouverez une très bonne explication de tout cela à l'adresse suivante Variable d'environnement

11voto

cletus Points 276888

Il est stocké dans le processus (shell) et, puisque vous l'avez exporté, dans tous les processus que ce processus génère.

Faire ce qui précède ne le stocke pas n'importe où dans le système de fichiers comme /etc/profile. Vous devez le mettre là explicitement pour que cela se produise.

-1voto

shahryar Points 27

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X