Linux Zābaki

Kā izrādās, sāknēšanas procesam nav daudz:

1. Sāknēšanas ielādētājs atrod kodola attēlu disk, ielādē to atmiņā un palaiž.
2. Kodols inicializēt ierīces un STI vadītājiem.
3. Kodols pievieno saknes failusystem.
4. Kodols sāk init sauc programmas.
5. init nosaka pārējo procesu kustībā.
6. Pēdējie procesus, kas Pr sākas kā daļa no boot secība ļauj jums pieteikties.

Katra sāknēšanas procesa posma noteikšana ir nenovērtējama, nosakot sāknēšanas problēmas un izprotot system kopumā. Lai sāktu, iestatiet nulli uz sāknēšanas iekrāvēja, kas ir sākotnējais ekrāns vai uzvedne, kuru saņemat pēc tam, kad dators veic ieslēgšanas pašpārbaudi, vaicājot, kurš darbojas system skriet. Kad esat izdarījis izvēli, sāknēšanas ielādētājs palaiž Linux kodols, nododot kontroli pār system kodolam.

Ir detalizēta diskusija par kodola citur šajā grāmatā, no kuras šis raksts ir fragments. Šis pants attiecas uz kodolu inicializācijas posms, posms, kad kodols izdrukā virkni ziņojumu par datorā esošo aparatūru system. Kodols sāk init tūlīt pēc tam, kad tiek parādīts ziņojums, kas paziņo, ka kodols ir uzstādījis saknes failssystem:

VFS: Uzstādīts root (ext2 failisystem) tikai lasīt.

Drīz pēc tam jūs redzēsiet ziņojumu par init startēšanu, kam sekos system pakalpojuma startēšanas ziņojumi, un visbeidzot jūs saņemat sava veida pieteikšanās uzvedni.

PIEZĪME Uz Red Hat Linux, sākuma piezīme ir īpaši acīmredzama, jo tā jūs "sveicina" Red Hat Linux. ” Visi ziņojumi pēc tam parāda panākumus vai neveiksmes iekavās ekrāna labajā pusē.

Lielākā daļa no šīs nodaļas nodarbojas ar init, Jo tā ir daļa no boot secība, kur jums ir visvairāk kontroli.
init

Init nav nekā īpaša. Tā ir tāda pati programma kā jebkura cita programma Linux system, un jūs atradīsit to mapē / sbin kopā ar citiem system bināros failus. Galvenais init mērķis ir sākt un apturēt citas programmas noteiktā secībā. Viss, kas jums jāzina, ir tas, kā šī secība darbojas.

Ir dažas dažādas variācijas, bet lielākā daļa Linux izplatījumos tiek izmantots System Šeit apspriestais V stils. Dažos izplatījumos tiek izmantota vienkāršāka versija, kas atgādina BSD init, taču diez vai jūs to sastapsit.

Darblīmeņi

Jebkurā laikā uz a Linux system, darbojas noteikts procesu kopums. Šis stāvoklis machine tiek saukts par tā darbības līmeni, un to apzīmē ar skaitli no 0 līdz 6. The system lielāko daļu laika pavada vienā darbības līmenī. Tomēr, kad jūs aizverat macnolaiž, init pārslēdzas uz citu darbības līmeni, lai pārtrauktu system pakalpojumus un likt kodolam apstāties. Vēl viens izpildlīmenis ir paredzēts vienam lietotājam mode, apspriests vēlāk.

Vienkāršākais veids, kā rīkoties ar izpildes līmeņiem, ir pārbaudīt init konfigurācijas failu /etc/inittab. Meklējiet šādu rindu:

id: 5: inicdefault:

Šī līnija nozīmē, ka default operētājsistēmas līmenis system ir 5. Visām rindām failā inittab ir šāda forma, un četri lauki, kas atdalīti ar koliem, notiek šādā secībā:
# Unikāls identifikators (īss virkni, piemēram, id iepriekšējā piemērā)
# Piemērojams darblīmenim numurs (-i)
# Darbība, kas jāveic init (iepriekšējā piemērā darbība ir iestatīt default darbības līmenis līdz 5)
# Komandu izpildīt (pēc izvēles)

Iepriekšējā initā nav izpildāmas komandasdefault piemērs, jo komandai nav jēgas iestatīšanas kontekstā default runlevel. Skatieties nedaudz tālāk inittab, līdz redzat šādu līniju:

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

