Оболочка входа в систему – это первый процесс, который выполняется с вашим идентификатором пользователя при входе в интерактивный сеанс.
На первый взгляд это может показаться простым, но если копнуть глубже, это может немного запутать. Чтобы понять это, давайте посмотрим еще раз на процесс входа в систему в системах Linux.
Linux – это многопользовательская система, в которой несколько пользователей могут войти в систему и использовать ее одновременно.
Первый процесс в системе Linux, будь то init или systemd, запускает программу getty. Getty, сокращение от get tty (tty обозначает физические или виртуальные терминалы), отвечает за защиту системы от несанкционированного доступа.
Когда вы пытаетесь подключиться к системе Linux либо напрямую (если у вас есть сервер, установленный в системе локально), либо через SSH (если у вас есть сервер в удаленном месте), getty предлагает (через программу входа в систему) ввести ваше имя пользователя. а при вводе имени пользователя запрашивается пароль.
Ваши записи сверяются с информацией, хранящейся в файле /etc/passwd. Записи в файле /etc/passwd содержат некоторую информацию, такую как имя пользователя, идентификатор пользователя, домашний каталог и первую программу, которая должна быть запущена после успешного входа в систему.
В этом поле могут быть и другие значения. Например, sshd – это системный пользователь, а не настоящий пользователь, и он не может войти в систему в интерактивном режиме, как обычный пользователь, такой как abhishek.
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
Если в столбце первой программы/журнала в оболочке нет записи, по умолчанию используется /bin/sh, то есть стандартная оболочка.
Оболочка входа и оболочка без входа
Хорошо, вы вошли в систему и знаете, что это оболочка входа. Но что это значит? Есть ли и другие снаряды? Где они?
В Linux, когда вы запускаете сценарий оболочки, он запускается в своей собственной оболочке (неинтерактивной оболочке). Вы можете запустить новую оболочку из текущей оболочки (интерактивной оболочки).
С технической точки зрения это подоболочка, но об этом позже. Давайте пока сосредоточимся на оболочке входа в систему.
Профиль и файлы RC для оболочки
Оболочка входа в систему считывает переменную среды и другую конфигурацию из /etc/profile и файла профиля в домашнем каталоге. Это позволяет вам иметь завершение табуляции, цветной вывод и устанавливать другие вещи, такие как umask и т. д.
Вы, наверное, знаете, что для систем Linux доступно более одной оболочки . В большинстве дистрибутивов Linux по умолчанию используется оболочка bash, но вы можете установить другую оболочку, например zsh или Fish.
Если ваша оболочка входа в систему – bash, она читает из файлов /etc/profile и ~/.bash_profile. Если ваша оболочка входа – zsh, она читает из /etc/zprofile и ~/.zprofile.
Файлы в каталоге /etc задают соответствующую конфигурацию оболочки для всех пользователей системы. Обычно это настраивает системный администратор.
Очевидно, что файлы в домашнем каталоге пользователя зависят от пользователя. Это позволяет пользователям создавать псевдонимы для часто используемых команд или использовать пользовательскую переменную PATH для программы.
Оболочки без входа в систему происходят из оболочки входа в систему и, следовательно, получают всю среду, установленную оболочкой входа в систему, через файлы профиля. В дополнение к этому, интерактивная оболочка, не входящая в систему, может определять свои собственные переменные среды через файлы rc (конфигурации ресурсов) в /etc или домашнем каталоге.
Для оболочки bash это обычно файлы /etc/bash.bashrc и ~/.bash_rc, а для оболочки zsh это /etc/zshrc и ~/.zshrc.
Обратите внимание, как приглашение оболочки меняет цвет на зеленый? Это потому, что он читает файл /etc/bash.bashrc, а Ubuntu поместила в этот файл дополнительные параметры. Цветная подсказка – одна из них.
Подвести итоги:
- Файлы профиля предназначены для интерактивных оболочек входа. Файлы rc предназначены для интерактивных оболочек без входа в систему.
- Сначала выполняются файлы в каталоге /etc, а затем файлы в домашнем каталоге.
- Интерактивные оболочки без входа в систему выигрывают от файлов профиля и rc.
Как узнать, что вы находитесь в оболочке входа в систему?
На самом деле это очень просто, по крайней мере, для оболочки bash. Для оболочки входа имя исполняемого файла оболочки начинается с -. Для оболочки без входа в систему это просто имя оболочки.
Вы ведь умеете проверять оболочку? Вы проверяете значение аргумента 0.
Я попытался объяснить здесь оболочку входа. Однако, если вы никогда не задумывались об этих вещах, это может оставить некоторые вопросы без ответа. Не стесняйтесь спрашивать об этом в комментариях, и я постараюсь на них ответить.
Если вы опытный пользователь, читающий это, и обнаружите, что что-то технически некорректно или отсутствует какой-то важный момент, сообщите мне об этом в комментариях.