Глава 7 Запуск и завершение работы Linux 7.1. Введение

Существует множество способов запуска и остановки системы Linux. Также не
стоит забывать о сценариях инициализации, управляющих запуском различных
процессов, и о различных уровнях выполнения системы (runlevels), в каждом
из которых может работать свой набор процессов. Выполните следующую ко манду:
$ ps axfl
Найдите процесс с номером 1 (вывод сокращен, в вашей системе выходные
данные команды будут содержать больше столбцов и строк):
UID PID PPID STAT TTY TIME COMMAND
О 1 О S ? 0:03 init
Это init, предок всех процессов в системе Linux. Обратите внимание: иденти фикатор родительского процеса PPJD (Parent Process ID) равен 0, потому что init
является первым процессом, стартующим после запуска ядра.
Процесс загрузки Linux проходит примерно так:
1. BIOS инициализирует оборудование и читает загрузочный сектор.
2. Главная загрузочная запись (MBR, Master Boot Record) запускает загрузчик
операционной системы, который передает управление ядру.
3. Ядро инициализирует периферийные устройства, загружает драйверы, мон тирует корневую файловую систему и вызывает/sbin/init.
4. Программа /sbin/init запускает все процессы пользовательского уровня. Она
читает/etc/inittab и переходит к активизации дополнительных сценариев, ука занных в /etc/inittab.
5. Дальнейшие действия зависят от дистрибутива. В Debian следующим выпол няется сценарий /etc/init.d/rcS, который передает управление в каталог/etc/
rc*.d, указанный в /etc/inittab. По умолчанию Debian работает на уровне 2,
поэтому выполняются все сценарии из каталога /etc/rc2.d (запуск в стиле
SysV).
В Red Hat следующим выполняется сценарий /etc/rc.d/rc.sysinit, а затем сце нарии из каталога, соответствующего уровню выполнения (обычно /etc/rc3.d или
/etc/rc5.d).
Процедура запуска в Slackware ближе к процедуре запуска BSD: в системе име ется один каталог /etc/red, в котором находится сценарий init для каждого уров ня выполнения. Впрочем, в ней также присутствуют некоторые аспекты SysV.
В системах Red Hat и Debian каталоги /etc/rc*.d содержат не стартовые сцена рии, а символические ссылки на сценарии в /etc/init.d. Создание ссылок на основ ной каталог сценариев/etc/init.d предотвращает излишнее дублирование. Кроме
того, имена ссылок определяют способ запуска слуисб. Для примера возьмем запись
$ Is -go S20cupsys
lrwxrwxrwx 1 16 Sep 9 17:51 S20cupsys -> . ./init.d/cupsys
Префикс S20 означает, что служба cupsys должна запускаться с приоритетом 20.
Чем ниже значение, тем выше приоритет. Запись K20cupsys означает, что служба
должна быть «убита» (что поделаешь, мир Linux жесток). Этот простой механизм
гарантирует, что службы запускаются и останавливаются так, как вам потребует ся, и в правильном порядке.
Уровни выполнения
Стандартная схема уровней выполнения Linux:
О 0 — остановка;
О 1 — однопользовательский режим;
О 2-5 — многопользовательский режим;
О 6 — перезагрузка.
Уровни выполнения в дистрибутивах Debian:
О 0 — остановка;
О 1 — однопользовательский режим;
О 2-5 — многопользовательский режим;
О 6 — перезагрузка.
Уровни выполнения в дистрибутивах Red Hat:
О 0 — остановка;
О 1 — однопользовательский текстовый режим;
О 2 — не используется (определяется пользователем);
О 3 — многопользовательский текстовый режим;
О 4 — не используется (определяется пользователем);
О 5 — многопользовательский графический режим;
О 6 — перезагрузка.
Уровни выполнения в дистрибутивах Slackware:
О 0 — остановка;
О 1 — однопользовательский режим;
О 2 — не используется (то же, что 3);
О 3 — многопользовательский текстовый режим;
О 4 — многопользовательский графический режим;
О 5 — не используется (то же, что 3);
О 6 — перезагрузка.
В других дистрибутивах могут существовать другие варианты. Уровни 7-9 те оретически существуют, но на практике не используются. Чтобы понять, что про исходит на каждом уровне, достаточно прочитать каталоги rc*.d.