web-dev-qa-db-fra.com

Comment définir une variable d'environnement pour tout le monde sous mon système Linux?

Puis-je avoir certains paramètres qui sont universels pour tous mes utilisateurs?

120
TIMEX

En plus de /etc/profile dont d'autres ont parlé, certains systèmes Linux utilisent maintenant un répertoire /etc/profile.d/; tous les fichiers .sh qui s'y trouvent seront obtenus par /etc/profile. Il est légèrement plus judicieux de conserver votre environnement personnalisé dans ces fichiers que de simplement modifier /etc/profile.

96
Kieron

man 8 pam_env

man 5 pam_env.conf

Si tous les services de connexion utilisent PAM et que tous les services de connexion ont session required pam_env.so dans leurs fichiers de configuration respectifs /etc/pam.d/*, toutes les sessions de connexion auront des variables d'environnement définies comme indiqué dans Le fichier de configuration de pam_env.

Tout cela se trouve par défaut sur la plupart des distributions Linux modernes. Il vous suffit d'ajouter les variables d'environnement global souhaitées à /etc/security/pam_env.conf.

Cela fonctionne quel que soit le shell de l'utilisateur, ainsi que pour les connexions graphiques (si xdm/kdm/gdm/entry /… est configuré comme ceci).

39
ephemient

Si votre LinuxOS contient ce fichier:

/etc/environment

Vous pouvez l'utiliser pour définir de manière permanente des variables d'environnement pour tous les utilisateurs.

Extrait de: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html

39
tulipcomp1

Étonnamment, Unix et Linux n’ont pas réellement de place pour définir des variables d’environnement global. Le mieux que vous puissiez faire est de faire en sorte que tout shell spécifique ait une initialisation spécifique à un site.

Si vous le mettez dans /etc/profile, cela s’occupera de la plupart des utilisateurs de Shell compatibles posix. Ceci est probablement "suffisant" à des fins non critiques.

Mais quiconque avec un csh ou tcsh Shell ne le verra pas et je ne crois pas que csh possède un fichier d'initialisation global.

16
DigitalRoss

Quelques extraits intéressants de la page de manuel bash:

Lorsque bash est appelé en tant que shell de connexion interactif ou non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier /etc/profile, si ce fichier existe. Après avoir lu ce fichier, il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre, puis lit et exécute les commandes du premier existant et lisible. L'option --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.
...
Lorsqu'un shell interactif qui n'est pas un login est démarré, bash lit et exécute les commandes de /etc/bash.bashrc et ~/.bashrc, si ces fichiers existent. Cela peut être inhibé en utilisant l'option --norc. L'option de fichier --rcfile obligera bash à lire et à exécuter les commandes d'un fichier à la place de /etc/bash.bashrc et ~/.bashrc.

Alors jetez un oeil à /etc/profile ou /etc/bash.bashrc, ces fichiers sont les bons endroits pour les paramètres globaux. Mettez quelque chose comme ça dans eux pour créer une variable d'environnement:

export MY_VAR=xxx
7
Pascal Thivent

Utiliser PAM est execellent.

# modify the display PAM
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY  DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc   DEFAULT=/var/tmp/myproject
4
YumYumYum

Chaque processus exécuté sous le noyau Linux reçoit son propre environnement unique, hérité de son parent. Dans ce cas, le parent sera soit un Shell lui-même (créant un sous-shell), soit le programme 'login' (sur un système typique).

Comme l'environnement de chaque processus est protégé, il n'y a aucun moyen d'injecter une variable d'environnement dans chaque processus en cours. Ainsi, même si vous modifiez le fichier .rc/profile par défaut de Shell, il ne sera effectif que lorsque chaque processus sera terminé et rechargé. ses paramètres de démarrage.

Recherchez dans/etc/pour modifier les variables de démarrage par défaut pour un shell particulier. Il suffit de se rendre compte que les utilisateurs peuvent (et le font souvent) les modifier dans leurs paramètres individuels.

Unix est conçu pour obéir à l'utilisateur, dans certaines limites.

NB: Bash n'est pas le seulement Shell sur votre système. Portez une attention particulière à ce que le lien symbolique/bin/sh pointe réellement. Sur de nombreux systèmes, il pourrait en fait être dash qui est (par défaut, sans appel spécial) correct POSIXLY. Par conséquent, vous devez prendre soin de modifier les deux valeurs par défaut , sinon les scripts commençant par/bin/sh n'hériteront pas de vos valeurs globales par défaut. De même, veillez à éviter une syntaxe que seul bash comprenne lors de l'édition des deux, alias avoiding bashisms.

2
Tim Post