Hvordan bruke 'init'-kommandoen i Linux

I det er forelder til alle Linux-prosesser. Det er den første prosessen som starter når en datamaskin starter opp, og den kjører til systemet slår seg av. Det er stamfaren til alle andre prosesser.

Dens primære rolle er å lage prosesser fra et skript som er lagret i filen /etc/inittab. Denne filen lagrer vanligvis oppføringer som forårsaker I det å gyte gettys på hver linje, som systembrukere kan logge på. Den kontrollerer også autonome prosesser som kreves av et bestemt system.

Pingvinen Tux er den offisielle Linux-maskoten.
Getty Images/John Coulter

Runlevels

EN løpenivå er en programvarekonfigurasjon av systemet som lar bare en utvalgt gruppe prosesser utføres. Prosessene skapte av I det for hver av disse kjørenivåene er definert i /etc/inittab-filen. I det støtter åtte kjørenivåer: 0 gjennom 6 og S eller s. Kjørenivået endres når en privilegert bruker kjører Telinit, som sender passende signaler til I det, og forteller hvilket løpsnivå den skal endre til.

Kjørenivåene 0, 1 og 6 er reservert. Runlevel 0 stopper systemet, runlevel 6

starter på nytt systemet, og kjørenivå 1 tvinger systemet til enkeltbrukermodus. Runlevel S er ikke ment å brukes direkte, men i stedet av skriptene som kjøres når runlevel 1 starter.

Kjørenivåene 7 til 9 er gyldige, men ikke godt dokumentert fordi konvensjonell Unix varianter bruker dem ikke. Kjørenivåene S og s er de samme.

Oppstart

Etter I det kjøres som det siste trinnet i kjerne oppstartssekvens, ser den etter filen /etc/inittab for å se om det er en oppføring av typen initdefault. Initdefault-oppføringen bestemmer det innledende kjørenivået til systemet. Hvis det ikke er en slik oppføring (eller ingen /etc/inittab i det hele tatt), må et kjørenivå angis på systemkonsollen.

Runlevel S eller s tar systemet til enkeltbrukermodus og krever ikke en /etc/inittab-fil. I enkeltbrukermodus åpnes et rotskall på /dev/console.

Når du går inn i enkeltbrukermodus, i det leser konsollens ioctl tilstander fra /etc/ioctl.save. Hvis denne filen ikke eksisterer, i det initialiserer linjen ved 9600 baud og med CLOCAL-innstillinger. Når i det forlater enkeltbrukermodus, lagrer den konsollens ioctl-innstillinger i denne filen slik at den kan gjenbruke dem til neste enkeltbrukerøkt.

Når du går inn i en flerbrukermodus for første gang, I det utfører boot- og bootwait-oppføringene for å tillate filsystemer å montere før brukere logger på. Deretter samsvarer alle oppføringer med kjørenivåprosessen.

Når du starter en ny prosess, I det sjekker først om filen /etc/initscript eksisterer. Hvis den gjør det, bruker den dette skriptet for å starte prosessen.

Hver gang et barn avslutter, I det registrerer faktum og årsaken til at det døde i /var/run/utmp og/var/log/wtmp, forutsatt at disse filene eksisterer.

Endre kjørenivåer

Telinit hjelpeskjerm

Etter at den gyter alle de spesifiserte prosessene, I det venter på at en av dens etterkommer-prosesser dør, et strømbruddsignal, eller til det blir signalisert av Telinit om å endre systemets kjørenivå. Når en av disse tre tilstandene oppstår, undersøker den /etc/inittab-filen på nytt. Nye oppføringer kan legges til i denne filen når som helst. Derimot, i det venter fortsatt på at en av de tre ovennevnte forholdene skal oppstå. For å sørge for en øyeblikkelig respons Telinit Q kommandoen våkner I det for å undersøke filen /etc/inittab på nytt.

Hvis I det er ikke i enkeltbrukermodus og mottar et strømbrudd signal, leser den filen /etc/powerstatus. Det starter da a kommando basert på innholdet i denne filen:

  • F(AIL): Strøm svikter, UPS gir strøm. Utfør powerwait og strømbrudd innganger.
  • O(K): Strømmen er gjenopprettet, utfør powerokwait innganger.
  • L(OW): Strømmen svikter, og UPS-en har lavt batteri. Utfør strømbrudd nå innganger.

Hvis /etc/powerstatus ikke eksisterer eller inneholder noe annet enn bokstavene F, O eller L, I det oppfører seg som om den leser bokstaven F.

Bruk av SIGPWR og /etc/powerstatus frarådes nå. Bruk /dev/initctl kontrollkanalen i moderne Linux-distribusjoner.

Når I det blir bedt om å endre kjørenivået, sender det varselsignalet SIGTERM til alle prosesser som er udefinerte i det nye kjørenivået. Den venter deretter fem sekunder før den tvangsavslutter disse prosessene ved å bruke SIGKILL-signalet. I det antar at alle disse prosessene og deres etterkommere forblir i samme prosessgruppe som I det opprinnelig laget for dem. Hvis en prosess endrer sin prosessgruppetilhørighet, mottar den ikke disse signalene. Slike prosesser må avsluttes separat.

Telinit

Telinit er koblet til /sbin/init. Det krever et argument på ett tegn og signaler I det for å utføre riktig handling. Følgende argumenter tjener som retningslinjer for Telinit:

  • 0, 1, 2, 3, 4, 5 eller 6: Bytt til spesifisert kjørenivå.
  • a, b, c: Behandle bare de /etc/inittab-filoppføringene som har kjørenivå a, b eller c.
  • eller q: Undersøk filen /etc/inittab på nytt.
  • eller s: Bytt til enkeltbrukermodus. Noen ganger kalles enkeltbrukermodus gjenopprettingsmodus fordi det ofte brukes til å utføre nødsystemreparasjoner.
  • eller u: Re-execute seg selv (bevare staten). Ingen ny undersøkelse av /etc/inittab-filen skjer. Runlevel skal være S, s, 1, 2, 3, 4 eller 5; ellers ignoreres forespørselen stille.

Telinit kan også fortelle I det hvor lenge det skal vente mellom sendingsprosessene SIGTERM og SIGKILL signaler. Standard er fem sekunder, men denne verdien kan endres med -t sek alternativ.

Telinit kan bare påberopes av brukere med passende rettigheter.

De I det binær sjekker om det er det I det eller Telinit ved å se på prosess-ID. Den ekte I detsin prosess-ID er alltid 1. Av dette følger det at i stedet for å ringe Telinit, kan en person bruke I det som en snarvei.