В списке текущих процессов, который вы видели по команде ps -e
Ядро монтирует корневую файловую систему в режиме «только чтение», находит исполняемый файл демона init
(в каталоге/bin, /sbin или там, где вы укажете, передав ядру параметр init=/путь_к_init) и посредством системного вызова Ядро покорно запустит в качестве первопроцесса любую программу, которую вы укажете ему как init
:LILO: my_linux init=/bin/sh
Конечно, оболочка sh
не запустит других процессов, но она предоставит вам интерфейс командной строки, в которой вы сможете выполнить необходимые ремонтные работы.Процесс init
прочитывает свой конфигурационный файл/etc/inittab и запускает другие процессы согласно указанным в нем инструкциям. В этот момент выводится приглашение нажать определенную клавишу (обычно ), чтобы войти в интерактивный режим, позволяющий запускать каждый процесс вручную или отказываться от такого запуска.Уровень выполнения (
who -r. Она покажет также значение предыдущего уровня).Разрешенные на каждом уровне процессы указаны в файле /etc/inittab
♦ семь уровней выполнения, обозначаемых номерами с 0 до 6;
♦ особый уровень S или s — однопользовательский;
♦ уровни по требованию (
Термин «уровень выполнения» унаследован от тех времен, когда система была обязана проходить уровни последовательно, от низшего к высшему при загрузке и обратно при выключении. Сейчас их можно переключать в любом порядке. Для переключения на уровень n нужно от имени суперпользователя ввести команду
# telinit n
Эта команда посылает соответствующий сигнал процессу init
(/sbin/init, так что вместо нее можно отдавать просто команду init. При этом не будет запущена копия процесса init: стартующий процесс первым делом проверяет свой PID и, если тот не равен 1, просто передает сообщение настоящему процессу init.Запустив все процессы, приписанные к текущему уровню выполнения, init засыпает до получения сигнала о завершении дочернего процесса, отключении питания или требовании переключить уровень. Тогда он просыпается, перечитывает свой конфигурационный файл и, если нужно, выполняет записанные в нем инструкции. Чтобы заставить его перечитать измененный вами /etc/inittab
# telinit q
Важно понять, что уровень выполнения — это программная абстракция, аппаратура ни о каких уровнях не знает. Поэтому в разных реализациях Linux (разных дистрибутивах) одному уровню могут соответствовать разные конфигурации системы. Следующие уровни используются в дистрибутивах, основанных на Red Hat:
♦ 0: Останов системы.
♦ 1: Однопользовательский режим. То же, что уровень S.
♦ 2: Многопользовательский режим без поддержки сети.
♦ 3: Полный многопользовательский режим.
♦ 4: Не используется.
♦ 5: Графический режим с X11.
♦ 6: Перезагрузка.
В однопользовательском режиме никакие службы не стартуют: только грузится ядро, монтируется корневая файловая система и запускается командный интерпретатор. На этом уровне не нужен даже файл /etc/inittab
Неиспользуемые уровни можно занять под свою собственную конфигурацию служб, собранных для конкретной задачи.