В документации по 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 различные наборы скриптов, которые выполняются при открытии этих видов оболочек.
Источники:
Связанные статьи:
- Скрипты, выполняемые при запуске Bash (69.6%)
- Как закрыть терминал без убийства запущенной в нём команды (54.4%)
- Как пользоваться screen для управления терминалами Linux и отсоединения процессов от терминала (54.4%)
- Как пользоваться tmux для создания нескольких терминалов внутри одной консоли (54.4%)
- Terminator: эмулятор терминала для управления несколькими окнами терминала на Linux (54.4%)
- Bluetooth при включении постоянно просит ввести пароль (РЕШЕНО) (RANDOM - 50%)