Linux kengät

Kuten käy ilmi, käynnistysprosessissa ei ole paljon:

1. Käynnistyslatain löytää ytimen kuvan disk, lataa sen muistiin ja käynnistää sen.
2. Ytimen alustaa laitteiden ja STI kuljettajia.
3. Ydin liittää juuritiedostonsystem.
4. Ytimen käynnistyttyä init Called ajoittaa.
5. init asettaa loput Prosessit liikkeessä.
6. Viime prosessit init käynnistää osana käynnistykseen voit kirjautua.

Käynnistysprosessin jokaisen vaiheen tunnistaminen on korvaamatonta käynnistysongelmien korjaamisessa ja system kokonaisena. Aloita nollaamalla käynnistyslataaja, joka on aloitusnäyttö tai kehote, jonka saat, kun tietokone suorittaa käynnistystestin ja kysyy, mikä käyttöjärjestelmä on system juosta. Kun olet tehnyt valinnan, käynnistyslatain suorittaa Linux ydin, luovuttaa hallintaa system ytimeen.

On yksityiskohtainen keskustelu ytimen tässä kirjassa, josta tämä artikkeli on toimitettu. Tässä artikkelissa käsitellään kernel initialisointivaiheessa, vaihe, jolloin ydin tulostaa joukon viestejä laitteessa olevasta laitteistosta system. Ydin käynnistää init heti, kun se näyttää viestin, jossa ilmoitetaan, että ydin on asentanut juuritiedostosystem:

VFS: Mounted root (ext2-tiedostotsystem) Lue ainoastaan.

Pian sen jälkeen näet viestin init-aloituksesta ja sen jälkeen system palvelun käynnistysviestit, ja lopulta saat jonkinlaisen kirjautumiskehotteen.

HUOMAUTUS Päälle Red Hat Linux, aloitusmerkintä on erityisen ilmeinen, koska se toivottaa sinut Red Hatiin Linux. ” Kaikki sen jälkeen tulevat viestit osoittavat onnistumisen tai epäonnistumisen suluissa näytön oikeassa reunassa.

Useimmat tässä luvussa käsitellään init, Koska se on, jossa osa käynnistykseen sinulla on eniten valvontaa.
init

Initissä ei ole mitään erikoista. Se on ohjelma aivan kuten kaikki muutkin Linux system, ja löydät sen hakemistosta / sbin yhdessä muiden kanssa system binäärit. Initin päätarkoitus on käynnistää ja pysäyttää muut ohjelmat tietyssä järjestyksessä. Ainoa mitä sinun on tiedettävä on kuinka tämä jakso toimii.

On olemassa muutamia erilaisia ​​muunnelmia, mutta useimmat Linux jakelut käyttävät System V-tyyli, josta keskustellaan täällä. Jotkut jakelut käyttävät yksinkertaisempaa versiota, joka muistuttaa BSD-aloitetta, mutta et todennäköisesti kohtaa tätä.

Runleveleineen

Milloin tahansa a Linux system, tietty prosessisarja on käynnissä. Tämä tila machineä kutsutaan sen ajotasoksi, ja sitä merkitään luvulla 0-6 system viettää suurimman osan ajastaan ​​yhdellä ajotasolla. Kuitenkin, kun suljet macalaspäin, init vaihtaa eri ajotason lopettaakseen system palvelut järjestyksessä ja käskemään ytimen pysähtymään. Vielä yksi ajotaso on yhdelle käyttäjälle mode, keskusteltu myöhemmin.

Helpoin tapa käsitellä ajotasoja on tutkia init-määritystiedostoa /etc/inittab. Etsi seuraavanlainen rivi:

ID: 5: initdefault:

Tämä rivi tarkoittaa, että default ajotaso system on 5. Kaikki inittab-tiedoston rivit ovat tässä muodossa, ja neljä kaksoispisteillä erotettua kenttää esiintyy seuraavassa järjestyksessä:
# Yksilöllinen tunniste (lyhyt merkkijono, kuten henkilökortti edellisessä esimerkissä)
# Sovelletaan runlevelistä (t)
# Toiminnon, jonka init tulisi suorittaa (edellisessä esimerkissä toiminto on asettaa default ajotaso 5)
# Suoritettava komento (valinnainen)

