Який зв’язок між каталогами “/etc/init.d” та “/etc/rcX.d” в Linux?


25

Я вивчаю командний рядок із книги під назвою " Командний рядок Linux та Біблія сценаріїв оболонок, друге видання ". У книзі зазначено:

Деякі реалізації Linux містять таблицю процесів, які автоматично запускаються під час завантаження. У системах Linux ця таблиця зазвичай знаходиться у спеціальному файлі / etc / inittabs.

Інші системи (наприклад, популярний дистрибутив Ubuntu Linux) використовують папку /etc/init.d, яка містить сценарії для запуску та зупинки окремих програм під час завантаження. Сценарії запускаються через записи в папках /etc/rcX.d, де X - рівень запуску.

Можливо, через те, що я новачок у Linux, я не зрозумів, що означає другий абзац. Чи може хтось пояснити те саме набагато простішою мовою?


це було запропоновано багато разів , перш ніж
BSD

@bdowning Цей інший. У мене є контекст. Питання, які я бачу на сторінці, на яку ви пов’язували, відрізняються від цього, IMO.
its_me

@bdowning off, але прапор як дублікат був би більш інформативним, якщо ви відчуваєте це так
n611x007

Відповіді:


30

Давайте забудемо init.dабо rcx.dзбережемо речі дуже просто. Уявіть, що ви програмували програму, відповідальність за яку полягає в тому, щоб запускати або вбивати інші сценарії по одному.

Однак ваша наступна проблема - переконатися, що вони працюють в порядку. Як би ти це виконав?

І давайте уявимо, що ця програма заглянула всередину scriptsпапки для запуску сценаріїв. Щоб упорядкувати пріоритет скриптів, ви б назвали їх у порядку числення. Цей порядок диктує співвідношення між init.dіrc

Іншими словами, init.dмістить сценарії для запуску та rcX.dмістить їх порядок виконання.

XЗначення rcX.d є рівень виконання. Це може бути вільно переведено на поточний стан ОС.

Якщо ви викопаєте всередині rcX.dсценаріїв, ви знайдете таке форматування:

Xxxabcd
  • Xзамінюється на Kабо S, що означає, чи має бути сценарій killedабо startedна поточному рівні запуску
  • xx номер замовлення
  • abcd - це ім'я сценарію (ім'я не має значення, однак там, де воно вказує, це сценарій, який буде виконуватися)

2
чудове пояснення, дуже зрозуміле. Завдяки @whoami
its_me

9

Існує кілька різних систем init для Linux. Основні з них - SysVinit (традиційний), Upstart (заміна Ubuntu) та SystemD (натиснуті Fedora та Gnome). Каталоги /etc/init.dта /etc/rc?.dвикористовуються SysVinit. Книга, можливо, згадує їх щодо Ubuntu, оскільки інформація трохи датована (Ubuntu використовується для використання SysVinit, як і всі інші) або тому, що ці каталоги досі існують для сумісності.

/etc/init.dмістить купу сценаріїв, кожен з яких містить інструкції щодо запуску та припинення послуги. Деякі з цих послуг потрібно запустити під час завантаження; інших потрібно запускати в багатокористувацькому режимі, але не в режимі обслуговування для одного користувача; і можна визначити різні режими з різними наборами бажаних послуг. SysVinit управляє цим за допомогою запущених рівнів . Каталог /etc/rc$N.dмістить сценарії, які потрібно запустити при введенні runlevel N ( /etc/rc$N.d/S*), і сценарії, які потрібно виконати, коли вийде з runlevel N ( /etc/rc$N.d/K*). Оскільки у багатьох Runlevels є спільні сценарії, а не зберігається копія сценаріїв для кожного рівня, всі скрипти зберігаються в одному місці /etc/init.d, а конкретні каталоги для runlevel./etc/rc?.dмістять символічні посилання. Крім того, імена символічних посилань вказують, чи слід запускати службу ( S*) чи зупиняти (вбивати K*) на цьому рівні запуску, а числовий префікс використовується для управління порядком виконання сценаріїв.

Сценарій, відповідальний за пересування, /etc/rc$N.dє /etc/init.d/rc(на попередньому Ustantu та на Debian; місця можуть відрізнятися від інших дистрибутивів Linux).


Так, Ubuntu не використовує /etc/init.dі /etc/rc?.dбільше, і має Upstart замість цього?
its_me

1
@ KrishD'Souza Не зовсім. Ubuntu використовує Upstart замість SysVinit, але багато пакунків все ще доставляють скрипти в /etc/init.d(замість .confфайлів Upstart в /etc/init), тому Upstart все ще підтримує /etc/init.dі /etc/rc?.dсумісність.
Жил "ТАК - перестань бути злим"

Ubuntu перейшов з Upstart на systemd з 15.04. Тож у цей момент (16.04) Ubuntu має три системи init: SysVinit, Upstart та systemd. Перше і друге залишаються для зворотної сумісності.
PetroCliff

4

/etc/init.d - це каталог, де належать скрипти init.

Тут etc/rcX.dзнаходяться посилання, які контролюють, які служби вбиваються або починаються при введенні рівня запуску X. Файли, rcX.dпочинаючи з K, виконуються з параметром stop, а файли, що починаються з S, виконуються з параметром start. Типово для послідовного запуску та припинення замовлення, використовуючи двоцифрове число після Kабо S. Для забезпечення правильного запуску та припинення замовлення, як правило, дві послідовності додають до 100.

Програми можна відключити на рівні запуску, видаливши посилання або змінивши регістр Kабо Sдо kабо s.

EDIT: Адміністратори, як правило, запускають скрипти, з /etc/init.dяких може бути символічне посилання на інший каталог залежно від розповсюдження. (У різних дистрибутивах є різні стандарти.)

Використовуються rcX.dкодом ініціалізації для зміни рівнів запуску.


У більшості систем /etc/init.dє символьним посиланням на каталог під/etc/rc.d/init.d
Nikhil Mulley

1
Отже, в основному /etc/init.dбез даремно /etc/rcX.d? А оскільки /etc/rcX.dконтролер програм, які запускаються при запуску, його функція схожа на функцію /etc/init.d, правда?
its_me

Це залежить від системи. Наприклад, Gentoo використовує лише /etc/init.d для файлів init; у ньому немає каталогів /etc/rc*.d. Arch Linux також має /etc/rc.d замість /etc/init.d.
в'язниця

1

Хоча @BillThor дуже добре відповів на це, ось моє розуміння /etc/rcX.dта /etc/init.d:

  • /etc/init.d містить сценарії для запуску та зупинки окремих програм під час завантаження.
  • /etc/rc?.dкаталоги представляють різні рівні запуску, а скрипти, що містяться всередині, є не що інше, як символічні посилання на фактичні сценарії в /etc/init.dкаталозі. Зміна рівнів запуску змінює режим системи, як самий основний режим єдиного користувача в режим консолі лише для вдосконаленого графічного інтерфейсу.

Отже, використання самих /etc/rc?.dкаталогів без самого /etc/init.dсебе (і звичайно, навпаки).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.