Jinsi ya kutumia Amri ya Init katika Linux

Init ni mzazi wa taratibu zote. Jukumu lake kuu ni kuunda michakato kutoka kwenye script iliyohifadhiwa kwenye faili / nk / inittab (angalia inittab (5)). Faili hii ina kawaida inaingia ambayo husababisha init kuzalisha getty s kila mstari watumiaji wanaweza kuingia. Pia kudhibiti uhuru taratibu zinazohitajika na mfumo wowote.

Runlevels

Runlevel ni usanidi wa programu wa mfumo ambayo inaruhusu kundi la kuchaguliwa tu la michakato kuwepo. Utaratibu uliotokana na init kwa kila moja ya hizi runlevels hufafanuliwa katika faili / nk / inittab . Init inaweza kuwa katika moja ya nane runlevels: 0-6 na S au s . Runlevel inabadilishwa kwa kuwa na mtumiaji mwenye faragha anayeendesha tanishi , ambayo hutuma ishara sahihi kwa init , na kuiambia ambayo runlevel itabadilika.

Runlevels 0 , 1 , na 6 zimehifadhiwa. Runlevel 0 inatumiwa kuzuia mfumo, runlevel 6 hutumiwa kurejesha mfumo, na runlevel 1 hutumiwa kupata mfumo chini ya mode moja ya mtumiaji. Runlevel S sio maana ya kutumiwa moja kwa moja, lakini zaidi kwa maandiko ambayo yanatumiwa wakati wa kuingia kwa runlevel 1. Kwa maelezo zaidi juu ya hili, angalia manpages kwa ajili ya kufuta (8) na inittab (5).

Runlevels 7-9 pia ni halali, ingawa sio kumbukumbu halisi. Hii ni kwa sababu "aina za jadi" za Unix hazitumii. Ikiwa unashuhudia, s Sle s S na s ni sawa sawa. Ndani wao ni aliases kwa runlevel sawa.

Kupiga kura

Baada ya init inakiliwa kama hatua ya mwisho ya mlolongo wa kernel boot, inatafuta faili / nk / inittab ili kuona ikiwa kuna kuingia kwa aina ya initdefault (angalia inittab (5)). Initdefault kuingia huamua runlevel ya awali ya mfumo. Ikiwa hakuna kuingia kama (au hakuna / nk / inittab wakati wote), runlevel lazima iingizwe kwenye console ya mfumo.

Runlevel S au s kuleta mfumo kwa mode moja ya mtumiaji na hauhitaji faili / nk / inittab . Katika mode moja ya mtumiaji, shell ya mizizi inafunguliwa kwenye / dev / console .

Unapoingia mode moja ya mtumiaji, init inasoma ioctl (2) ya console inasema kutoka /etc/ioctl.save . Ikiwa faili hii haipo, init huanza mstari saa 9600 baud na kwa mipangilio ya CLOCAL . Wakati wa init majani ya mode moja ya mtumiaji, inachukua mipangilio ya ioctl ya console katika faili hii ili iweze kuitumia tena kwa kikao kingine cha watumiaji.

Wakati wa kuingia kwa mtumiaji wa aina nyingi kwa mara ya kwanza, init hufanya vifungo vya boot na bootwait ili kuruhusu mifumo ya faili iwekwe kabla watumiaji wanaweza kuingilia . Kisha vitu vyote vinavyolingana na runlevel vinasindika.

Wakati wa kuanza mchakato mpya, init kwanza hundi kama faili / nk / initscript ipo. Ikiwa inafanya, inatumia script hii kuanza mchakato.

Kila wakati mtoto atakapomaliza, init kumbukumbu ya ukweli na sababu alikufa katika / var / kukimbia / utmp na / var / log / wtmp , kwa kuwa faili hizo zipo.

Kubadilisha Runlevels

Baada ya kuzalisha taratibu zote zilizotajwa, init zinasubiri moja ya michakato ya uzazi wake, ishara ya nguvufail, au mpaka itakapojulikana na telinit ili kubadili mfumo wa runlevel. Wakati moja ya hali tatu zilizo hapo juu hutokea, inachunguza tena faili / nk / inittab . Entries mpya zinaweza kuongezwa kwenye faili hii wakati wowote. Hata hivyo, init bado inasubiri kwa moja ya hali tatu hapo juu kutokea. Ili kutoa jibu la haraka, simu ya Q au Q inaweza kuamsha init ili kuchunguza upya faili / nk / inittab .

Ikiwa init haipo mode moja ya mtumiaji na inapata ishara ya nguvufail (SIGPWR), inasoma faili / nk / powerstatus . Halafu huanza amri kulingana na yaliyomo ya faili hii:

F (AIL)

Nguvu inashindwa, UPS inatoa nguvu. Fanya viingilio vya nguvuwait na nguvufail .

SAWA)

Nguvu imerejeshwa, kutekeleza entries nguvu.

CHINI)

Nguvu inashindwa na UPS ina betri ya chini. Fanya funguo za nguvufailnow .

Ikiwa / nk / powerstatus haipo au ina kitu kingine chochote basi barua za F , O au L , init itaendelea kama imeisoma barua F.

Matumizi ya SIGPWR na / nk / powerstatus ni tamaa. Mtu anayetaka kuingiliana na init anatumie kituo cha kudhibiti / dev / initctl - tazama msimbo wa chanzo cha mfuko wa sysvinit kwa nyaraka zaidi kuhusu hili.

Wakati init inahitajika kubadili runlevel, inatuma ishara ya onyo SIGTERM kwa taratibu zote ambazo hazijafanywa katika runlevel mpya. Inasubiri sekunde 5 kabla ya kukomesha taratibu hizi kwa njia ya ishara ya SIGKILL . Kumbuka kwamba init inadhani kwamba taratibu zote hizi (na wazao wao) zinabaki katika kundi moja la mchakato ambao init awali kwa ajili yao. Ikiwa mchakato wowote unabadilisha ushirikiano wa kikundi cha mchakato hautapokea ishara hizi. Michakato hiyo inahitaji kufutwa tofauti.

Telinit

/ sbin / telinit imeunganishwa na / sbin / init . Inachukua hoja moja ya tabia na ishara init ili kufanya hatua inayofaa. Sababu zifuatazo zinatumika kama maagizo ya telinit :

0 , 1 , 2 , 3 , 4 , 5 au 6

waambie init kubadili kiwango maalum cha kukimbia.

a , b , c

waambie init ya mchakato wa funguo hizi / nk / inittab zilizo na runlevel, b au c .

Q au q

waambie init ili kuchunguza tena faili / nk / inittab .

S au s

initisha init kubadili mode moja user.

U au u

waambie init ili kujitekeleza yenyewe (kulinda hali). Hakuna upya uchunguzi wa / nk / inittab faili inatokea. Ngazi ya kukimbia inapaswa kuwa moja ya Ss12345 , ombi la ombi litapuuzwa kimya.

telinit pia inaweza kuwaambia init muda gani unapaswa kusubiri kati ya kutuma michakato ya SIGTERM na SIGKILL. Kichapishaji ni sekunde 5, lakini hii inaweza kubadilishwa kwa chaguo -sec .

telinit inaweza kutumiwa tu na watumiaji wenye marupurupu sahihi.

Init binary hundi kama init au telinit kwa kuangalia id mchakato wake; id ya mchakato wa init halisi daima ni 1 . Kutoka hii inafuata kwamba badala ya kumwita simu moja unaweza pia kutumia init badala ya mkato.