Linux Škornji

Izkazalo se je, da postopek zagona ni veliko:

1. Zagonski nalagalnik najde sliko jedra na disk, ga naloži v pomnilnik in zažene.
2. Jedro inicializacijo naprav in STI voznikom.
3. Jedro priklopi korensko datotekosystem.
4. Jedro začne init Called razpored.
5. pr določa ostale procese v gibanju.
6. Zadnji procese, ki init začne kot del zagona zaporedja vam omogočajo, da se prijavite.

Ugotavljanje vsake faze zagonskega procesa je neprecenljivega pomena pri odpravljanju zagonskih težav in razumevanju system kot celota. Za začetek se v zagonskem nalagalniku vklopite nič, kar je začetni zaslon ali poziv, ki ga dobite po tem, ko se računalnik samodejno preizkusi ob vklopu in vpraša, katero operacijo system teči. Ko izberete, zagonski nalagalnik zažene Linux jedro, predaja nadzora nad system jedru.

Tam je podrobno razpravo jedra drugje v tej knjigi, iz katere je ta članek izvleček. Ta člen zajema Jedro oder inicializacija, faza, ko jedro natisne kopico sporočil o strojni opremi, ki je prisotna na system. Jedro se zažene init takoj po tem, ko prikaže sporočilo, da je jedro vgradilo korenska datotekasystem:

VFS: Mounted root (datoteke ext2system) le za branje.

Kmalu zatem boste videli sporočilo o zagonu init, ki mu sledi system sporočila ob zagonu storitve in na koncu dobite nekakšen poziv za prijavo.

OPOMBE : Na Red Hat Linux, je začetna opomba še posebej očitna, ker vam »izreka dobrodošlico« v Red Hat Linux.” Vsa sporočila nato prikazujejo uspeh ali neuspeh v oklepajih na desni strani zaslona.

Večina tega poglavja se ukvarja s pr, ker je KJE del zagonskega zaporedja imate največ kontrole.
pr

Init ni nič posebnega. To je program kot vsi drugi na Linux system, in našli ga boste v / sbin skupaj z drugimi system binarne datoteke. Glavni namen init je zagon in zaustavitev drugih programov v določenem zaporedju. Vse, kar morate vedeti, je, kako deluje to zaporedje.

Obstaja nekaj različnih različic, vendar večina Linux distribucije uporabljajo System V slogu, o katerem smo tukaj govorili Nekatere distribucije uporabljajo enostavnejšo različico, ki spominja na init BSD, vendar verjetno ne boste naleteli na to.

Runlevels

V katerem koli trenutku na a Linux system, se izvaja določen osnovni nabor procesov. To stanje machine se imenuje njegova stopnja teka in je označena s številko od 0 do 6. system večino svojega časa preživi na enem nivoju. Ko pa zaprete machine down, init preklopi na drugo stopnjo izvajanja, da konča system storitve na urejen način in jedru sporočite, naj se ustavi. Še ena raven izvajanja je za enega uporabnika mode, o čemer bomo razpravljali pozneje.

Najlažji način za obravnavo ravni izvajanja je pregled konfiguracijske datoteke init, /etc/inittab. Poiščite vrstico, kot je ta:

ID: 5: initdefault:

Ta vrstica pomeni, da default runlevel na system je 5. Vse vrstice v datoteki inittab imajo to obliko, s štirimi polji, ločenimi z dvopičji, ki se pojavljajo v naslednjem vrstnem redu:
# Edinstven identifikator (kratek niz Kot id v prejšnjem primeru)
# Veljavno številko Runlevel (e)
# Dejanje, ki naj ga izvede init (v prejšnjem primeru je dejanje nastavitev default stopnja do 5)
# Ukaz za izvršitev (neobvezno)

V prejšnjem zagonu ni nobenega ukaza za izvedbodefault primer, ker ukaz nima smisla v kontekstu nastavitve default runlevel. Poglejte še malo navzdol v inittab, dokler ne vidite vrstice, kot je ta:

l5: 5: počakajte :/ etc / rc.d / rc 5

Ta vrstica sproži večino system konfiguracijo in storitve prek imenikov rc * .d in init.d. Vidite, da je init nastavljen za izvajanje ukaza, imenovanega /etc/rc.d/rc 5, ko je na stopnji teka 5. Dejanje čakanja pove, kdaj in kako init zažene ukaz: run rc 5 enkrat, ko entering runlevel 5 in počakajte, da se ta ukaz konča, preden naredite kaj drugega.

Obstaja več različnih dejanj v addition za začetekdefault in počakajte, še posebej v zvezi z upravljanjem porabe, in stran o priročniku inittab (5) vam pove vse o njih. Tisti, s katerimi se boste najverjetneje srečali, so razloženi v naslednjih razdelkih.

respawn

Dejanje respawn povzroči, da init zažene ukaz, ki sledi, in če se ukaz konča z izvajanjem, ga znova zažene. V datoteki inittab boste verjetno videli nekaj podobnega tej vrstici:

1: 2345: respawn :/ sbin / mingetty tty1

Njuni programi zagotavljajo prijavne pozivnike. Prejšnji linija je za prvo navidezno konzolo (/ dev / tty1), eni vidite Ko pritisnete ALT ali CTRL-ALT-F1 F1. Respawn ukrep prinaša prijavo takoj nazaj, ko se odjavite.

ctrldrugje

O ctrlaltdel action nadzoruje, kaj system to stori, ko na virtualni konzoli pritisnete CONTROL-ALT-DELETE. Na večini systems, to je nekakšen ukaz za ponovni zagon z uporabo ukaza za zaustavitev.

sysinit

Dejanje sysinit je prva stvar, ki bi jo init moral izvesti, ko se zažene, prej enterv vseh vodnih ravneh.

Kako Procesi v runlevels začetek

Zdaj ste pripravljeni izvedeti, kako sprožiti system storitve, tik preden vam omogoči prijavo. Spomnimo se te vrstice inittab iz prejšnje:

l5: 5: počakajte :/ etc / rc.d / rc 5

Ta majhna linija sproža številne druge programe. RC je kratica za ukaze run, in boste slišali ljudi se nanašajo na ukaze, kot so skripte, programov ali storitev. Torej, kje so te ukaze, anyway?

Za runlevel 5 v tem primeru so ukazi verjetno v /etc/rc.d/rc5.d ali /etc/rc5.d. Runlevel 1 uporablja rc1.d, runlevel 2 uporablja rc2.d in tako naprej. Morda boste našli naslednje items v imeniku rc5.d:

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

Ukaz rc 5 zažene programe na tem nivo teka sistema imeniku, ki jih izvaja ukaze GMT:

S10sysklogd dom
S12kerneld dom
S15netstd_init dom
S18netbase dom
...
S99sshd dom

Bodite pozorni na začetni argument v vsakem ukazu. S v imenu ukaza pomeni, da se mora ukaz zagnati na začetku mode, številka (00 do 99) pa določa, kje v zaporedju rc začne ukaz.

Ukazi D rc *. So skriptov, ki se običajno začnejo programe v imeniku / sbin ali / usr / sbin. Običajno lahko ugotovimo, kaj eden od ukazov dejansko ne pogledate na scenarij z manjšo ali pozivnik drug program.

Eno od teh storitev lahko zaženete ročno. Če želite na primer ročno zagnati program spletnega strežnika httpd, zaženite S99httpd start. Podobno, če boste kdaj morali ubiti eno od storitev, ko bo machine je vklopljen, lahko ukaz v imeniku rc * .d zaženete z argumentom stop (na primer S99httpd stop).

