Ответы:
Если вы обычный пользователь Ubuntu Desktop, единственная оболочка для входа - это ... ваш рабочий стол (вы вводите пароль для входа, верно;)? Ну, технически это оболочка входа в систему, которая запускает графический интерфейс, но это входит в жаргон. И да, он будет читать настройки в.profile
Единственный раз , когда вы (обычный пользователь), вероятно , увидит оболочку входа в системе, которая выглядит как шелл, если у вас возникли какие - то проблемы с рабочим столом , и вы переключитесь на виртуальный терминал с Ctrl+ Alt+ F1ярлыком.
ssh(или локальное соединение с ssh localhost)bash -l(или sh -l)rootоболочки входа сsudo -i
sudo -u username -irootrootпользователь с (и их паролем)su - usernamesudo loginкоманду для переключения пользователя~/.pam_environment(только переменные, никаких команд bash!), Выйдите из системы, войдите в систему и наблюдайте, как все волшебным образом появляется на рабочем столе и в gnome-терминале!
/etc/profile, /etc/profile.dили ~/.profile.
Я не думаю, что правильный ответ можно дать без «технического жаргона». Так как этот вопрос является первым, который появляется в Google по запросу «что такое оболочка входа в систему», я даю более правильный ответ ниже:
Оболочка входа - это просто оболочка, которая называется оболочкой входа. Это не означает, что оболочка появляется после входа в систему, хотя обычно приложение, которое регистрирует вас, сообщает, что запускается как оболочка входа. Существуют следующие способы сказать оболочке, что она должна быть логиновой:
-lили --loginаргументом в предположении, что он это знает (я не знаю оболочек, которые не знают -l, но --loginподдерживаются только несколькими оболочками).argv[0]установленным на -{some_string}(то есть с HYPHEN-MINUS, добавленным к обычному argv[0]или к какой-либо другой строке). Это то, что делают ssh и su: su просто запускает исполняемый файл с -suas argv[0](привет всем, кто думает argv[0], что имеет какое-то отношение к исполняемому в настоящее время имени исполняемого файла), ssh запускает zsh, -zshкогда пользователь установил в /bin/zshкачестве своей оболочки.Логичность оболочки не имеет абсолютно никакого отношения к тому, кто спрашивает у вас пароль или выполняет какую-либо другую процедуру аутентификации. Некоторые программы, такие как ssh или login (или некоторые терминальные эмуляторы, такие как urxvt), запускают оболочки как логин, используя argv[0]которые начинаются с HYPHEN-MINUS. Некоторые, такие как su или sudo (или zsh: смотрите -модификатор precommand, описанный в разделе PRECOMMAND MODIFIERS in man zshmisc), не делают этого по умолчанию, но это можно сказать. У некоторых есть единственная возможность указать shell, чтобы он входил в систему, используя свой аргумент (то есть bash -l): ssh с аргументом команды (который явно указывает ssh, что запускать на удаленном конце).
Обычно лучше сначала обратиться к документации программы, используемой для вызова оболочки, чтобы определить, будет ли оболочка входом в систему, а затем выполнить несколько тестов, чтобы определить, будет ли приложение запускать оболочку входа (например, путем добавления echoв .profile).
argv[0]одному из exec*функций, естественных и неизбежных: вы всегда поставляете как argv[0] и путь командовать фактически выполняемый при использовании exec*функции, даже если вы никогда не хотите , argv[0]чтобы отличаться от команды запуска. Другие языки предоставляют свои собственные способы. В частности, bash позволяет использовать exec -a new_argv0 bash, но это, конечно, заменит текущую оболочку на то, что вы execредактировали, поэтому вам может понадобиться использовать subshell ( (exec -a -zsh zsh))
$0и, может быть, что-то еще (переменная, настройка и т. д.) установлено так, что логичность оболочки может быть обнаружена в файле конфигурации, но кто на самом деле беспокоится, обнаружив это, так что это будет иметь какое-то значение? Это все, что я знаю.