Linux Čizme

Ispostavilo se da postupak pokretanja nema puno:

1. Program za pokretanje pronalazi sliku kernela na disk, učitava ga u memoriju i pokreće.
2. Kernel početne uređaje i STI upravljačkih programa.
3. Kernel montira korijensku datotekusystem.
4. Kernel počinje init Pozvani na rasporedu.
5. init postavlja ostatak procese u pokretu.
6. Posljednji procesi koji init započinje kao dio boot sekvence omogućuju vam da se prijavite na.

Identificiranje svake faze postupka pokretanja neprocjenjivo je za rješavanje problema s pokretanjem sustava i razumijevanje system u cjelini. Za početak pokrenite pokretački program, koji je početni zaslon ili upit koji se dobije nakon što računalo izvrši samotestiranje, pitajući koji rad system trčati. Nakon što odaberete, pokretački program pokreće Linux kernel, predaja kontrole nad system jezgri.

Tu je detaljna rasprava o kernel drugdje u ovoj knjizi iz koje se ovaj članak scene. Ovaj članak pokriva kernel inicijalizacije pozornica, faza u kojoj kernel ispisuje hrpu poruka o hardveru prisutnom na system. Kernel započinje init odmah nakon što prikaže poruku koja proglašava da je kernel montirao datoteka korijenasystem:

VFS: mounted root (datoteke ext2system) samo za čitanje.

Ubrzo nakon toga vidjet ćete poruku o pokretanju init-a, nakon čega slijedi system poruke o pokretanju usluge i na kraju ćete dobiti nekakav upit za prijavu.

BILJEŠKA : Na Red Hat Linux, početna bilješka je posebno očita, jer vam "želi dobrodošlicu" u Red Hat Linux.” Sve poruke nakon toga pokazuju uspjeh ili neuspjeh u zagradama na desnoj strani ekrana.

Većina ovog poglavlja bavi init, jer je to GDJE dio dizanja imate najviše kontrole.
init

Nema ništa posebno u init-u. To je program kao i svaki drugi na Linux system, a naći ćete ga u / sbin zajedno s drugim system binarne datoteke. Glavna svrha init-a je pokretanje i zaustavljanje drugih programa u određenom slijedu. Sve što morate znati je kako funkcionira ovaj slijed.

Postoji nekoliko različitih varijacija, ali većina Linux distribucije koriste System Ovdje se raspravlja o V stilu. Neke distribucije koriste jednostavniju verziju koja nalikuje BSD initu, ali malo je vjerojatno da ćete se s tim suočiti.

Izvršne nivoe

U bilo kojem trenutku na a Linux system, izvodi se određeni osnovni skup procesa. Ovo stanje machine naziva se njegova razina trčanja i označava se brojem od 0 do 6. The system većinu svog vremena provodi na jednom nivou. Međutim, kada zatvorite machine down, init se prebacuje na drugu razinu pokretanja kako bi prekinuo system usluge na uredan način i reći kernelu da prestane. Još jedna razina pokretanja je za jednog korisnika mode, o čemu ćemo raspravljati kasnije.

Najlakši način da se upoznate s razinama pokretanja je da ispitate init konfiguracijsku datoteku, /etc/inittab. Potražite redak poput sljedećeg:

ID: 5: initdefault:

Ova crta znači da default runlevel na system je 5. Svi redovi u datoteci inittab imaju ovaj oblik, s četiri polja odvojena dvotočkama koja se pojavljuju sljedećim redoslijedom:
# Jedinstveni identifikator (kratki string, kao što je ID u prethodnom primjeru)
# Primjenjivo runlevel broj (evi)
# Radnja koju bi init trebao poduzeti (u prethodnom primjeru radnja je postavljanje default runlevel do 5)
# Naredba za izvršiti (opcionalno)

Ne postoji naredba za izvršavanje u prethodnom init-udefault primjer jer naredba nema smisla u kontekstu postavljanja default runlevel. Pogledajte malo niže u inittabu, sve dok ne vidite liniju poput ove:

