Все файлы, имеющие отношение к загрузке находятся в каталоге /etc/rc.d. Вот список файлов:
$ ls /etc/rc.d init.d/ rc.local* rc0.d/ rc2.d/ rc4.d/ rc6.d/ rc* rc.sysinit* rc1.d/ rc3.d/ rc5.d/ |
В начале, как мы видим, запускается файл rc.sysinit. Этот файл отвечает за установки базовой конфигурации машины: тип клавиатуры, конфигурация некоторых устройств, проверка файловой системы и т.д.
Затем запускается скрипт rc, с желаемым номером runlevel в качестве аргумента. Как мы видим, runlevel это простое целое число, и для каждого runlevel <x> имеется соответствующий rc<x>.d каталог. В обычной инсталляции Mandrake Linux вы можете увидеть 6 определенных runlevel:
1: single-user (однопользовательский) режим; используется в случае серьезных проблем или для восстановления системы;
2: multi-user (многопользовательский) режим, без поддержки сети;
3: Мulti-user (многопользовательский) режим с поддержкой сети;
5: такой же как и 3, но, кроме всего, запускает графический интерфейс для входа в систему (login);
Давайте посмотрим, например, на содержимое каталога 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><order><service_name> |
S обозначает Start сервиса, а K обозначает Kill (остановку) сервиса. Скрипты запускаются в возрастающем порядке номеров, а если два скрипта имеют одинаковый номер, тогда действует алфавитный порядок. Мы также видим, что каждая символическая ссылка указывает на соответствующий скрипт в каталоге /etc/rc.d/init.d (кроме local), скрипт, который отвечает за контроль особого сервиса.
Когда система отправляется в заданный runlevel, все начинается с запуска K ссылок в таком порядке: rc ищет куда указывает ссылка, затем вызывает соответствующий скрипт с одним аргументом stop. Затем запускаются S скрипты, используя тот же метод, не учитывая того факта, что скрипт вызван с аргументом start.
Итак, не учитывая всех остальных скриптов, мы можем видеть, что когда система переходит в runlevel 5, сначала запускается K15postgresql, то есть /etc/rc.d/init.d/postgresql stop. Затем K20nfs, затем K20rstatd, и так до последнего; потом, запускаются все S скрипты: первым S05apmd, который вызывает /etc/rc.d/init.d/apmd start, и так далее.
Вооружившись всем этим, вы можете создать свой собственный целый runlevel за несколько минут, или предотвратить запуск или остановку сервиса путем удаления соответствующей символической ссылки (есть также программы с интерфейсом для выполнения этого, в особенности drakxservices и chkconfig; бывшая графическая программа)