Linux Vysoké boty

Jak se ukázalo, proces zavádění není moc:

1. Zavaděč najde obraz jádra na disk, načte jej do paměti a spustí.
2. Jádro inicializovat zařízení a STI ovladače.
3. Jádro připojí kořenový souborsystem.
4. Jádro začne init Volat naplánovat.
5. init nastaví zbytek procesů v pohybu.
6. Poslední procesům, které init spustí jako součást zavádění systému vám umožní přihlášení.

Identifikace každé fáze procesu spouštění je neocenitelná při řešení problémů se spuštěním a porozumění system jako celek. Chcete-li začít, přihlaste se v zavaděči, což je úvodní obrazovka nebo výzva, která se zobrazí po provedení autotestu počítače při zapnutí, s dotazem, který operační systém system běžet. Po provedení volby spustí zavaděč Linux jádra, předání kontroly nad system do jádra.

K dispozici je podrobná diskuse o jádra jinde v této knize, z nichž je výňatek tento článek. Tento článek se vztahuje na Jádro inicializace fáze, fáze, kdy jádro vytiskne spoustu zpráv o hardwaru přítomném na disku system. Jádro spustí init hned poté, co zobrazí zprávu, že jádro připojilo kořenový souborsystem:

VFS: Mounted root (soubory ext2system) pouze ke čtení.

Brzy poté uvidíte zprávu o spuštění init, následovanou system zprávy o spuštění služby a nakonec se zobrazí nějaká výzva k přihlášení.

POZNÁMKA : On Red Hat Linux, úvodní poznámka je obzvláště zřejmá, protože vás „vítá“ v Red Hatu Linux.“ Všechny zprávy poté ukazují úspěch nebo neúspěch v závorkách na pravé straně obrazovky.

Většina z této kapitoly se zabývá init, protože to je součástí spouštěcí sekvenci, kde máte největší kontrolu.
init

Na init není nic zvláštního. Je to program jako každý jiný na Linux system, a najdete jej v / sbin spolu s dalšími system binární soubory. Hlavním účelem init je spustit a zastavit další programy v určitém pořadí. Musíte jen vědět, jak tato sekvence funguje.

Existuje několik různých variant, ale většina Linux distribuce používají System Styl V zde diskutován. Některé distribuce používají jednodušší verzi, která se podobá BSD init, ale je nepravděpodobné, že se s tím setkáte.

Runlevels

Kdykoli na a Linux system, běží určitá základní sada procesů. Tento stav machine se nazývá jeho runlevel a označuje se číslem od 0 do 6. The system tráví většinu času na jediné úrovni běhu. Když však zavřete machine down, init přepne na jinou úroveň běhu, aby ukončil system služby uspořádaným způsobem a říct jádru, aby přestalo. Další úroveň běhu je určena pro jednoho uživatele mode, projednáno později.

Nejjednodušší způsob, jak získat informace o úrovních běhu, je prozkoumat konfigurační soubor init /etc/inittab. Hledejte řádek jako je tento:

ID: 5: initdefault:

Tento řádek znamená, že default runlevel na system je 5. Všechny řádky v souboru inittab mají tento tvar, přičemž čtyři pole oddělená dvojtečkami se vyskytují v následujícím pořadí:
# Jedinečný identifikátor (krátký řetězec, například id v předchozím příkladu)
# Použitelné runlevel číslo (čísla)
# Akce, kterou by měl provést init (v předchozím příkladu je akcí nastavit default úroveň běhu na 5)
# Příkaz k provedení (volitelně)

V předchozím init není žádný příkaz k provedenídefault příklad, protože příkaz nedává smysl v kontextu nastavení default runlevel. Podívejte se na inittab trochu dále, dokud neuvidíte řádek jako tento:

l5: 5: wait :/ etc / rc.d / rc 5

Tento řádek spouští většinu z system konfigurace a služby prostřednictvím adresářů rc * .d a init.d. Vidíte, že init je nastaven na spuštění příkazu s názvem /etc/rc.d/rc 5, když je na úrovni runlev 5. Akce čekání říká, kdy a jak spustí příkaz init: spustit rc 5 jednou, když entering runlevel 5 a počkejte, až tento příkaz skončí, než uděláte cokoli jiného.

V systému je několik různých akcí addnávrh na zahájenídefault a počkejte, zejména pokud jde o správu napájení, a stránka manuálu inittab (5) vám o nich řekne vše. Ty, s nimiž se s největší pravděpodobností setkáte, jsou vysvětleny v následujících částech.

respawn

Akce respawn způsobí, že init spustí příkaz, který následuje, a pokud příkaz dokončí provádění, spustí jej znovu. V souboru inittab pravděpodobně uvidíte něco podobného jako tento řádek:

1: 2345: respawn :/ sbin / mingetty tty1

Getty programy poskytují přihlásit výzvy. Předchozí linka je na první virtuální konzoli (/ dev / tty1), kterou vidíte-li klávesu ALT nebo CONTROL-ALT-F1 F1. Respawn akce přináší přihlašovací řádek zpět po odhlášení.

ctrlspol

Projekt ctrlaltdel akce řídí, co system dělá, když stisknete CONTROL-ALT-DELETE na virtuální konzole. Na většině systems, toto je nějaký druh restartu pomocí příkazu vypnutí.

sysinit

Akce sysinit je první věcí, kterou by měl init spustit, když se spustí, dříve enterv jakýchkoli běžných úrovních.

Jak procesy v runlevelů kdo

Nyní jste připraveni se naučit, jak zahájit system služby, těsně předtím, než vám umožní přihlášení. Připomeňte si tento řádek inittab z dřívějšího:

l5: 5: wait :/ etc / rc.d / rc 5

Tato malá linka vyvolá mnoho dalších programů. rc znamená rozběhu, a uslyšíte lidé se odkazují na příkazy jako skripty, programy nebo službami. Tak, kde jsou tyto příkazy, vlastně je?

Pro runlevel 5 jsou v tomto příkladu příkazy pravděpodobně buď v /etc/rc.d/rc5.d nebo /etc/rc5.d. Runlevel 1 používá rc1.d, runlevel 2 používá rc2.d atd. Můžete najít následující items v adresáři rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

Rc 5 příkaz spustí programy v tomto runlevelu adresáři spuštěním příkazů následujících:

S10sysklogd home
S12kerneld home
S15netstd_init home
S18netbase home
...
S99sshd home

Všimněte si argumentu start v každém příkazu. S v názvu příkazu znamená, že příkaz by se měl spustit na začátku modea číslo (00 až 99) určuje, kde v sekvenci rc spustí příkaz.

* Rc. D příkazů je Obvyklé Start Programy, že Shell skripty v / sbin nebo / usr / sbin. Normálně, můžete zjistit, co jeden z příkazů skutečně se při pohledu na scénář s menším nebo pager Další programu.

Jednu z těchto služeb můžete spustit ručně. Například pokud chcete spustit program webového serveru httpd ručně, spusťte S99httpd start. Podobně, pokud někdy potřebujete zabít jednu ze služeb, když machine je zapnutý, můžete spustit příkaz v adresáři rc * .d s argumentem stop (například S99httpd stop).

Některé adresáře rc*.d obsahují příkazy, které začínají na K (pro "kill" nebo stop mode). V tomto případě rc spustí příkaz s argumentem stop namísto start. S příkazy K se s největší pravděpodobností setkáte v úrovních běhu, které zavírají system dolů.

Addslužby a odebírání

Pokud chcete add, odstranit nebo upravit služby v adresářích rc*.d, musíte se blíže podívat na soubory uvnitř. Dlouhý seznam odhaluje strukturu jako je tato:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Příkazy v adresáři rc*.d jsou ve skutečnosti symbolické odkazy na soubory v adresáři init.d, obvykle v /etc nebo /etc/rc.d. Linux distribuce obsahují tyto odkazy, takže mohou používat stejné spouštěcí skripty pro všechny úrovně běhu. Tato konvence není v žádném případě podmínkou, ale často trochu usnadňuje organizaci.

Chcete-li zabránit tomu, aby jeden z příkazů v adresáři init.d běžel na konkrétní úrovni běhu, můžete myslet na odebrání symbolického odkazu v příslušném adresáři rc * .d. To sice funguje, ale pokud uděláte chybu a budete někdy potřebovat odkaz vrátit na místo, můžete mít potíže s zapamatováním si přesného názvu odkazu. Proto byste neměli odstraňovat odkazy v adresářích rc * .d, ale spíše add podtržítko (_) na začátek názvu odkazu takto:

mv S99httpd _S99httpd

V době spuštění rc ignoruje _S99httpd, protože nezačíná na S nebo K. Kromě toho je původní název stále zřejmý a máte rychlý přístup k příkazu, pokud jste v nouzi a potřebujete jej spustit ručně.

Na add služba, musíte vytvořit skript jako ostatní v adresáři init.d a poté vytvořit symbolický odkaz ve správném adresáři rc * .d. Nejjednodušší způsob, jak napsat skript, je prozkoumat skripty, které jsou již v init.d, vytvořit kopii toho, kterému rozumíte, a upravit kopii.

Kdy addPokud chcete spustit službu, ujistěte se, že jste zvolili vhodné místo v bootovací sekvenci. Pokud se služba spustí příliš brzy, nemusí fungovat kvůli závislosti na jiné službě. U nepodstatných služeb nejvíce systems administrators preferují čísla v 90. letech, po většině služeb, které přišly s system.

Linux distribuce obvykle přicházejí s příkazem pro povolení a zakázání služeb v adresářích rc * .d. Například v Debianu je příkaz update-rc.d a v Red Hat Linux, příkaz je chkconfig. K dispozici jsou také grafická uživatelská rozhraní. Použití těchto programů pomáhá udržovat spouštěcí adresáře konzistentní a pomáhá s upgrady.

