Что такое оболочки входа и входа без входа -?

Говорят, что настройки для оболочки без входа в систему должны быть в файле .bashrc , а настройки оболочки для входа в систему — в файле .profile .

Что на самом деле подразумевается под оболочками входа и входа без -?

Пожалуйста, объясните, не используя технический жаргон, насколько это возможно.

78
06.27.2012, 08:54
2 ответа

Проще говоря :

  • Если вы открываете оболочку или терминал (или переключаетесь на один ), и он просит вас войти в систему (Имя пользователя? Пароль? )до того, как появится приглашение, это оболочка входа в систему.
  • Если не нравится (gnome -терминал ), и позволяет сразу же использовать его, это оболочка входа без -.

Если вы обычный пользователь Ubuntu Desktop, единственная оболочка входа в систему — это... ваш рабочий стол (вы вводите пароль для входа, правильно; )? Ну, технически это оболочка входа в систему, которая запускает графический интерфейс, но это слишком жаргонно. И да, он прочитает настройки в .profile

Единственный раз, когда вы (обычный пользователь ), вероятно, увидите оболочку входа в систему, которая выглядит как оболочка входа, если у вас возникли проблемы с рабочим столом и вы переключились на виртуальный терминал с Ctrl + Alt + F1 сочетание клавиш.


Другие общие случаи наличия оболочки входа включают :

  • удаленный доступ к вашему компьютеру через ssh(или локальное соединение с ssh localhost)
  • имитация начальной оболочки входа в систему с помощью bash -l(или sh -l)
  • имитация начальной rootоболочки входа в систему с помощью sudo -i
    • или sudo -u username -iдля другого не -rootпользователь
  • аутентификация как другого не -rootпользователь с su - usernameих пароль )
  • с помощью команды sudo loginдля переключения пользователя
