Jaki jest związek między katalogami „/etc/init.d” i „/etc/rcX.d” w systemie Linux?

25

Uczę się wiersza poleceń z książki „ Linux Command Line and Shell Scripting Bible, Second Edition ”. Książka stwierdza:

Niektóre implementacje systemu Linux zawierają tabelę procesów uruchamianych automatycznie podczas uruchamiania. W systemach Linux tabela ta zwykle znajduje się w specjalnym pliku / etc / inittabs.

Inne systemy (takie jak popularna dystrybucja Ubuntu Linux) wykorzystują folder /etc/init.d, który zawiera skrypty do uruchamiania i zatrzymywania poszczególnych aplikacji podczas rozruchu. Skrypty są uruchamiane za pomocą wpisów w folderach /etc/rcX.d, gdzie X jest poziomem uruchamiania.

Prawdopodobnie dlatego, że jestem nowy w systemie Linux, nie rozumiałem, co oznacza drugi cytowany akapit. Czy ktoś może to samo wytłumaczyć w prostszym języku?

to ja
źródło
ten został poproszony wiele razy wcześniej
BSD
@bdowning Ten jest inny. Mam kontekst. Pytania, które widzę na stronie, do której linkujesz, różnią się od IMO.
its_me
@ wyłączam się, ale oznacz jako duplikat byłby bardziej pouczający, jeśli tak uważasz
n611x007

Odpowiedzi:

30

Zapomnijmy init.dlub rcx.dzachowajmy to bardzo prosto. Wyobraź sobie, że programujesz program, którego wyłączną odpowiedzialnością jest uruchamianie lub zabijanie innych skryptów jeden po drugim.

Jednak następnym problemem jest upewnienie się, że działają w kolejności. Jak byś to zrobił?

Wyobraźmy sobie, że ten program zajrzał do scriptsfolderu, w którym można uruchamiać skrypty. Aby uporządkować priorytet skryptów, nazwijmy je w, powiedzmy, w kolejności numerycznej. Ta kolejność decyduje o relacji między init.dirc

Innymi słowy init.dzawiera skrypty do uruchomienia i rcX.dkolejność ich uruchamiania.

XWartością rcX.d jest poziom run. Można to luźno przetłumaczyć na bieżący stan systemu operacyjnego.

Jeśli zagłębisz się w rcX.dskrypty, znajdziesz następujące formatowanie:

Xxxabcd
  • Xjest zastępowany Klub S, co oznacza, czy skrypt powinien być killedalbo startedna obecnym poziomie run
  • xx jest numerem zamówienia
  • abcd to nazwa skryptu (nazwa jest nieistotna, jednak tam, gdzie wskazuje skrypt, zostanie on uruchomiony)
kim jestem
źródło
2
wspaniałe wyjaśnienie, bardzo jasne. Dzięki @whoami
its_me
9

Istnieje kilka różnych systemów inicjujących dla Linuksa. Głównymi są SysVinit (tradycyjny), Upstart (zamiennik Ubuntu) i SystemD (pchnięty przez Fedorę i Gnome). Katalogi /etc/init.di /etc/rc?.dsą używane przez SysVinit. Książka może wymieniać je w odniesieniu do Ubuntu, ponieważ informacje są nieco przestarzałe (Ubuntu używał SysVinit jak wszyscy inni) lub ponieważ te katalogi nadal istnieją dla kompatybilności.

/etc/init.dzawiera kilka skryptów, z których każdy zawiera instrukcje uruchamiania i zatrzymywania usługi. Niektóre z tych usług należy uruchomić w czasie uruchamiania; inne należy uruchomić w trybie wielu użytkowników, ale nie w trybie konserwacji dla jednego użytkownika; i możliwe jest zdefiniowanie różnych trybów z różnymi zestawami pożądanych usług. SysVinit zarządza tym poprzez poziomy pracy . Katalog /etc/rc$N.dzawiera skrypty, które mają być uruchamiane przy wprowadzaniu poziomu uruchamiania N ( /etc/rc$N.d/S*) oraz skrypty do uruchamiania podczas opuszczania poziomu uruchamiania N ( /etc/rc$N.d/K*). Ponieważ wiele poziomów pracy ma wspólne skrypty, zamiast przechowywać kopię skryptów dla każdego poziomu pracy, wszystkie skrypty są przechowywane w jednym miejscu /etc/init.d, a katalogi specyficzne dla poziomu pracy/etc/rc?.dzawierają linki symboliczne. Ponadto nazwy dowiązań symbolicznych wskazują, czy usługa ma zostać uruchomiona ( S*), czy zatrzymana (zabita K*) na tym poziomie pracy, a prefiks numeryczny służy do sterowania kolejnością wykonywania skryptów.

