Какая связь между каталогами «/etc/init.d» и «/etc/rcX.d» в Linux?

25

Я изучаю командную строку из книги под названием « Командная строка Linux и Shell Scripting Bible, Second Edition ». Книга утверждает это:

Некоторые реализации Linux содержат таблицу процессов, которые запускаются автоматически при загрузке. В системах Linux эта таблица обычно находится в специальном файле / etc / inittabs.

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

Вероятно, потому, что я новичок в Linux, я не понимал, что означает второй процитированный параграф. Может кто-нибудь объяснить то же самое на более простом языке?

это я
источник
это было предложено много раз , прежде чем
BSD
@bdowning Это другой. У меня есть контекст. Вопросы, которые я вижу на странице, на которую вы ссылаетесь, отличаются от этих, ИМО.
its_me
@ выключить, но пометить как дубликат было бы более информативным, если вы чувствуете это
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

Существует несколько разных систем инициализации для 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содержатся сценарии, запускаемые при вводе уровня запуска N ( /etc/rc$N.d/S*), и сценарии, запускаемые при выходе из уровня запуска N ( /etc/rc$N.d/K*). Поскольку многие уровни выполнения имеют общие сценарии, а не хранят копии сценариев для каждого уровня выполнения, все сценарии хранятся в одном месте /etc/init.d, а специфичные для уровня запуска каталоги/etc/rc?.dсодержат символические ссылки. Кроме того, имена символических ссылок указывают, должен ли сервис запускаться ( S*) или останавливаться (убиваться K*) на этом уровне выполнения, а числовой префикс используется для управления порядком выполнения сценариев.

Сценарий, отвечающий за обход /etc/rc$N.d: /etc/init.d/rc(в Ubuntu до запуска и в 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 есть три системы инициализации: SysVinit, Upstart и systemd. Первое и второе оставлены для обратной совместимости.
PetroCliff
4

/etc/init.d каталог, в котором находятся скрипты инициализации.

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

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

РЕДАКТИРОВАТЬ: администраторы обычно запускают сценарии, из /etc/init.dкоторых может быть символическая ссылка на другой каталог, в зависимости от распространения. (Разные дистрибутивы имеют разные стандарты.)

rcX.dИспользуется в коде инициализации изменить уровни выполнения.

BillThor
источник
На большинстве систем /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 для своих файлов инициализации; у него нет каталогов /etc/rc*.d. Arch Linux, аналогично, имеет только /etc/rc.d вместо /etc/init.d.
laebshade
1

Хотя @BillThor ответил очень хорошо, вот мое понимание /etc/rcX.dи /etc/init.d:

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

Таким образом, /etc/rc?.dкаталоги не используются без самого /etc/init.dсебя (и, конечно, наоборот).

это я
источник