Linux Batai

Kaip paaiškėjo, įkrovos procese nėra daug:

1. Įkrovos įkroviklis suranda branduolio vaizdą disk, įkelia jį į atmintį ir paleidžia.
2. Branduolys inicijuoja įrenginius ir jo tvarkykles.
3. Branduolys prijungia šakninį failąsystem.
4. Branduolys paleidžia programą, vadinamą init.
5. „init“ išjudina likusius procesus.
6. Paskutiniai procesai, kurie prasideda kaip įkrovos sekos dalis, leidžia prisijungti.

Kiekvieno įkrovos proceso etapo nustatymas yra neįkainojamas nustatant įkrovos problemas ir suprantant system kaip visas. Norėdami pradėti, nulio įkelkite įkroviklį, kuris yra pradinis ekranas arba raginimas, kurį gausite, kai kompiuteris atliks įjungimo savitikrą, klausdamas, kuri operacija system bėgti. Pasirinkus, įkrovos įkroviklis paleidžia Linux branduolys, perduodamas valdymą system į branduolį.

Išsami branduolio diskusija yra kitur šioje knygoje, iš kurios ištrauktas šis straipsnis. Šis straipsnis apima branduolio inicializavimo stadija, etapas, kai branduolys išspausdina daugybę pranešimų apie programinėje įrangoje esančią aparatinę įrangą system. Branduolys paleidžia iniciją iškart po to, kai parodo pranešimą, skelbiantį, kad branduolys prijungė šakninis failassystem:

VFS: montuojamas root (ext2 failaisystem) Tik skaitymui.

Netrukus pamatysite pranešimą apie „init“ paleidimą, po jo system paslaugos paleidimo pranešimus ir galiausiai gausite kažkokį prisijungimo raginimą.

PASTABA Apie "Red Hat" Linux, pradinė pastaba yra ypač akivaizdi, nes ji „pasveikina“ jus su Red Hat Linux. Visi pranešimai po to rodo sėkmingą arba nesėkmingą skliausteliuose dešinėje ekrano pusėje.

Daugumoje šio skyriaus kalbama apie „init“, nes tai yra ta įkrovos sekos dalis, kurią jūs galite valdyti labiausiai.
init

Init nėra nieko ypatingo. Tai programa, kaip ir bet kuri kita Linux system, ir jį rasite aplanke / sbin kartu su kitais system dvejetainiai failai. Pagrindinis „init“ tikslas yra paleisti ir sustabdyti kitas programas tam tikra seka. Viskas, ką turite žinoti, yra tai, kaip veikia ši seka.

Yra keletas skirtingų variantų, bet dauguma Linux paskirstymai naudoja System Čia aptartas V stilius. Kai kurie paskirstymai naudoja paprastesnę versiją, panašią į BSD init, bet vargu ar su tuo susidursite.

bėgimo lygiai

Bet kuriuo metu a Linux system, veikia tam tikras bazinis procesų rinkinys. Ši būsena machine vadinamas jos bėgimo lygiu ir žymimas skaičiumi nuo 0 iki 6. The system didžiąją laiko dalį praleidžia viename bėgimo lygyje. Tačiau, kai uždarysite macišjungti, init persijungia į kitą vykdymo lygį, norėdamas nutraukti system paslaugas ir liepti branduoliui sustoti. Dar vienas vykdymo lygis skirtas vienam vartotojui mode, aptarta vėliau.

Paprasčiausias būdas susitvarkyti su vykdymo lygiais yra išnagrinėti init konfigūracijos failą /etc/inittab. Ieškokite tokios eilutės kaip ši:

ID: 5: inicdefault:

Ši eilutė reiškia, kad default paleidimo lygis system yra 5. Visos inittab failo eilutės yra tokios formos, keturi laukai, atskirti dvitaškiais, vyksta tokia tvarka:
# Unikalus identifikatorius (trumpa eilutė, pvz., ID ankstesniame pavyzdyje)
# Taikomas (i) vykdymo lygio numeris (-iai)
# Veiksmas, kurį turėtų atlikti inicijavimas (ankstesniame pavyzdyje veiksmas yra nustatyti default bėgimo lygis iki 5)
# Vykdyti skirta komanda (neprivaloma)

