Je pense que ce n'est ajouté qu'à la session en cours, lorsque vous ouvrez une nouvelle session dans le terminal, elle disparaîtrait
Haryono Sariputra
Réponses:
104
En plus de /etc/profilece que d'autres ont mentionné, certains systèmes Linux utilisent maintenant un répertoire /etc/profile.d/; tous les .shfichiers qu'il contient proviendront de /etc/profile. Il est légèrement plus simple de conserver vos éléments d'environnement personnalisés dans ces fichiers que de simplement les modifier /etc/profile.
Si tous les services de connexion utilisent PAM et que tous les services de connexion ont session required pam_env.sodans leurs /etc/pam.d/*fichiers de configuration respectifs , alors toutes les sessions de connexion auront des variables d'environnement définies comme spécifié dans pam_envle fichier de configuration de.
Sur la plupart des distributions Linux modernes, tout est là par défaut - ajoutez simplement les variables d'environnement globales souhaitées à /etc/security/pam_env.conf.
Cela fonctionne quel que soit le shell de l'utilisateur, et fonctionne également pour les connexions graphiques (si xdm / kdm / gdm / entrée /… est configuré comme ceci).
+1, vous devez également redémarrer après avoir ajouté une variable dans pam_env.conf car instantanément à la volée $ echo $
9
Vous n'avez pas besoin de redémarrer, vous devez vous reconnecter. (Pas de redémarrage des serveurs critiques pour moi)
Lyndon White
Cela ne semble pas s'appliquer à ma distribution, Mint 17.2. Le fichier préinstallé est entièrement commenté, et si j'ajoute quelque chose comme et que je echo foo>/home/me/barredémarre (et me reconnecte ), ce fichier n'est pas créé. (Il y a probablement une façon plus élégante de tester cela, mais je voulais être sûr avant de commenter ici.)
Michael Scheper
16
Étonnamment, Unix et Linux n'ont pas vraiment de place pour définir les variables d'environnement globales. Le mieux que vous puissiez faire est de faire en sorte qu'un shell spécifique ait une initialisation spécifique au site.
Si vous le mettez /etc/profile, cela réglera les choses pour la plupart des utilisateurs de shell compatibles posix. C'est probablement "assez bon" pour des fins non critiques.
Mais quiconque avec un shell cshou tcshne le verra pas, et je ne pense pas qu'il cshait un fichier d'initialisation global.
/etc/environmentsemble en fait définir les variables d'environnement à pour moi, même en tant qu'utilisateur root. Je sais que /etc/environmentc'est sur Amazon Linux et Ubuntu. Je n'ai pas pu vérifier si cela fonctionne pour csh, tcsh ou zsh.
Jordan Stewart
il n'est pas spécifique au shell que vous utilisez, il est vraiment mondial
Xerus
9
Quelques extraits intéressants de la page de manuel bash:
Lorsque bash est appelé en tant que shell de connexion interactif, ou en tant que shell non interactif avec l' --loginoption, 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_loginet ~/.profile, dans cet ordre, et lit et exécute les commandes de la première qui existe et est lisible. L' --noprofileoption peut être utilisée lorsque le shell est lancé pour empêcher ce comportement.
...
Lorsqu'un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes depuis
/etc/bash.bashrcet ~/.bashrc, si ces fichiers existent. Cela peut être inhibé en utilisant l' --norcoption. le--rcfileL'option file forcera bash à lire et à exécuter des commandes à partir de fichier au lieu de /etc/bash.bashrcet
~/.bashrc.
Alors jetez un œil à /etc/profileou /etc/bash.bashrc, ces fichiers sont les bons endroits pour les paramètres globaux. Mettez quelque chose comme ceci en eux pour configurer une variable d'environnement:
Notez que sur les systèmes Unix classiques, le shell Bourne et le shell Korn lisent également / etc / profile - c'est probablement l'emplacement le plus largement utilisé pour la configuration de l'environnement système. Certaines versions du shell C regardent dans /etc/csh.cshrc et /etc/csh.login ainsi que dans les emplacements par utilisateur; d'autres n'utilisent aucun fichier de configuration d'environnement système.
Jonathan Leffler
Génial, exactement ce que je recherchais en ce qui concerne la configuration de l'environnement pour les utilisateurs de shell non connectés.
David Mann
Désolé, il me semble avoir accidentellement voté contre cela alors que pendant un certain temps les flèches n'étaient pas visibles ... cela vous dérangerait-il de le modifier (faute de frappe "environEment" dans l'avant-dernière ligne, par exemple) pour que je puisse supprimer le vote défavorable?
Chaque processus exécuté sous le noyau Linux reçoit son propre environnement unique qu'il hérite de son parent. Dans ce cas, le parent sera soit un shell lui-même (engendrant un sous-shell), soit le programme 'login' (sur un système typique).
Comme chaque environnement de processus est protégé, il n'y a aucun moyen d'injecter une variable d'environnement à chaque processus en cours d'exécution, donc même si vous modifiez le shell par défaut .rc / profile, il n'entrera en vigueur que lorsque chaque processus se termine et se recharge. ses paramètres de démarrage.
Regardez dans / etc / pour modifier les variables de démarrage par défaut pour un shell particulier. Sachez simplement 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 des limites.
NB : Bash n'est pas le seul shell de votre système. Faites très attention à ce que le lien symbolique / bin / sh pointe réellement. Sur de nombreux systèmes, cela pourrait en fait être un tiret qui est (par défaut, sans appel spécial) POSIXLEMENT correct. 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 par défaut globales. De même, veillez à éviter la syntaxe que seul bash comprend lors de l'édition des deux, aka avoiding bashisms.
Réponses:
En plus de
/etc/profile
ce que d'autres ont mentionné, certains systèmes Linux utilisent maintenant un répertoire/etc/profile.d/
; tous les.sh
fichiers qu'il contient proviendront de/etc/profile
. Il est légèrement plus simple de conserver vos éléments d'environnement personnalisés dans ces fichiers que de simplement les modifier/etc/profile
.la source
Si votre LinuxOS a ce fichier:
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
la source
homme 8 pam_env
homme 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/etc/pam.d/*
fichiers de configuration respectifs , alors toutes les sessions de connexion auront des variables d'environnement définies comme spécifié danspam_env
le fichier de configuration de.Sur la plupart des distributions Linux modernes, tout est là par défaut - ajoutez simplement les variables d'environnement globales souhaitées à
/etc/security/pam_env.conf
.Cela fonctionne quel que soit le shell de l'utilisateur, et fonctionne également pour les connexions graphiques (si xdm / kdm / gdm / entrée /… est configuré comme ceci).
la source
echo foo>/home/me/bar
redémarre (et me reconnecte ), ce fichier n'est pas créé. (Il y a probablement une façon plus élégante de tester cela, mais je voulais être sûr avant de commenter ici.)Étonnamment, Unix et Linux n'ont pas vraiment de place pour définir les variables d'environnement globales. Le mieux que vous puissiez faire est de faire en sorte qu'un shell spécifique ait une initialisation spécifique au site.
Si vous le mettez
/etc/profile
, cela réglera les choses pour la plupart des utilisateurs de shell compatibles posix. C'est probablement "assez bon" pour des fins non critiques.Mais quiconque avec un shell
csh
outcsh
ne le verra pas, et je ne pense pas qu'ilcsh
ait un fichier d'initialisation global.la source
/etc/environment
semble en fait définir les variables d'environnement à pour moi, même en tant qu'utilisateur root. Je sais que/etc/environment
c'est sur Amazon Linux et Ubuntu. Je n'ai pas pu vérifier si cela fonctionne pour csh, tcsh ou zsh.Quelques extraits intéressants de la page de manuel bash:
Alors jetez un œil à
/etc/profile
ou/etc/bash.bashrc
, ces fichiers sont les bons endroits pour les paramètres globaux. Mettez quelque chose comme ceci en eux pour configurer une variable d'environnement:la source
Utiliser PAM est excellent.
la source
Chaque processus exécuté sous le noyau Linux reçoit son propre environnement unique qu'il hérite de son parent. Dans ce cas, le parent sera soit un shell lui-même (engendrant un sous-shell), soit le programme 'login' (sur un système typique).
Comme chaque environnement de processus est protégé, il n'y a aucun moyen d'injecter une variable d'environnement à chaque processus en cours d'exécution, donc même si vous modifiez le shell par défaut .rc / profile, il n'entrera en vigueur que lorsque chaque processus se termine et se recharge. ses paramètres de démarrage.
Regardez dans / etc / pour modifier les variables de démarrage par défaut pour un shell particulier. Sachez simplement 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 des limites.
NB : Bash n'est pas le seul shell de votre système. Faites très attention à ce que le lien symbolique / bin / sh pointe réellement. Sur de nombreux systèmes, cela pourrait en fait être un tiret qui est (par défaut, sans appel spécial) POSIXLEMENT correct. 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 par défaut globales. De même, veillez à éviter la syntaxe que seul bash comprend lors de l'édition des deux, aka
avoiding bashisms
.la source