Linux Csizma

Mint kiderült, az indítási folyamat nem sok:

1. A rendszertöltő megtalálja a rendszermag képét a disk, betölti a memóriába, és elindítja.
2. A kernel inicializálja az eszközöket és az illesztőprogramokat.
3. A kernel felcsatolja a gyökérfájltsystem.
4. A kern elindítja az init nevű programot.
5. az init a többi folyamatot mozgásba hozza.
6. Az utolsó folyamatok, amelyek az init a rendszerindítási sorrend részeként indulnak, lehetővé teszik a bejelentkezést.

A rendszerindítási folyamat egyes szakaszainak azonosítása felbecsülhetetlen értékű az indítási problémák kijavításában és a system mint egész. Első lépésként nullázza be az indítótöltőt, amely az a kezdeti képernyő vagy kérdés, amelyet a számítógép bekapcsolási öntesztje után kap, megkérdezve, hogy melyik system futni. A választás után a rendszertöltő futtatja a Linux kernel, átadja az irányítást a system a kernelhez.

Ebben a könyvben másutt is részletesen tárgyaljuk a kernelt, amelyből ez a cikk kivonatolva van. Ez a cikk a kernel inicializálási szakasz, az a szakasz, amikor a kern egy csomó üzenetet kinyomtat a system. A kern akkor kezdi el az init-et, amikor megjelenik egy üzenet arról, hogy a kernel felcsatolta a gyökér fájlsystem:

VFS: Szerelt root (ext2 fájloksystem) csak olvasható.

Röviddel ezután megjelenik egy üzenet az init indításáról, amelyet követ system szolgáltatás indítási üzenetei, és végül valamilyen bejelentkezési üzenetet kap.

JEGYZET : Tovább Red Hat Linux, az init megjegyzés különösen szembetűnő, mert „üdvözöl” a Red Hatben Linux.” Ezt követően minden üzenet a képernyő jobb oldalán zárójelben mutatja a sikert vagy a kudarcot.

Ennek a fejezetnek a nagy része az init-lel foglalkozik, mert a rendszerindítási sorrendnek az a része, ahol a legtöbb ellenőrzést végezheti.
init

Az initben nincs semmi különös. Ez egy olyan program, mint a többi a Linux system, és megtalálod az / sbin fájlban másokkal együtt system bináris fájlok. Az init fő célja más programok elindítása és leállítása egy adott sorrendben. Csak annyit kell tudni, hogy ez a sorrend hogyan működik.

Van néhány különböző variáció, de a legtöbb Linux disztribúciók a System V stílus itt tárgyalt. Néhány disztribúció egyszerűbb verziót használ, amely hasonlít a BSD initre, de nem valószínű, hogy találkozni fog ezzel.

Futási szint

Bármikor a Linux system, egy bizonyos alapfolyamat fut. Ez az állapot a machine-t nevezzük futási szintjének, és 0-tól 6-ig terjedő számmal jelöljük system idejének nagy részét egyetlen futási szinten tölti. Amikor azonban bezárja a macletöröl, az init átkapcsol egy másik futási szintre a system szolgáltatásait rendezett módon, és felszólítja a rendszermagot, hogy álljon le. Még egy futási szint egyfelhasználós mode, később tárgyaljuk.

A futási szintek kezelésének legegyszerűbb módja az /etc/inittab init konfigurációs fájl vizsgálata. Keressen egy ehhez hasonló sort:

ID: 5: initdefault:

Ez a vonal azt jelenti, hogy a default futási szint a system 5. Az inittab fájl összes sora ilyen formában van, négy kettősponttal elválasztott mezővel, amelyek a következő sorrendben fordulnak elő:
# Egyedi azonosító (rövid karakterlánc, például az előző példában szereplő azonosító)
# Az alkalmazandó futási szint (ek)
# Az init által végrehajtandó művelet (az előző példában a default futási szint 5-ig)
# A végrehajtandó parancs (opcionális)

Az előző initben nincs végrehajtandó parancsdefault példa, mert a parancsnak nincs értelme a default futási szint. Nézzen egy kicsit lejjebb az inittab-ban, amíg meg nem jelenik egy ilyen vonal:

l5: 5: várjon: /etc/rc.d/rc 5

