Відразу після завантаження ядра Linux ще не готовий до роботи з користувачами. Те, що робить Linux такою потужною за набором можливостей ОС реалізовано у наборі процесів-сервісів, які виконуються у фоновому режимі. В Linux прийнято називати такі сервіси демонами. Головним завданням процесу init є автоматичний запуск демонів потрібних для певної робочої конфігурації (рівня виконання) та зворотня функція – зупинка демонів, які не потрібні для біжучого рівня виконання
Рівні виконання мають числові ідентифікатори від 0 до 6 та s, S.
Ідентификатор рівня виконання
| Призначення
|
| Система зупинена
|
| Однокористувацький режим (single user mode). Використовуєтся, наприклад адміністратором системи для виконання обслуговування
|
| Обмежений багатокористувацький режим. Текстовий інтерфейс
|
| Багатокористувацький режим. Текстовий інтерфейс
|
| Режим з автоматичним запуском графічного інтерфейсу
|
| Використовується для перезавантаження системи
|
s S
| Зарезервовані для використання командними скриптами для переходу системи в однокористувацький режим
|
Після запуску програма init зчитує конфігураційний файл /etc/inittab. У цьому файлі шукають рядок з параметром initdefault. Цей рядок визначає рівень виконання за замовчуванням. Приклад фрагменту файлу inittab для виконання за замовчуванням:
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
Кожен рядок файла inittab містить чотири колонки, розділені двокрапкою. У першій колонці вказано числовий ідентифікатор рядка. У другій колонці вказано номер рівня виконання. Третя колонка задає режим виконання командного файла (див. табл). У четвертій колонці вказано командний файл, який потрібно виконати. Як аргумент цьому файлу передається номер рівня виконання. Як видно з прикладу, командний файл знаходиться у каталозі /etc/rc.d/ (його ще називають головним -master- командним файлом, тому що залежно від рівня виконання він виконує велику кількість інших командних файлів).
Яким чином командний скрипт вирішує, які демони потрібно запустити, а які – зупинити для кожного конкретного рівня виконання? У системі UNIX в каталозі rc.d можна побачити підкаталоги з назвами rc#.d, де # вказує на певний рівень виконання. У кожному підкаталозі є скріпти, що зупиняють певні демони (назви таких скриптів починаються з букви K – kill) та скрипти, що стартують певні демони (їх назви починаються з букви S – start). Після початкової букви у назві скрипта іде число. Ці числа визначають порядок запуску скриптів – скрипти з меншими номерами запускають раніше. І нарешті, назва скрипта завершується змістовною назвою сервісу, що стартує або зупиняється.
Назви сервісів дозволяють системі зайвий раз не зупиняти та не запускати сервіси при переходах між рівнями. Так при переходах між рівнями зупиняють тільки ті сервіси, які не працюють на новому рівні та запускають тількі сервіси, які не є вже запущені.
З використанням inittab виконуються і деякі інші функції, наприклад, ініціалізація системи після завантаження.
si::sysinit:/etc/rc.d/rc.sysinit
Можливі значення режимів виконання наведені у таблиці
Режим
| Опис
|
boot
| Виконується підчас завантаження
|
bootwait
| Виконується підчас завантаження. Init очікує на завершення
|
initdefault
| Рівень виконання за замовчуванням. Звичайно запустається одразу ж після завантаження
|
ondemand
| Виконується для одного з рівнів виконання “по запиту” - a,b,c
|
powerwait
| Виконується якщо зникло живлення. Система очікує завершення команди
|
powerfail
| Виконується якщо зникло живлення. Система не очікує завершення
|
powerokwait
| Виконується, якщо init повідомили, що живлення відновлено
|
powerfailnow
| Виконується, якщо init повідомили, що зовнішнє джерело живлення (батарея) не має заряду
|
resume
| Виконується, коли init отримує від ядра сигнал “Software suspend”
|
sysinit
| Виконується підчас завантаження перед boot або bootwait
|
respawn
| Рестартує сервіс, якщо його зупинено
|
wait
| Стартує один раз при переході на рівень виконання. Очікує завершення
|
once
| Стартує один раз при переході на рівень виконання. Не очікує завершення
|
crtaltdel
| Виконується, якщо хтось на консолі натисне ctlr-alt-del
|
Користувач може ініцювати перехід на потрібний рівень виконання з консолі командою
init N
де N – номер потрібного рівня