ПОЧЕМУ оболочка ** login ** поверх оболочки ** non-login **?


24

У меня есть общее представление о файлах точек в * nix системе. Но я все еще довольно озадачен этой разницей между оболочкой входа и оболочкой без входа в систему?

Куча разных ответов (включая несколько дубликатов) уже адресована следующим пунктам:

  • Как вызвать на логин или нерегистрированная оболочки
  • Как обнаружить вход в систему или не входить в оболочку
  • Какие файлы запуска будут использоваться оболочкой для входа или не входа в систему
  • Ссылка на документацию (например, man bash) для более подробной информации

То, что ответы не сказали (и также кое-что, что я все еще смущен), является:

  • Каков вариант использования оболочки для входа или не входа в систему ? (например, я настроил только zshrcдля zshи этого достаточно для большинства личных требований разработчиков, я знаю, что это не так просто, как то, что vimrcнужно vim)

  • В чем причина использования входа в систему без оболочки (кроме использования разных файлов запуска и жизненных циклов)?

Ответы:


15

Идея состоит в том, что пользователь должен иметь (максимум) одну оболочку входа в систему на хост. (Возможно, я должен сказать, что одна оболочка входа в систему на узел на терминал - если вы одновременно входите в систему через несколько терминалов, вы ожидаете иметь несколько оболочек входа.) Обычно это (всегда?) Будет первая оболочка, которую вы получите при входе в систему (отсюда и название). Таким образом, эта схема позволяет вам указывать действия, которые вы хотите выполнять только один раз для каждого входа в систему, и вещи, которые вы хотите выполнять каждый раз, когда запускаете новую (интерактивную) оболочку.

Обычно любая другая оболочка, которую вы запускаете после входа в систему, является потомком (потомком потомка потомка…) оболочки входа в систему и, следовательно, наследует многие параметры (переменные среды umaskи т. Д.) Из оболочки входа. И, соответственно, идея состоит в том , что файлы инициализации Логин ( .login, .profileи т.д.) необходимо установить параметры , которые являются наследуемыми, и пусть .bashrc(или то , что вы используете) обрабатывать те, которые не являются ( set, shopt, неэкспортированной переменные оболочки , так далее.)

Другое понятие состоит в том, что файлы инициализации входа в систему (и только они) должны выполнять «тяжелую работу», то есть ресурсоемкие действия. Например, вы можете захотеть, чтобы определенные процессы выполнялись в фоновом режиме при каждом входе в систему (но только одна их копия (экземпляр)). Возможно, вы захотите, чтобы некоторая информация о состоянии (например, dfили who) отображалась при входе в систему, но не каждый раз при запуске новой интерактивной оболочки. Особенно если у вас есть интерактивныйПрограмма / диалог (т. е. та, которая требует ввода от вас), которую вы хотите запускать при каждом входе в систему, вы, вероятно, не хотите запускать ее каждый раз, когда запускаете новую оболочку. В качестве крайнего примера, двадцать лет назад Solaris зарегистрировал вас в единственной неграфической оболочке без окон. (Я считаю, что с тех пор все изменилось.) Это была задача .loginили .profile(или что-то еще) запустить систему управления окнами с помощью команды вроде startx. (Это было полезно отчасти потому, что было доступно несколько оконных систем. У разных пользователей были разные предпочтения. Некоторые пользователи использовали разные системы в разных ситуациях, и у нас был диалог, в .profileкотором спрашивалось «Какую оконную систему вы хотите использовать сегодня?») Очевидно, вы не хотели бы, чтобы это запускалось каждый раз, когда вы открываете новое окно или набираетеsh,

Прошло много лет с тех пор, как я использовал что-то другое, bash кроме крайних случаев. (Например, я пишу сценарии с #!/bin/sh, поэтому в некоторых системах мои сценарии запускаются dash, а в других - bashв режиме POSIX. Несколько раз в год я запускаю csh/ tcshв течение нескольких минут, чтобы посмотреть, как он что-то обрабатывает, или ответьте на вопрос.) Если вы используете несколько оболочек (например, bashи zsh) ежедневно, ваши схемы могут отличаться. Если ваша основная оболочка (как определено в /etc/passwd) есть bash, вы можете вызвать zshоболочку входа в систему, а затем, возможно, вызвать некоторые интерактивные zshоболочки без входа в систему, подчиненные этому. Вам, вероятно, следует избегать использования оболочки входа, которая подчиняется другой оболочке входа того же типа.

Как упомянуто в Разнице между Оболочкой входа в систему и Оболочкой не входа в систему? приложение терминала OS X запускает оболочку входа в систему, поэтому у обычного пользователя обычно будет несколько «оболочек входа», работающих одновременно. Эта модель несколько отличается от той, которую я описал выше, и может потребовать от пользователя переосмыслить то, что он делает в своей .loginили.profile(или любой другой) файл. Я не знаю, документировали ли разработчики OS X свое обоснование этого дизайнерского решения. Но я могу представить ситуацию, в которой это было бы полезно. Было время, когда я обычно открывал несколько окон оболочки, когда входил в систему, и я устанавливал для них разные цвета текста и фона (записывая escape-последовательности ANSI на экран), чтобы помочь мне отслеживать, какие именно. Терминальные цвета являются примером того, что не наследуется дочерними элементами, но сохраняется в окне. Так что это то, что вы хотели бы делать каждый раз, когда вы запускаете новое окно терминала, но не каждый раз, когда вы запускаете новую интерактивную оболочку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.