Ez a vonal váltja ki a legtöbbet system konfiguráció és szolgáltatások az rc * .d és az init.d könyvtárakon keresztül. Láthatja, hogy az init be van állítva az /etc/rc.d/rc 5 nevű parancs végrehajtására, amikor az 5. futási szinten van. A várakozási művelet megmondja, hogy az init mikor és hogyan futtatja a parancsot: futtassa egyszer az rc 5-t, amikor enteraz 5. futási szintet, majd bármi más elvégzése előtt várja meg, amíg ez a parancs befejeződik.

Számos különböző akció létezik addkezdeményeznidefault és várjon, különös tekintettel az energiagazdálkodásra, és az inittab (5) kézikönyvoldal mindent elárul róluk. Azokkal, amelyekkel valószínűleg találkozik, a következő szakaszok magyarázzák.

respawn

A respawn művelet hatására az init futtatja a következő parancsot, és ha a parancs végrehajtása befejeződik, akkor újra lefutja. Valószínűleg ehhez a sorhoz hasonlót fog látni az inittab fájlban:

1: 2345: respawn: / sbin / mingetty tty1

A getty programok bejelentkezési utasításokat nyújtanak. Az előző sor az első virtuális konzolra vonatkozik (/ dev / tty1), amely az ALT-F1 vagy a CONTROL-ALT-F1 megnyomásakor látható. A respawn művelet visszahozza a bejelentkezési kérdést a kijelentkezés után.

ctrlmáshol

A ctrlAz altdel action szabályozza, hogy mi az system ha a virtuális konzolon megnyomja a CONTROL-ALT-DELETE billentyűt. A legtöbb systems, ez egyfajta újraindítási parancs a shutdown paranccsal.

sysinitis

A sysinit művelet az első dolog, amelyet az init futtatnia kell, amikor elindul, előtte enterbármilyen futási szinten.

Hogyan indulnak el a folyamatok a futási szinteken

Most már készen áll arra, hogy megtanulja a system szolgáltatásokat, még mielőtt bejelentkezne. Emlékezzünk erre a korábbi inittab sorra:

l5: 5: várjon: /etc/rc.d/rc 5

Ez a kis vonal sok más programot indít el. Az rc a run parancsokat jelenti, és hallani fogja, hogy az emberek parancsokra, programokra vagy szolgáltatásokra hivatkoznak. Szóval, hol vannak ezek a parancsok?

Az 5. futási szint esetében ebben a példában a parancsok valószínűleg az /etc/rc.d/rc5.d vagy az /etc/rc5.d fájlban vannak. Az 1. futási szint az rc1.d-t, a 2. futási szint az rc2.d-t használja, és így tovább. Találhatja a következőket items az rc5.d könyvtárban:

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

Az rc 5 parancs a következő parancsok futtatásával indítja el a programokat ebben a futási szint könyvtárban:

S10sysklogd start
S12kerneld rajt
S15netstd_init start
S18netbase indítása
...
S99sshd kezdet

Figyelje meg a start argumentumot minden parancsban. Az S a parancs nevében azt jelenti, hogy a parancsnak az elején kell futnia mode, és a szám (00-tól 99-ig) határozza meg, hogy az rc a sorozatban hol indítja el a parancsot.

Az rc * .d parancsok általában shell parancsfájlok, amelyek a / sbin vagy / usr / sbin fájlban indítják a programokat. Normális esetben megtudhatja, hogy az egyik parancs mit csinál valójában, ha kevesebb vagy másik személyhívó programmal nézi a szkriptet.

E szolgáltatások egyikét kézzel indíthatja el. Például, ha manuálisan szeretné elindítani a httpd webkiszolgáló programot, futtassa az S99httpd start programot. Hasonlóképpen, ha valaha meg kell ölnie az egyik szolgáltatást, amikor a macA hine be van kapcsolva, a stop argumentummal futtathatja a parancsot az rc * .d könyvtárban (például S99httpd stop).

Egyes rc*.d könyvtárak K betűvel kezdődő parancsokat tartalmaznak ("kill" vagy stop mode). Ebben az esetben az rc a parancsot a stop argumentummal futtatja a start helyett. Valószínűleg olyan futási szinteken találkozhatsz K parancsokkal, amelyek leállítják a system lefelé.

