Linux Boots


Ako sa ukázalo, proces zavádzania nie je veľa:

1. Boot loader Nájde obraz jadra na disku, načíta do pamäte, a spustí ju.
2. Jadro inicializovať zariadenia a STI ovládače.
3. Jadro pripojí koreň filesystem.
4. Jadro začne init Volať naplánovať.
5. init nastaví zvyšok procesov v pohybe.
6. Posledný procesom, ktoré init spustí ako súčasť zavádzania systému vám umožní prihlásenie.

Identifikácia každej fázy procesu zavádzania je neoceniteľná pri riešení problémov so zavádzaním a porozumení system ako celok. Ak chcete začať, vynulujte bootovací zavádzač, čo je úvodná obrazovka alebo výzva, ktorú dostanete po vykonaní samočinného testu počítača pri zapnutí, pričom sa opýtate, ktoré system bežať. Po výbere bootovací nakladač spustí jadro Linuxu a odovzdá kontrolu nad system do jadra.

K dispozícii je podrobná diskusia o jadra inde v tejto knihe, z ktorých je výňatok tento článok. Tento článok sa vzťahuje na Jadro inicializácia fázy, fáza, kedy jadro vytlačí veľa správ o hardvéri prítomnom na serveri system. Jadro začne inicializovať hneď potom, čo zobrazí správu, že jadro je pripojené koreň filesystem:

VFS: Mounted koreň (ext2 filesystem) iba na čítanie.

Čoskoro potom uvidíte správu o spustení init, po ktorej bude nasledovať system správy o spustení služby a nakoniec dostanete nejaký výzva na prihlásenie.

Poznámky Na Red Hat Linux, úvodná poznámka je obzvlášť zrejmá, pretože vás „víta“ v „Red Hat Linux“. Všetky správy potom ukazujú úspech alebo neúspech v zátvorkách na pravej strane obrazovky.

Väčšina z tejto kapitoly sa zaoberá init, pretože to je súčasťou spúšťací sekvenciu, kde máte najväčšiu kontrolu.
init

Na init nie je nič zvláštne. Je to program ako každý iný v systéme Linux system, a nájdete ho v / sbin spolu s ďalšími system dvojhviezdy. Hlavným účelom init je spustenie a zastavenie ďalších programov v konkrétnom poradí. Musíte len vedieť, ako táto sekvencia funguje.

Existuje niekoľko rôznych variácií, ale väčšina linuxových distribúcií používa System Štýl V diskutovaný tu. Niektoré distribúcie používajú jednoduchšiu verziu, ktorá sa podobá BSD init, ale je nepravdepodobné, že by ste sa s ňou stretli.

Runlevels

Kedykoľvek v systéme Linux system, je spustená určitá základná sada procesov. Tento stav machine sa nazýva jeho úroveň behu a označuje sa číslom od 0 do 6. system trávi väčšinu času na jednej úrovni úrovne. Keď však zatvoríte macsklopiť, init prepne na inú úroveň behu, aby ukončil system usporiadaným spôsobom a povedať jadru, aby zastavilo. Ešte ďalšia úroveň je pre režim pre jedného používateľa, o ktorej sa pojednáva neskôr.

Najjednoduchší spôsob, ako získať popisovač na úrovni runlevels, je preskúmať konfiguráciu init file, / etc / inittab. Vyhľadajte nasledujúci riadok:

ID: 5: začdefault:

Tento riadok znamená, že default runlevel na system je 5. Všetky riadky na karte inittab file mať túto formu, so štyrmi poľami oddelenými dvojbodkami v nasledujúcom poradí:
# Jedinečný identifikátor (krátky reťazec, napríklad id v predchádzajúcom príklade)
# Použiteľné úrovne behu číslo (čísla)
# Akcia, ktorú by mal podniknúť init (v predchádzajúcom príklade je nastavená akcia default úroveň úrovne 5)
# Príkaz na vykonanie (voliteľne)

V predchádzajúcom init nie je žiadny príkaz na vykonaniedefault príklad, pretože príkaz nemá zmysel v kontexte nastavenia default runlevel. Pozerajte sa trochu ďalej dolu na inittab, kým neuvidíte tento riadok:

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

