:

Szerző: surmo

2000. május 6. 00:00

A linux alapjai V.

A linux, mint minden modern operációs rendszer, teljes multitaszk képességekkel rendelkezik. Ez alatt azt kell érteni, hogy egymástól független programokat képes elszigetelten, látszólag egyszerre futtatni, és ehhez kihasználja a processzor hardveres támogatását. Nagyrészt ez biztosítja híres stabilitását is. A kernel egyik legfontosabb része az ütemező, amelynek feladata a futó programok (taszkok, processzek -> folyamatok) irányítása, szabályozása, és közöttük az erőforrások megosztása. Az ütemező dönti el, hogy egy adott folyamat a processzor teljesítményének hány százalékával rendelkezhet, a memória mekkora részét kaphatja meg és mikor. Ha egy taszk "szabálytalan műveletet" :) hajtana végre, a kernel kilövi és ezzel megakadályozza, hogy az operációs rendszer működésében bármi kárt okozhasson. Így felhasználói szintű programokkal linuxot kiakasztani elég reménytelen eset, az ennek ellenére ritkán fellépő ilyen jellegű hibákat pedig a kernel fejlesztői nagyon hamar kijavítják. A hibajavítások sebességének illusztrálására jó példa a Pentium processzorokon pár éve felfedezett, hírhedt F00F-bug, aminek megelőzésére a hiba napvilágra kerülésétől számított 4 órán belül megvolt a kernelpatch.