Addszolgáltatások eltávolítása

Ha azt szeretnénk, hogy add, törölje vagy módosítsa a szolgáltatásokat az rc*.d könyvtárakban, akkor alaposabban meg kell vizsgálnia a benne lévő fájlokat. A hosszú felsorolás egy ilyen szerkezetet tár fel:

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

Az rc*.d könyvtárban lévő parancsok valójában szimbolikus hivatkozások az init.d könyvtárban lévő fájlokhoz, általában az /etc vagy az /etc/rc.d könyvtárban. Linux a disztribúciók tartalmazzák ezeket a hivatkozásokat, így ugyanazokat az indító parancsfájlokat használhatják minden futási szinten. Ez az egyezmény semmiképpen nem követelmény, de gyakran megkönnyíti a szervezést.

Ha meg akarja akadályozni, hogy az init.d könyvtárban lévő parancsok egy adott futási szinten futjanak, érdemes a szimbolikus hivatkozást eltávolítani a megfelelő rc * .d könyvtárból. Ez valóban működik, de ha hibázik, és valaha vissza kell állítania a linket a helyére, akkor gondot okozhat a link pontos nevének megjegyzése. Ezért nem az linkeket kell eltávolítania az rc * .d könyvtárakból, hanem add aláhúzás (_) a link nevének elejére így:

mv S99httpd _S99httpd

Indításkor az rc figyelmen kívül hagyja az _S99httpd fájlt, mert nem S vagy K betűvel kezdődik. Ezenkívül az eredeti név még mindig nyilvánvaló, és ha gyorsan elérheti a parancsot, akkor kézzel kell elindítania a parancsot.

Nak nek add egy szolgáltatást, létre kell hoznia egy szkriptet, mint a többi az init.d könyvtárban, majd szimbolikus linket kell létrehoznia a megfelelő rc * .d könyvtárban. A szkript megírásának legegyszerűbb módja az, hogy megvizsgálja a már az init.d fájlban található szkripteket, készít egy másolatot az Ön által értettről, és módosítja a másolatot.

Amikor addA szolgáltatás indításához győződjön meg arról, hogy a rendszerindítási sorrendben megfelelő helyet választott a szolgáltatás elindításához. Ha a szolgáltatás túl korán indul, előfordulhat, hogy valamilyen más szolgáltatástól függően nem fog működni. A nem alapvető szolgáltatásokhoz a legtöbb systems administrators a 90-es évek számait részesíti előnyben, miután a legtöbb szolgáltatással együtt járt system.

Linux a disztribúciók általában egy parancsot tartalmaznak az rc * .d könyvtárak szolgáltatásainak engedélyezésére és letiltására. Például a Debianban a parancs az update-rc.d, és a Red Hatben Linux, a parancs a chkconfig. Grafikus felhasználói felületek is rendelkezésre állnak. Ezeknek a programoknak a használata segít megőrizni az indítási könyvtárak konzisztenciáját, és segít a frissítésekben.

TIPP: Az egyik leggyakoribb Linux installation problémák egy helytelenül konfigurált XFree86 szerver, amely be- és kikapcsol, így a system konzolokon használhatatlan. Ennek a viselkedésnek a megállításához indítsa el az egyfelhasználós rendszert mode és módosítsa a futási szintet vagy a futási szintű szolgáltatásokat. Keressen valamit, amely tartalmazza az xdm, gdm vagy kdm fájlt az rc*.d könyvtárában vagy az /etc/inittab fájlban.

Az init vezérlése

Időnként meg kell adnia egy kis lökést az init számára, hogy megmondja neki, hogy váltson futási szintet, olvassa újra az inittab fájlt, vagy csak shut down a system. Mivel az init mindig az első folyamat a system, folyamatazonosítója mindig 1.

Telinit segítségével vezérelheti az init-t. Például, ha át akar váltani a 3. futási szintre, használja ezt a parancsot:

telini 3

Futási szintek váltásakor az init megpróbálja leállítani az összes olyan folyamatot, amely nem szerepel az új futási szint inittab fájljában. Ezért óvatosnak kell lennie a futási szintek megváltoztatásával.

