Linux Stövlar

Som det visar sig, det är inte mycket att startprocessen:

1. Ett startprogram finner du kärnan på disken, laddar den i minnet, och startar den.
2. De kärnan initiera enheter och STI-drivrutiner.
3. Kärnan monterar rotfilsystemet.
4. Kärnan startar init Called Program.
5. init sätter resten av processer i rörelse.
6. De sista Processer som init startar som en del av startsekvensen att du kan logga in.

Identifiera varje steg i startprocessen är ovärderlig vid fastställandet uppstartsproblem och förstå systemet som helhet. Till att börja med noll i startprogrammet, den som är den första skärmen eller uppmana dig få när datorn gör STIs power-on self test, frågar Vilket operativsystem för att köra. När du gör ett val, kör boot loader Linuxkärnan, Överlämnande kontroll av systemet till kärnan.

Det finns en detaljerad diskussion om kärnan andra ställen i denna bok som denna artikel är ett utdrag. Denna artikel täcker kernel initiering stadium, Scenen När kärnan skriver ut en massa meddelanden om vilken maskinvara som finns på systemet. Kärnan startar init strax efter att den visar ett meddelande som proklamerar att kärnan har monterat rotfilsystemet:

VFS: Monterad rot (ext2 filsystem) skyddad.

Strax efter kommer du att se ett meddelande om init start, följt av systemtjänststartmeddelanden, och till slut får du en inloggningsprompt av något slag.

ANMÄRKNINGAR : På Red Hat LinuxÄr särskilt uppenbart init konstaterar att det "välkomnar" du "Red Hat Linux." Alla meddelanden visar därefter framgång eller misslyckande inom parentes på den högra sidan av skärmen.

De flesta av dessa kapitel behandlar init, eftersom det är den del av startsekvensen där du har mest kontroll.
init

Det finns inget speciellt med init. Det är ett schema precis som alla andra på Linux-system, och du hittar den i / sbin tillsammans med andra systembinärfiler. Det huvudsakliga syftet med init är att starta och stoppa andra program i en viss sekvens. Allt du behöver veta är hur denna sekvens fungerar.

Det finns några olika varianter, men de flesta Linux-distributioner använder System V stil diskuteras här. Vissa distributioner använder en enklare version liknar BSD init det, men du kommer knappast att stöta på här.

Runlevels

Vid varje givet tillfälle på ett Linux-system, är Un viss grunduppsättning av processer som körs. Detta tillstånd av maskinen kallas dess runlevel, och det betecknas med ett tal från 0 genom 6. Systemet tillbringar det mesta av STI tid i en och samma runlevel. Men när du stänger ner maskinen, växlar init till en annan körnivå för att klar de systemtjänster i ordnade former och berätta år kärnan att sluta. Ännu en runlevel är för enanvändarläge, diskuteras senare.

Det enklaste sättet att få grepp om runlevels är att undersöka init konfigurationsfilen / etc / inittab. Leta efter en rad som liknar följande:

id: 5: initdefault:

Denna linje innebär att default runlevel på systemet är 5. Alla rader i inittab ta denna form, med fyra fält separerade med kolon som inträffar i följande ordning:
# En unik identifierare (en kort sträng, Såsom id i föregående exempel)
# Tillämplig runlevel nummer (s)
# Init som bör vidta åtgärder (i föregående exempel, är åtgärden att ställa in default runlevel till 5)
# Ett kommando som ska köras (tillval)

Det finns inget kommando att exekvera i föregående initdefault exemplet Eftersom kommandot inte är vettigt i samband med att ställa in default runlevel. Titta lite tid längre ner i inittab, tills du ser en rad som denna:

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

Denna rad utlöser de flesta av konfiguration och tjänster systemet genom rc *. D och init.d kataloger. Du kan se att init är inställd på att köra ett kommando som heter / etc / rc.d / rc 5 När i körnivå 5. Väntan åtgärd berättar när och hur init kör kommandot: kör rc När Inmatning runlevel 5 5 en gång, och sedan vänta på det här kommandot för att avsluta innan du gör något annat.

Det har flera olika åtgärder utöver initdefault och vänta, speciellt avseende energihantering, och inittab (5) manualen berättar allt om dem. De som du är mest sannolikt att stöta på förklaras i följande avsnitt.

återskapnings

Den respawn åtgärd orsakar init att köra kommandot som följer, och om kommandot Finishes exekvera, för att köra den igen. Du kommer att se något som liknar den här raden i din inittab:

1: 2345: respawn :/ sbin / mingetty tty1