Linuxban minden folyamatnak van szülője. Egy processz indíthat több további processzt, amelyek az ő gyerekei lesznek. A különböző szolgáltatások mind processzként vannak jelen a rendszerben. Néhány fontosabb:
  • init: Az init a legelső induló processz. A kernel utolsó dolga bootoláskor ezt elindítani, és az init folytatja a bootolást, a megfelelő scripteket indítva, amelyek ellenőrzik és mountolják a filerendszereket és fellövik a daemon-okat (háttérben futó, általában kapcsolatkérésekre figyelő program, például ftp szerver, webszerver, vagy sshd). Több további funkciót tud még az init ellátni: biztosítja a single user módot, ahol senki sem tud távolról hozzáférni a géphez, csak a konzolhoz, rendszergazdai joggal, valamint a multiuser módot, ami a szokásos üzemelési formája egy linuxos gépnek. Normális működés esetén az init gondoskodik róla, hogy a getty processzek fussanak, amelyek a belépést teszik lehetővé, valamint örökbe fogadja azokat a processzeket, amelyeknek a szülője eltávozott az élők sorából (linuxban minden processznek egyazon "családfához" kell tartoznia, tehát az árvákat örökbe kell fogadni). A gép leállításakor az init feladata a többi processzt kilőni, a filerendszereket lecsatolni és a processzort halt-olni.
  • login-ok: A bejelentkezés, tehát a felhasználói névvel és jelszóval védett hozzáférés kezelése. Az init minden terminálhoz, legyen az soros vonalra kötött, vagy konzolon lévő virtuális terminál, ahol be lehet lépni, külön getty példányt indít. Ez beolvassa a felhasználói nevet, majd maga helyett elindítja a login programot, ami bekéri a jelszót. Ha mindkettő érvényes, elindítja a parancsértelmezőt, a shell-t. Ha ez leáll, azaz a felhasználó kilép, vagy még a login szakad meg, mert a jelszó nem volt helyes, akkor az init ezt észreveszi és a getty egy új példányát indítja el.
  • shell: Parancsértelmező. Funkciója nagyjából ugyanaz, mint a command.com-nak DOS alatt, de a modernebb shell-ek ennél nagyságrendekkel több és bonyolultabb dolgot tudnak, például filenév-kiegészítés, és szinte egy komplett programozási nyelv, amelyben a shell scriptek íródnak, ciklusokkal, feltételekkel, változókkal és filekezeléssel. Az egyik leggyakrabban használt shell, a bash2 tudását jól reprezentálja, hogy pl. a manual-ja (leírása) egyszerű text file-ban 280 Kbyte terjedelmű.

      [oldal:A filerendszer további részei]

      Az ezelőtt már röviden ismertetett /dev mellett vannak még további könyvtárak, amelyeknek meghatározott funkciójuk van. Ezek nagyvonalakban:
      • /bin: A bootoláskor szükséges, és néhány, felhasználók által gyakran használt futtatható (bináris) állomány(ok).
      • /sbin: Ezek is binárisok, de azok, amelyekre általában csak a rendszergazdának van szüksége. Ezzel együtt, ha engedélyezett, normál felhasználóknak is elérhető.
      • /etc: A gépre vonatkozó konfigurációs állományok. A legtöbb rendszerszintű program konfigurációja itt foglal helyet, például az init-hez tartozó inittab, a filerendszereket leíró fstab, a jelszavakat (kódolt formában) tartalmazó passwd illetve shadow, de pl. redhat esetén itt találhatók a daemon-okat indító-leállító scriptek is.
      • /root: A rendszergazda (root) home könyvtára.
      • /lib: Könyvtári függvényeket tartalmazó bináris állományok, amelyek a futtatható programokhoz szükségesek. Ez nagyjából a Windows-ból ismert .dll-ek (dynamically linked library) linuxos megfelelőinek, a .so-knak (shared object) a gyűjtőhelye.
      • /lib/modules: Külön betölthető kernel-modulok, különös tekintettel azokra, amelyek a bootoláshoz szükségesek egy esetleges katasztrófa utáni állapot helyrehozásakor. (például hálózati eszközök és filerendszerek meghajtói)
      • /tmp: Ideiglenes file-ok. Sokféle program szó nélkül használhatja, és használja is ezt a könyvtárat átmeneti tárolásra.
      • /boot: A betöltő, például LILO által használt állományok. Sokszor maga a kernel is itt foglal helyet, nem a gyökérkönyvárban. Adott esetben megéri külön partícióra tenni. Ennek egyik nagy előnye, hogy könnyen elhelyezhetjük olyan területre, ami az első 1024 cilinderhez tartozik, így a BIOS látja, és a LILO tud róla kernelt bootolni.
      • /mnt: Könyvtár fizikai eszközök ideiglenes mountolásához. Programoknak nem illik ide maguktól bármit is mountolni, a rendszergazda kiváltsága, hogy ezen belül milyen könyvtárakat hoz létre, és mit hova csatol be.
      • /proc: Ez egy igen furcsa állat. Fizikailag nem is létezik semmilyen lemezen, csak a kernel képzeletében, amit egy könyvtárként jelenít meg számunkra, feltéve, hogy az ehhez szükséges támogatást a kernel tartalmazza (belefordították). Itt nagyon sok hasznos információt találhatunk a gépünkről, általában text file-ként érhetők el a könyvtárban lévő dolgok, például cpuinfo, pci. Emellett minden processzhez tartozik egy saját alkönyvtár benne, amelyben az adott folyamat dolgai találhatók.
      • /home: Az egységsugarú felhasználók home könyvtárai.
      • /usr: Általában a legnagyobb terjedelmű könyvtár a struktúrában. Az ezen belül található alkönyvtárak hasonlítanak a gyökérkönyvtárban találhatókhoz, itt is van bin, lib, stb. A legtöbb nem rendszerszintű program (például grafikus felület) alkatrészei ide kerülnek be.
      • /var: Azok az állományok vannak itt, amelyek futás közben íródnak, ill. megváltoznak. Tipikusan kisebb adatbázisok, a naplózó program logjai, meg szemaforok annak jelzésére, hogy bizonyos programok egy adott file-t vagy erőforrást lefoglalva tartanak.

          [oldal:Shellről picit bővebben]

          Ha sikerrel válaszoltunk a gép roppant bonyolult login/password kérdésére, a login elindítja a shell-ünket. Hogy ez melyik bináris file a merevlemezen, azt a /etc/passwd-ben található több mezője közül az egyik mondja meg. Ha ez például /bin/bash2, akkor az interaktív parancsértelmező jelentkezik, és várja parancsainkat. Ha a shell felismeri a parancsot, akkor vérehajtja, ha nem ismeri fel, akkor a megfelelő nevű file-t indítja el. Néhány, gyakran használt parancs:
          • ls: A dir megfelelője, file-ok kilistázására szolgál. Mint a linuxban általában, ez is számtalan paraméterrel szabályozható, a kijelzés színezhető, rendezhető. (list)
          • rm: Agresszív rendszergazdák legkedvesebb jóbarátja, állományok, vagy - megfelelő paraméterrel kisegítve - teljes könyvtárstruktúrák rekurzív és végérvényes törlésére. (remove)
          • cp: Állományok vagy könyvtárak - akár rekurzív - másolására szolgáló parancs. Jól használható természetesen különböző filerendszerek közötti másolásra is, például egy NFS-en (hálózaton) át mountolt helyről a helyi merevlemezre. Ilyenkor a kernel a hálózaton áttölti a cuccost. (copy)
          • mv: Mozgatásra vagy átnevezésre szolgál, azaz az eredeti file/könyvtár nem marad meg. (move)
          • ln: Ennek a dos/windows környezetben nincs megfelelője, bár funkciójában a .lnk kiterjesztésű file-ok hasonlítanak rá. Linket (általában szimbolikusat), azaz mutatót hozhatunk létre a segítségével, ami egy állományra vagy könyvtárra mutat. Ilyenkor a linkre történő hivatkozás (írás, olvasás) olyan, mintha az eredeti file-ra hivatkoztunk volna. Például ezzel a módszerrel mutat a /dev/mouse a /dev/ttySX-re (soros port) vagy /dev/psaux-ra (PS/2 device). (link)
          • cat: Az ismert nyávogó funkcióján kívül alkalmas még adatok továbbítására a megadott input-ról a megadott output-ra is. Ha valamelyiket nem adjuk meg (esetleg egyiket sem..), akkor az a standard input/output lesz. Megadhatunk neki például file-t inputként, az alapértelmezett output pedig a képernyő lesz, így - magyarul - ki fogja listázni a file tartalmát. (catenate)
          • mkdir/rmdir: Könyvtárak létrehozására/törlésére való.
          Ezeknek a filekezelő parancsoknak a használatát meg lehet kerülni file manager, például mc (Midnight Commander) használatával, azonban sokszor kerülhetünk olyan helyzetbe, hogy ez nem elérhető, ezenkívül sok esetben ezek a parancsok hatékonyabban használhatók a menüvezérelt programoknál.

          Folyt. köv.

Milyen technológiai és munkaerőpiaci hatások érhetik a backendes szakmát? Május 8-án végre elindul az idei kraftie! meetup-sorozat is (helyszíni vagy online részvétellel).

a címlapról

Hirdetés

Security témákkal folyatódik az AWS hazai online meetup-sorozata!

2024. április 26. 05:51

A sorozat május 28-i, harmadik állomásán az AWS-ben biztonsági megoldásait vesszük nagyító alá. Átnézzük a teljes AWS security portfóliót a konténerbiztonságtól a gépi tanulásos alkalmazások védelmén át, egészen az incidenskezelésig.