Виктор Костромин - Linux для пользователя
- Название:Linux для пользователя
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Виктор Костромин - Linux для пользователя краткое содержание
Linux для пользователя - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
l3:3:wait:/etc/rc.d/rc 3
Функции, выполняемые скриптами rc.sysinit и rc мы подробно рассмотрим ниже, в разд. 8.2.2, а сейчас вернемся к краткому обзору действий процесса init.
Следующая важная функция, которую выполняет этот процесс (на уровнях со 2 по 5) - запуск шести виртуальных консолей (процессов getty), чтобы предоставить пользователям возможность регистрироваться в системе с терминалов. Для этого init порождает процессы, именуемые getty-процессами (от "get tty" - получить терминал), и следит за тем, какой из процессов открывает какой терминал. Каждый getty-процесс устанавливает свою группу процессов, используя вызов системной функции setpgrp, открывает отдельную терминальную линию и обычно приостанавливается во время выполнения функции open до тех пор, пока машина не получит аппаратную связь с терминалом. Когда функция open возвращает управление, getty-процесс исполняет программу login (регистрации в системе), которая требует от пользователей, чтобы они идентифицировали себя указанием регистрационного имени и пароля. Если пользователь зарегистрировался успешно, программа login, наконец, запускает командный процессор shell и пользователь приступает к работе. Этот вызов shell именуется "login shell" (регистрационный shell, регистрационный интерпретатор команд). Процесс, связанный с shell, имеет тот же идентификатор, что и начальный getty-процесс, поэтому login shell является процессом, возглавляющим группу процессов.
Если пользователь не смог успешно зарегистрироваться, программа регистрации завершается через определенный промежуток времени, закрывая открытую терминальную линию, а процесс init порождает для этой линии следующий getty-процесс, открывающий терминал, вместо прекратившего существование.
После завершения загрузки init продолжает работать в фоновом режиме, отслеживая изменения в состоянии системы. Например, если будет подана команда telinit, позволяющая изменить уровень выполнения, процесс init обеспечит выполнение команд, заданных для нового уровня файлом /etc/inittab. Этот файл прочитывается заново и в случае поступления сигнала HUP; эта особенность избавляет от необходимости перезагружать систему для того, чтобы сделать изменения в начальной конфигурации.
Таким образом, процесс начальной загрузки init постоянно находится в оперативной памяти и при получении соответствующих сигналов повторно выполняет цикл чтения из файла /etc/inittab инструкций о том, что нужно делать, причем этот набор инструкций различен для разных уровней выполнения.
Когда суперпользователь останавливает систему (командой shutdown), именно init завершает все другие исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор.
Замечание
В приведенном описании опущены многие важные детали. Более подробное описание можно найти в man-страницах по init (8), inittab (5) и getty (8), а также в документах "Linux Documentation Project's Serial HOWTO".
Замечание
Если вы некорректно модифицируете файл /etc/inittab, система может перестать загружаться. Так что перед внесением каких-либо изменений в этот файл по меньшей мере запаситесь загрузочной дискетой и сохраните копию исходного файла на случай фатальных ошибок.
8.2.2. Основные конфигурационные файлы
Если вы прочитали разд. 8.2.1 (или если смотрели файл /etc/inittab), то представляете, что в обычной ситуации процесс init помимо запуска процессов getty выполняет 2 основных действия:
• запускает скрипт rc.sysinit из каталога /etc/rc.d;
• запускает скрипт rc из того же каталога /etc/rc.d с опцией, равной уровню выполнения (обычно rc 3).
В файле rc.sysinit содержатся команды инициализации системы, в том числе команды установки системных переменных, загрузки таблиц раскладки клавиатуры (командой loadkeys) и системного шрифта (команда consolechars), монтирования и проверки файловых систем, загрузки модулей, задания предпочитаемой графической оболочки и т. д.
Если вы внимательно прочитали раздел о командном языке интерпретатора команд shell (гл. 5), то вы легко поймете большую часть скрипта /etc/rc.d/rc.sysinit.
Прежде чем рассматривать функции, выполняемые скриптом rc, надо сказать несколько слов о каталоге /etc/rc.d. Этот каталог вообще играет важную роль в процессе загрузки, поскольку он содержит основные скрипты (программы на языке командного процессора shell), служащие для организации процесса загрузки.
Каталог rc.d содержит следующий набор подкаталогов:
• rc0.d
• rc1.d
• rc2.d
• rc3.d
• rc4.d
• rc5.d
• rc6.d
• init.d
Если вы просмотрите (например, с помощью команды ls -l) содержимое подкаталогов rcX.d, то увидите, что в этих подкаталогах содержатся не файлы, а только ссылки на файлы скриптов, находящиеся в других каталогах, а именно (за редким исключением), в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы K, либо с буквы S. Подкаталог init.d содержит по одному скрипту для каждой из возможных в системе служб (NFS, sendmail, httpd и т. п.).
Теперь вспомним, что процесс init после скрипта rc.sysinit запускает скрипт rc с опцией, равной заданному уровню выполнения. Этот скрипт предназначен в общем случае для перевода системы из одного уровня выполнения на другой. В процессе начальной загрузки этот скрипт переводит систему из однопользовательского режима на уровень, задаваемый по умолчанию. Общий алгоритм работы rc состоит в следующем. При переходе на уровень X сначала просматривается каталог rcX.d и для всех ссылок, которые начинаются на K, вызываются файлы, на которые идет ссылка, с опцией stop, т. е. осуществляется останов соответствующих служб (которые не должны работать на данном уровне выполнения). Затем запускаются службы, которые на данном уровне выполнения должны быть запущены. Это осуществляется путем последовательного просмотра ссылок, которые начинаются с символа S, и запуска соответствующих скриптов с опцией start. Из сказанного ясно, что буквы (символы) S и K, с которых начинаются имена ссылок в подкаталогах rcX.d, происходят от start и kill, соответственно. Заметим еще, что после S и K в именах ссылок стоят двузначные номера, которые служат для задания порядка запуска скриптов.
Одна из последних ссылок вида SXXname, используемых скриптом rc на уровнях 2-5, является ссылка на скрипт /etc/rc.d/rc.local. Как сказано в самом этом файле, этот скрипт выполняется после всех других скриптов в процессе инициализации системы, поэтому если вы хотите, чтобы в процессе загрузки были выполнены какие-то дополнительные команды или ваши персональные настройки, то их целесообразно поместить именно сюда.
Тот вариант этого скрипта, который устанавливается из дистрибутива, выполняет очень ограниченные задачи: выводит на экран логотип дистрибутива и формирует файлы /etc/issue и /etc/issue.net, содержащие текст сообщений, выдаваемых пользователю при входе в систему.
Читать дальшеИнтервал:
Закладка: