Paano Gamitin ang Init Command sa Linux

Ang Init ay ang magulang ng lahat ng mga proseso. Ang pangunahing papel nito ay ang lumikha ng mga proseso mula sa isang script na naka-imbak sa file / etc / inittab (tingnan ang inittab (5)). Ang file na ito ay karaniwang may mga entry na sanhi ng init upang i-spawn getty s sa bawat linya na maaaring mag-log in ang mga gumagamit. Kinokontrol din nito ang mga autonomous na proseso na kinakailangan ng anumang partikular na system.

Runlevels

Ang isang runlevel ay isang configuration ng software ng system na nagpapahintulot lamang sa isang napiling pangkat ng mga proseso na umiiral. Ang mga proseso na sinimulan ng init para sa bawat isa sa mga runlevels na ito ay tinukoy sa / etc / inittab na file. Ang init ay maaaring nasa isa sa walong runlevels: 0-6 at S o s . Ang runlevel ay binago sa pamamagitan ng pagkakaroon ng isang privileged user run telinit , na nagpapadala ng naaangkop na signal sa init , na nagsasabi na kung saan runlevel upang baguhin sa.

Ang runlevels 0 , 1 , at 6 ay nakalaan. Ang Runlevel 0 ay ginagamit upang ihinto ang sistema, ang runlevel 6 ay ginagamit upang i-reboot ang system, at ang runlevel 1 ay ginagamit upang makuha ang sistema sa iisang user mode. Ang Runlevel S ay hindi talaga sinadya upang magamit nang direkta, ngunit higit pa para sa mga script na naisakatuparan kapag nagpasok ng runlevel 1. Para sa karagdagang impormasyon tungkol dito, tingnan ang mga manpages para sa shutdown (8) at inittab (5).

Ang mga Runlevels 7-9 ay may bisa din, bagaman hindi talaga dokumentado. Ito ay dahil hindi ginagamit ng mga "tradisyonal" na variant ng Unix. Kung sakaling mausisa ka, ang mga runlevels S at s sa katunayan ay pareho. Panloob na mga ito ay mga alyas para sa parehong runlevel.

Booting

Matapos ang init ay mahihingi bilang huling hakbang ng pagkakasunud-sunod ng kernel boot, tinitingnan nito ang file / etc / inittab upang makita kung mayroong isang entry ng uri ng initdefault (tingnan ang inittab (5)). Ang initdefault entry ay tumutukoy sa unang runlevel ng system. Kung walang ganitong entry (o walang / etc / inittab sa lahat), isang runlevel ay dapat na ipinasok sa system console.

Ang Runlevel S o s dalhin ang sistema sa iisang user mode at hindi nangangailangan ng isang / etc / inittab file. Sa solong mode ng user, binuksan ang root shell sa / dev / console .

Kapag nagpapasok ng solong mode ng user, binabasa ng init ang mga ioctl (2) na estado ng console mula sa /etc/ioctl.save . Kung ang file na ito ay hindi umiiral, init initializes ang linya sa 9600 baud at sa mga setting ng CLOCAL . Kapag ang init ay nag- iisang solong mode ng user, iniimbak ang mga setting ng ioctl sa console sa file na ito upang maaari itong muling gamitin para sa susunod na single-user session.

Kapag nagpapasok ng isang multi-user mode sa unang pagkakataon, ang init ay nagsasagawa ng mga boot at bootwait entry upang pahintulutan ang mga sistema ng file na i-mount bago mag-log in ang mga gumagamit. Pagkatapos lahat ng mga entry na tumutugma sa runlevel ay naproseso.

Kapag nagsisimula ng isang bagong proseso, unang sinisiyasat ng init kung umiiral ang file / etc / initscript . Kung gagawin nito, ginagamit nito ang script na ito upang simulan ang proseso.

Sa tuwing tinatapos ng isang bata, itatala ng init ang katotohanan at ang dahilan kung bakit ito namatay sa / var / run / utmp at / var / log / wtmp , sa kondisyon na umiiral ang mga file na ito.

Pagbabago ng Runlevels

