22

Я понимаю, что первый загружается до второго, но в чем заключается концептуальная разница? Есть ли веские причины, по которым я должен устанавливать некоторые переменные в одной, а не в другой? За исключением того факта, что /etc/environment кажется, существует для настройки среды для всех процессов, выполняемых системой, в то время как /etc/profile предназначен для настройки среды, используемой и распространяемой из оболочки входа, правильно?

Также, на заметку, какая программа традиционно читает /etc/environment? Это связано с POSIX или просто соглашением?

2 ответа2

32

/etc/environment не является частью POSIX, он принадлежит PAM (Pluggable Authentication Module), и его могут использовать только программы, скомпилированные с поддержкой PAM (в первую очередь системы входа в систему, которые впоследствии запускают оболочку или пользовательскую среду). Это означает, что он даже не читается вашей оболочкой.

Вы можете увидеть программы, использующие /etc/environment с grep -l pam_env /etc/pam.d/* .

Поэтому /etc/environment используется для установки переменных для программ, которые обычно не запускаются из оболочки.

8

Извлечение из справки Ubuntu

/etc/environment - этот файл специально предназначен для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. В частности, этот файл хранит общесистемные настройки языка и пути.

/etc/profile - Этот файл запускается при каждом входе в оболочку входа в bash (например, при входе через консоль или через ssh), а также в DisplayManager при загрузке сеанса рабочего стола.

Я думаю, что все это просто соглашение, но недалеко от стандарта (я не знаю о системах, подобных RedHat).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .