Все файлы, связанные с запуском системы, находятся в каталоге /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 вы могли поэтому увидеть, что существует 6 уровней работы:
1: однопользовательский режим. Используется в случае возникновения серьезных проблем или для восстановления системы.
2: многопользовательский режим без поддержки сети.
5: аналог уровня работы 3-го, но запускается графический интерфейс для входа в систему.
Давайте взглянем на содержимое каталога rc5.d:
$ ls rc5.d K15postgresql@ K60atd@ S15netfs@ S60lpd@ S90xfs@ K20nfs@ K96pcmcia@ S20random@ S60nfs@ S99linuxconf@ K20rstatd@ S05apmd@ S30syslog@ S66yppasswdd@ S99local@ K20rusersd@ S10network@ S40crond@ S75keytable@ K20rwhod@ S11portmap@ S50inet@ S85gpm@ K30sendmail@ S12ypserv@ S55named@ S85httpd@ K35smb@ S13ypbind@ S55routed@ S85sound@ |
Как видите, все файлы в этом каталоге являются символическими ссылками, и все они имеют весьма специфический вид. Их общий вид такой:
<S|K><порядок><имя_службы> |
S (от слова Start) означает запуск службы, а K (от слова Kill) означает остановку службы. Скрипты запускаются в порядке возрастания номеров, а если два скрипта имеют одинаковый номер, тогда применяется прямой алфавитный порядок. Мы также видим, что каждая символическая ссылка указывает на определенный скрипт, находящийся в каталоге /etc/rc.d/init.d (за исключением скрипта local, который отвечает за управление особой службой.)
Когда система переходит на заданный уровень работы, она стартует путем запускания по порядку ссылок K: команда rc ищет, куда указывает ссылка, затем вызывает соответствующий скрипт с одним аргументом stop. Затем она запускает скрипты S, используя такой же метод, за исключением тех скриптов, которые вызваны с аргументом start.
Итак, не рассматривая всех скриптов, мы можем увидеть, что когда система переходит на 5-й уровень работы, она сначала запускает команду K15postgresql (т.е. /etc/rc.d/init.d/postgresql stop). Затем K20nfs, затем K20rstatd, и так далее до последней команды. Далее она запускает все скрипты S: сначала S05apmd, который в свою очередь вызывает /etc/rc.d/init.d/apmd start, и так далее.
Вооружившись этой информацией, вы за несколько минут сможете создать свой собственный уровень работы (задействовав, например, 4-й), или предотвратить запуск или остановку службы, удалив соответствующую символическую ссылку. Для этого вы также можете воспользоваться программами с интерфейсом, в особенности drakxservices (см. DrakXServices: Configuring Start-Up Services в Стартовое руководство???) или chkconfig для настройки в текстовом режиме.