95
11.22.2019, 22:19
  • 1
    Если я запускаю Eclipse IDE с терминала, он открывается, как и ожидалось, но если я попытаюсь открыть его, щелкнув значок Eclipse, он не сможет распознать местоположение Java (, если иное PATH для Java не установлено в файле.profile ). ]. Это означает, что при нажатии на значок Eclipse требуется оболочка для входа в систему, почему? –  DUKE 06.26.2012, 11:45
  • 2
    @DUKE, нет, это означает, что переменные среды должны быть установлены *по-разному *, когда вы используете рабочий стол / графический интерфейс, по сравнению с истинной командной -строкой -только консольной системой. Поместите свой PATH и т. д. в среду `~/.pam _`(. только переменные, там нет команд bash! ), выйдите из системы, войдите в систему и наблюдайте, как все волшебным образом появляется на рабочем столе, а также в терминале gnome -! –  Community 06.26.2012, 11:49
  • 3
    Вход через ssh не вызывает оболочку входа. Он не загружает `/etc/profile `, `/etc/profile.d `или `~/.profile `. –  xuhdev 07.18.2014, 23:17
  • 4
    См. [этот вопрос] (http://superuser.com/questions/564926/profile-is-not-loaded-when-using-ssh-ubuntu). –  xuhdev 07.18.2014, 23:29
  • 5
    @xuhdev Вход через ssh вызывает оболочку входа и загружает профиль /etc/profile, /etc/profile.d и ~/.bash _. –  MichaelZ 04.15.2015, 14:04
  • 6
    @MichaelZ См. [здесь] (http://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man), может быть, вы загрузили эти файлы где-то в `bashrc `? –  xuhdev 04.15.2015, 18:43
  • 7
    @izx Пожалуйста, объясните мне разницу между вашим ответом и тем, что ZyX утверждает, что его ответ правильный. –  rancho 06.22.2016, 21:30
  • 8
    Я только что открыл свой терминал на своем Mac. Он не запрашивает у меня логин. Основываясь на том, что вы сказали _Если он (не похож на терминал gnome -)и позволяет вам сразу его использовать, это не -оболочка входа в систему _, я думаю, что это не -оболочка входа в систему. Затем, когда я пытаюсь использовать этот `shopt -q login _shell && echo 'login' || echo 'not -login' `говорит мне, что я нахожусь в оболочке входа. Не могли бы вы уточнить, какой именно? –  Honey 01.29.2021, 20:15

Не думаю, что правильный ответ можно дать без «технического жаргона». Поскольку этот вопрос является первым, который появляется в Google по запросу «что такое оболочка входа в систему», я привожу более правильный ответ ниже :

Оболочка входа — это просто оболочка, которая была указана как оболочка входа. Это не означает оболочку, которая появляется после входа в систему, хотя обычно приложение, которое регистрирует вас, сообщает оболочке, что она запускается как оболочка входа. Существуют следующие способы сообщить оболочке, что она должна быть логином :

  1. Запуск оболочки с аргументом -lили --loginпри условии, что она знает его (Я не знаю ни одной оболочки, которая не знает -l, но --loginподдерживается только несколькими оболочками ).
  2. Запуск оболочки с argv[0], установленным на -{some_string}(то есть с HYPHEN -MINUS перед обычной argv[0]или какой-либо другой строкой ). Это то, что делают ssh и su :su просто запускает исполняемый файл с -suкак argv[0](привет всем, кто думает, что argv[0]как-то связан с текущим исполняемым файлом с именем ), ssh запускает zsh с -zsh, когда пользователь установил /bin/zshв качестве своей оболочки.

Логичность оболочки не имеет абсолютно никакого отношения к тому, что кто-то спрашивает у вас пароль или выполняет какую-либо другую процедуру аутентификации. Некоторые программы, такие как ssh или login (, или некоторые эмуляторы терминалов, такие как urxvt ), запускают оболочки как логин, используя argv[0], который начинается с ДЕФИС -МИНУС. Некоторые, такие как su или sudo (или zsh :, см. -модификатор предварительной команды, описанный в разделе МОДИФИКАТОРЫ ПРЕДКОМАНД в man zshmisc)не делайте этого по умолчанию, но можно так сказать. У некоторых есть единственная возможность сообщить оболочке, что она является логином, используя ее аргумент (, т.е. bash -l):ssh с аргументом команды (, который явно указывает ssh, что запускать на удаленном конце ).

Как правило, лучше сначала ознакомиться с документацией программы, используемой для вызова оболочки, чтобы определить, будет ли оболочка использоваться для входа в систему, а затем выполнить некоторые тесты, чтобы определить, будет ли приложение запускать оболочку входа (, например. добавив echoк .profile).

11
11.22.2019, 22:19
  • 1
    Меня интересует второй вариант :, как я могу изменить argv[0] до (или после )вызова bash? Можно ли это сделать из командной строки? –  VeryHardCoder 03.23.2016, 09:44
  • 2
    @VeryHardCoder Это зависит от приложения, которое вы используете для запуска команды. В коде C это делается путем прямой передачи `argv[0] `одной из функций `exec *`, что естественно и неизбежно :вы *всегда *поставляете *оба *`argv[0] `и путь к команде, которая фактически запускается при использовании функций `exec *`, даже если вы никогда не хотите, чтобы `argv[0] `отличались от запуска команды. Другие языки предоставляют свои собственные способы. В частности, bash позволяет использовать `exec -новый _argv0 bash `, но это, конечно, заменит текущую оболочку тем, что вы `exec `ввели, поэтому вам может понадобиться использовать подоболочку (`(exec -a -zsh zsh )`) –  ZyX 03.23.2016, 17:47
  • 3
    Хорошо понял! На самом деле это можно было бы сделать и проще :(exec -l bash )... –  VeryHardCoder 03.24.2016, 14:08
  • 4
    В чем функциональное различие между ними? Это просто логический флаг? –  Community 10.09.2016, 13:00
  • 5
    @Alexey Основное *функциональное *отличие состоит в наборе конфигурационных файлов, используемых при запуске. `$0 `, и, возможно, еще что-то (переменная, настройка и т. д. )устанавливается так, чтобы логичность оболочки могла быть обнаружена в конфигурационном файле, но кто потрудится на самом деле обнаружить это, так что это будет какая разница? Это все, что я знаю. –  ZyX 10.09.2016, 20:07

Теги

Похожие вопросы