"Linux" batai

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

1. Paleidimo krautuvas diske randa branduolio atvaizdą, įkelia jį į atmintį ir paleidžia.
2. Branduolys inicijuoja įrenginius ir jo tvarkykles.
3. Branduolys pritvirtina šaknį filesystem.
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. Kai pasirinksite, įkrovos paleidėjas paleidžia „Linux“ branduolį, perduodamas 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ė šaknis filesystem:

VFS: montuojamas šaknis (ext2 filesystem) 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", init pastaba yra ypač akivaizdi, nes ji „sveikina“ jus su „Red Hat Linux“. Visi pranešimai po to rodo sėkmę ar nesėkmę 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

Iniciale 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ų, tačiau dauguma „Linux“ paskirstymų 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 naudojant „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 tvarkingai ir liepti branduoliui sustoti. Dar vienas vieno vartotojo režimo vykdymo lygis yra aptartas vėliau.

Lengviausias būdas gauti valdymą paleidimo lygiuose yra ištirti init konfigūraciją file, / etc / inittab. Ieškokite tokios eilutės:

ID: 5: inicdefault:

Ši eilutė reiškia, kad default paleidimo lygis system yra 5. Visos inittabo eilutės file pateikiama tokia forma, keturi laukai, atskirti dvitaškiais, pateikiami 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

Dėl pakartotinio atkūrimo veiksmas inicijuoja vykdomą komandą ir, jei komanda baigia vykdyti, vėl ją paleisti. Tikriausiai pamatysite kažką panašaus į šią eilutę savo inittab file:

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

Šis 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 S89atd
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į į kiekvienos komandos pradžios argumentą. S komandos pavadinime reiškia, kad komanda turėtų veikti paleidimo režimu, o skaičius (nuo 00 iki 99) nustato, kur 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, prasidedančios raide K („kill“ arba „stop“ režimui). Tokiu atveju rc vietoj paleidimo paleidžia komandą su argumentu stop. Labiausiai tikėtina, kad susidursite su K komandomis vykdymo lygiuose, kurie uždaro system žemyn.

Addpaslaugų pašalinimas

Jei norite add, ištrinti ar modifikuoti paslaugas rc * .d kataloguose, turite atidžiau pažvelgti į files viduje. Ilgas sąrašas rodo 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 į files kataloge init.d, paprastai aplankuose / etc arba /etc/rc.d. „Linux“ paskirstymuose yra šios nuorodos, kad jie galėtų naudoti tuos pačius paleidimo scenarijus visiems vykdymo lygiams. Ši konvencija jokiu būdu nėra reikalavimas, tačiau dažnai organizavimą šiek tiek palengvina.

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 administratoriai teikia pirmenybę skaičiams 90-aisiais, po daugumos paslaugų, kurios buvo prieinamos system.

„Linux“ distribucijose paprastai yra komanda, leidžianti ir išjungti paslaugas rc * .d kataloguose. Pvz., „Debian“ komanda yra update-rc.d, o „Red Hat Linux“ - chkconfig. Galimos ir grafinės vartotojo sąsajos. Naudojant šias programas, paleidimo katalogai gali būti nuoseklūs ir atnaujinant.

Užuomina: Vienas iš labiausiai paplitusių Linux installproblemos yra netinkamai sukonfigūruotas XFree86 serveris, kuris įsijungia ir išjungiamas, todėl system nenaudojamas konsolėje. Norėdami sustabdyti šią elgseną, paleiskite vieno vartotojo režimą ir pakeiskite paleisties ar vykdymo lygio paslaugas. Ieškokite kažko, kuriame yra xdm, gdm arba kdm, jūsų rc * .d kataloguose arba / etc / inittab.

Valdomas inic

Kartais jums reikia šiek tiek paspirkti, kad lieptumėte perjungti bėgimo lygius, perskaityti inittab. filearba 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

Perjungdami vykdymo lygius, „init“ bando sunaikinti visus procesus, kurių nėra inittabe file naujam bėgimo lygiui. Todėl turėtumėte būti atsargūs keisdami bėgimo lygius.

Kai reikia add arba pašalinti pertvarkymo darbus arba atlikti kitus pakeitimus file, turite pasakyti init apie pakeitimą ir priversti jį perskaityti file. Kai kurie žmonės nurodo „kill -HUP 1“, kad lieptų tai padaryti. Šis tradicinis metodas veikia daugumoje „Unix“ versijų, jei tik ją įvedate teisingai. Tačiau taip pat galite paleisti šią „telinit“ komandą:

telinit q

Taip pat galite naudoti „telinit“, kad pereitumėte į vieno vartotojo režimą.

Išjungimas

„init“ taip pat kontroliuoja, kaip system išsijungia ir paleidžiamas iš naujo. Tinkamas būdas shut down ir „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

Ant moderniausių maclinijos su pakankamai naujausiomis „Linux“ versijomis, sustabdymas sumažina „Linux“ galią 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 eiti žemyn kada nors ateityje, vienas iš būdų yra naudoti + n, kur n yra minučių skaičius, kurį išjungimas turėtų palaukti prieš atlikdamas savo darbą. Norėdami sužinoti apie kitas parinktis, žiūrėkite išjungimo (8) vadovo puslapį.

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

išjungimas -r +10

„Linux“ sistemoje išjungimas praneša visiems prisijungusiems machine mažėja, bet realiai dirba nedaug. Jei nurodysite kitą laiką nei dabar, išjungus bus sukurtas file vadinamas / etc / nologin. Kai tai file 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 files vietoje ir daromi kiti pasirengimai išjungti.
# Kitos rc0.d / rc6.d komandos atjungia visus filesystems, išskyrus šaknį.
# Kitos komandos rc0.d / rc6.d perkelia šaknį filesystem Tik skaitymui.
# Dar daugiau komandų rc0.d / rc6.d rašo visus buferinius duomenis į filesystem 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ą naudodamos -r arba -h parinktis, 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.

Palikti atsakymą

Jūsų elektroninio pašto adresas address nebus skelbiamas. Privalomi laukai yra pažymėti *