Последовательность скриптов, полученных при входе в систему

41

Я хотел бы сосредоточить все свои настройки входа в систему в моем ~/.bash_profile. Там было ~/.bashrcпо умолчанию, но я заменил его на ~/.bash_profile.

Тем не менее, когда я вхожу в систему, что-то, прежде чем мой ~/.bash_profileполучает источник и отображает следующее:

Linux ubnt10-dev1 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to the Ubuntu Server!
 * Documentation:  http://www.ubuntu.com/server/doc

  System information as of Fri May  9 12:17:39 EDT 2014

  System load:  0.01              Processes:           74
  Usage of /:   5.5% of 18.58GB   Users logged in:     0
  Memory usage: 4%                IP address for eth0: 123.x.x.x
  Swap usage:   0%

  Graph this data and manage this system at https://landscape.canonical.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri May  9 12:11:52 2014 from 123.x.x.x

Я хотел бы удалить это, чтобы ~/.bash_profileотображалось только мое собственное приветствие, определенное в моих запросах на получение, но я не уверен в логике / последовательности сценариев, которые были получены / выполнены при входе пользователя. Можете ли вы просветить меня?

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

amphibient
источник

Ответы:

53

Это довольно сложно. Прежде всего, детали зависят от того, какую оболочку вы используете. Чтобы плагиат себя :

  • Когда вы открываете эмулятор терминала ( 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что означает, что вы используете интерактивную оболочку входа в систему , о том, что это значит, см. Выше. Итак, вкратце, вещи, которые вас интересуют, получены при входе в систему (и в следующем порядке):

  1. Демон SSH через pam_motdмодуль библиотеки PAM отображает содержимое /etc/motd. С помощью pam_envмодуля он устанавливает переменные окружения из /etc/environmentи ~/.pam_environment.
  2. Запускается оболочка входа в систему, и следующие файлы читаются по порядку:
    1. /etc/profile
    2. /etc/bash.bashrc( /etc/profileисходные коды Ubuntu по умолчанию /etc/bash.bashrc).
    3. ~/.bash_profile, Другие файлы, которые могли быть прочитаны здесь ( ~/.profileи ~/.bash_login), игнорируются, поскольку ~/.bash_profileсуществуют.
Тердон
источник
5
Хорошая уловка для самостоятельного обнаружения этих вещей заключается в размещении дозорных переменных. Я имею в виду, я ставлю 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
Rmano
1
поэтому, когда вы ssh, это будет интерактивная оболочка, правильно?
амфибия
@amphibient интерактивная оболочка для входа, да. Когда вы открываете терминал на локальной машине, это интерактивная оболочка без входа в систему.
Тердон
@Rmano Я проголосовал за ваши комментарии. Но через несколько секунд обнаруженный порядок в envРоссии никак не связан с порядком исполнения.
Penghe Geng
2
@ xiaobai, конечно, нет, дело в том, что SET_INвы увидите, какие файлы были прочитаны, а не в каком порядке они были прочитаны. Порядок стандартный, это то, что показано в выдержках из справочной страницы, которые я имею в своем ответе.
Terdon
1

Информация, которую вы видите, когда вы входите через ssh, создается еще до того, как / etc / profile даже просматривается. Посмотрите на последовательность файлов в /etc/update-motd.d. Это покажет вам, где сообщения, которые вы видите, генерируются различными сценариями.

Reese
источник
1
Это уже описано в верхнем ответе, но я ценю вашу краткость. +1 :)
wjandrea