Quelle est la différence entre / etc / environment et / etc / profile?

25

Je comprends que le premier est chargé avant le second, mais quelle est la différence conceptuelle? Existe-t-il de bonnes raisons de définir certaines variables dans l'une et pas dans l'autre? Excepté le fait qu'il /etc/environmentsemble exister pour configurer l'environnement pour tous les processus exécutés par le système, tandis que /etc/profilepour configurer l'environnement utilisé et propagé à partir du shell de connexion, n'est-ce pas?

Aussi, sur une note secondaire, quel programme lit traditionnellement /etc/environment? Est-ce lié à POSIX, ou simplement à une convention?

amn
la source

Réponses:

11

Extrait de l' aide d'Ubuntu

/etc/environment- Ce fichier est spécifiquement destiné aux paramètres de variable d'environnement à l'échelle du système. Ce n'est pas un fichier de script, mais plutôt des expressions d'affectation, une par ligne. Plus précisément, ce fichier stocke les paramètres régionaux et de chemin d'accès à l'échelle du système.

/etc/profile - Ce fichier est exécuté chaque fois qu'un shell de connexion bash est entré (par exemple lors de la connexion à partir de la console ou via ssh), ainsi que par le DisplayManager lors du chargement de la session de bureau.

Je pense que tout cela n'est qu'une convention mais pas loin d'une norme (je ne connais pas les systèmes RedHat).

Mali
la source
Il fonctionne sur RedHat (à partir de 7.6). «/ Etc / environment» est vide sur mon serveur et le paramètre a VAR=valuepris effet dans un shell (après reconnexion).
DKroot
39

/etc/environmentne fait pas partie de POSIX, il appartient au PAM (Pluggable Authentication Module), et seuls les programmes compilés avec le support PAM sont capables de l'utiliser (principalement les systèmes de connexion, qui démarrent ensuite le shell ou l'environnement utilisateur). Cela signifie qu'il n'est même pas lu par votre shell.

Vous pouvez voir les programmes utilisant /etc/environmentavec grep -l pam_env /etc/pam.d/*.

So /etc/environmentest utilisé pour définir des variables pour des programmes qui ne sont généralement pas démarrés à partir d'un shell.

Neula
la source