Linux Vysoké topánky

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

1. Zavádzací program nájde obraz jadra na disk, načíta ho do pamäte a spustí ho.
2. Jadro inicializovať zariadenia a STI ovládače.
3. Jadro pripojí koreňový súborsystem.
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 vykonaní voľby spustí zavádzač Linux jadro, odovzdanie kontroly 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ňový súborsystem:

VFS: Mounted root (súbory ext2system) 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ámka 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 zobrazujú ú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ý na 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 Linux distribúcie používajú 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 na a 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 služby usporiadaným spôsobom a povedať jadru, aby prestalo. Ďalšia úroveň spustenia je pre jedného používateľa mode, diskutované neskôr.

Najjednoduchší spôsob, ako získať informácie o úrovniach spustenia, je preskúmať konfiguračný súbor init /etc/inittab. Vyhľadajte riadok ako je tento:

ID: 5: začdefault:

Tento riadok znamená, že default runlevel na system je 5. Všetky riadky v súbore inittab majú tento tvar, pričom štyri polia oddelené dvojbodkami sa vyskytujú 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í príkaz, ktorý nasleduje, a ak sa príkaz dokončí, spustí ho znova. Vo svojom inittab súbore pravdepodobne uvidíte niečo podobné ako tento riadok:

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í.

ctrlinde

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 štartovací argument v každom príkaze. S v názve príkazu znamená, že príkaz by sa mal spustiť na začiatku modea číslo (00 až 99) určuje, kde v sekvencii 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, ktoré začínajú na K (pre „zabiť“ alebo stop mode). V tomto prípade rc spustí príkaz s argumentom stop namiesto spustenia. S príkazmi K sa s najväčšou pravdepodobnosťou stretnete v úrovniach spustenia, ktoré zatvárajú 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 súbory vo 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 na súbory v adresári init.d, zvyčajne v /etc alebo /etc/rc.d. Linux distribúcie obsahujú tieto odkazy, takže môžu používať rovnaké spúšťacie skripty pre všetky úrovne spustenia. Táto konvencia nie je v žiadnom prípade podmienkou, ale často to trochu uľahčuje organizáciu.

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.

Linux 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 a v Red Hat Linux, príkaz je 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 Linux installproblémom je nesprávne nakonfigurovaný server XFree86, ktorý švihnutím zapína a vypína počítač system na konzolách nepoužiteľné. Ak chcete zastaviť toto správanie, spustite systém pre jedného používateľa mode a zmeniť úroveň spustenia alebo služby na úrovni spustenia. Vyhľadajte niečo, čo obsahuje xdm, gdm alebo kdm v adresároch rc*.d alebo v /etc/inittab.

Ovládanie init

Občas musíte init trochu nakopnúť, aby ste mu povedali, aby prepol úrovne spustenia, aby si znova prečítal súbor inittab alebo 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í spustenia sa init pokúša zabiť všetky procesy, ktoré nie sú v súbore inittab pre novú úroveň spustenia. Preto by ste mali byť opatrní pri zmene úrovní spustenia.

Keď potrebujete add alebo odstrániť úlohy obnovenia alebo vykonať akúkoľvek inú zmenu v súbore inittab, musíte o zmene informovať init a nechať ho znova prečítať súbor. Niektorí ľudia používajú kill -HUP 1, aby povedali init, aby to urobil. Táto tradičná metóda funguje na väčšine verzií Unixu, pokiaľ ju napíšete správne. Môžete však spustiť aj tento príkaz telinit:

telinit q

Môžete tiež použiť telinit s na prechod na jedného používateľa mode.

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 väčšine modern machines s primerane najnovšími verziami Linux, zastavenie preruší napájanie 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

On Linux, vypnutie upozorní každého, kto je prihlásený, že machine klesá, ale skutočne to málo funguje. Ak zadáte iný čas ako teraz, pri vypnutí sa vytvorí súbor s názvom /etc/nologin. Keď je tento súbor 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 súbory na miesto a ďalšie prípravy na odstavenie.
# Ďalší príkaz rc0.d/rc6.d odpojí všetky súborysysteminé ako koreň.
# Ďalšie príkazy rc0.d/rc6.d znovu pripojte koreňový súborsystem iba na čítanie.
# Ešte viac príkazov rc0.d/rc6.d zapisuje všetky dáta vo vyrovnávacej pamäti do súborusystem 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.

Zanietený technológiou, s radosťou píšem na StealthSettings.com od roku 2006. Mám bohaté skúsenosti s operačnými systémami: macOS, Windows a Linux, ako aj s programovacími jazykmi a platformami pre blogovanie (WordPress) a pre online obchody (WooCommerce, Magento, PrestaShop).

Pridať komentár