Šī līnija izraisa lielāko daļu system konfigurāciju un pakalpojumus, izmantojot direktorijas rc * .d un init.d. Var redzēt, ka init ir iestatīts izpildīt komandu ar nosaukumu /etc/rc.d/rc 5, kad ir 5. darbības līmenis. Gaidīšanas darbība norāda, kad un kā init izpilda komandu: palaidiet rc 5 vienreiz, kad entering 5. līmeņa līmeni un pēc tam pagaidiet, kamēr šī komanda tiks pabeigta, pirms kaut ko darāt.

Vietnē ir vairākas dažādas darbības addiniciētdefault un pagaidiet, it īpaši attiecībā uz enerģijas pārvaldību, un inittab (5) rokasgrāmatas lapā jūs par tām visu pastāstāt. Tie, ar kuriem jūs, visticamāk, sastopaties, ir paskaidroti nākamajās sadaļās.

respawn

Respawn darbība liek init palaist sekojošo komandu un, ja komandas izpilde ir pabeigta, palaist to vēlreiz. Jūs, iespējams, redzēsit kaut ko līdzīgu šai rindai savā inittab failā:

1: 2345: respawn :/ sbin / mingetty tty1

Getty programmas sniedz login uzvedņu. Iepriekšējā līnija ir pirmā virtuālā konsole (/ dev / tty1), vienu jūs redzēt, kad jūs nospiediet ALT vai CONTROL-Alt-F1 F1. Respawn rīcība rada login prompt atpakaļ pēc tam, kad jūs log out.

ctrlcitur

Jūsu darbs IR Klientu apkalpošana ctrldarbība kontrolē to, ko system dara, nospiežot CONTROL-ALT-DELETE virtuālajā konsolē. Lielākajā daļā systems, tā ir sava veida atsāknēšanas komanda, izmantojot izslēgšanas komandu.

sysinit

Sistēmiskā darbība ir pati pirmā lieta, kas init vajadzētu palaist, kad tā tiks sākta, pirms tam enterjebkuros līmeņos.

Kā procesi Runlevels sākt

Tagad jūs esat gatavs uzzināt, kā sākt system tieši pirms tā ļauj jums pieteikties. Atsaukt šo inittab rindu no iepriekšējās:

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

Šī mazā line izraisa daudzas citas programmas. RC nozīmē palaist komandu, un jūs dzirdēsiet cilvēki atsaucas uz komandas, skripti, programmām vai pakalpojumiem. Tātad, kur ir Šīs komandas, anyway?

5. līmeņa 5. līmenim šajā piemērā komandas, iespējams, ir vai nu /etc/rc.d/rc5.d vai /etc/rc1.d. 1. līmeņa līmenis izmanto rc2.d, 2. līmeņa XNUMX. līmenis izmanto rcXNUMX.d utt. Jūs varētu atrast sekojošo items rc5.d direktorijā:

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

Rc 5 komandu sākas programmas šajā Darblīmenis direktorijā, vadot GMT komandas:

S10sysklogd mājas
S12kerneld mājas
S15netstd_init mājas
S18netbase mājas
...
S99sshd mājas

Ievērojiet sākuma argumentu katrā komandā. S komandas nosaukumā nozīmē, ka komandai jādarbojas sākumā mode, un cipars (no 00 līdz 99) nosaka, kur secībā rc sāk komandu.

Rc * D komandas. Parasti apvalks skriptus, kas sākas programmas / sbin vai / usr / sbin. Parasti jūs varat izdomāt, ko viens no komandas tiešām apskatot skriptu ar mazāk vai kādā citā pager programmu.

Vienu no šiem pakalpojumiem varat sākt ar roku. Piemēram, ja vēlaties manuāli startēt Web servera programmu, palaidiet S99httpd start. Tāpat, ja jums kādreiz ir nepieciešams nogalināt kādu no pakalpojumiem, kad machine ir ieslēgts, komandu var izpildīt direktorijā rc * .d ar stop argumentu (piemēram, S99httpd stop).

Dažos rc*.d direktorijos ir komandas, kas sākas ar K (nozīmē "kill" vai stop mode). Šajā gadījumā rc palaiž komandu ar stop argumentu, nevis start. Visticamāk, jūs saskarsities ar K komandām izpildes līmeņos, kas aizver system leju.