Ankstesnėje inicijoje nėra komandos, kurią reikia vykdytidefault pavyzdys, nes komanda nėra prasmės nustatant default bėgimo lygis. Pažvelkite šiek tiek žemyn inittab, kol pamatysite tokią liniją:

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

Ši eilutė sukelia didžiąją dalį system konfigūraciją ir paslaugas per katalogus rc * .d ir init.d. Galite pamatyti, kad „init“ yra nustatytas vykdyti komandą, vadinamą /etc/rc.d/rc 5, kai yra 5 vykdymo lygyje. Laukimo veiksmas nurodo, kada ir kaip „init“ vykdo komandą: paleiskite „rc 5“ vieną kartą, kai enterprieš paleidžiant ką nors kitą, palaukite, kol ši komanda bus baigta.

Yra keli skirtingi veiksmai addinicijuotidefault ir palaukite, ypač susijusius su energijos valdymu, o „inittab“ (5) vadovo puslapyje apie juos viskas pasakojama. Tie, su kuriais greičiausiai susidursite, paaiškinti tolesniuose skyriuose.

atnaujinti

Respawn veiksmas priverčia init paleisti sekančią komandą ir, jei komanda baigia vykdyti, paleisti ją dar kartą. Tikėtina, kad inittab faile pamatysite kažką panašaus į šią eilutę:

1: 2345: respawn: / sbin / mingetty tty1

„Getty“ programos pateikia prisijungimo raginimus. Ankstesnė eilutė skirta pirmajai virtualiai konsolei (/ dev / tty1), kuriai matote paspaudus ALT-F1 arba CONTROL-ALT-F1. Atnaujinimo veiksmas grąžins prisijungimo raginimą, kai jūs atsijungsite.

ctrlaltdelis

Šios ctrlveiksmas valdo tai, ką system daro, kai virtualioje konsolėje paspausite CONTROL-ALT-DELETE. Daugumoje systems, tai yra tam tikra perkrovimo komanda, naudojant išjungimo komandą.

sisinitas

„Sysinit“ veiksmas yra pats pirmas dalykas, kurį „init“ turėtų paleisti paleidus, prieš tai enterbet kokiuose važiavimo lygiuose.

Kaip prasideda procesai bėgimo lygiuose

Dabar esate pasirengę išmokti inicijuoti system paslaugas prieš pat leidžiant prisijungti. Prisiminkite šią ankstesnės eilutės eilutę:

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

Ši maža eilutė suaktyvina daugelį kitų programų. rc reiškia paleisti komandas, ir jūs girdėsite, kaip žmonės komandas vadina scenarijais, programomis ar paslaugomis. Taigi, kur vis dėlto yra šios komandos?

5 pavyzdyje, šiame pavyzdyje komandos tikriausiai yra /etc/rc.d/rc5.d arba /etc/rc5.d. „Runlevel 1“ naudoja „rc1.d“, 2 „Runlevel“ - „rc2.d“ ir pan. Galite rasti šiuos dalykus items kataloge rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89 ir kt
S20logoutd S89cron

„Rc 5“ komanda paleidžia programas šiame vykdymo lygio kataloge vykdydama šias komandas:

S10sysklogd pradžia
S12kerneld startas
S15netstd_init pradžia
„S18netbase“ paleidimas
...
S99sshd pradžia

Atkreipkite dėmesį į pradžios argumentą kiekvienoje komandoje. S simbolis komandos pavadinime reiškia, kad komanda turi būti paleista pradžioje mode, o skaičius (nuo 00 iki 99) nustato, kurioje sekoje rc pradeda komandą.

Komandos rc * .d paprastai yra apvalkalo scenarijai, paleidžiantys programas / sbin arba / usr / sbin. Paprastai galite sužinoti, ką viena iš komandų iš tikrųjų veikia, pažvelgę ​​į scenarijų naudodamiesi mažiau ar kita peidžerio programa.

Vieną iš šių paslaugų galite pradėti ranka. Pvz., Jei norite rankiniu būdu paleisti „httpd“ žiniatinklio serverio programą, paleiskite „S99httpd start“. Panašiai, jei kada nors reikia nužudyti vieną iš paslaugų, kai machine yra įjungtas, komandą galite paleisti kataloge rc * .d su stop argumentu (pvz., S99httpd stop).