TIP: Jeden z nejběžnějších Linux installproblémem je nesprávně nakonfigurovaný server XFree86, který se rychle zapíná a vypíná, takže system nepoužitelný na konzolích. Chcete-li toto chování zastavit, spusťte systém pro jednoho uživatele mode a změnit úroveň běhu nebo služby úrovně běhu. Hledejte něco, co obsahuje xdm, gdm nebo kdm v adresářích rc*.d nebo v /etc/inittab.

Ovládání init

Občas musíte init trochu nakopnout, abyste mu řekli, aby přepnul úrovně běhu, aby znovu načetl soubor inittab nebo shut down ο system. Protože init je vždy první proces na a system, jeho ID procesu je vždy 1.

Můžete ovládat init s celerem. Například, pokud chcete přejít na runlevelu 3, použijte tento příkaz:

telinit 3

Při přepínání úrovní běhu se init pokusí ukončit všechny procesy, které nejsou v souboru inittab pro novou úroveň běhu. Proto byste měli být opatrní při změně úrovní běhu.

Když potřebujete add nebo odstranit úlohy respawningu nebo provést jakoukoli jinou změnu v souboru inittab, musíte o změně informovat init a nechat jej znovu načíst soubor. Někteří lidé používají kill -HUP 1, aby řekli init, aby to udělal. Tato tradiční metoda funguje na většině verzí Unixu, pokud ji napíšete správně. Můžete však také spustit tento příkaz telinit:

telinit q

Můžete také použít telinit s pro přechod na jednouživatelský mode.

Vypínání

init také řídí, jak system vypne a restartuje. Správný způsob shut down a Linux machine je použít příkaz vypnutí.

Existují dva základní způsoby použití vypnutí. Pokud zastavíte system, zavírá to machine down a drží to dole. Chcete-li macokamžitě zastavte, použijte tento příkaz:

shutdown-h now

Na většinu modern machines s přiměřeně nejnovějšími verzemi Linux, zastavení přeruší napájení machine. Můžete také restartovat machine. Při restartu použijte místo -h místo -r.

Proces vypnutí trvá několik sekund. Nikdy byste neměli resetovat nebo vypínat a machine během této fáze.

V předchozím příkladu je nyní čas na shut down. Tento argument je povinný, ale existuje mnoho způsobů, jak jej specifikovat. Pokud chcete macChcete-li někdy v budoucnu spadnout, jedním ze způsobů je použít + n, kde n je počet minut, po které by vypnutí mělo čekat, než bude pracovat. Pro ostatní options, podívejte se na manuálovou stránku vypnutí (8).

Chcete-li system restartujte za 10 minut, spusťte tento příkaz:

shutdown-r + 10

On Linux, vypnutí upozorní každého přihlášeného, ​​že machine jde dolů, ale dělá to málo skutečné práce. Pokud zadáte jiný čas než nyní, vypnutí vytvoří soubor s názvem /etc/nologin. Když je tento soubor přítomen, system zakazuje přihlášení kdokoli kromě superuživatele.

Kdy system konečně dorazí čas vypnutí, vypnutí říká inici, aby přepnul na runlevel 0 pro zastavení a runlevel 6 pro restart. Když init enters runlevel 0 nebo 6, proběhne vše, co si můžete ověřit při pohledu na skripty uvnitř rc0.d a rc6.d:

1. init zabije každého procesu, který je v jeho silách (jako by při přechodu k jinému runlevelu).

# Počáteční příkazy rc0.d / rc6.d běží, zamykají se system soubory na místo a další přípravy na odstavení.
# Další příkazy rc0.d/rc6.d odpojí všechny souborysystemjiné než root.
# Další příkazy rc0.d/rc6.d znovu připojte kořenový souborsystem pouze ke čtení.
# Ještě více příkazů rc0.d/rc6.d zapisuje všechna data ve vyrovnávací paměti do souborusystem se synchronizačním programem.
# Konečné rc0.d / rc6.d příkazy říct, že jádro restartovat nebo zastavit s restartem, zastavení nebo vypínání programu.

Programy restartu a zastavení se chovají pro každou úroveň běhu odlišně, což může způsobit zmatek. podle default, tyto programy volají vypnutí pomocí -r nebo -h options, ale pokud system je již na zastavené nebo restartované úrovni běhu, programy řeknou jádru, aby se okamžitě vyplo. Pokud opravdu chcete zavřít macsvižně spěchejte (bez ohledu na případné poškození z neuspořádaného vypnutí), použijte volbu -f.

Věnovaný technologiím, s radostí píši na StealthSettings.com od roku 2006. Mám bohaté zkušenosti s operačními systémy: macOS, Windows a Linux, stejně jako s programovacími jazyky a platformami pro blogování (WordPress) a pro online obchody (WooCommerce, Magento, PrestaShop).

Zanechat komentář