Nekateri imeniki rc*.d vsebujejo ukaze, ki se začnejo s K (za "kill" ali stop mode). V tem primeru rc zažene ukaz z argumentom stop namesto start. Najverjetneje boste na ravni izvajanja naleteli na ukaze K, ki zaprejo system navzdol.

Addin odstranjevanje storitev

Če želite add, izbrisati ali spremeniti storitve v imenikih rc*.d, si morate podrobneje ogledati datoteke v njih. Dolg seznam razkriva takšno strukturo:

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

Ukazi v imeniku rc*.d so pravzaprav simbolične povezave do datotek v imeniku init.d, običajno v /etc ali /etc/rc.d. Linux distribucije vsebujejo te povezave, tako da lahko uporabljajo iste zagonske skripte za vse ravni izvajanja. Ta konvencija nikakor ni pogoj, vendar pogosto nekoliko olajša organizacijo.

Če želite preprečiti, da bi se eden od ukazov v imeniku init.d izvajal na določeni ravni izvajanja, lahko pomislite na odstranitev simbolične povezave v ustreznem imeniku rc * .d. To sicer deluje, vendar če se zmotite in boste kdaj morali povezavo spet postaviti, boste morda imeli težave z zapomnitvijo natančnega imena povezave. Zato ne smete odstranjevati povezav v imenikih rc * .d, temveč add podčrtaj (_) na začetek imena povezave, kot je ta:

mv S99httpd _S99httpd

V času zagona rc prezre _S99httpd, ker se ne začne s S ali K. Poleg tega je prvotno ime še vedno očitno in imate hiter dostop do ukaza, če ste stisnjeni in ga morate zagnati ročno.

Da add storitev, morate ustvariti skript, kot so drugi v imeniku init.d, nato pa narediti simbolno povezavo v pravilnem imeniku rc * .d. Najlažji način za pisanje skripta je preučiti skripte, ki so že v init.d, narediti kopijo tistega, ki ga razumete, in spremeniti kopijo.

Kdaj addmed storitvijo se prepričajte, da ste v zagonskem zaporedju izbrali primerno mesto za zagon storitve. Če se storitev začne prezgodaj, morda ne bo delovala zaradi odvisnosti od druge storitve. Za nebistvene storitve večina systems administratorimajo raje številke v 90. letih, po večini storitev, ki so bile priložene system.

Linux distribucije običajno vsebujejo ukaz za omogočanje in onemogočanje storitev v imenikih rc * .d. Na primer, v Debianu je ukaz update-rc.d in v Red Hat Linux, je ukaz chkconfig. Na voljo so tudi grafični uporabniški vmesniki. Uporaba teh programov pomaga ohranjati skladnost zagonskih imenikov in pomaga pri nadgradnjah.

NAMIG: Eden najpogostejših Linux installje nepravilno konfiguriran strežnik XFree86, ki se vklopi in izklopi, zaradi česar je system neuporabna na konzolah. Če želite preprečiti to vedenje, zaženite sistem z enim uporabnikom mode in spremenite svojo raven izvajanja ali storitve na ravni izvajanja. Poiščite nekaj, kar vsebuje xdm, gdm ali kdm v vaših imenikih rc*.d ali /etc/inittab.

Kontroling init

Občasno morate init malo spodbuditi, da mu naročite, naj preklopi ravni izvajanja, ponovno prebere datoteko inittab ali samo shut down o system. Ker je init vedno prvi postopek na a system, njegov ID procesa je vedno 1.

Lahko nadzor iskalo z telinit. Na primer, če želite preklopiti v nivo teka 3, uporabite ta ukaz:

telinit 3

Pri preklapljanju ravni izvajanja skuša init uničiti vse procese, ki niso v datoteki inittab za novo raven izvajanja. Zato morate biti previdni pri spreminjanju ravni izvajanja.

