zaLinux.ru

Различия между Login shell и Non login shell (оболочка с входом и оболочка без входа)


В документации по Linux можно встретить термины Login shell и Non login shell. Понятно, что оба они относятся к оболочке, причём первый связан с входом пользователя в систему, а второй не связан с входом пользователя. По большому счёту название уже отражает их ключевые различия.

Далее мы узнаем чем различаются Login shell и Non login shell с технической точки зрения.

Программа оболочки, например Bash, использует набор скриптов выполняемых при её запуске для создания рабочего окружения. Каждый скрипт имеет определённую функцию и влияет на окружение входа по-разному. Каждый последующий выполняемый скрипт может перезаписать значения, присвоенные предыдущим скриптом.

Ключевое различие между Login shell и Non login shell заключается в настройке автозапуска этих скриптов.

1) Login shell (оболочка с входом)

Login shell (оболочка с входом) при запуске предлагает пользователю выполнить вход, после успешного входа пользователя продолжает работу используя /bin/login и считывая данные из файла /etc/passwd. Login shell — это первый процесс, который выполняется от ID нашего пользователя когда вы ходим в сессию. Этот процесс входа говорит оболочке вести себя как login shell и следовать конвенции: передать аргумент 0, который обычно является именем исполнимого файла оболочки, перед которым поставлен символ «-». Например, для оболочки Bash это будет -bash.

Когда вызывается Bash в качестве Login shell (оболочки входа), то происходит следующее:

→Процесс входа вызывает /etc/profile

/etc/profile вызывает скрипты в /etc/profile.d/

→Процесс входа вызывает ~/.bash_profile

~/.bash_profile вызывает ~/.bashrc

~/.bashrc вызывает /etc/bashrc

Login shells включают в себя следующие случаи.

• Оболочки создаются с явным указанием на вход. Примеры:

su -
su -l
su --login
su USERNAME -
su -l USERNAME
su --login USERNAME
sudo -i

• Оболочка создаётся при входе, включая X (графический) вход.

Оболочку входа можно распознать следующим путём. Выполните команду:


echo $0

Если в выводе будем имя оболочки, перед которой стоит тире, то значит это login shell. Примеры: -bash, -su и т.д.

2) Non login shell (оболочки без входа)

Оболочки без входа запускаются программами без необходимости выполнять вход. В этом случае программа просто передаёт имя исполнимого файла оболочки. Например, для оболочки Bash это будет просто bash.

Когда bash вызывается как Non login shell (оболочки без входа), то происходит следующее:

→Процесс без входа (оболочка) вызывает ~/.bashrc

~/.bashrc вызывает /etc/bashrc


/etc/bashrc вызывает скрипты в /etc/profile.d/

Non login shells включают в себя следующие случаи.

• Оболочки создаются с использованием показанного ниже синтаксиса команд. Например:

su
su USERNAME

• Графические терминалы

• Выполняемые скрипты

• Любые другие экземпляры bash

Non login shell (оболочка без входа) может быть распознана по следующей процедуре. Выполните приведённую ниже команду:

echo $0

Если вывод — это имя нашей оболочки перед которым не стоит дефис, значит это оболочка без входа. Например, это могут быть bash, su и т.д.

Вывод

Итак, если вы вводите учётные данные для входа, то значит перед вами Login shell. На настольных системах в оболочке входа запускается графическая система. Все последующие открываемые консоли являются Non login shell. Попасть в Login shell можно переключившись по CTRL+ALT+F*, либо подключившись по SSH, либо выполнив одну из приведённых выше команд.


Кроме различия в необходимости ввода логина и пароля, также в Login shell и Non login shell различные наборы скриптов, которые выполняются при открытии этих видов оболочек.

Источники:


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *