Все файлы, связанные с запуском системы, находятся в каталоге
/etc/rc.d
. Вот список его файлов:
$ ls /etc/rc.d init.d/ rc0.d/ rc2.d/ rc4.d/ rc6.d/ rc.local* rc.sysinit* rc* rc1.d/ rc3.d/ rc5.d/ rc.alsa_default* rc.modules*
Как уже было отмечено, rc.sysinit
- это первый файл,
запускаемый системой. Он отвечает за установку базовой конфигурации машины:
тип клавиатуры, настройка определенных устройств, проверка файловой системы и
т.п.
Затем запускается скрипт
rc с нужным номером уровня выполнения в качестве аргумента.
Как мы уже видели, уровень выполнения - это простое целое число, а для всех
определенных уровней выполнения <x>
должен быть
соответствующий каталог rc<x>.d
. В стандартной
установке Mandrakelinux вы могли увидеть, что существует шесть уровней
выполнения:
1: однопользовательский режим. Используется в случае возникновения серьезных проблем или для восстановления системы.
2: многопользовательский режим без поддержки сети.
5: аналогичен 3-му уровню выполнения, но запускается графический интерфейс для входа в систему.
Давайте взглянем на содержимое каталога rc5.d
:
$ls rc5.d K59dund@ S12syslog@ S20xfs@ S34mDNSResponder@ S90crond@ K59hidd@ S13partmon@ S24messagebus@ S40atd@ S95kheader@ K59pand@ S14hplip@ S25bluetooth@ S56ntpd@ S99local@ S01udev@ S15cups@ S25haldaemon@ S56rawdevices@ S05harddrake@ S15mdadm@ S25netfs@ S75keytable@ S10network@ S17alsa@ S30dm@ S80postfix@ S12pcscd@ S18sound@ S33nifd@ S85numlock@
Как видите, все файлы в этом каталоге являются символическими ссылками, и все они имеют весьма специфический вид. Их общий вид такой:
<S|K><порядок><имя_службы>
S
означает запуск
(Start) службы, а K
означает остановку (Kill) службы. Скрипты
запускаются в порядке возрастания номеров, а если два скрипта имеют
одинаковый номер, тогда применяется прямой алфавитный порядок. Мы также можем
видеть, что все символические ссылки указывают на определенные скрипты,
находящиеся в каталоге /etc/rc.d/init.d
(за
исключением скрипта local, отвечающего за управление
особой службой.)
Когда система переходит на заданный уровень выполнения, она начинает с того, что запускает по порядку ссылки K
: команда
rc ищет, куда указывает ссылка, затем вызывает
соответствующий скрипт с одним аргументом stop
. Затем
она запускает скрипты S
, используя такой же метод, за
исключением тех скриптов, которые вызваны с аргументом
start
.
Итак, не рассматривая всех скриптов, мы можем увидеть, что когда система
переходит на 5-й уровень выполнения, она сначала запускает команду
K15dund (т.е. /etc/rc.d/init.d/dund
stop). Затем K59hidd, затем
K59pand, и так далее до последней команды. Далее она
запускает все скрипты S
: сначала S01udev,
который в свою очередь вызывает /etc/rc.d/init.d/udev start,
и так далее.
Вооружившись этой информацией, вы за несколько минут сможете создать свой собственный уровень выполнения (задействовав, например, 4-й), или предотвратить запуск или остановку службы, удалив соответствующую символическую ссылку. Для этого вы также можете воспользоваться программами с интерфейсом, в особенности drakxservices (см. DrakXServices: Настройка загрузочных сервисов в книге Стартовое руководство) или chkconfig для настройки в текстовом режиме.