l5: 5: pričekajte :/ etc / rc.d / rc 5

Ova linija pokreće većinu system konfiguracija i usluge putem direktorija rc * .d i init.d. Možete vidjeti da je init postavljen za izvršavanje naredbe koja se naziva /etc/rc.d/rc 5 kada je u razini pokretanja 5. Akcija čekanja govori kada i kako init pokreće naredbu: run rc 5 jednom kada entering. runlevel 5, a zatim pričekajte da se ova naredba završi prije nego što učinite bilo što drugo.

Postoji nekoliko različitih radnji u addicija na initdefault i pričekajte, posebno što se tiče upravljanja napajanjem, a stranica s priručnikom za inittab (5) govori vam sve o njima. One s kojima ćete se najvjerojatnije susresti objašnjene su u sljedećim odjeljcima.

respawn

Akcija respawn uzrokuje init da pokrene naredbu koja slijedi, i ako naredba završi s izvođenjem, da je ponovno pokrene. Vjerojatno ćete vidjeti nešto slično ovom retku u vašoj inittab datoteci:

1: 2345: respawn :/ sbin / mingetty tty1

Getty programi pružaju prijava traži. Prethodni linija je prvi virtualni konzole (/ dev / tty1), jednom vidite Kada pritisnete ALT ili Control-Alt-F1 F1. Respawn akcija donosi upit za prijavu leđa nakon što se odjavite.

ctrldrugdje

Korištenje električnih romobila ističe ctrlaltdel akcija kontrolira ono što system to čini kada pritisnete CONTROL-ALT-DELETE na virtualnoj konzoli. Na većini systems, ovo je neka vrsta naredbe za ponovno pokretanje pomoću naredbe za isključivanje.

sysinit

Radnja sysinit prva je stvar koju bi init trebao pokrenuti prije nego što se pokrene enteru bilo kojoj razini.

Kako započeti procesi izvršne nivoe

Sada ste spremni naučiti kako pokrenuti system usluge, neposredno prije nego što vam omogućuje prijavu. Podsjetimo na ovu liniju inittab od ranije:

l5: 5: pričekajte :/ etc / rc.d / rc 5

Ova mala linija izaziva mnoge druge programe. RC stoji za pokrenuti naredbe, i čut ćete ljudi se odnose na naredbe kao skripti, programe ili usluge. Dakle, gdje su Te naredbe, svejedno?

Za runlevel 5 u ovom primjeru naredbe su vjerojatno u /etc/rc.d/rc5.d ili /etc/rc5.d. Runlevel 1 koristi rc1.d, runlevel 2 koristi rc2.d, i tako dalje. Možda ćete naći sljedeće items u imeniku rc5.d:

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

Naredba rc 5 pokreće programe u ovom runlevel direktorij pomoću programa GMT naredbe:

S10sysklogd kuće
S12kerneld kuće
S15netstd_init kuće
S18netbase kuće
...
S99sshd kuće

Obratite pozornost na početni argument u svakoj naredbi. S u nazivu naredbe znači da se naredba treba pokrenuti na početku mode, a broj (00 do 99) određuje gdje u nizu rc počinje naredba.

Rc *. D naredbe ljuske skripte koje obično počinju programi u / sbin ili / usr / sbin. Normalno, možete shvatiti što je jedan od naredbi zapravo ne gleda na scenariju s manje ili pager drugi program.

Jednu od ovih usluga možete pokrenuti ručno. Na primjer, ako želite ručno pokrenuti program web-poslužitelja httpd, pokrenite S99httpd start. Slično tome, ako ikada trebate ubiti neku od usluga kada machine je uključen, naredbu možete pokrenuti u direktoriju rc * .d s argumentom stop (na primjer, S99httpd stop).

