Листинг 3.2. Файл настройки программы inittab
#
# inittab This file describes how the INIT process
# should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg,
# <miquels@drinkel.nl.mugnet.org>
# Modified for RHS Linux by Marc Ewing and
# Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not
# have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
# id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
# What to do in single-user mode.
~~:S:wait:/sbin/sulogin
10:0:wait:/etc/rc.d/rc 0
11:1:rwait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
# Things to run in every runlevel.
ud::once:/sbin/update
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed,
# assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed
# and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in,
# cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/X11/prefdm -nodaemon
Файл начинается с комментария, в котором дана информация о модуле и авторе, затем - описание различных уровней, которые поддерживаются системой. В некоторых дистрибутивах их может быть от двух, a Red Hat Linux-подобные системы поддерживают целых семь. Рассмотрим каждый уровень:
□ 0 - остановка ОС;
□ 1 - текстовый однопользовательский режим, используется редко и только администраторами для выполнения критически важных изменений;
□ 2 - текстовый многопользовательский, локальный режим (нет поддержки сети);
□ 3 - текстовый многопользовательский, сетевой режим;
□ 4 - не используется, но в дальнейшем может быть задействован;
□ 5 - графический режим;
□ 6 - перезагрузка системы.
Пока что мы рассмотрели семь уровней. Есть еще уровень S, что соответствует однопользовательскому режиму, он применяется в файлах сценариев, но иногда присутствует и в inittab.
Теперь познакомимся со структурой файла. Каждая строка в нем (не считая комментариев и пустых строк) выглядит следующим образом:
идентификатор:уровни:флаги:действие
Строка состоит на четырех аргументов, отделенных между собой двоеточием. Давайте рассмотрим каждый параметр в отдельности:
□ идентификатор - уникальный номер строки, который имеет произвольное значение. Единственное ограничение - в файле не должно быть двух строк с одинаковыми идентификаторами;
□ уровни - режимы, в которых будет выполняться команда. Например, если ей надлежит работать на втором и третьем уровнях, то здесь должно стоять число 23. Это просто цифры 2 и 3, которые не разделяются пробелами или какими-либо другими знаками. Если команду нужно выполнять на любом уровне, то этот параметр должен быть пустым;
□ флаги - задает поведение команды, может принимать одно из следующих значений:
• boot - выполняется только один раз при загрузке ОС. В этом случае параметр уровни просто игнорируется;
• bootwait - равносильно указанию параметров boot и wait одновременно, т.е. выполнение должно быть во время загрузки ОС, и при этом нужно дождаться завершения операции;
• ctrlaltdel - нажата комбинация клавиш <Ctrl>+<Alt>+<Del>. Случайных или незапланированных перезагрузок быть не должно. Наличие трех клавиш - это недостаток, потому что любой хакер может подойти и нажать их ради шутки или в корыстных целях. Я рекомендую отключить эту возможность, установив в начале строки знак комментария "#";
• initdefault - строка с этим параметром читается только при первом обращении к init и определяет уровень загрузки. Если в этой строке будет стоять число 5, то ОС будет сразу в графический режим. Если вам нужно загрузить ОС в текстовый, многопользовательский режим с поддержкой сети, то измените значение параметра на цифру 3 (см. описание уровней загрузки). Можно указать несколько чисел (я не рекомендую этого делать), в этом случае будет выбрано максимальное;
• off - отключить выполнение команды, что равноценно превращению строки в комментарий или даже удалению. Но если этот процесс уже работает, то ему передается сигнал, требующий завершения программы;
• once - выполнять команду только один раз;
• powerfail - отключение электроэнергии. Ошибку можно увидеть только при наличии источника бесперебойного питания, подключенного к компьютеру через специальный интерфейс (чаще всего через СОМ-порт);
• powerokwait - подача электроэнергии возобновилась;
• powerwait - система перешла в режим ожидания восстановления питания. Предполагается, что к компьютеру подключен источник бесперебойного питания, который сообщил об ошибке (отсутствии питания);
• respawn - если во время выполнения произойдет ошибка, то повторить команду. Это бывает необходимо для критически важных программ, которые должны быть всегда в запущенном состоянии;
• sysinit - такие команды выполняются перед тем, как появится консоль (приглашение ввести пароль). При этом ОС дожидается окончания выполнения команды;
• wait - ожидать завершения процесса, а значит, программа init не будет выполнять других действий, пока не закончится выполнение команды, указанной в этой строке. Например, если нужно проверить состояние диска, то необходимо заморозить дальнейшую загрузку до окончания проверки;
□ Действие - команда, которая должна быть выполнена.
Теперь рассмотрим некоторые строки из листинга 3.2, чтобы понять их смысл и научиться управлять ими для повышения эффективности системы.
Самая первая строка после комментариев в нашем файле выглядит так:
id:5:initdefault:
Мы уже знаем, что параметр initdefault определяет, как будет загружаться система. В данном случае файл init будет выполняться с 5 уровнем, т.е. в графическом режиме.
Следующим интересным моментом являются строки:
10:0:wait:/etc/rc.d/rc 0
11:1:wait:/etc/rc.d/rc 1
12:2:wait:/etc/rc.d/rc 2
13:3:wait:/etc/rc.d/rc 3
14:4:wait:/etc/rc.d/rc 4
15:5:wait:/etc/rc.d/rc 5
16:6:wait:/etc/rc.d/rc 6
Как видите, здесь для каждого уровня своя строка, и при этом запускается один и тот же файл /etc/rc.d/rc, но после имени через пробел стоит число, соответствующее текущему уровню. Это параметр, который увидит программа /etc/rc.d/rc.