Kai kuriuose rc*.d kataloguose yra komandos, kurios prasideda raide K („kill“ arba stop mode). Tokiu atveju rc paleidžia komandą su stop argumentu, o ne start. Labiausiai tikėtina, kad susidursite su K komandomis vykdymo lygiuose, kurios uždaro system žemyn.

Addpaslaugų pašalinimas

Jei norite add, ištrinti arba modifikuoti paslaugas rc*.d kataloguose, reikia atidžiau pažvelgti į viduje esančius failus. Ilgas sąrašas atskleidžia tokią struktūrą:

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

Komandos rc*.d kataloge iš tikrųjų yra simbolinės nuorodos į failus init.d kataloge, dažniausiai /etc arba /etc/rc.d. Linux distribucijose yra šios nuorodos, kad jie galėtų naudoti tuos pačius paleisties scenarijus visuose vykdymo lygiuose. Ši konvencija jokiu būdu nėra privaloma, tačiau ji dažnai palengvina organizavimą.

Norėdami užkirsti kelią vienai iš komandų, esančių kataloge init.d, vykdyti tam tikrame vykdymo lygyje, galite pagalvoti apie simbolinės nuorodos pašalinimą iš atitinkamo katalogo rc * .d. Tai tikrai veikia, bet jei padarysite klaidą ir kada nors turėsite grąžinti nuorodą į vietą, gali kilti sunkumų prisiminti tikslų nuorodos pavadinimą. Todėl neturėtumėte pašalinti nuorodų rc * .d kataloguose, o add pabraukite (_) nuorodos pavadinimo pradžioje taip:

mv S99httpd _S99httpd

Paleidimo metu rc ignoruoja _S99httpd, nes jis neprasideda raide S ar K.

Iki add paslaugą, turite sukurti scenarijų, kaip ir kiti kataloge init.d, tada teisingame rc * .d kataloge sukurti simbolinę nuorodą. Lengviausias būdas parašyti scenarijų yra ištirti scenarijus, jau esančius init.d, padaryti suprantamą kopiją ir modifikuoti kopiją.

Kada addJei norite pradėti paslaugą, įsitikinkite, kad įkrovos sekoje pasirinkote tinkamą vietą. Jei paslauga prasideda per anksti, ji gali neveikti dėl priklausomybės nuo kitos paslaugos. Dėl nebūtiniausių paslaugų dauguma systems administrators teikia pirmenybę skaičiams 90-aisiais, po daugelio paslaugų, kurios buvo pateiktos kartu su system.

Linux paskirstymai paprastai būna su komanda įjungti ir išjungti paslaugas rc * .d kataloguose. Pavyzdžiui, Debian'e komanda yra update-rc.d ir Red Hat Linux, komanda yra chkconfig. Taip pat yra grafinės vartotojo sąsajos. Šių programų naudojimas padeda išlaikyti nuoseklius paleisties katalogus ir padeda atnaujinti.

Užuomina: Vienas iš labiausiai paplitusių Linux installproblemos yra netinkamai sukonfigūruotas XFree86 serveris, kuris įsijungia ir išjungiamas, todėl system netinka naudoti konsolėse. Norėdami sustabdyti šį elgesį, paleiskite vieną vartotoją mode ir pakeiskite vykdymo lygio arba vykdymo lygio paslaugas. Ieškokite ko nors su xdm, gdm arba kdm savo rc*.d kataloguose arba /etc/inittab.

Valdomas inic

Kartais jums reikia šiek tiek paspartinti init, kad lieptumėte perjungti paleidimo lygius, iš naujo perskaityti inittab failą arba tiesiog shut down As system. Kadangi „init“ visada yra pirmasis procesas a system, jo proceso ID visada yra 1.

„Init“ galite valdyti naudodami „telinit“. Pvz., Jei norite pereiti prie 3 lygio, naudokite šią komandą:

telinitas 3

Keičiant vykdymo lygius, init bando sunaikinti visus procesus, kurių nėra naujojo vykdymo lygio inittab faile. Todėl turėtumėte būti atsargūs keisdami paleidimo lygius.