Neki rc*.d direktoriji sadrže naredbe koje počinju s K (za "kill" ili stop mode). U ovom slučaju, rc izvodi naredbu s argumentom stop umjesto start. Najvjerojatnije ćete naići na naredbe K u razinama pokretanja koje zatvaraju system dolje.

Adding i uklanjanje usluga

Ako želite add, brisati ili mijenjati usluge u direktorijima rc*.d, morate pobliže pogledati datoteke koje se nalaze unutra. Dugi popis otkriva strukturu poput ove:

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

Naredbe u direktoriju rc*.d zapravo su simboličke veze na datoteke u direktoriju init.d, obično u /etc ili /etc/rc.d. Linux distribucije sadrže ove poveznice tako da mogu koristiti iste skripte za pokretanje za sve razine pokretanja. Ova konvencija nipošto nije uvjet, ali često malo olakšava organizaciju.

Da biste spriječili da se jedna od naredbi u direktoriju init.d izvodi na određenoj razini pokretanja, možda biste trebali razmisliti o uklanjanju simboličke veze u odgovarajućem direktoriju rc * .d. To funkcionira, ali ako pogriješite i ikad budete trebali vratiti vezu na mjesto, možda ćete imati problema s pamćenjem točnog naziva veze. Stoga ne biste trebali uklanjati veze u direktorijima rc * .d, već, add donja crta (_) na početku naziva veze poput ove:

mv S99httpd _S99httpd

U vrijeme pokretanja, rc ignorira _S99httpd jer ne započinje s S ili K. Nadalje, izvorno je ime i dalje očito i imate brz pristup naredbi ako ste u stisci i ako ga trebate pokrenuti ručno.

Do add uslugu, morate stvoriti skriptu poput ostalih u direktoriju init.d, a zatim napraviti simboličku vezu u ispravnom direktoriju rc * .d. Najlakši način da napišete skriptu je pregledati skripte već u init.d, napraviti kopiju one koju razumijete i izmijeniti kopiju.

Kada addini uslugu, svakako odaberite odgovarajuće mjesto u slijedu pokretanja za pokretanje usluge. Ako usluga započne prerano, možda neće raditi zbog ovisnosti o nekoj drugoj usluzi. Za nebitne usluge, većina systems administratorpreferiraju brojeve iz 90-ih, nakon većine usluga koje su dolazile s system.

Linux distribucije obično dolaze s naredbom za omogućavanje i onemogućavanje usluga u direktorijima rc * .d. Na primjer, u Debianu, naredba je update-rc.d, i u Red Hatu Linux, naredba je chkconfig. Dostupna su i grafička korisnička sučelja. Korištenje ovih programa pomaže u održavanju dosljednosti početnih direktorija i pomaže pri nadogradnji.

Nagovijestiti: Jedan od najčešćih Linux installProblemi su nepravilno konfigurirani XFree86 poslužitelj koji se uključuje i isključuje, čineći system neupotrebljiv na konzolama. Da biste zaustavili ovo ponašanje, pokrenite sustav za jednog korisnika mode i promijenite svoju runlevel ili runlevel usluge. Potražite nešto što sadrži xdm, gdm ili kdm u vašim rc*.d direktorijima ili vašem /etc/inittab.

Kontroling init

Povremeno trebate malo potaknuti init da biste mu rekli da promijeni razinu pokretanja, da ponovno pročita inittab datoteku ili jednostavno shut down o system. Budući da je init uvijek prvi proces na a system, njegov ID procesa je uvijek 1.

Možete kontrolirati init s telinit. Na primjer, ako želite da se prebacite na runlevel 3, koristite ovu naredbu:

telinit 3

Prilikom promjene razina pokretanja, init pokušava ugasiti sve procese koji nisu u datoteci inittab za novu razinu pokretanja. Stoga biste trebali biti oprezni pri mijenjanju razina pokretanja.