Edellisessä initissä ei ole suoritettavaa komentoadefault esimerkki, koska komennolla ei ole merkitystä default ajotaso. Katso hieman alaspäin inittabissa, kunnes näet tällaisen viivan:

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

Tämä viiva laukaisee suurimman osan system kokoonpano ja palvelut rc * .d- ja init.d-hakemistojen kautta. Voit nähdä, että init on asetettu suorittamaan komento nimeltä /etc/rc.d/rc 5, kun se on ajotasolla 5. Odotustoiminto kertoo, milloin ja miten init suorittaa komennon: suorita rc 5 kerran, kun enterKun suoritat tason 5 ja odota sitten tämän komennon päättymistä ennen kuin teet mitään muuta.

Sisällössä on useita erilaisia ​​toimintoja addaloitusdefault ja odota, etenkin virranhallinnan osalta, ja inittab (5) -käyttöopas kertoo sinulle kaikki. Ne, joita todennäköisimmin kohtaat, selitetään seuraavissa osioissa.

respawn

Respawn-toiminto saa initin suorittamaan seuraavan komennon ja suorittamaan sen uudelleen, jos komennon suorittaminen päättyy. Näet todennäköisesti jotain tämän rivin kaltaista inittab-tiedostossasi:

1: 2345: respawn :/ sbin / mingetty tty1

Getty ohjelmat tarjoavat login ohjeita. Edellisen linja on ensimmäinen virtuaalikonsolista (/ dev / tty1), yksi näet kun painat ALT-tai Ctrl-Alt-F1 F1. Respawn toiminta tuo sisäänkirjautumispyyntöä takaisin, kun olet kirjautunut ulos.

ctrlmuualla

- ctrlaltdel-toiminto ohjaa mitä system toimii, kun painat CONTROL-ALT-DELETE virtuaalikonsolissa. Useimmissa systems, tämä on jonkinlainen uudelleenkäynnistyskomento, joka käyttää sammutuskomentoa.

sysinit

Sysinit-toiminta on aivan ensimmäinen asia, jonka init pitäisi suorittaa, kun se käynnistyy, ennen enterkaikissa ajotasoissa.

Miten prosessit ajotasoilla alkaa

Olet nyt valmis oppimaan aloittamaan system palveluja, juuri ennen kuin voit kirjautua sisään. Muistakaa tämä inittab-rivi aikaisemmasta:

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

Tämä pieni rivi laukaisee Monia muitakin ohjelmia. rc tarkoittaa käynnistyskäskyihin, ja kuulet ihmiset viittaavat komentoja skriptejä, ohjelmia tai palveluita. Joten, missä nämä komennot, anyway?

Suoritustason 5 tapauksessa tässä esimerkissä komennot ovat todennäköisesti joko /etc/rc.d/rc5.d tai /etc/rc5.d. Ajotaso 1 käyttää rc1.d, ajotaso 2 käyttää rc2.d ja niin edelleen. Saatat löytää seuraavat items rc5.d-hakemistossa:

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

Rc 5 käsky käynnistää ohjelmia tällä Runlevel-hakemiston ajamalla GMT komennot:

S10sysklogd kotiin
S12kerneld kotiin
S15netstd_init kotiin
S18netbase kotiin
...
S99sshd kotiin

Huomaa jokaisen komennon aloitusargumentti. S komennon nimessä tarkoittaa, että komennon tulee suorittaa alussa mode, ja numero (00 - 99) määrittää, missä järjestyksessä rc aloittaa komennon.

Rc *. D komennot ovat komentoriviskriptejä jotka yleensä alkavat ohjelmat / sbin tai / usr / sbin. Normaalisti, voit selvittää, mitä jokin komento todellisuudessa ei katsomalla käsikirjoituksen vähemmän tai hakulaite Toinen ohjelma.

Voit aloittaa yhden näistä palveluista käsin. Jos esimerkiksi haluat käynnistää httpd-Web-palvelinohjelman manuaalisesti, suorita S99httpd start. Vastaavasti, jos joudut joskus tappamaan yhden palveluista, kun machine on päällä, voit suorittaa komennon rc * .d-hakemistossa stop-argumentilla (esimerkiksi S99httpd stop).

