Ответы:
Если вы обычный пользователь 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
команду для переключения пользователя~/.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 просто запускает исполняемый файл с -su
as 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
и, может быть, что-то еще (переменная, настройка и т. д.) установлено так, что логичность оболочки может быть обнаружена в файле конфигурации, но кто на самом деле беспокоится, обнаружив это, так что это будет иметь какое-то значение? Это все, что я знаю.