Skrypt odpowiedzialny za przechodzenie /etc/rc$N.djest /etc/init.d/rc(na Ubuntu przed aktualizacją i na Debianie; lokalizacje mogą się różnić w innych dystrybucjach Linuksa).

Gilles „SO- przestań być zły”
źródło
Więc Ubuntu już nie używa /etc/init.di /etc/rc?.dzamiast tego ma Upstart?
its_me
1
@ KrishD'Souza Niezupełnie. Ubuntu używa Upstart zamiast SysVinit, ale wiele pakietów wciąż dostarcza skrypty /etc/init.d(zamiast .confplików Upstart w /etc/init), więc Upstart nadal obsługuje /etc/init.di /etc/rc?.djest kompatybilny.
Gilles „SO- przestań być zły”
Ubuntu przeszedł z Upstart na systemd od 15.04. W tej chwili (16.04) Ubuntu ma trzy systemy inicjujące: SysVinit, Upstart i systemd. Pierwszy i drugi są pozostawione do kompatybilności wstecznej.
PetroCliff
4

/etc/init.d to katalog, do którego należą skrypty inicjujące.

To etc/rcX.dtam łącza kontrolujące, które usługi są zabijane lub uruchamiane podczas wchodzenia na poziom działania X. Pliki rcX.drozpoczynające się od K są wykonywane z parametrem stop, a pliki rozpoczynające się od Ssą wykonywane z parametrem start. Typowe jest sekwencjonowanie uruchamiania i zatrzymywania zamówienia za pomocą dwucyfrowej liczby po Klub S. Aby zapewnić prawidłowe rozpoczynanie i zatrzymywanie kolejności, często dwie sekwencje sumują się do 100.

Programy można wyłączyć na poziomie uruchamiania, usuwając łącza lub zmieniając wielkość liter w Klub Sna klub s.

EDYCJA: Administratorzy zazwyczaj uruchamiają skrypty, z /etc/init.dktórych może być dowiązanie symboliczne do innego katalogu w zależności od dystrybucji. (Różne dystrybucje mają różne standardy).

rcX.done używane przez kod inicjujący do zmiany poziomów uruchamiania.

BillThor
źródło
W większości systemów /etc/init.djest to dowiązanie symboliczne do katalogu pod/etc/rc.d/init.d
Nikhil Mulley
1
Więc w zasadzie /etc/init.djest bezużyteczny bez /etc/rcX.d? A ponieważ /etc/rcX.dkontroler programów uruchamianych przy uruchomieniu, jego funkcja jest podobna do tej /etc/init.d, prawda?
its_me
To zależy od systemu. Na przykład Gentoo używa tylko /etc/init.d dla swoich plików init; nie ma katalogów /etc/rc*.d. Arch Linux, podobnie, ma tylko /etc/rc.d, zamiast /etc/init.d.
laebshade
1

Chociaż @BillThor odpowiedział na nie bardzo dobrze, oto moje rozumienie /etc/rcX.di /etc/init.d:

  • /etc/init.d zawiera skrypty do uruchamiania i zatrzymywania poszczególnych aplikacji podczas rozruchu.
  • /etc/rc?.dkatalogi reprezentują różne poziomy uruchamiania, a zawarte w nich skrypty są jedynie symbolicznymi linkami do rzeczywistych skryptów w /etc/init.dkatalogu. Zmiana poziomów uruchamiania zmienia tryb systemu, na przykład bardzo prosty tryb dla pojedynczego użytkownika, tryb tylko na konsolę i zaawansowany interfejs graficzny.

Tak więc nie ma zastosowania /etc/rc?.dkatalogów bez /etc/init.dsamego siebie (i oczywiście na odwrót).

to ja
źródło