Jotkut rc*.d-hakemistot sisältävät komentoja, jotka alkavat K:llä ("kill" tai stop mode). Tässä tapauksessa rc suorittaa komennon stop-argumentilla startin sijaan. Todennäköisimmin kohtaat K-komentoja ajotasoilla, jotka sulkevat system alas.

Addpalveluiden poistaminen

Jos haluat add, poista tai muokkaa palveluita rc*.d-hakemistoista, sinun on tarkasteltava tarkemmin sisällä olevia tiedostoja. Pitkä lista paljastaa seuraavanlaisen rakenteen:

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

rc*.d-hakemiston komennot ovat itse asiassa symbolisia linkkejä tiedostoihin init.d-hakemistossa, yleensä hakemistossa /etc tai /etc/rc.d. Linux jakelut sisältävät nämä linkit, jotta ne voivat käyttää samoja käynnistysskriptejä kaikilla ajotasoilla. Tämä sopimus ei missään nimessä ole vaatimus, mutta usein se helpottaa organisointia.

Jos haluat estää jonkin init.d-hakemiston komennoista suorittamasta tietyllä ajotasolla, kannattaa ehkä poistaa symbolinen linkki asianmukaisesta rc * .d-hakemistosta. Tämä toimii, mutta jos teet virheen ja sinun on koskaan laitettava linkki takaisin paikalleen, sinulla voi olla vaikeuksia muistaa linkin tarkka nimi. Siksi sinun ei pitäisi poistaa linkkejä rc * .d-hakemistoista, vaan pikemminkin add alleviiva (_) linkin nimen alkuun näin:

mv S99httpd _S99httpd

Käynnistyshetkellä rc jättää _S99httpd: n huomiotta, koska se ei ala kirjaimella S tai K.

jotta add palvelun, sinun on luotava komentosarja kuten muutkin hakemistossa init.d ja tehtävä sitten symbolinen linkki oikeaan rc * .d-hakemistoon. Helpoin tapa kirjoittaa komentosarja on tutkia komentotiedostot jo init.d: ​​ssä, tehdä ymmärrettävästä kopio ja muokata kopiota.

Kun addVarmista, että valitset sopivan paikan käynnistysjärjestyksessä palvelun käynnistämiseksi. Jos palvelu käynnistyy liian aikaisin, se ei välttämättä toimi riippuen jostakin muusta palvelusta. Useimmat ei-välttämättömistä palveluista systems administrators mieluummin numeroita 90-luvulla useimpien mukana tulleiden palveluiden jälkeen system.

Linux jakeluissa on yleensä komento ottaa käyttöön ja poistaa käytöstä palveluita rc * .d -hakemistoissa. Esimerkiksi Debianissa komento on update-rc.d ja Red Hatissa Linux, komento on chkconfig. Saatavilla on myös graafiset käyttöliittymät. Näiden ohjelmien käyttö auttaa pitämään käynnistyshakemistot yhtenäisinä ja helpottaa päivityksiä.

VIHJE: Yksi yleisimmistä Linux installongelmat on väärin määritetty XFree86-palvelin, joka vilkkuu ja sammuu, jolloin system käyttökelvoton konsoleissa. Voit lopettaa tämän toiminnan käynnistämällä yhden käyttäjän mode ja muuta ajotasoa tai ajotasopalveluita. Etsi jotain, joka sisältää xdm:n, gdm:n tai kdm:n, rc*.d-hakemistoistasi tai /etc/inittabista.

Ohjaaminen init

Joskus sinun on annettava initille hieman potkua, jotta se vaihtaisi ajotasoja, lukemaan inittab-tiedoston uudelleen tai vain shut down Ishayoiden opettaman system. Koska init on aina a: n ensimmäinen prosessi system, sen prosessitunnus on aina 1.

Voit ohjata init kanssa telinit. Esimerkiksi, jos haluat vaihtaa ajotasolle 3, käytä tätä komentoa:

telinit 3

Kun vaihdat ajotasoja, init yrittää tappaa kaikki prosessit, jotka eivät ole uuden ajotason inittab-tiedostossa. Siksi sinun tulee olla varovainen ajotasojen vaihtamisessa.

