Як встановити змінну середовища для всіх під моєю системою Linux?


132

Чи можу я мати певні налаштування, які є універсальними для всіх моїх користувачів?


2
Це ЕКСПОРТ? додайте це, і це глобально?
TIMEX

я думаю, що це
додається

Відповіді:


104

Як і про /etc/profileякі інші згадували, деякі системи Linux зараз використовують каталог /etc/profile.d/; будь-які .shфайли там будуть створені /etc/profile. Трохи акуратніше зберігати в цих файлах свої власні речі, ніж просто редагувати /etc/profile.


4
Що робити, якщо деякі користувачі використовують іншу оболонку, наприклад zsh?
Матьє Наполі

70
це не є глобальним ... воно обмежене оболонкою .. шкода, це найприйнятніша відповідь
ммм

1
zsh видасть .sh файли в /etc/profile.d/, ви можете побачити його з / etc / zshrc @Matthieu Napoli
Bily

4
Сценарії не використовуються для користувача ROOT.
Вал


38

людина 8 pam_env

людина 5 pam_env.conf

Якщо всі служби входу використовують PAM , а всі служби входу мають session required pam_env.soвідповідні /etc/pam.d/*файли конфігурації, то всі сеанси входу матимуть деякі змінні середовища, визначені у pam_envфайлі конфігурації.

У більшості сучасних дистрибутивів Linux це все за замовчуванням - просто додайте потрібні змінні глобальної середовища до /etc/security/pam_env.conf.

Це працює незалежно від оболонки користувача, а також працює для графічних входів (якщо xdm / kdm / gdm / entry /… встановлено так).


1
+1 вам також потрібно перезавантажити після додавання змінної в pam_env.conf, тому що миттєво на ходу $ echo $ змінної не відображається

9
Вам не потрібно перезавантажувати, вам потрібно повторно ввійти. (Немає перезавантаження критичних серверів для мене)
Lyndon White

Це, мабуть, не стосується мого дистрибутива, Монетний двір 17.2. Попередньо встановлений файл повністю коментується, і якщо я додам щось на зразок echo foo>/home/me/barі перезавантажуюсь (і знову входжу), цей файл не створюється. (Мабуть, є більш елегантний спосіб перевірити це, але я хотів бути впевненим, перш ніж коментувати тут.)
Майкл Шепер

16

Дивовижно, що Unix і Linux насправді не мають місця встановлювати глобальні змінні середовища. Найкраще, що ви можете зробити, це організувати, щоб будь-яка конкретна оболонка мала ініціалізацію, що відповідає конкретному сайту.

Якщо ви поставите його /etc/profile, це допоможе подбати про речі для більшості користувачів сумісних з пошами оболонок. Це, мабуть, "досить добре" для некритичних цілей.

Але хтось із cshабо tcshоболонкою не побачить її, і я не вірю, що він cshмає файл глобальної ініціалізації.


8
/etc/environmentнасправді, здається, для мене встановлюються змінні середовища, навіть як користувач root. Я знаю, що /etc/environmentце на Amazon Linux та ubuntu. Мені не вдалося перевірити, чи працює csh, tcsh чи zsh.
Джордан Стюарт

це не конкретно для оболонки, яку ви використовуєте, вона справді глобальна
Xerus

9

Кілька цікавих уривків з 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

Зауважте, що в класичних системах Unix і оболонка Bourne, і оболонка Korn також читають / etc / profile - це, мабуть, найбільш широко використовуване місце для налаштування системного середовища. Деякі версії оболонки C шукають у /etc/csh.cshrc та /etc/csh.login, а також у місцях розташування кожного користувача; інші не використовують жоден файл налаштування системного середовища.
Джонатан Леффлер

Дивовижне, саме те, що я шукав, що стосується встановлення ENV для користувачів, які не користуються оболонкою.
Девід Манн

Вибачте, я, здається, випадково спростував це, коли деякий час стрілки не було видно ... чи не заперечували б ви редагувати це (наприклад, "друк" оточення "у другому до останнього рядка), щоб я міг видалити протилежний запис?
Бенджамін В.

4

Використання 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

2

Кожен процес, що працює під ядром Linux, отримує своє, унікальне середовище, яке він успадковує від свого батьківського. У цьому випадку батьків буде або самою оболонкою (нерестуючої підшару), або програмою "вхід" (у типовій системі).

Оскільки середовище кожного процесу захищено, немає способу "ввести" змінну навколишнього середовища в кожен запущений процес, тому навіть якщо ви зміните оболонку .rc / профіль за замовчуванням, вона не набуде чинності, поки кожен процес не закриється та не перезавантажиться. його налаштування запуску.

Загляньте в / etc /, щоб змінити змінні для запуску за замовчуванням для будь-якої конкретної оболонки. Просто зрозумійте, що користувачі можуть (і часто це робити) змінювати їх у своїх індивідуальних налаштуваннях.

Unix розроблений, щоб підкорятися користувачеві в межах обмежень.

NB : Bash - не єдина оболонка у вашій системі. Зверніть пильну увагу на те, що насправді вказує символічне посилання / bin / sh. У багатьох системах це насправді може бути тире, яке (за замовчуванням, без спеціального виклику) POSIXLY правильне. Тому вам слід подбати про те, щоб змінити як стандартні , так і сценарії, які починаються з / bin / sh, не успадкують ваші глобальні параметри за замовчуванням. Аналогічно, будьте обережні, щоб уникнути синтаксису, який баш розуміє лише під час редагування обох, ака avoiding bashisms.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.