Любая строка файла inittab, которая начинается символом решетки (#), является комментарием. Разумное число комментариев не повредит, поскольку синтаксис строк файла inittab весьма насыщенный и загадочный. Запись inittab имеет следующий формат:

метка:уровень:действие:процесс

Моле метка имеет длину от одного до четырех символов и идентифицирует строку. Отдельные системы поддерживают только двухсимвольные метки, поэтому в большинстве случаев их длина ограничена двумя символами. Метки могут быть произвольной строкой; они не имеют специального значения. Поле уровень определяет уровни исполнения, для которых действует эта запись. Если поле содержит цифру 3, процесс, на который указывает запись, должен быть запущен при инициализации системы по уровню исполнения 3.

Можно указывать несколько уровней одновременно. Записи с пустым полем уровня не участвуют в инициализации конкретных уровней. Например, в системах Linux существует запись inittab, связанная с обработкой комбинации из трех пальцев (<Ctrl>+<Alt>+<Del>); она имеет пустое поле уровня. Поле действие определяет условия, при которых выполняется процесс. В табл. 5.1 перечислены значения действий, существующие в системах Red Hat, Mandrake и Caldera Linux.

Таблица 5.1. Значения действий для inittab в Linux

Действие Значение
Boot Выполняется при загрузке системы. Уровни не используются
Boot wait Выполняется при загрузке системы; init ожидает завершения процесса. Уровни не используются
Ctrlaltdel Выполняется по сочетанию клавиш <Ctrl>+<Alt>+<Del>, init получает сигнал SIGINT. Уровни не используются
Initdefault Отсутствует выполняемый процесс. Действие устанавливает уровень исполнения по умолчанию
Kbrequest Выполняется, когда init получает сигнал с клавиатуры. Сочетание клавиш должно быть связано с клавиатурным сигналом (KeyBoarcl-Signal)
Off Отключает запись, блокирует выполнение процесса
Once Выполняется единожды для каждого уровня исполнения
Ondemand Выполняется, когда система переходит на один из специальных уровней, А, В или С
Powerfail Выполняется, когда init получает сигнал SIGPWR
Powerokwait Выполняется, когда init получает сигнал SIGPWR и файл /etc/power-status содержит слово OK
Powerwait Выполняется, когда init получает сигнал SIGPWR; init ожидает завершения процесса
Respawn Перезапускает процесс после завершения
sysinit Выполняется до всех процессов boot и bootwait
wait Выполняет процесс при переходе в рабочий режим, init ожидает завершения процесса

И последнее поле записи - процесс. Оно указывает процесс, запускаемый init. Процесс имеет формат команды, выполняемой в командной строке. Таким образом, поле процесса начинается с имени программы, которую следует выполнить. За именем следуют аргументы, передаваемые процессу. Например, /sbin/shutdown -t3 - г now, процесс, выполняемый отдельными систе- мами Linux по сочетанию клавиш <Ctrl>+<Alt>+<Del>, - это команда, которую можно набрать в командной строке интерпретатора с целью перезагрузки системы. В большинстве записей inittab поле процесса содер жит имя стартового сценария. Существует два главных типа загрузочных сценариев: сценарии инициализации системы и сценарии инициализации уровней исполнения. В приведенном ниже фрагменте файла inittab системы Red Hat Linux отражены оба типа:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
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

Эти семь строк - сердцевина файла inittab, они вызывают загрузочные сценарии. Первая строка предписывает init выполнить загрузочный сценарий /etc/rc.d/rc.sysinit для инициализации системы. В этой записи отсутствует значение уровня исполнения. Сценарий выполняется при каждой загрузке системы. Сценарий инициализации системы выполняет ряд важных задач. Так, сценарий rc.sysinit системы Red Hat:

  • инициализирует пространство подкачки;
  • выполняет проверку файловой системы;
  • монтирует файловую систему /ргос;
  • монтирует корневую файловую систему в режиме чтения-записи после завершения работы fsck;
  • загружает модули ядра.

Сценарии инициализации других систем могут выглядеть иначе, чем в Red Hat, но они решают очень похожие задачи. Например, процесс инициализации в системе Caldera начинается с загрузки модулей ядра. Затем происходит активизация пространства подкачки, проверка файловой системы и перемонтирование корневой файловой системы в режиме чтения-записи. Порядок иной, но основная функциональность не изменилась.


Выполнив сценарий инициализации системы, ini t вызывает сценарий для конкретного уровня исполнения. Остальные шесть строк примера используются для вызова загрузочных сценариев отдельных уровней. За исключением поля уровня исполнения, все эти строки идентичны.

Для примера рассмотрим строку с меткой 13. Данная строка запускает все процессы и службы, необходимые для полноценного многопользовательского режима. Уровень исполнения системы-3. Действие wait предписывает программе ini t ожидать завершения загрузочного сценария, прежде чем переходить к прочим записям файла inittab, относящимся к уровню 3. ini t выполняет сценарий /etc/rc.d/rc и передает ему аргумент командной строки - 3.

Управляющий сценарий, /etc/rc.d/rc, в свою очередь вызывает все сценарии, соответствующие уровню исполнения, то есть все сценарии из каталога /etc/rcn.d, где n - указанный уровень. В нашем примере управляющий сценарий гс получает значение 3, а потому выполняет сценарии из каталога /etc/rc.d/rc3.d. Просмотр каталога системы Red Hat показывает, что сценариев много:

$ Is /etc/rc.d
init.d rcO.d rc2.d rc4.d rc6.d rc.sysinit
rc rcl.d rc3.d rc5.d rc.local
$ Is /etc/rc.d/rc3.d
КОЗ rhnsd  K35smb  K74ntpd  S05kudzu  S25netfs  S85httpd 
K16rarpd  K45arpwatch  K74ypserv  S06reconfig  S26apmd  S90crond 
K20nfs  K45named  K74ypxfrd  S08ipchains  S28autofs  S90xfs 
K20rstatd  K50snmpd  K75gated  S09isdn  S40atd  S95anacron 
K20rusersd  K50tux  K84bgpd  SlOnetwork  S55sshd  S991inuxconf 
K20rwalld  K55routed  K84ospf6d  S12syslog  S56rawdevices  S991ocal 
K20rwhod  K61ldap  K84ospfd  S13portmap  S56xinetd 
K28amd  K65identd  K84ripd  S14nfslock  S601pd 
K34yppasswdd  K73ypbind  K84ripngd  S17keytable  S80sendmail 
K35dhcpd  K74nscd  K85zebra  S20random  S85gpm

Сценарии, имена которых начинаются с буквы К, используются для завершения процессов при завершении определенного уровня исполнения. В приведенном примере К-сценарии будут использованы в процессе завершения работы на уровне 3. Сценарии, имена которых начинаются с буквы S, используются при переходе на уровень 3. Однако ни один из файлов, хранимых в rc3.d, не является в действительности сценарием.


Это логические ссылки на настоящие сценарии, расположенные в каталоге /etc/гсЛ/init.d. Так, S80sendma.il - ссылка на файл init.d/sendmail. Сразу возникает вопрос - зачем выполнять сценарии из каталога rc3.d, когда можно вызвать их напрямую из init.d, где они на самом деле хранятся? Причины очень просты. Одни и те же сценарии используются в работе нескольких уровней. Логические ссылки позволяют хранить сценарии в одном месте и использовать их из каталога каждого конкретного уровня исполнения.

Сценарии исполняются в алфавитном порядке. SlOnetwork исполняется раньше, чем S80sendmail. Таким образом, можно контролировать порядок выполнения сценариев, изменяя их имена. Порядок вызова сценариев может быть различным для различных уровней исполнения, при том, что действительные сценарии в каталоге init.d будут по-прежнему иметь простые, осмысленные имена. Что и доказывает содержимое каталога init.d:

$ Is /etc/rc.d/init.d 
amd  functions  kdcrotate  network  rarpd  rwalld  xfs 
anacron  gated  keytable  nfs  rawdevices  rwhod  xinetd 
apmd  9 pr o  killal l  nfslock  reconfig  sendmail  ypbind 
arpwatch  halt  kudzu  nscd  rhnsd  single  yppasswdd 
atd  httpd  ldap  ntpd  ripd  smb  ypserv 
autofs  identd  linuxconf  ospf6d  ripngd  snmpd  ypxfrd 
bgpd  ipchains  lpd  ospfd  routed  sshd  zebra 
crond  iptables  named  portmap  rstatd  syslog 
dhcpd  isdn  netfs  random  rusersd  tux

Можно разместить специальную команду настройки прямо в соответствующем сценарии из каталога init.d. Более приемлемый вариант для системы Red Hat - размещать все подобные команды в сценарии гс .local.

Подобно системам BSD, системы Linux для внесения локальных изменений предоставляют файл rc.local. Общее правило: не вносите поправки в загрузочные сценарии. Исключением из этого правила является файл rc.local, расположенный в каталоге /etc/rc.d. Это единственный стартовый файл, подлежащий правке, он зарезервирован для этой цели и может иметь любое содержание. После выполнения сценария инициализации системы сценарии уровней работы вызываются в алфавитном порядке. Последним из них является S99local, ссылка на rc.local.


Поскольку сценарий rc.local вызывается в последнюю очередь, определенные в нем значения замещают встреченные системой ранее.

В системе Solaris также применяется модель загрузки System V, но дела обстоят несколько сложнее, чем в Linux. Во-первых, отсутствует сценарий rc.local. Чтобы воспользоваться таким сценарием, следует создать соответствующие файлы в каталогах уровней исполнения. Во-вторых, в системе Solaris не так много логических ссылок в каталогах уровней. Как следствие, отсутствует возможность централизованно изменять сценарии, задействованные на всех уровнях работы. Кроме того, каждому уровню исполнения соответствует отдельный управляющий сценарий, что может вносить различия в стартовый процесс уровней. Например, сценарий /sbin/rc2 управляет уровнем работы 2, а /sbin/гсЗ - управляющий сценарий для уровня 3. Все эти отличия делают процесс загрузки Solaris более сложным для анализа.

В системе Solaris 8 уровень исполнения 3 является уровнем по умолчанию для многопользовательской среды с доступом к сетевым службам. Управляющий сценарий /sbin/гсЗ выполняет сценарии из каталога /etc/rc2.d, а затем сценарии из каталога /etc/rc3.d. Базовая настройка сети происходит в /etc/rc2.d и реализована сценариями S69inet и S72inetsvc. Запуск сетевых служб выполняется рядом других сценариев, расположенных в каталогах /etc/rc2.d и /etc/rc3.d.

В целях диагностирования и отладки очень важно понимать, что и каким образом происходит в процессе загрузки системы. Если возникли проблемы ири инициализации сети, полезно знать, с чего начинать поиск. Однако в настройке сети следует придерживаться использования стандартных инструментов и методов данной конкретной системы. Прямое изменение загрузочных сценариев может вызывать проблемы при загрузке системы и наверняка запутает других людей, ассистирующих вам в сопровождении сети.

Разумеется, не все сетевые службы запускаются загрузочными сценариями. Большинство служб начинают работу по требованию. Наиболее распространенным инструментом для вызова сетевых служб по требованию является inetd, демон Интернета.