Kun haluat add tai poistaa respawning-töitä tai tehdä muita muutoksia inittab-tiedostoon, sinun on kerrottava initille muutoksesta ja saatava se lukemaan tiedosto uudelleen. Jotkut ihmiset käyttävät kill -HUP 1:tä käskeäkseen initille tehdä tämän. Tämä perinteinen menetelmä toimii useimmissa Unix-versioissa, kunhan kirjoitat sen oikein. Voit kuitenkin suorittaa myös tämän telinit-komennon:

telinit q

Voit myös käyttää telinit s -toimintoa vaihtaaksesi yhden käyttäjän käyttöön mode.

sammuttamista

init ohjaa myös miten system sammuu ja käynnistyy uudelleen. Oikea tapa shut down a Linux machine on käyttää sammutuskomentoa.

Sammumista voidaan käyttää kahdella tavalla. Jos pysäytät system, se sulkee machine alas ja pitää sen alas. Tehdä machine pysähtyy välittömästi, käytä tätä komentoa:

shutdown-h now

Useimmissa modern machines suhteellisen uusilla versioilla Linux, pysähdys katkaisee virran machine. Voit myös käynnistää machine. Käytä uudelleenkäynnistystä -r: n sijasta.

Sammutus kestää useita sekunteja. Älä koskaan nollaa tai sammuta a machine tässä vaiheessa.

Edellisessä esimerkissä nyt on aika shut down. Tämä väite on pakollinen, mutta sen määrittelemiseksi on monia tapoja. Jos haluat machine mennä alas joskus tulevaisuudessa, yksi tapa on käyttää + n, jossa n on minuuttien lukumäärä, jonka sammutuksen tulisi odottaa ennen kuin se tekee työnsä. Toiselle options, katso sammutus (8) manuaalisivua.

Jotta system käynnistä uudestaan ​​10 minuutissa, suorita tämä komento:

shutdown-r + 10

On Linux, sammutus ilmoittaa kaikille kirjautuneille, että machine laskee, mutta se ei juurikaan toimi. Jos määrität muun ajan kuin nyt, sammutus luo tiedoston nimeltä /etc/nologin. Kun tämä tiedosto on olemassa, system kieltää kirjautumisen muilta kuin pääkäyttäjältä.

Kun system sammutusaika on vihdoin saapunut, sammutus käskee init siirtymään käyttötasolle 0 pysäytystä varten ja ajotasolle 6 uudelleenkäynnistystä varten. Kun init entertason 0 tai 6 kanssa tapahtuu kaikki seuraavat asiat, jotka voit varmistaa tarkistamalla rc0.d: n ja rc6.d: n sisällä olevat skriptit:

1. init tappaa jokaisen prosessin että se voi (koska se Kun vaihdat muita ajotasolla).

# Ensimmäiset rc0.d / rc6.d-komennot suoritetaan, lukitaan system tiedostot paikoilleen ja muut sammutusvalmistelut.
# Seuraavat rc0.d/rc6.d-komennot irrottavat kaikki tiedostotsystems muu kuin juuri.
# Muut rc0.d/rc6.d-komennot liittävät juuritiedoston uudelleensystem Lue ainoastaan.
# Vielä useampi rc0.d/rc6.d-komento kirjoittaa kaikki puskuroidut tiedot tiedostoonsystem synkronointiohjelman kanssa.
# Lopullinen rc0.d / rc6.d komentoja kertoa ytimen käynnisty tai pysähtyy uudelleenkäynnistyksen pysähtymään tai poweroff ohjelman.

Uudelleenkäynnistys- ja pysäytysohjelmat käyttäytyvät eri tavalla jokaisella ajotasolla, mikä saattaa aiheuttaa sekaannusta. mennessä default, nämä ohjelmat kutsuvat shutdownia komennolla -r tai -h options, mutta jos system on jo pysäytys- tai uudelleenkäynnistystasolla, ohjelmat käskevät ytimen sammuttamaan itsensä välittömästi. Jos todella haluat sulkea machine alas kiireessä (huomioimatta häiriötön sammuttamisen mahdolliset vahingot), käytä -f-vaihtoehtoa.

Teknologiasta kiinnostunut, kirjoitan mielelläni StealthSettings.com-sivustolla vuodesta 2006. Minulla on laaja kokemus käyttöjärjestelmistä: macOS, Windows ja Linux, sekä ohjelmointikielistä ja blogialustoista (WordPress) ja verkkokaupoista (WooCommerce, Magento, PrestaShop).

Jätä kommentti