Это довольно сложно. Прежде всего, детали зависят от того, какую оболочку вы используете. Чтобы плагиат себя :
Когда вы открываете эмулятор терминала ( gnome-terminal
например), вы выполняете так называемую интерактивную оболочку , не входящую в систему .
Когда вы входите на свой компьютер из командной строки или запускаете такую команду, как su - username
, вы запускаете интерактивную оболочку входа в систему .
Когда вы входите в систему графически, вы запускаете что-то совершенно другое. Детали будут зависеть от вашей системы и графического окружения, но в целом, это графическая оболочка, которая обрабатывает ваш логин. Хотя многие графические оболочки (включая Ubuntu по умолчанию) будут читать, /etc/profile
но ~/.profile
не все из них читают .
Наконец, когда вы запускаете сценарий оболочки, он запускается в неинтерактивной оболочке без входа в систему .
Файлы, которые bash будет читать при запуске, зависят от типа оболочки, в которой он запущен. Ниже приведен отрывок из раздела ПРИЗНАНИЕ man bash
(выделено мной):
Когда bash вызывается как интерактивная оболочка входа в систему или как неинтерактивная оболочка с параметром --login, она сначала читает и выполняет команды из файла / etc / profile , если этот файл существует. После прочтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке , а также читает и выполняет команды из первой, которая существует и доступна для чтения. Опция --noprofile может использоваться, когда оболочка запущена, чтобы запретить это поведение.
Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему , bash читает и выполняет команды из /etc/bash.bashrc и ~ / .bashrc , если эти файлы существуют. Это может быть запрещено с помощью параметра --norc. Опция --rcfile file заставит bash читать и выполнять команды из файла вместо /etc/bash.bashrc и ~ / .bashrc.
Это файлы инициализации. У вас также есть место, /etc/environment
где вы можете установить глобальные переменные среды, но они читаются, а не исходные (команды внутри него не выполняются, а задаются определения переменных).
Теперь приветствие, которое вы видите, - это нечто другое. Это установлено /etc/motd
и отображается через pam_motd
. Как объяснено в man motd
:
Содержимое / etc / motd отображается pam_motd (8) после успешного входа в систему, но непосредственно перед запуском оболочки входа.
Аббревиатура «motd» означает «сообщение дня», и этот файл традиционно используется именно для этого (он требует гораздо меньше дискового пространства, чем почта для всех пользователей).
В Debian GNU / Linux также отображается содержимое /run/motd.dynamic. Этот файл генерируется /etc/init.d/motd при загрузке.
Чтобы удалить сообщение, просто очистите /etc/motd
файл и убедитесь, что ничего не генерируется, /etc/init.d/motd
если присутствует.
В любом случае, судя по выводу, который вы показываете, вы входите через него, ssh
что означает, что вы используете интерактивную оболочку входа в систему , о том, что это значит, см. Выше. Итак, вкратце, вещи, которые вас интересуют, получены при входе в систему (и в следующем порядке):
- Демон SSH через
pam_motd
модуль библиотеки PAM отображает содержимое /etc/motd
. С помощью pam_env
модуля он устанавливает переменные окружения из /etc/environment
и ~/.pam_environment
.
- Запускается оболочка входа в систему, и следующие файлы читаются по порядку:
/etc/profile
/etc/bash.bashrc
( /etc/profile
исходные коды Ubuntu по умолчанию /etc/bash.bashrc
).
~/.bash_profile
, Другие файлы, которые могли быть прочитаны здесь ( ~/.profile
и ~/.bash_login
), игнорируются, поскольку ~/.bash_profile
существуют.
export SET_IN_ETC_PROFILE=yes
в/etc/profile
,export SET_IN_HOME_ZSHRC=yes
в~/.zhshrc
(я пользователь ЗШ), и т.д ... Тогда перезагрузка и хорошийenv|grep SET_IN
расскажет вам всю историю. Чтобы увидеть, какие переменные видны настольным приложениям (те, которые вы запускаете из тире или из WM, без использования терминала), смотрите askubuntu.com/a/356973/16395