Addpakalpojumu noņemšana

Ja jūs vēlaties, lai add, dzēsiet vai modificējiet pakalpojumus rc*.d direktorijos, jums ir nepieciešams tuvāk apskatīt tajā esošos failus. Garš saraksts atklāj šādu struktūru:

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

Komandas direktorijā rc*.d faktiski ir simboliskas saites uz failiem init.d direktorijā, parasti mapē /etc vai /etc/rc.d. Linux izplatījumos ir šīs saites, lai tie varētu izmantot vienus un tos pašus starta skriptus visiem izpildes līmeņiem. Šī konvencija nekādā gadījumā nav obligāta, taču tā bieži vien nedaudz atvieglo organizēšanu.

Lai nepieļautu, ka kāda no direktorijas init.d komandām darbojas noteiktā darbības līmenī, jūs varētu domāt noņemt simbolisko saiti attiecīgajā direktorijā rc * .d. Tas patiešām darbojas, taču, ja kļūdāties un kādreiz ir nepieciešams saiti atjaunot vietā, jums var rasties problēmas atcerēties precīzu saites nosaukumu. Tādēļ jums nevajadzētu noņemt saites direktorijās rc * .d, bet gan add pasvītrojums (_) saites nosaukuma sākumam šādi:

mv S99httpd _S99httpd

Sāknēšanas laikā rc ignorē _S99httpd, jo tas nesākas ar S vai K. Turklāt sākotnējais nosaukums joprojām ir acīmredzams, un jums ir ātra piekļuve komandai, ja jums ir šķipsna un jums tas jāsāk ar roku.

Uz add pakalpojums, jums jāizveido skripts tāpat kā citi direktorijā init.d un pēc tam jāizveido simboliska saite pareizajā direktorijā rc * .d. Vienkāršākais veids, kā uzrakstīt skriptu, ir pārbaudīt skriptus, kas jau atrodas init.d, izveidot saprotamu kopiju un modificēt kopiju.

Kad addLai sāktu pakalpojumu, pārliecinieties, vai sāknēšanas secībā esat izvēlējies atbilstošu vietu, lai sāktu pakalpojumu. Ja pakalpojums sāk darboties pārāk ātri, tas var nedarboties atkarībā no kāda cita pakalpojuma. Par nebūtiskiem pakalpojumiem lielākā daļa systems administrators dod priekšroku skaitļiem 90. gados pēc lielākās daļas pakalpojumu, kas tika piegādāti kopā ar system.

Linux izplatījumos parasti ir komanda, lai iespējotu un atspējotu pakalpojumus rc * .d direktorijos. Piemēram, Debianā komanda ir update-rc.d un Red Hat Linux, komanda ir chkconfig. Ir pieejamas arī grafiskās lietotāja saskarnes. Šo programmu izmantošana palīdz uzturēt startēšanas direktoriju konsekvenci un palīdz veikt jaunināšanu.

Padoms: Viens no visizplatītākajiem Linux installProblēmas ir nepareizi konfigurēts XFree86 serveris, kas ieslēdzas un izslēdzas, padarot system nav lietojams uz konsolēm. Lai apturētu šo darbību, sāknējiet viena lietotāja versiju mode un mainiet izpildlīmeņa vai izpildlīmeņa pakalpojumus. Meklējiet kaut ko, kas satur xdm, gdm vai kdm savos rc*.d direktorijos vai /etc/inittab.

Kontrolēt init

Reizēm init ir nedaudz jāpasteidzina, lai liktu tai pārslēgt izpildes līmeņus, atkārtoti izlasīt inittab failu vai vienkārši shut down o system. Tā kā init vienmēr ir pirmais process a system, tā procesa ID vienmēr ir 1.

Jūs varat kontrolēt init ar telinit. Piemēram, ja jūs vēlaties, lai pārslēgtos uz Darblīmenis 3, izmantojiet šo komandu:

telinit 3

Pārslēdzot izpildes līmeņus, init mēģina iznīcināt visus procesus, kas nav iekļauti jaunā izpildes līmeņa failā inittab. Tāpēc jums vajadzētu būt uzmanīgiem, mainot izpildes līmeņus.