Tento riadok spúšťa väčšinu system konfigurácia a služby prostredníctvom adresárov rc * .d a init.d. Môžete vidieť, že init je nastavený na vykonanie príkazu s názvom /etc/rc.d/rc 5, keď je na úrovni runlev 5. Akcia čakania informuje, kedy a ako spustí príkaz init: spustiť rc 5 raz, keď entering runlevel 5, a potom počkajte, kým tento príkaz skončí skôr, ako urobíte čokoľvek iné.

Existuje niekoľko rôznych akcií v addnávrh na iniciovaniedefault a počkajte, najmä pokiaľ ide o správu napájania, a manuálna stránka inittab (5) vám o nich povie všetko. Tie, s ktorými sa s najväčšou pravdepodobnosťou stretnete, sú vysvetlené v nasledujúcich častiach.

respawn

Akcia respawn spôsobí, že init spustí nasledujúci príkaz a ak sa dokončí vykonanie príkazu, spustí ho znova. Je pravdepodobné, že na svojej inittab uvidíte niečo podobné tomuto riadku file:

1: 2345: respawn :/ sbin / mingetty tty1

Getty programy poskytujú prihlásiť výzvy. Predchádzajúci linka je na prvý virtuálnu konzolu (/ dev / tty1), ktorú vidíte ak kláves ALT alebo CONTROL-ALT-F1 F1. Respawn akcia prináša prihlasovacie riadok späť po odhlásení.

ctrlaltdel

و ctrlaltdel akcia riadi čo system robí, keď stlačíte CONTROL-ALT-DELETE na virtuálnej konzole. Na väčšine systems, toto je akýsi príkaz na reštartovanie pomocou príkazu vypnutie.

sysinit

Akcia sysinit je úplne prvá vec, ktorú by mal spustiť init, keď sa spustí, predtým entervo všetkých úrovniach behu.

Ako procesy v úrovne behu kto

Teraz ste pripravení naučiť sa, ako iniciovať system služby, tesne predtým, ako vám umožní prihlásiť sa. Pripomeňme si tento riadok inittab z minulosti:

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

Táto malá linka vyvolá mnoho ďalších programov. rc znamená rozbehu, a budete počuť ľudia sa odvolávajú na príkazy ako skripty, programy alebo službami. Tak, kde sú tieto príkazy, vlastne je?

Pre runlevel 5 sú v tomto príklade príkazy pravdepodobne buď v /etc/rc.d/rc5.d alebo /etc/rc5.d. Runlevel 1 používa rc1.d, runlevel 2 používa rc2.d atď. Možno nájdete nasledujúce items v adresári rc5.d:

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

Rc 5 príkaz spustí programy v tomto úrovne behu adresári spustením príkazov nasledujúcich:

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

Všimnite si, že počiatočné tvrdenie v každom príkaze. S v prostriedku názov príkazu, ktorý by mal bežať na príkaz v ponuke Štart režime, a počet (00 cez 99) určuje, kde v poradí rc spustí príkaz.

* Rc. D príkazov je Obvyklé Štart Programy, že Shell skripty v / sbin alebo / usr / sbin. Normálne, môžete zistiť, čo jeden z príkazov skutočne sa pri pohľade na scenár s menším alebo pager Ďalšie programu.

Jednu z týchto služieb môžete spustiť ručne. Napríklad ak chcete program webového servera httpd spustiť manuálne, spustite program S99httpd start. Podobne, ak niekedy potrebujete zabiť niektorú zo služieb, keď machine je zapnutý, príkaz môžete spustiť v adresári rc * .d s argumentom stop (napríklad S99httpd stop).

Niektoré adresáre rc * .d obsahujú príkazy začínajúce písmenom K (pre režim „zabiť“ alebo stop). V tomto prípade rc spustí príkaz s argumentom stop namiesto start. S najväčšou pravdepodobnosťou narazíte na K príkazy v úrovniach run, ktoré zatvoria system nadol.