Getty programmen Ge inloggnings anvisningarna. Den föregående raden är för den första virtuella konsollen (/ dev / tty1), den du ser när du trycker på ALT eller KONTROLL-ALT-F1 F1. Den respawn åtgärden ger inloggningsprompten tillbaka efter att du loggar ut.

ctrlaltdel

Den ctrlaltdel åtgärden styr vad systemet gör när du trycker Ctrl-Alt-Delete på en virtuell konsol. På de flesta system, är detta Någon form av omstart kommando med kommandot shutdown.

sysinit

Den sysinit åtgärder är det allra första init som ska köras när den startar, innan du anger några runlevels.

Hur Processer i runlevels startar

Du är nu redo att lära dig hur init startar systemtjänster, precis innan den låter dig logga in. Minns denna inittab linje från tidigare:

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

Denna lilla linje utlöser Många andra program. rc står för run-kommandon, och du kommer att höra människor hänvisar till de kommandon som skript, program eller tjänster. Så, var är dessa kommandon, hur som helst?

För körnivå 5, i detta exempel, kommandona har troligen antingen i / etc / rc.d / rc5.d eller / etc / rc5.d. Runlevel 1 använder rc1.d använder runlevel 2 rc2.d, och så vidare. Du kan hitta objekten i rc5.d GMT katalogen:

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

Den rc 5 Kommandot startar program i denna runlevel katalogen genom att köra GMT kommandon:

S10sysklogd hem
S12kerneld hem
S15netstd_init hem
S18netbase hem

S99sshd hem

Lägg märke till start argument i varje kommando. S i ett kommandonamn innebär att om kör kommandot i startläge, och antalet (00 genom 99) bestämmer var i sekvensen rc startar kommandot.

Den rc *. D-kommandon är oftast skalskript Start Program som i / sbin eller / usr / sbin. Normalt kan du räkna ut vad en av de kommandon som faktiskt gör genom att titta på skriptet med mindre eller annan personsökare program.

Du kan starta en av dessa symboler tjänster för hand. Till exempel, om du vill starta httpd webbserver programvaran manuellt, kör S99httpd start. Och om du någonsin behöver för att döda en av de tjänster När maskinen är på, kan du köra kommandot i rc *. D katalog med stopp argumentet (S99httpd stopp, till exempel).

Vissa rc *. D kataloger som innehåller kommandon börjar med K (för "döda" eller stoppläge). I det här fallet kör rc kommandot med stopp argument istället för hemma. Du är mest sannolikt att stöta på K-kommandon i runlevels som stänger ner systemet.

Lägga till och ta bort tjänster

Om du vill lägga till, ta bort eller ändra tjänster i rc *. D kataloger, ta dig en närmare behöver titta på filerna inuti. En lång lista avslöjar en struktur som den här:

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

Kommandona i år rc *. D katalog är egentligen symboliska länkar till filer i år init.d katalog, vanligtvis i / etc eller / etc / rc.d. Linux-distributioner innehåller dessa länkar till att de kan använda samma startskript för alla runlevels. Denna konvention är ingalunda av Krav, men ofta gör det lite enklare organisation.

För att förhindra ett av kommandona i init.d katalogen från att köra i en viss runlevel, kanske du tänker på att ta bort den symboliska länken i lämplig rc *. D katalog. Det fungerar, men om du gör ett misstag och behöver lägga länken tillbaka kär, kanske du har svårt att komma ihåg det exakta namnet på länken. Därför bör du inte ta bort länkar i rc * D kataloger, utan snarare lägger ett understreck (_) i början av länken namnet så här.:

mv S99httpd _S99httpd

Vid uppstart, rc ignorerar _S99httpd eftersom den inte börjar med S eller K. Dessutom är det ursprungliga namnet fortfarande uppenbara, och du har snabb tillgång till kommandot om du är i en knipa och behöver starta den manuellt.

För att lägga till en tjänst, måste du skapa ett manus som de andra i init.d katalogen och sedan göra en symbolisk länk i rätt rc *. D katalog. Det enklaste sättet att skriva ett manus är att undersöka skripten redan i init.d, gör en kopia av en som du förstår, och ändra kopian.

När du lägger till en tjänst, se till att du väljer en lämplig plats i startsekvensen för att starta tjänsten. Om tjänsten startar för tidigt kan det inte, på grund av beroendet av någon annan tjänst. För icke väsentliga tjänster, de flesta systemadministratörer föredrar siffror i 90s, efter att de flesta av de tjänster som camma med systemet.

Linux-distributioner brukar komma med ett kommando för att aktivera och inaktivera tjänster i rc *. D kataloger. Till exempel i Debian kommandot update-rc.d, och i Red Hat Linux, är kommandot chkconfig. Grafiska användargränssnitt är också tillgänglig. Med hjälp av dessa program hjälper till att hålla startkataloger konsekvent och hjälper till med uppgraderingar.

TIPS: En av de vanligaste Linux-installationsproblem är felaktigt konfigurerade XFree86 år som flicks på och utanför servern, vilket gör systemet oanvändbart på konsolen. För att stoppa detta beteende, starta upp enanvändarläge och ändra din körnivå eller runlevel tjänster. Leta efter något som innehåller xdm, gdm eller kdm i din rc *. D kataloger, eller din / etc / inittab.

Styra init

Ibland måste du ge init en liten kick att tala om det för att byta runlevels, att åter läsa inittab, eller bara för att stänga av systemet. Eftersom init är alltid den första processen i systemet, är STI process-ID alltid 1.

Du kan styra init med telinit. Till exempel, om du vill byta till runlevel 3, använd det här kommandot:

telinit 3

Vid växling runlevels försöker init att döda eventuella processer som aren'ta i inittab för nya runlevel. Därför bör du vara försiktig Byta runlevels.

När du behöver lägga till eller ta bort respawning jobb eller göra någon annan ändring i inittab, måste du tala om init om förändringen och få den att åter läsa filen. Vissa människor använder kill-HUP 1 berätta init att göra detta. Denna traditionella metod fungerar på de flesta versioner av Unix, så länge du skriver det på rätt sätt. Men du kan också köra den här telinit kommando:

telinit q

Du kan också använda telinit s för att växla till enanvändarläge.

Stänga

Också Init styr hur systemet stängs av och startar om datorn. Det korrekta sättet att stänga av en Linux-maskin är att använda kommandot shutdown.

Det finns två grundläggande sätt att använda avstängning. Om du stanna systemet, stängs det ner maskinen och håller ner. För att göra maskinen stoppa den omedelbart, använd det här kommandot:

shutdown-h now

På de flesta moderna maskiner med Rimligt senaste versionerna av Linux, skär ett stopp på strömmen till maskinen. Du kan också starta om maskinen. För en omstart, använda-r istället för-h.

Avstängningen tar flera sekunder. Du ska aldrig återställa eller stänga av maskinen under detta skede.

I föregående exempel, är det nu dags att stänga. Detta argument är obligatoriskt, men det finns många sätt att ange det. Om du vill att maskinen ska gå ner någon gång i framtiden, är ett sätt att använda + n, där n är det antal minuter avstängning ska vänta innan gör sitt arbete. För andra alternativ, titta på avstängning (8) manualen.

För att göra omstart 10 minuter, kör detta kommando:

shutdown-r + 10

I Linux, meddelar avstängning någon inloggad Att maskinen går ner, men det gör lite riktigt jobb. Om du anger en annan än nu tid, avstängning Called Skapar filen / etc / nologin. När den filen finns, förbjuder systemet inloggningar av alla utom den superanvändare.

När avstängningen tiden kommer slutligen berättar avstängning init att byta till runlevel 0 6 för ett stopp och körnivå för en omstart. När Öppnar runlevel init eller 0 6, alla GMT Tar ut, som du kan genom att titta på manus inne rc0.d och rc6.d kontrollera:

1. init dödar varje process Att det KAN (som det skulle när byte till någon annan runlevel).

# De initiala rc0.d / rc6.d kommandon körs, låsa systemfiler till kärlek och göra andra förberedelser för avstängning.
# Nästa rc0.d / rc6.d kommandon avmontera alla andra än root-filsystem.
# Ytterligare rc0.d / kommandon montera rotfilsystemet rc6.d skrivskyddad.
# Ännu fler rc0.d / rc6.d kommandon skriver alla buffrade på ut till filsystemet med synkprogrammet.
# De slutliga rc0.d / rc6.d kommandon berättar kärnan för att starta eller stoppa med omstarten, halt eller poweroff program.

Omstarten och hejda program beter sig annorlunda för varje runlevel, vilket kan orsaka förvirring. Som standard Dessa program kräver avstängning med-r eller-h alternativ, men om systemet redan vid stopp eller starta runlevel, programmen berättar kärnan att stänga av sig själv omedelbart. Om du verkligen vill stänga av din maskin i en hast (bortsett från eventuella skador från en oordnad avstängning), använd alternativet-f.

Lämna en kommentar

Den här sidan använder Akismet för att minska spam. Läs om hur din kommentardata behandlas.