Skip to content

Jak používat příkaz ‚init‘ v Linuxu

31 de Červenec de 2021
GettyImages 115810256 2fdee9c7ea09425eaa3417fab8aec4a2

Init je rodičem všech procesů Linuxu. Je to první proces, který se spustí, když se počítač spustí a běží, dokud se systém nevypne. Je předchůdcem všech ostatních procesů. Jeho primární rolí je vytvářet procesy ze skriptu uloženého v souboru /etc/inittab. Tento soubor obvykle ukládá položky, které způsobují Init aby se na každém řádku objevily getty, do kterých se mohou uživatelé systému přihlásit. Také ovládá autonomní procesy požadované jakýmkoli konkrétním systémem.

Úrovně běhu

A úroveň běhu je softwarová konfigurace systému, která umožňuje spuštění pouze vybrané skupině procesů. Procesy, které vznikly Init pro každou z těchto úrovní běhu jsou definovány v souboru /etc /inittab. Init podporuje osm úrovní běhu: 0 přes 6 a S nebo s. Úroveň běhu se změní při spuštění privilegovaného uživatele Telinit, který vysílá příslušné signály na Inita řekne, na kterou úroveň běhu se má změnit. Úrovně běhu 0, 1 a 6 jsou vyhrazeny. Runlevel 0 zastaví systém, runlevel 6 restartuje systém a runlevel 1 vynutí systém do režimu jednoho uživatele. Runlevel S není určen k použití přímo, ale místo toho pomocí skriptů, které jsou spuštěny při spuštění runlevel 1. Úrovně běhu 7 až 9 jsou platné, ale nejsou dobře zdokumentovány, protože konvenční varianty Unixu je nepoužívají. Úrovně běhu S a s jsou stejné.

Bootování

Po Init spustí se jako poslední krok spouštěcí sekvence jádra, vyhledá soubor /etc /inittab, aby zjistil, zda existuje položka typu initdefault. Položka initdefault určuje počáteční úroveň běhu systému. Pokud takový záznam neexistuje (nebo žádný /etc /inittab vůbec), je třeba na systémové konzole zadat úroveň běhu. Runlevel S or s přepne systém do režimu pro jednoho uživatele a nevyžaduje soubor /etc /inittab. V režimu pro jednoho uživatele se kořenový shell otevře na /dev /console. Při vstupu do režimu jednoho uživatele inic čte stavy ioctl konzoly z /etc/ioctl.save. Pokud tento soubor neexistuje, inic inicializuje linku na 9600 baudů a s nastavením CLOCAL. Když inic opouští režim jednoho uživatele, do tohoto souboru ukládá nastavení ioctl konzoly, aby je mohl znovu použít pro další relaci jednoho uživatele. Při prvním vstupu do víceuživatelského režimu Init provádí položky boot a bootwait, aby se systémy souborů mohly připojit před přihlášením uživatelů. Poté všechny položky odpovídají procesu runlevel. Při zahájení nového procesu Init nejprve zkontroluje, zda soubor /etc /initscript existuje. Pokud ano, použije tento skript ke spuštění procesu. Pokaždé, když dítě skončí, Init zaznamenává skutečnost a důvod, proč zemřel, do/var/run/utmp a/var/log/wtmp, pokud tyto soubory existují.

Změna úrovní běhu

Obrazovka nápovědy Telinit

Poté, co spustí všechny uvedené procesy, Init čeká, až zemře jeden z jeho následných procesů, signál výpadku napájení, nebo dokud není Telinitem signalizováno, aby změnilo úroveň běhu systému. Když nastane jedna z těchto tří podmínek, znovu prozkoumá soubor /etc /inittab. Do tohoto souboru lze kdykoli přidat nové položky. Nicméně, inic stále čeká, až nastane jedna z výše uvedených tří podmínek. Aby byla zajištěna okamžitá odezva, Telinit Q příkaz se probouzí Init znovu prozkoumejte soubor /etc /inittab. Li Init není v režimu pro jednoho uživatele a přijímá signál výpadku napájení, čte soubor /etc /powerstatus. Poté spustí příkaz na základě obsahu tohoto souboru:

  • F(AIL): Napájení nefunguje, napájení zajišťuje UPS. Proveďte powerwait a powerfail zápisy.
  • Ó(K): Napájení bylo obnoveno, proveďte powerokwait zápisy.
  • L(OW): Napájení selhává a UPS má vybitou baterii. Proveďte powerfailnow zápisy.

Pokud /etc /powerstatus neexistuje nebo obsahuje něco jiného než písmena F, O nebo L, Init chová se, jako by četlo písmeno F. Používání SIGPWR a /etc /powerstatus se nyní nedoporučuje. V moderních distribucích Linuxu použijte ovládací kanál /dev /initctl. Když Init je požádán o změnu úrovně běhu, odešle varovný signál SIGTERM všem procesům, které jsou v nové úrovni běhu nedefinovány. Poté čeká pět sekund, než tyto procesy násilně ukončí pomocí signálu SIGKILL. Init předpokládá, že všechny tyto procesy a jejich potomci zůstávají ve stejné skupině procesů, která Init původně vytvořené pro ně. Pokud některý proces změní příslušnost ke skupině procesů, tyto signály neobdrží. Takové procesy musí být ukončeny samostatně.

Telinit

Telinit je propojeno s /sbin /init. Vyžaduje jednoznakový argument a signály Init provést příslušnou akci. Následující argumenty slouží jako směrnice Telinit:

  • 0, 1, 2, 3, 4, 5 nebo 6: Přepněte na zadanou úroveň běhu.
  • a, b, c: Zpracovávejte pouze ty položky souboru /etc /inittab, které mají úroveň běhu a, b nebo c.
  • Otázka nebo q: Znovu prozkoumejte soubor /etc /inittab.
  • S nebo s: Přepnout do režimu pro jednoho uživatele. Někdy se nazývá režim pro jednoho uživatele Režim zotavení protože se často používá k provádění nouzových oprav systému.
  • U nebo u: Znovu spustit (zachování stavu). K opětovnému prozkoumání souboru /etc /inittab nedochází. Úroveň běhu by měla být S, s, 1, 2, 3, 4 nebo 5; jinak je požadavek tiše ignorován.

Telinit může také říci Init jak dlouho by mělo čekat mezi procesy odesílání signálů SIGTERM a SIGKILL. Výchozí hodnota je pět sekund, ale tuto hodnotu lze změnit pomocí -t sek volba.

Telinit mohou vyvolat pouze uživatelé s příslušnými oprávněními. The Init binární kontroly, pokud ano Init nebo Telinit pohledem na jeho ID procesu. Skutečný InitID procesu ‚je vždy 1. Z toho vyplývá, že místo volání Telinit, může člověk použít Init jako zkratka.