Pagkatapos na ito ay spawned lahat ng mga proseso na tinukoy, init naghihintay para sa isa sa kanyang mga kaapu-apuhan proseso upang mamatay, isang signal ng powerfail, o hanggang sa ito ay signaled sa pamamagitan ng telinit upang baguhin ang runlevel ng system. Kapag ang isa sa mga nasa itaas na tatlong kundisyon ay nangyayari, muling sinusuri ang / etc / inittab na file. Maaaring maidagdag ang mga bagong entry sa file na ito anumang oras. Gayunpaman, hinihintay pa rin ng init ang isa sa mga nasa itaas na tatlong kondisyon na mangyari. Upang magbigay ng isang madalian na tugon, ang telinit Q o q command ay maaaring gumising sa init upang muling suriin ang / etc / inittab na file.

Kung ang init ay wala sa single mode ng gumagamit at tumatanggap ng isang powerfail signal (SIGPWR), binabasa nito ang file / etc / powerstatus . Pagkatapos ay magsisimula ito ng isang utos batay sa mga nilalaman ng file na ito:

F (AIL)

Ang kapangyarihan ay nabigo, ang UPS ay nagbibigay ng kapangyarihan. Ipatupad ang mga powerwait at powerfail entry.

O (K)

Naibalik ang kapangyarihan, isagawa ang mga entry sa powerokwait .

L (OW)

Ang kapangyarihan ay nabigo at ang UPS ay may mababang baterya. Ipatupad ang mga entry ng powerfailnow .

Kung ang / etc / powerstatus ay hindi umiiral o naglalaman ng anumang bagay pagkatapos ay ang mga titik na F , O o L , ay kumilos ang init na kung nabasa na ang titik F.

Ang paggamit ng SIGPWR at / etc / powerstatus ay nasiraan ng loob. Ang isang taong gustong makisalamuha sa init ay dapat gumamit ng / dev / initctl control channel - tingnan ang source code ng sysvinit na pakete para sa higit pang dokumentasyon tungkol dito.

Kapag ang init ay hiniling na baguhin ang runlevel, nagpapadala ito ng babala signal SIGTERM sa lahat ng mga proseso na hindi natukoy sa bagong runlevel. Pagkatapos nito ay naghihintay ng 5 segundo bago pinilit na tapusin ang mga prosesong ito sa pamamagitan ng signal SIGKILL . Pansinin na ipinapalagay ng init na ang lahat ng mga prosesong ito (at ang kanilang mga inapo) ay nananatili sa parehong grupo ng proseso na nilikha ng init para sa kanila. Kung ang anumang proseso ay nagbabago sa kaakibat na proseso ng grupo hindi ito makakatanggap ng mga senyas na ito. Ang mga prosesong ito ay kailangang ihiwalay nang hiwalay.

Telinit

/ sbin / telinit ay naka-link sa / sbin / init . Ito ay tumatagal ng isang isang-character na argumento at signal init upang maisagawa ang naaangkop na pagkilos. Ang mga sumusunod na argumento ay nagsisilbing direktiba sa telinit :

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

sabihin sa init upang lumipat sa tinukoy na antas ng run.

a , b , c

sabihin sa init na iproseso lamang ang mga / etc / inittab na mga entry ng file na may runlevel a , b o c .

Q o q

sabihin sa init upang suriin muli ang / etc / inittab file.

S o s

sabihin sa init upang lumipat sa iisang user mode.

U o u

sabihin sa init na muling ipatupad ang sarili nito (pagpapanatili ng estado). Walang muling pagsusuri ng mangyayari / etc / inittab file ang mangyayari. Ang antas ng pagpapatakbo ay dapat na isa sa Ss12345 , kung hindi man ay hihiling sa tahimik na kahilingan.

Maaari ring sabihin ng telinit ang init kung gaano katagal dapat itong maghintay sa pagitan ng mga proseso ng pagpapadala ng SIGTERM at SIGKILL signal. Ang default ay 5 segundo, ngunit maaaring mabago ito gamit ang pagpipiliang -t sec .

Ang telinit ay maaaring tawagin lamang ng mga gumagamit na may mga naaangkop na pribilehiyo.

Ang init binary tseke kung ito ay init o telinit sa pamamagitan ng pagtingin sa proseso ng id nito ; ang proseso ng tunay na init ng id ay laging 1 . Mula dito ito ay sumusunod na sa halip na pagtawag telinit isa maaari ring gamitin lamang ang init sa halip bilang isang shortcut.