Kad trebate add ili uklonite poslove ponovnog pokretanja ili napravite bilo koju drugu promjenu u inittab datoteci, morate obavijestiti init o promjeni i natjerati ga da ponovno pročita datoteku. Neki ljudi koriste kill -HUP 1 da kažu init-u da to učini. Ova tradicionalna metoda radi na većini verzija Unixa, sve dok je ispravno upisujete. Međutim, također možete pokrenuti ovu naredbu telinit:

telinit q

Također možete koristiti telinit za prebacivanje na jednog korisnika mode.

Gašenje

init također kontrolira kako system isključuje se i ponovno pokreće. Pravilan način za shut down a Linux machine je koristiti naredbu za isključivanje.

Postoje dva osnovna načina korištenja isključivanja. Ako zaustavite system, zatvara machine dolje i drži ga dolje. Da bi se macodmah zaustavite, upotrijebite ovu naredbu:

shutdown-h sada

Na većini modern macnadovezuje se na relativno novije verzije Linux, zaustavljanje prekida napajanje machine. Također možete ponovno pokrenuti machine. Za ponovno pokretanje koristite -r umjesto -h.

Postupak isključivanja traje nekoliko sekundi. Nikada ne biste trebali resetirati ili isključiti a machine tijekom ove faze.

U prethodnom primjeru sada je vrijeme za shut down. Ovaj je argument obvezan, ali postoji mnogo načina da se to navede. Ako želite machine da se spusti nekad u budućnosti, jedan od načina je korištenje + n, gdje je n broj minuta koje bi isključenje trebalo čekati prije nego što obavi svoj posao. Za druge options, pogledajte stranicu priručnika za isključivanje (8).

Kako bi system ponovno pokretanje za 10 minuta, pokrenite ovu naredbu:

shutdown-r + 10

On Linux, isključivanje obavještava sve prijavljene da je machine pada, ali ne radi puno stvarnog posla. Ako navedete vrijeme koje nije sada, shutdown stvara datoteku pod nazivom /etc/nologin. Kada je ova datoteka prisutna, system zabranjuje prijave bilo kome osim superkorisniku.

Kada system napokon dolazi vrijeme isključivanja, shutdown govori init-u da se prebaci na nivo 0 za zaustavljanje i nivo 6 za ponovno pokretanje. Kad init enters runlevel 0 ili 6, događa se sljedeće: što možete provjeriti pregledom skripti unutar rc0.d i rc6.d:

1. init ubija svaki proces da se može (kao što bi prelaskom na bilo koji drugi runlevel).

# Pokreću se početne naredbe rc0.d / rc6.d, zaključavanje system datoteke na svoje mjesto i druge pripreme za gašenje.
# Sljedeće rc0.d/rc6.d naredbe demontiraju sve datotekesystems osim korijena.
# Daljnje rc0.d/rc6.d naredbe ponovno montirajte root datotekusystem samo za čitanje.
# Još više rc0.d/rc6.d naredbi ispisuju sve podatke u međuspremniku u datotekusystem s programom za sinkronizaciju.
# Konačni rc0.d / rc6.d naredbe da kernel ponovno pokretanje ili zaustavljanje postupka ponovnog pokretanja, zaustavljanja ili poweroff programa.

Programi ponovnog pokretanja i zaustavljanja ponašaju se različito za svaku razinu pokretanja, što potencijalno može dovesti do zabune. po default, ti programi pozivaju shutdown s -r ili -h options, ali ako je system je već na zaustavnoj razini ili na ponovnom pokretanju, programi govore kernelu da se odmah isključi. Ako stvarno želite zatvoriti svoj macna brzinu (zanemarujući bilo kakvu moguću štetu od neurednog isključivanja), upotrijebite opciju -f.

Strastveni zaljubljenik u tehnologiju, s veseljem pišem na StealthSettings.com od 2006. godine. Imam bogato iskustvo s operativnim sustavima: macOS, Windows i Linux, kao i s programskim jezicima i platformama za bloganje (WordPress) i za internetske trgovine (WooCommerce, Magento, PrestaShop).

Ostavite komentar