Addslužby a sťahovanie

Ak chcete add, mazať alebo upravovať služby v adresároch rc * .d, musíte sa bližšie pozrieť na files vnútri. Dlhý zoznam odhaľuje štruktúru, ako je táto:

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

Príkazy v adresári rc * .d sú vlastne symbolické odkazy files v adresári init.d, zvyčajne v / etc alebo /etc/rc.d. Distribúcie v systéme Linux obsahujú tieto prepojenia, aby mohli používať rovnaké spúšťacie skripty pre všetky úrovne behu. Tento dohovor nie je v žiadnom prípade požiadavkou, ale často organizácii trochu uľahčuje.

Aby ste zabránili spusteniu jedného z príkazov v adresári init.d na konkrétnej úrovni behu, mohlo by vás napadnúť odstrániť symbolický odkaz v príslušnom adresári rc * .d. To síce funguje, ale ak urobíte chybu a budete niekedy musieť odkaz znova umiestniť na miesto, môžete si zapamätať presný názov odkazu. Preto by ste nemali odstraňovať odkazy v adresároch rc * .d, ale skôr add podčiarkovník (_) na začiatok názvu odkazu, ako je tento:

mv S99httpd _S99httpd

V čase zavádzania rc ignoruje _S99httpd, pretože nezačína na S alebo K. Okrem toho je pôvodný názov stále zrejmý a k príkazu máte rýchly prístup, ak ste v núdzi a potrebujete ho spustiť ručne.

na add služba, musíte vytvoriť skript ako ostatné v adresári init.d a potom vytvoriť symbolický odkaz v správnom adresári rc * .d. Najjednoduchší spôsob, ako napísať skript, je preskúmať skripty, ktoré sú už v init.d, vytvoriť kópiu toho, ktorému rozumiete, a upraviť ho.

Kedy addAk chcete spustiť službu, nezabudnite zvoliť vhodné miesto v postupnosti zavádzania. Ak sa služba spustí príliš skoro, nemusí fungovať z dôvodu závislosti na inej službe. Pokiaľ ide o nepodstatné služby, väčšina systems administrators preferujú čísla v 90. rokoch, po väčšine služieb, ktoré prišli s system.

Linuxové distribúcie sa zvyčajne dodávajú s príkazom na povolenie a zakázanie služieb v adresároch rc * .d. Napríklad v Debiane je príkaz update-rc.d av systéme Red Hat Linux je príkaz chkconfig. K dispozícii sú aj grafické používateľské rozhrania. Používanie týchto programov pomáha udržiavať konzistentné spúšťacie adresáre a pomáha pri aktualizáciách.

TIP: Jeden z najbežnejších systémov Linux installproblémom je nesprávne nakonfigurovaný server XFree86, ktorý švihnutím zapína a vypína počítač system nepoužiteľný na konzole. Ak chcete toto správanie zastaviť, spustite režim pre jedného používateľa a zmeňte svoju úroveň runlevel alebo služby runlevel. Vo svojich adresároch rc * .d alebo / etc / inittab hľadajte niečo, čo obsahuje xdm, gdm alebo kdm.

Ovládanie init

Príležitostne musíte dať init malú kopu, aby ste mu povedali, aby prepínal bežecké úrovne, aby ste znovu prečítali inittab file, alebo len tak shut down the,en system. Pretože init je vždy prvý proces na a system, jeho ID procesu je vždy 1.

Môžete ovládať init s zelerom. Napríklad, ak chcete prejsť na úrovne behu 3, použite tento príkaz:

telinit 3

Pri prepínaní úrovní behu sa program init pokúsi zabiť všetky procesy, ktoré sa nenachádzajú na karte inittab file pre nový runlevel. Preto by ste mali byť opatrní pri zmene runlevelu.

Keď potrebujete add alebo odstráňte pracovné miesta, ktoré sa znova objavujú, alebo urobte akékoľvek ďalšie zmeny na karte inittab file, musíte iniciátorovi oznámiť zmenu a spôsobiť jej opätovné prečítanie file, Niektorí ľudia používajú kill -HUP 1, aby to oznámili init. Táto tradičná metóda funguje na väčšine verzií Unixu, pokiaľ ju zadáte správne. Môžete však spustiť aj tento príkaz telinit:

