Могу ли я иметь определенные настройки, универсальные для всех моих пользователей?
Могу ли я иметь определенные настройки, универсальные для всех моих пользователей?
Ответы:
Помимо того, /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
вставите, это позаботится о большинстве пользователей posix-совместимой оболочки. Вероятно, этого «достаточно» для некритических целей.
Но никто с оболочкой csh
или tcsh
не увидит его, и я не верю, что у csh
него есть глобальный файл инициализации.
/etc/environment
на самом деле, кажется, устанавливает переменные среды для меня, даже как пользователь root. Я знаю, что /etc/environment
это на amazon linux и ubuntu. Мне не удалось проверить, работает ли csh, tcsh или zsh.
Некоторые интересные выдержки из man-страницы bash:
Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с
--login
опцией, она сначала считывает и выполняет команды из файла/etc/profile
, если этот файл существует. После прочтения этого файла, он ищет~/.bash_profile
,~/.bash_login
и~/.profile
, в таком порядке, и читает и выполняет команду из первого, который существует и читаемые. Этот--noprofile
параметр можно использовать при запуске оболочки, чтобы запретить такое поведение.
...
Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из/etc/bash.bashrc
и~/.bashrc
, если эти файлы существуют. Это можно запретить с помощью--norc
опции.--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 / profile по умолчанию, она не вступит в силу, пока каждый процесс не выйдет и не перезагрузится. его начальные настройки.
Загляните в / etc /, чтобы изменить переменные запуска по умолчанию для любой конкретной оболочки. Просто поймите, что пользователи могут (и часто делают) изменять их в своих индивидуальных настройках.
Unix разработан, чтобы подчиняться пользователю в определенных пределах.
NB : Bash - не единственная оболочка в вашей системе. Обратите особое внимание на то, на что фактически указывает символическая ссылка / bin / sh. Во многих системах это может быть тире, что (по умолчанию, без специального вызова) ПРАВИЛЬНО. Поэтому вам следует позаботиться об изменении обоих значений по умолчанию, иначе сценарии, начинающиеся с / bin / sh, не будут наследовать ваши глобальные настройки по умолчанию. Точно так же старайтесь избегать синтаксиса, который понимает только bash при редактировании обоих, иначе говоря avoiding bashisms
.