Mikor kell add vagy távolítsa el az újraindítási feladatokat, vagy végezzen bármilyen más módosítást az inittab fájlban, közölnie kell az inittel a változást, és újra be kell olvasnia a fájlt. Vannak, akik a kill -HUP 1 parancsot használják, hogy megmondják az initnek, hogy ezt tegye. Ez a hagyományos módszer a Unix legtöbb verzióján működik, amennyiben helyesen írja be. Azonban ezt a telinit parancsot is futtathatja:

telinit q

A telinit s segítségével egyfelhasználósra is válthat mode.

Leállítása

Az init azt is ellenőrzi, hogy a system kikapcsol és újraindul. A megfelelő módja annak shut down a Linux machine a shutdown parancs használata.

A kikapcsolásnak két alapvető módja van. Ha leállítja a system, kikapcsolja a machúzzon le és tartsa lenyomva. Hogy a macazonnal állj meg, használd ezt a parancsot:

shutdown-h now

A legtöbb modern macésszerűen friss verzióival Linux, a leállás megszakítja az áramellátást a machine. Indíthatja újra a machine. Újraindításhoz használja a -r helyett -h helyett.

A leállítás néhány másodpercet vesz igénybe. Soha ne állítsa alaphelyzetbe vagy kapcsolja ki a machine ebben a szakaszban.

Az előző példában itt az ideje shut down. Ez az érvelés kötelező, de sokféleképpen határozható meg. Ha azt szeretné, hogy machine, hogy valamikor a jövőben leálljon, az egyik módja a + n használata, ahol n az a percek száma, amennyit a leállításnak várnia kell, mielőtt elvégezné a munkáját. Másnak options, nézze meg a leállítási (8) kézikönyv oldalát.

Ahhoz, hogy a system 10 perc múlva indítsd újra, futtasd ezt a parancsot:

leállítás -r +10

On Linux, leállítás értesíti a bejelentkezett személyeket, hogy a maca hine csökken, de nem igazán működik. Ha a mosttól eltérő időpontot ad meg, a leállítás létrehoz egy /etc/nologin nevű fájlt. Ha ez a fájl jelen van, a system a superuser kivételével bárki tiltja a bejelentkezést.

Amikor system végre megérkezik a leállási idő, a leállítás azt mondja az initnek, hogy álljon meg a 0 futási szintre a leállításhoz és a 6-os szintre az újraindításhoz. Amikor az init enters 0 vagy 6 futási szint, az alábbiak mindegyike megtörténik, amelyet ellenőrizhet az rc0.d és rc6.d belső szkriptjeivel:

1. az init megöl minden folyamatot, amire képes (mint bármely más futási szintre váltáskor).

# A kezdeti rc0.d / rc6.d parancsok futnak, lezáródnak system fájlokat a helyükre helyezni, és egyéb előkészületeket tenni a leállításhoz.
# A következő rc0.d/rc6.d parancsok leválasztják az összes fájltsystems a gyökér kivételével.
# További rc0.d/rc6.d parancsok csatolják újra a gyökérfájltsystem csak olvasható.
# Még több rc0.d/rc6.d parancs minden pufferelt adatot kiír a fájlbasystem a szinkron programmal.
# Az utolsó rc0.d / rc6.d parancsok azt mondják a kernelnek, hogy indítsa újra vagy állítsa le az újraindítás, leállítás vagy kikapcsolás programmal.

Az újraindítás és a leállítás programok az egyes futási szinteknél eltérően viselkednek, ami zavart okozhat. által default, ezek a programok a shutdownt az -r vagy -h paranccsal hívják meg options, de ha a system már leáll vagy újraindítja a futási szintet, a programok azt mondják a kernelnek, hogy azonnal kapcsolja ki magát. Ha valóban be akarja zárni a machine down sietve (figyelmen kívül hagyva a rendellenes leállás esetleges károsodásait), használja a -f opciót.

Technológiai rajongóként örömmel írok a StealthSettings.com-on 2006 óta. Széles körű tapasztalatom van operációs rendszerekkel: macOS, Windows és Linux, valamint programozási nyelvekkel és blogolási platformokkal (WordPress) és online áruház platformokkal (WooCommerce, Magento, PrestaShop).

Írj hozzászólást