Kai reikia add arba pašalinti atkūrimo užduotis arba atlikti bet kokius kitus inittab failo pakeitimus, turite pranešti init apie pakeitimą ir priversti jį iš naujo perskaityti failą. Kai kurie žmonės naudoja kill -HUP 1, kad nurodytų init tai padaryti. Šis tradicinis metodas veikia daugumoje Unix versijų, jei tik įvesite jį teisingai. Tačiau taip pat galite paleisti šią telinit komandą:

telinit q

Taip pat galite naudoti telinit s, kad perjungtumėte į vieno vartotojo režimą mode.

Išjungimas

„init“ taip pat kontroliuoja, kaip system išsijungia ir paleidžiamas iš naujo. Tinkamas būdas shut down a Linux machine yra naudoti išjungimo komandą.

Yra du pagrindiniai išjungimo būdai. Jei sustabdysite system, jis išjungia machine žemyn ir laiko jį žemyn. Padaryti macnedelsdami sustabdykite, naudokite šią komandą:

shutdown-h dabar

Daugumoje modern machines su pakankamai naujausiomis versijomis Linux, sustojus nutrūksta maitinimas machine. Taip pat galite iš naujo paleisti machine. Norėdami paleisti iš naujo, naudokite -r vietoj -h.

Išjungimo procesas trunka kelias sekundes. Niekada neturėtumėte iš naujo nustatyti ar išjungti a machine šiame etape.

Ankstesniame pavyzdyje dabar yra laikas shut down. Šis argumentas yra privalomas, tačiau jį nurodyti galima įvairiais būdais. Jei norite machine sumažėti kada nors ateityje, vienas iš būdų yra naudoti + n, kur n yra minučių skaičius, kiek išjungimo turėtų laukti prieš atlikdamas savo darbą. Dėl kitų options, peržiūrėkite išjungimo (8) vadovo puslapį.

Kad system paleiskite iš naujo per 10 minučių, paleiskite šią komandą:

išjungimas -r +10

On Linux, išjungimas praneša visiems prisijungusiems, kad machine mažėja, bet realaus darbo mažai. Jei nurodysite kitą laiką nei dabar, išjungimas sukuria failą pavadinimu /etc/nologin. Kai šis failas yra, system draudžia prisijungti bet kam, išskyrus super naudotoją.

Kada system galiausiai ateina išjungimo laikas, išjungimas liepia „init“ pereiti prie 0 lygio, jei reikia sustabdyti, ir 6 - iš naujo paleisti. Kai inic enter0 arba 6 vykdymo lygis, įvyksta visi šie veiksmai, kuriuos galite patikrinti žiūrėdami į scenarijus rc0.d ir rc6.d viduje:

1. „init“ užmuša visus procesus, kuriuos tik gali (kaip tai darytų pereinant prie bet kurio kito vykdymo lygio).

# Pradinės komandos rc0.d / rc6.d vykdomos, užrakinamos system failus ir kitus pasirengimus išjungti.
# Kitos rc0.d/rc6.d komandos atjungia visus failussystems, išskyrus šaknį.
# Kitos rc0.d/rc6.d komandos perjungia šakninį failąsystem Tik skaitymui.
# Dar daugiau rc0.d/rc6.d komandų įrašo visus buferinius duomenis į failąsystem su sinchronizavimo programa.
# Paskutinės komandos rc0.d / rc6.d liepia branduoliui paleisti iš naujo arba sustabdyti perkraunant, sustabdžius arba išjungiant programą.

Perkraukimo ir sustabdymo programos kiekviename vykdymo lygyje elgiasi skirtingai, todėl gali kilti painiavos. pateikė default, šios programos iškviečia išjungimą su -r arba -h options, bet jei system jau yra sustabdytas arba perkraunamas vykdymo lygis, programos liepia branduoliui nedelsiant išsijungti. Jei tikrai norite uždaryti savo macskubėkite žemyn, neatsižvelgdami į galimą žalą, atsiradusią dėl netvarkingo išjungimo, naudokite parinktį -f.

Technologijų entuziastas, nuo 2006 metų su malonumu rašau „StealthSettings.com“. Turiu išsamią patirtį su operacinėmis sistemomis: macOS, „Windows“ ir „Linux“, taip pat programavimo kalbomis ir blogo platformomis („WordPress“) bei internetinės parduotuvės platformomis („WooCommerce“, „Magento“, „PrestaShop“).

Palikite komentarą