telinit q

Môžete tiež použiť telinit s prepnúť do single-user móde.

Vypínanie

init tiež kontroluje, ako system vypne a reštartuje. Správny spôsob shut down a Linux machine je použitie príkazu shutdown.

Existujú dva základné spôsoby použitia vypnutia. Ak zastavíte system, uzatvára to machine dole a drží to dole. Ak chcete urobiť macokamžite zastavte, použite tento príkaz:

shutdown-h now

Na najmodernejších maczdokonaľuje rozumne nedávne verzie Linuxu, zastavenie napájania machine. Môžete tiež reštartovať server machine. Ak chcete reštartovať počítač, použite -r namiesto -h.

Proces vypnutia trvá niekoľko sekúnd. Nikdy by ste nemali resetovať alebo vypínať a machine počas tejto fázy.

V predchádzajúcom príklade je teraz čas na shut down. Tento argument je povinný, ale existuje veľa spôsobov, ako ho špecifikovať. Ak chcete macAk chcete niekedy v budúcnosti vypnúť, jedným zo spôsobov je použiť + n, kde n je počet minút, počas ktorých by vypnutie malo čakať, kým vykoná svoju prácu. Pre iné options, pozrite si manuálovú stránku vypnutia (8).

Ak chcete urobiť system reštartujte o 10 minút, spustite tento príkaz:

shutdown-r + 10

V systéme Linux vypnutie informuje každého prihláseného machine klesá, ale robí málo skutočnej práce. Ak zadáte iný čas ako teraz, vypnutím sa vytvorí a file nazýva sa / etc / nologin. Keď toto file je prítomný, system zakazuje prihlásenie ktokoľvek okrem superužívateľa.

Kedy system čas vypnutia konečne dorazí, vypnutie informuje init, aby prepol na runlevel 0 pre zastavenie a runlevel 6 na reštart. Keď init enters runlevel 0 alebo 6, nastanú všetky nasledujúce skutočnosti, ktoré si môžete overiť pri pohľade na skripty vo vnútri rc0.d a rc6.d:

1. init zabije každého procesu, ktorý je v jeho silách (ako by pri prechode k inému úrovne behu).

# Počiatočné príkazy rc0.d / rc6.d sú spustené, uzamknuté system files na mieste a robiť ďalšie prípravy na odstavenie.
# Nasledujúce príkazy rc0.d / rc6.d odpojia všetky filesysteminé ako koreň.
# Ďalšie príkazy rc0.d / rc6.d znovu pripoja root filesystem iba na čítanie.
# Stále viac príkazov rc0.d / rc6.d zapisuje všetky dáta vo vyrovnávacej pamäti do filesystem so synchronizačným programom.
# Konečné rc0.d / rc6.d príkazy povedať, že jadro reštartovať alebo zastaviť s reštartom, zastavenie alebo vypínanie programu.

Programy reštartu a zastavenia sa správajú odlišne pre každú úroveň behu, čo môže spôsobiť zmätok. od default, tieto programy volajú vypnutie pomocou -r alebo -h options, ale ak system je už pri zastavení alebo reštartovaní úrovne spustenia, programy povedia jadru, aby sa okamžite vyplo. Ak naozaj chcete zavrieť svoje macsvižne sa ponáhľajte (bez ohľadu na možné škody z poruchového vypnutia), použite voľbu -f.

Vášnivý k technológiám, rád testujem a píšem návody o operačných systémoch macOSlinux, Windows, o WordPress, WooCommerce a konfigurácia webových serverov LEMP (Linux, NGINX, MySQL a PHP). píšem ďalej StealthSettings.com od roku 2006 a o pár rokov neskôr som začal písať na iHowTo.Tips návody a novinky o zariadeniach v ekosystéme Apple: iPhone, iPad, Apple Hodinky, HomePod, iMac, MacBook, AirPods a príslušenstvo.

Pridať komentár