Kad vajag add vai noņemt atsākšanas darbus vai veikt jebkādas citas izmaiņas inittab failā, jums ir jāpaziņo init par izmaiņām un jāliek tai atkārtoti izlasīt failu. Daži cilvēki izmanto kill -HUP 1, lai norādītu init to darīt. Šī tradicionālā metode darbojas lielākajā daļā Unix versiju, ja vien ievadāt to pareizi. Tomēr jūs varat arī palaist šo telinit komandu:

telinit q

Varat arī izmantot telinit s, lai pārslēgtos uz viena lietotāja režīmu mode.

Slēgtu

arī kontrolē, kā system izslēdzas un pārstartējas. Pareizais veids, kā shut down a Linux machine ir izmantot izslēgšanas komandu.

Ir divi galvenie izslēgšanas izmantošanas veidi. Ja jūs apturat system, tas izslēdz machine uz leju un tur to uz leju. Lai padarītu macnekavējoties apturiet, izmantojiet šo komandu:

shutdown-h tagad

Lielākajā daļā modern machines ar samērā jaunākām versijām Linux, apstāšanās pārtrauc strāvu machine. Varat arī restartēt machine. Pārstartēšanai -h vietā izmantojiet -r.

Izslēgšanas process aizņem vairākas sekundes. Jums nekad nevajadzētu atiestatīt vai izslēgt a machine šajā posmā.

Iepriekšējā piemērā tagad ir īstais laiks shut down. Šis arguments ir obligāts, taču ir daudz veidu, kā to norādīt. Ja vēlaties machine, lai kādreiz nākotnē pazustu, viens no veidiem ir izmantot + n, kur n ir minūšu skaits, cik ilgi jāgaida izslēgšanai, pirms tiek veikts darbs. Citām options, skatiet izslēgšanas (8) rokasgrāmatas lapu.

Padarīt system atsāknēšana pēc 10 minūtēm, palaidiet šo komandu:

shutdown-r + 10

On Linux, izslēgšana paziņo ikvienam, kas ir pieteicies, ka machine iet uz leju, bet tas maz reāli strādā. Ja norādāt citu laiku, nevis tagad, izslēgšana izveido failu ar nosaukumu /etc/nologin. Kad šis fails ir pieejams, system aizliedz pieteikšanos ikvienam, izņemot superlietotāju.

Kad system beidzot pienāk izslēgšanas laiks, izslēgšana liek iniciētim pārslēgties uz 0. līmeni, lai apturētu, un 6. līmeni, lai veiktu atsāknēšanu. Kad inic enters līmeņa 0 vai 6 gadījumā notiek viss tālāk norādītais, ko varat pārbaudīt, apskatot skriptus rc0.d un rc6.d:

1. init nogalina katru procesu, ka tā var (kā tas, pārejot uz jebkuru citu darblīmeņa).

# Sākotnējās komandas rc0.d / rc6.d darbojas, bloķējas system failus un veic citus sagatavošanās darbus izslēgšanai.
# Nākamās komandas rc0.d/rc6.d atvieno visus failussystems, izņemot sakni.
# Citas rc0.d/rc6.d komandas pārmontē saknes failusystem tikai lasīt.
# Vēl vairāk komandu rc0.d/rc6.d ieraksta visus buferizētos datus failāsystem ar sinhronizācijas programmu.
# Galīgie rc0.d / rc6.d komandas pateikt kodolu atsāknēšana vai apturēt ar reboot, apturētu vai poweroff programmu.

Atsāknēšanas un apturēšanas programmas katram darbības līmenim darbojas atšķirīgi, kas var radīt neskaidrības. Autors default, šīs programmas izsauc izslēgšanu ar taustiņu -r vai -h options, bet, ja system jau ir apstājies vai pārstartē darbības līmeni, programmas liek kodolam nekavējoties sevi izslēgt. Ja jūs patiešām vēlaties aizvērt savu macsteidzieties uz leju (neņemot vērā visus iespējamos zaudējumus, ko izraisījusi nesakārtota izslēgšana), izmantojiet opciju -f.

Tehnoloģijas entuziasts, ar prieku rakstu vietnē StealthSettings.com no 2006. gada. Man ir plaša pieredze operētājsistēmās: macOS, Windows un Linux, kā arī programmēšanas valodās un blogošanas platformās (WordPress) un tiešsaistes veikalu platformās (WooCommerce, Magento, PrestaShop).

Leave a Comment