Ko je treba add ali odstranite opravila ponovnega ustvarjanja ali naredite katero koli drugo spremembo v datoteki inittab, morate init-u povedati o spremembi in povzročiti, da ponovno prebere datoteko. Nekateri uporabljajo kill -HUP 1, da povejo init, naj to stori. Ta tradicionalna metoda deluje na večini različic Unixa, če jo vnesete pravilno. Vendar pa lahko zaženete tudi ta ukaz telinit:

telinit q

Za preklop na enouporabniško lahko uporabite tudi telinit s mode.

Zaustavljanje

init tudi nadzoruje, kako system izklopi in znova zažene. Pravilna pot do shut down a Linux machine je uporaba ukaza za zaustavitev.

Obstajata dva osnovna načina za zaustavitev. Če ustavite system, zapre machine dol in ga obdrži. Da bi mactakoj ustavite, uporabite ta ukaz:

shutdown-h zdaj

Na večini modern macse ujema z relativno najnovejšimi različicami Linux, zaustavitev prekine napajanje machine. Lahko tudi znova zaženete machine. Za ponovni zagon uporabite -r namesto -h.

Postopek zaustavitve traja nekaj sekund. Nikoli ne smete ponastaviti ali izklopiti a macv tej fazi.

V prejšnjem primeru je zdaj čas, da shut down. Ta argument je obvezen, vendar obstaja več načinov, kako ga določiti. Če želite machine, da se enkrat v prihodnosti izklopi, je eden od načinov uporaba + n, kjer je n število minut, ki jih mora zaustavitev počakati, preden opravi svoje delo. Za druge options, poglejte stran z navodili za zaustavitev (8).

Da naredimo system znova zaženite v 10 minutah, zaženite ta ukaz:

shutdown-r + 10

On Linux, zaustavitev obvesti vsakogar, ki je prijavljen, da je machine se zmanjšuje, vendar ne dela pravega dela. Če določite čas, ki ni zdaj, zaustavitev ustvari datoteko z imenom /etc/nologin. Ko je ta datoteka prisotna, je system prepoveduje prijavo nikomur, razen super uporabniku.

Kdaj system čas zaustavitve končno pride, zaustavitev sporoči init, da preklopi na stopnjo 0 za zaustavitev in stopnjo 6 za ponovni zagon. Ko init enters runlevel 0 ali 6, se zgodi vse naslednje, kar lahko preverite tako, da pogledate skripte znotraj rc0.d in rc6.d:

1. pr ubije vsakega postopka, ki ga lahko (kot bi jih, če je prehod na katere koli druge runlevel).

# Začetni ukazi rc0.d / rc6.d se zaženejo in zaklenejo system datoteke na svoje mesto in druge priprave za zaustavitev.
# Naslednji ukazi rc0.d/rc6.d odstranijo vse datotekesystems razen korena.
# Nadaljnji ukazi rc0.d/rc6.d ponovno priklopijo korensko datotekosystem le za branje.
# Še več ukazov rc0.d/rc6.d zapiše vse medpomnilniške podatke v datotekosystem s programom za sinhronizacijo.
# Končni rc0.d / rc6.d ukazi povedati jedru, ponovno zaženete ali ustavite pri ponovnem zagonu, zaustavi ali PowerOff programa.

Programi za ponovni zagon in zaustavitev se obnašajo različno za vsako stopnjo izvajanja, kar lahko povzroči zmedo. avtor default, ti programi pokličejo zaustavitev z -r ali -h options, vendar če system je že na ravni zaustavitve ali ponovnega zagona, programi sporočijo jedru, da se takoj izklopi. Če res želite zapreti svoj macv naglici hinete (pri čemer ne upoštevate morebitne škode zaradi neurejenega izklopa), uporabite možnost -f.

Strasten do tehnologije, z veseljem pišem na StealthSettings.com od leta 2006. Imam bogate izkušnje s operacijskimi sistemi: macOS, Windows in Linux, ter programskimi jeziki in platformami za bloganje (WordPress) in za spletne trgovine (WooCommerce, Magento, PrestaShop).

Pustite komentar