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?
źródło
Odpowiedzi:
Zapomnijmy
init.d
lubrcx.d
zachowajmy 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
scripts
folderu, 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ędzyinit.d
irc
Innymi słowy
init.d
zawiera skrypty do uruchomienia ircX.d
kolejność ich uruchamiania.X
Wartoś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.d
skrypty, znajdziesz następujące formatowanie:X
jest zastępowanyK
lubS
, co oznacza, czy skrypt powinien byćkilled
albostarted
na obecnym poziomie runxx
jest numerem zamówieniaabcd
to nazwa skryptu (nazwa jest nieistotna, jednak tam, gdzie wskazuje skrypt, zostanie on uruchomiony)źródło
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.d
i/etc/rc?.d
są 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.d
zawiera 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.d
zawiera 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?.d
zawierają linki symboliczne. Ponadto nazwy dowiązań symbolicznych wskazują, czy usługa ma zostać uruchomiona (S*
), czy zatrzymana (zabitaK*
) na tym poziomie pracy, a prefiks numeryczny służy do sterowania kolejnością wykonywania skryptów.Skrypt odpowiedzialny za przechodzenie
/etc/rc$N.d
jest/etc/init.d/rc
(na Ubuntu przed aktualizacją i na Debianie; lokalizacje mogą się różnić w innych dystrybucjach Linuksa).źródło
/etc/init.d
i/etc/rc?.d
zamiast tego ma Upstart?/etc/init.d
(zamiast.conf
plików Upstart w/etc/init
), więc Upstart nadal obsługuje/etc/init.d
i/etc/rc?.d
jest kompatybilny./etc/init.d
to katalog, do którego należą skrypty inicjujące.To
etc/rcX.d
tam łącza kontrolujące, które usługi są zabijane lub uruchamiane podczas wchodzenia na poziom działaniaX
. PlikircX.d
rozpoczynające się od K są wykonywane z parametremstop
, a pliki rozpoczynające się odS
są wykonywane z parametremstart
. Typowe jest sekwencjonowanie uruchamiania i zatrzymywania zamówienia za pomocą dwucyfrowej liczby poK
lubS
. 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
K
lubS
nak
lubs
.EDYCJA: Administratorzy zazwyczaj uruchamiają skrypty, z
/etc/init.d
których może być dowiązanie symboliczne do innego katalogu w zależności od dystrybucji. (Różne dystrybucje mają różne standardy).Są
rcX.d
one używane przez kod inicjujący do zmiany poziomów uruchamiania.źródło
/etc/init.d
jest to dowiązanie symboliczne do katalogu pod/etc/rc.d/init.d
/etc/init.d
jest bezużyteczny bez/etc/rcX.d
? A ponieważ/etc/rcX.d
kontroler programów uruchamianych przy uruchomieniu, jego funkcja jest podobna do tej/etc/init.d
, prawda?Chociaż @BillThor odpowiedział na nie bardzo dobrze, oto moje rozumienie
/etc/rcX.d
i/etc/init.d
:/etc/init.d
zawiera skrypty do uruchamiania i zatrzymywania poszczególnych aplikacji podczas rozruchu./etc/rc?.d
katalogi reprezentują różne poziomy uruchamiania, a zawarte w nich skrypty są jedynie symbolicznymi linkami do rzeczywistych skryptów w/etc/init.d
katalogu. 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?.d
katalogów bez/etc/init.d
samego siebie (i oczywiście na odwrót).źródło