Відповіді:
Як і про /etc/profile
які інші згадували, деякі системи Linux зараз використовують каталог /etc/profile.d/
; будь-які .sh
файли там будуть створені /etc/profile
. Трохи акуратніше зберігати в цих файлах свої власні речі, ніж просто редагувати /etc/profile
.
Якщо ваш LinuxOS має цей файл:
/etc/environment
Ви можете використовувати його для постійного встановлення змінних довкілля для всіх користувачів.
Витягнуто з: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
Якщо всі служби входу використовують PAM , а всі служби входу мають session required pam_env.so
відповідні /etc/pam.d/*
файли конфігурації, то всі сеанси входу матимуть деякі змінні середовища, визначені у pam_env
файлі конфігурації.
У більшості сучасних дистрибутивів Linux це все за замовчуванням - просто додайте потрібні змінні глобальної середовища до /etc/security/pam_env.conf
.
Це працює незалежно від оболонки користувача, а також працює для графічних входів (якщо xdm / kdm / gdm / entry /… встановлено так).
echo foo>/home/me/bar
і перезавантажуюсь (і знову входжу), цей файл не створюється. (Мабуть, є більш елегантний спосіб перевірити це, але я хотів бути впевненим, перш ніж коментувати тут.)
Дивовижно, що Unix і Linux насправді не мають місця встановлювати глобальні змінні середовища. Найкраще, що ви можете зробити, це організувати, щоб будь-яка конкретна оболонка мала ініціалізацію, що відповідає конкретному сайту.
Якщо ви поставите його /etc/profile
, це допоможе подбати про речі для більшості користувачів сумісних з пошами оболонок. Це, мабуть, "досить добре" для некритичних цілей.
Але хтось із csh
або tcsh
оболонкою не побачить її, і я не вірю, що він csh
має файл глобальної ініціалізації.
/etc/environment
насправді, здається, для мене встановлюються змінні середовища, навіть як користувач root. Я знаю, що /etc/environment
це на Amazon Linux та ubuntu. Мені не вдалося перевірити, чи працює csh, tcsh чи zsh.
Кілька цікавих уривків з bash manpage:
Коли bash викликається як інтерактивна оболонка входу, або як неінтерактивна оболонка з
--login
можливістю, вона спочатку зчитує та виконує команди з файлу/etc/profile
, якщо такий файл існує. Після прочитання цього файлу, він шукає~/.bash_profile
,~/.bash_login
і~/.profile
, в такому порядку, і читає і виконує команду з першого, який існує і читаються.--noprofile
Варіант може бути використаний , коли оболонка запускається , щоб пригнічувати таку поведінку.
...
Коли запускається інтерактивна оболонка, яка не є оболонкою для входу, bash зчитує та виконує команди з/etc/bash.bashrc
та~/.bashrc
, якщо ці файли існують. Це може бути пригнічено за допомогою--norc
параметра. The--rcfile
Опція файлу змусить bash читати та виконувати команди з файлу замість/etc/bash.bashrc
та~/.bashrc
.
Тож подивіться /etc/profile
або /etc/bash.bashrc
, ці файли - це правильне місце для глобальних налаштувань. Покладіть щось подібне до них, щоб налаштувати змінну навколишнього середовища:
export MY_VAR=xxx
Використання PAM є чудовим.
# 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
Кожен процес, що працює під ядром Linux, отримує своє, унікальне середовище, яке він успадковує від свого батьківського. У цьому випадку батьків буде або самою оболонкою (нерестуючої підшару), або програмою "вхід" (у типовій системі).
Оскільки середовище кожного процесу захищено, немає способу "ввести" змінну навколишнього середовища в кожен запущений процес, тому навіть якщо ви зміните оболонку .rc / профіль за замовчуванням, вона не набуде чинності, поки кожен процес не закриється та не перезавантажиться. його налаштування запуску.
Загляньте в / etc /, щоб змінити змінні для запуску за замовчуванням для будь-якої конкретної оболонки. Просто зрозумійте, що користувачі можуть (і часто це робити) змінювати їх у своїх індивідуальних налаштуваннях.
Unix розроблений, щоб підкорятися користувачеві в межах обмежень.
NB : Bash - не єдина оболонка у вашій системі. Зверніть пильну увагу на те, що насправді вказує символічне посилання / bin / sh. У багатьох системах це насправді може бути тире, яке (за замовчуванням, без спеціального виклику) POSIXLY правильне. Тому вам слід подбати про те, щоб змінити як стандартні , так і сценарії, які починаються з / bin / sh, не успадкують ваші глобальні параметри за замовчуванням. Аналогічно, будьте обережні, щоб уникнути синтаксису, який баш розуміє лише під час редагування обох, ака avoiding bashisms
.