Я расскажу вам только о программе init в стиле ``System V'', которая используется большинством Linux систем. Существуют и другие варианты. На самом деле вы можете поместить любую программу в /sbin/init и ядро запустит её как только закончит загружаться.
Задачей init'а является запуск всего остального нужным образом. Он проверяет состояние файловых систем и монтирует их. Он запускает демонов для записи системных сообщений, сетевого взаимодействия, обслуживания веб-страниц, обработки сообщений мыши и т.п. Он также запускает процессы getty, которые выдают запросы на вход в систему на ваших виртуальных терминалах.
Я мог бы расказать вам длинную историю о проблеме переключения "уровней запуска" (``run-levels''), однако я пропущу большую её часть, остановившись исключительно на моментах связанных с запуском системы.
Init читает файл /etc/inittab, в котором содержатся инструкции для дальнейшей работы. Первой инструкцией, обычно, является запуск скрипта инициализации. Программой, которая будет выполнять (интерпретировать) данный скрипт, является bash, та самая программа, которая предоставляет вам командную строку. В системах, основанных на Debian, скриптом инициализации будет /etc/init.d/rcS, в Red Hat - /etc/rc.d/rc.sysinit. Это то место где происходит проверка и монтирование файловых систем, установка часов системного времени, включение своп-раздела, присвоение имени хоста и т.д.
Далее будет вызван следующий скрипт, который переведёт нас на "уровень запуска" по умолчанию. Это подразумевает просто некоторый набор подсистем, которые должны быть запущены. Для обслуживания уровней запуска существует набор директорий /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d в Red Hat, или /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d в Debian, которые отвечают за соответствующие уровни. Когда мы заходим на "уровень запуска" 3 в Debian, этот скрипт будет запускать все скрипты в /etc/rc3.d, начинающиеся на букву `S' (старт). Эти скрипты обычно являются символьными ссылками на скрипты расположенные в init.d.
Итак, скрипт "уровня запуска", вызван процессом init и ищет в соответствующей директории скрипты начинающиеся на `S'. Пусть первым обнаруженным файлом окажется S10syslog. Порядок запуска скриптов определяется номерами. В нашем случае S10syslog оказался первым, поскольку не нашлось скриптов, начинающихся на S00 ... S09. На самом деле S10syslog