Непосредственно после того, как система Linux загружается и ее ядро монтирует корневую файловую систему, она выполняет первую программу -- init. Эта программа отвечает за запуск стартовых системных скриптов и за изменение состояния системы с загрузочного на обычное многопользовательское. Программа init изготавливает копии оболочек login: для всех устройств "tty" в системе, а также устанавливает другие стартовые и заключительные процедуры.
После запуска программа init уходит в фоновый режим, следя за режимом работы системы и по необходимости изменяя его. Программа init должна следить за множеством вещей; все ее функции определены в файле /etc/inittab. Пример файла /etc/inittab дается ниже.
Неправильное изменение файла /etc/inittab может привести к тому, что войти в систему станет невозможно. Как самое меньшее средство безопасности при изменении файла /etc/inittab следует сохранять его предыдущую правильную версию и иметь загрузочную (корневую) дискету на случай, если будет сделана ошибка.
#
# inittab Этот файл описывает, как процесс INIT конфигурирует
# систему на каждом уровне работы (run-level).
#
# Версия: @(#)inittab 2.04 17/05/93 MvS
# 2.10 02/10/95 PV
#
# Автор: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Переработано: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
# Дополнительные изменения:
# Robert Kiesling, <kiesling@terracom.net>
#
# Уровень по умолчанию
id:3:initdefault:
# Инициализация системы (запускается при загрузке системы)
si:S:sysinit:/etc/rc.d/rc.S
# Скрипт, который запускается в режиме с одним пользователем
# (уровень 1)
su:1S:wait:/etc/rc.d/rc.K
# Скрипт, который запускается в многопользовательском режиме
rc:23456:wait:/etc/rc.d/rc.M
# Что делать при нажатии комбинации Ctrl-Alt-Del
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
# При уровне 0 система останавливается
l0:0:wait:/etc/rc.d/rc.0
# При уровне 6 система перезагружается
l6:6:wait:/etc/rc.d/rc.6
# Что делать при перебое в питании (выгрузка системы в режиме с
# одним пользователем)
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
# Если питание успело восстановиться, прекратить выгрузку системы
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
# Если питание восстановилось в режиме с одним пользователем,
# то вернуться к многопользовательскому режиму
ps:S:powerokwait:/sbin/init 5
# Команды getty в многопользовательском режиме на консолях,
# подключенных к последовательным портам
#
# ВНИМАНИЕ: приведите эти команды в соответствие с
# вашими командами getty, иначе вы не сможете
# войти в систему!!
#
# ВНИМАНИЕ: аргументы команды `agetty': скорость, порт
# аргументы команды `getty_ps': порт, скорость, `gettydefs'
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
# Последовательные порты (serial lines)
# s1:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100
s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100
# Подключения через модем (dialup lines)
d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100
# Уровень 4 раньше использовался только для систем X Window.
# Потом было обнаружено, что этот уровень зацикливает скрипт init,
# так что load avg все время остается равным по меньшей мере 1.
# Таким образом, теперь есть один процесс getty, открытый на
# tty6. Надеемся, что этого никто не заметит. ;^)
# Кроме того, не так уж плохо иметь одну текстовую консоль
# на случай, если что-либо случится с X.
x1:4:wait:/etc/rc.d/rc.4
# Конец файла /etc/inittab
При начале работы данный файл /etc/inittab запускает шесть виртуальных консолей, приглашение login: на модем, подключенный к порту /dev/ttyS0, и приглашение login: на текстовый терминал, подключенный через последовательное соединение RS-232 к порту /dev/ttyS1.
Кратко говоря, программа init последовательно проходит уровни работы (run levels). На уровне номер 1 программа оказывается сразу после загрузки системы, уровни 2 и 3 -- это обычные многопользовательские режимы работы системы, уровень 4 запускает X Window System посредством диспетчера монитора (X display manager) xdm, а уровень номер 6 перегружает систему. Уровень (уровни), который соответствует каждой команде -- второй параметр в каждой строке файла /etc/inittab.
Например, строка
s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100поддерживает приглашения login на терминалах с последовательным подключением для уровней 1-5. Перед первым двоеточием стоит "s2"; это -- символический идентификатор, который используется внутри программы init. Стоящее далее respawn -- ключевое слово программы init, часто используемое в отношении терминалов с последовательным подключением. Если после определенного интервала времени программа agetty, которая размножает приглашения login: и рассылает их по терминалам, не получает информации от терминала, она прекращает работу. Программа "respawn" сообщает программе init, что надо повторно исполнить программу agetty для того, чтобы обеспечить постоянное присутствие приглашения login: на терминале вне зависимости от того, вошел ли кто-нибудь в систему. Остальные параметры передаются непосредственно программе agetty и сообщают ей, что надо размножать и рассылать оболочки login, а также данные о скорости обмена при последовательном подключении, о последовательном устройстве и о типе терминала так, как это указано в файлах /etc/termcap или /etc/terminfo.
Программа /sbin/agetty учитывает множество аспектов ввода/вывода при обменах данными с терминалами системы. В системе Linux используется несколько версий этой программы: mgetty, psgetty, getty.
В файле /etc/inittab (см. выше) есть строка
d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100которая позволяет пользователю входить в систему через модем, подключенный к последовательному порту /dev/ttyS0. Параметр "-mt60" программы /sbin/agetty дает указание перебирать все скорости обмена, которые могут быть у звонящего модема, и отключить /sbin/agetty, если соединение не устанавливается в течение 60 секунд. Это называется диалог соединения (negotiating). Поддерживаемые скорости обмена пронумерованы в командной строке; также в ней указано, какой последовательный порт предполагается использовать и каков будет тип терминала. Разумеется, оба модема должны поддерживать скорости обмена, которые установятся в результате диалога соединения.
В данном разделе опущены многие важные детали. Перечисление функций, возложенных на файл /etc/inittab, могло бы составить отдельную книгу. Для более полной информации по этой теме и дальнейших ссылок можно обратиться к экранной документации по программам init и agetty, а также Практическому руководству по использованию последовательного подключения (Serial HOWTO), разработанному в рамках проекта Linux Documentation Project. Получить последний документ можно из источников, перечисленных в приложении A.