я думаю , что это только Append на текущей сессии, при открытии нового сеанса в терминале было бы исчезли
Хариоо Шарипутру
Ответы:
104
Помимо того, /etc/profileчто уже упоминалось другими, некоторые системы Linux теперь используют каталог /etc/profile.d/; любые .shфайлы в нем будут получены от /etc/profile. Немного аккуратнее хранить в этих файлах элементы пользовательской среды, чем просто редактировать /etc/profile.
Если все службы входа в систему используют PAM , и все службы входа в систему имеют session required pam_env.soсоответствующие /etc/pam.d/*файлы конфигурации, то для всех сеансов входа в систему будут установлены некоторые переменные среды, указанные в pam_envфайле конфигурации.
В большинстве современных дистрибутивов Linux все это есть по умолчанию - просто добавьте желаемые глобальные переменные среды в /etc/security/pam_env.conf.
Это работает независимо от оболочки пользователя, а также для графического входа в систему (если xdm / kdm / gdm / entry /… настроен таким образом).
+1 вам также необходимо перезагрузиться после добавления переменной в pam_env.conf, потому что мгновенно на лету $ echo $ имя переменной не отображается
9
Перезагружаться не нужно, нужно заново авторизоваться. (Мне не нужно перезагружать критически важные серверы)
Линдон Уайт
Похоже, это не относится к моему дистрибутиву Mint 17.2. Предустановленный файл полностью закомментирован, и если я добавлю что-то подобное echo foo>/home/me/barи перезагружусь (и снова зарегистрируюсь), этот файл не будет создан. (Вероятно, есть более элегантный способ проверить это, но я хотел убедиться, прежде чем комментировать здесь.)
Майкл Шепер
16
Удивительно, но в Unix и Linux на самом деле нет места для установки глобальных переменных среды. Лучшее, что вы можете сделать, - это организовать для любой конкретной оболочки инициализацию для конкретного сайта.
Если вы его /etc/profileвставите, это позаботится о большинстве пользователей posix-совместимой оболочки. Вероятно, этого «достаточно» для некритических целей.
Но никто с оболочкой cshили tcshне увидит его, и я не верю, что у cshнего есть глобальный файл инициализации.
/etc/environmentна самом деле, кажется, устанавливает переменные среды для меня, даже как пользователь root. Я знаю, что /etc/environmentэто на amazon linux и ubuntu. Мне не удалось проверить, работает ли csh, tcsh или zsh.
Джордан Стюарт
он не зависит от используемой вами оболочки, он действительно
глобален
9
Некоторые интересные выдержки из 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, эти файлы - правильное место для глобальных настроек. Поместите в них что-то вроде этого, чтобы настроить переменную окружения:
Обратите внимание, что в классических системах Unix и оболочка Bourne, и оболочка Korn также читают / etc / profile - вероятно, это наиболее широко используемое место для настройки системной среды. Некоторые версии оболочки C смотрят в /etc/csh.cshrc и /etc/csh.login, а также в папки для каждого пользователя; другие не используют файлы настроек системной среды.
Джонатан Леффлер,
Потрясающе, именно то, что я искал, касательно установки env для пользователей оболочки, не входящей в систему.
Дэвид Манн
Извините, я, кажется, случайно отклонил это, когда какое-то время стрелки не были видны ... не могли бы вы отредактировать это (например, опечатка "environment" во второй предпоследней строке), чтобы я мог удалить отрицательный голос?
Каждый процесс, работающий под управлением ядра Linux, получает свою собственную уникальную среду, которую он наследует от своего родителя. В этом случае родителем будет либо сама оболочка (порождающая вспомогательную оболочку), либо программа входа в систему (в типичной системе).
Поскольку среда каждого процесса защищена, нет возможности `` внедрить '' переменную среды в каждый запущенный процесс, поэтому даже если вы измените оболочку .rc / profile по умолчанию, она не вступит в силу, пока каждый процесс не выйдет и не перезагрузится. его начальные настройки.
Загляните в / etc /, чтобы изменить переменные запуска по умолчанию для любой конкретной оболочки. Просто поймите, что пользователи могут (и часто делают) изменять их в своих индивидуальных настройках.
Unix разработан, чтобы подчиняться пользователю в определенных пределах.
NB : Bash - не единственная оболочка в вашей системе. Обратите особое внимание на то, на что фактически указывает символическая ссылка / bin / sh. Во многих системах это может быть тире, что (по умолчанию, без специального вызова) ПРАВИЛЬНО. Поэтому вам следует позаботиться об изменении обоих значений по умолчанию, иначе сценарии, начинающиеся с / bin / sh, не будут наследовать ваши глобальные настройки по умолчанию. Точно так же старайтесь избегать синтаксиса, который понимает только bash при редактировании обоих, иначе говоря avoiding bashisms.
Ответы:
Помимо того,
/etc/profile
что уже упоминалось другими, некоторые системы Linux теперь используют каталог/etc/profile.d/
; любые.sh
файлы в нем будут получены от/etc/profile
. Немного аккуратнее хранить в этих файлах элементы пользовательской среды, чем просто редактировать/etc/profile
.источник
Если в вашей LinuxOS есть этот файл:
Вы можете использовать его для постоянной установки переменных окружения для всех пользователей.
Взято из: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
источник
мужчина 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 /… настроен таким образом).
источник
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:
Так что взгляните на
/etc/profile
или/etc/bash.bashrc
, эти файлы - правильное место для глобальных настроек. Поместите в них что-то вроде этого, чтобы настроить переменную окружения:источник
Использование PAM отлично.
источник
Каждый процесс, работающий под управлением ядра Linux, получает свою собственную уникальную среду, которую он наследует от своего родителя. В этом случае родителем будет либо сама оболочка (порождающая вспомогательную оболочку), либо программа входа в систему (в типичной системе).
Поскольку среда каждого процесса защищена, нет возможности `` внедрить '' переменную среды в каждый запущенный процесс, поэтому даже если вы измените оболочку .rc / profile по умолчанию, она не вступит в силу, пока каждый процесс не выйдет и не перезагрузится. его начальные настройки.
Загляните в / etc /, чтобы изменить переменные запуска по умолчанию для любой конкретной оболочки. Просто поймите, что пользователи могут (и часто делают) изменять их в своих индивидуальных настройках.
Unix разработан, чтобы подчиняться пользователю в определенных пределах.
NB : Bash - не единственная оболочка в вашей системе. Обратите особое внимание на то, на что фактически указывает символическая ссылка / bin / sh. Во многих системах это может быть тире, что (по умолчанию, без специального вызова) ПРАВИЛЬНО. Поэтому вам следует позаботиться об изменении обоих значений по умолчанию, иначе сценарии, начинающиеся с / bin / sh, не будут наследовать ваши глобальные настройки по умолчанию. Точно так же старайтесь избегать синтаксиса, который понимает только bash при редактировании обоих, иначе говоря
avoiding bashisms
.источник