A UNIX OPERÁCIÓS RENDSZER

A Unix egy többfelhasználós-többfeladatos rendszer (multiuser- multitasking). A többfelhasználós mûködés azt jelenti, hogy egyszerre több felhasználó is dolgozhat egy adott gépen. A többfeladatos mûködés azt jelenti, hogy a gép egyszerre több programot tud futtatni (a felhasználó szempontjából). Egyprocesszoros rendszerekben ez csak virtuálisan jelent párhuzamos futtatást, többprocesszoros rendszerek eseten lehetséges, hogy az egyes processzorok más-más feladatot végezzenek.
 

A UNIX RENDSZER FELÉPÍTÉSE
 
 
 ALKALMAZÁSOK
      SEGÉDPROGRAMOK                  SHELLEK
KERNEL
 HARDVER

A UNIX réteges felépítésû. A legbelsõ rész a kernel az operációs rendszer magja, amely a rendszer erõforrásainak szétosztását és a futó folyamatok ütemezését végzi.

A kernelre épülnek a UNIX rendszer különbözõ programjai (ls, cat, ...) Ezek között a legfontosabb a különbözõ parancsértelmezõk (shell, "burok" )

A parancsértelmezõ a felhasználó belepésekor indul el, értelmezi és végrehajtja a begépelt parancsokat, kezeli a ki és bemenetet. Ezen kívül egy programozási nyelv is.
 

FOLYAMATKEZELÉS

A program egy futtatható fájl (akár egy gépi kódot tartalmazó bináris fájl akár a shell által értelmezhetõ parancsokból álló fájl). Valahányszor egy programot elindítunk, egy új folyamat (process) jön létre. Egyszerûsítve, a folyamat egy programnak egy futó példánya, a saját külön adatterületével. A parancsok (pontosabban a parancsok elindításával létrehozott folyamatok) végrehajtása szekvenciálisan történik. Tehát, ha egy felhasználó elindít egy parancsot, addig nem kapja vissza a parancs promptot, amíg az éppen futó folyamat be nem fejezõõdött. Egy háttérfolyamat (background process) elindítása eseten rögtön megjelenik a parancs prompt és lehetõség van újabb parancs végrehajtására. A háttérfolyamatok egy speciális típusa a démon (daemon) folyamat. Ez egy olyan folyamat, amit a rendszer általában automatikusan indít el és valamilyen felügyeleti szerepet ellátva állandóan fut a háttérben. (pl. nyomtatási kérelmek besorolása és végrehajtása). Ha nincs bejelentkezett felhasználó, akkor is több démon folyamat fut, biztosítva a rendszer folyamatos mûködését.

Ha háttérben indítunk el egy folyamatot,
$ parancs &
1514
$

A 1514 a folyamat azonosítója (Process-id, ID). Ezt késõbb a folyamatra való hivatkozásra lehet használni.
Folyamatok lelövése:
$ kill 1514

Futó folyamatok kilistázása
$ ps
 

FÁJLRENDSZER

A UNIX legfontosabb alapfogalma a fájl: egy struktúrálatlan byte-sorozat. A DOS-szal összehasonlítva, a Unix fájlrendszere sokkal egységesebb: felfogása szerint "minden file". Ez azt jelenti, hogy a felhasználó fájljai, a rendszer könyvtárkatalógusai és a rendszerhez csatlakoztatott hardver eszközök mint fajlok egységesen kezelhetoek.

A fájlnevek maximális hossza általában 255 karakter. A kisbetûk és nagybetûk különböznek, szinte minden karakter használható. Azok a fájlok amelyeknek a neve pont karakterrel kezdõdik rejtett fájlok. Ezek általában adminisztrációs és konfigurációs információkat tartalmaznak. Minden fájnak van tulajdonosa és minden felhasználó egy csoport tagja. A fájlokhoz olvasási, írási, végrehajtási jogok tartoznak, melyek beállíthatók a tulajdonos, a csoportja és mindenki más számára.

A Unix hierarchikus felépítésû, a fájlok könyvtarakban vannak tárolva. Egy könyvtárból alkönyvtárak nyílhatnak, amelyek ugyancsak tartalmazhatnak további fájlokat és alkönyvtárakat, és így tovább.

A Unix fájlrendszerben három kitüntetett pont létezik az egyes felhasználó szamara:

Általános könyvtárnevek:

../              Az aktuális fölötti könyvtár
/bin             A bináris programok könyvtára
/dev             A különféle eszközök könyvtára
/etc             Egyéb rendszerfájlok, rendszerint a rendszeradminisztrációs fájlok.
                 A legtöbb esetben itt van a jelszavakat tároló fájl is.
/mnt             Az ideiglenesen "felakasztott" eszközök becsatolási pontja (lásd mount utasítás)
/usr             Felhasználói programok, forrásszövegek, könyvtárak
/lib             Fontosabb függvénykönyvtárak - ezeket csak a programozók használják.
/usr/bin         Végrehajtható programok (fõként segédprogramok)
/usr/lib         Utasításkönyvtárak programozóknak
/usr/src         Forrásnyelvû szövegek
/usr/local       Helyileg telepített programok és tartozékai, egyébb nyilvános dolgok
/usr/local/bin   Helyileg telepített futtathatók
/usr/man         Az online dokumentáció, amelyet a man paranccsal tudunk megjeleníteni.
 

Könyvtárkezelõ utasítások:


Fájlkezelõ parancsok:

On-line help

Sok Unix parancsot ha paraméter nélkül, rossz paraméterezéssel vagy a -? opcióval hívunk meg, kiír egy tömör üzenetet az adott parancs használatáról. Másik lehetõség a man parancs, melynek hatására a kérdéses utasítás részletes leírását kapjuk.
 

A STANDARD PERIFÉRIÁK ÉS ÁTIRÁNYÍTÁSUK

A Unixban 3 standard be- és kimeneti csatorna van definiálva:


Alapértelmezésben a standard bemenet a billentyûzet, a kimenet és a hibacsatorna pedig a képernyõ. Az átiranyítás (redirection) lényege, hogy a programot utasíthassunk arra, hogy a bemenetet ne a billentyûzetrõl varja, illetve eredményeit ne a képernyõre írja ki.


A CSÕVEZETÉK (PIPE)

A pipe egyik program kimenetet a másik program bemenetével köti össze.
Jele   |
pl.
$ who | sort

Csövek elágaztatása

A tee parancs segítségével lehet elérni. A tee bemenetet a standard inputról veszi, kimenetet két helyre küldi: egyrészt a standard kimenetre, másrészt a paraméterként megnevezett állományba.
pl.
$ date | tee temp
   Tue Feb 10 09:36:38 MET DST 1999
$ cat temp
   Tue Feb 10 09:36:38 MET DST 1999
$ ls | tee tart | wc -l
   5
$ cat tart
   Mailbox Tomogr Unix mail nsmail
$

 

METAKARAKTEREK SEMLEGESÍTÍSE

A metakarakterek semlegesítése által elérjük, hogy a shell „rendes” karakterekként kezelje õket és ne értelmezze õket. 3 módon tehetjük ezt meg:
$ echo '***'
***
$ echo "***"
***
$ echo \*\*\*
***

Mindhárom esetben a képernyõn megjelenik a ***
 

MEGJEGYZÉSEK

A # utáni karaktersorozatot a Unix megjegyzésként értelmezi. Vigyázat a szóközre!

$ echo hello #hello!
hello
$ echo hello#hello!
hello#hello!
 

A UNIX LEMEZ BELSÕ SZERKEZETE

A nulladik blokk (BOOT) a lemez elsõ szektora, innen töltõdik be az operációs rendszer.

Az elsõ blokk (SUPERBLOCK) tartalmazza a fájlrendszer adatait, a belsõ táblák adatait.

Az inode tábla. Az inode név az index-node rövidítése, arra utal, hogy a fájlrendszerben az állományok jellemzõit tartalmazó inode-okat a rendszerprogramok indexkent használjak.

Az inode tartalmazza az adott fájlra vonatkozó összes lényeges információt:


Nem tartalmazza a szóban forgó állomány nevét, ezt a katalógusfájl tartalmazza. Minden katalógushoz tartozik egy fájl. Ebben a katalógusfájlban minden fájlhoz tartozik egy rekord, ami a fájl inode számát és a nevét tartalmazza.
 
 

LÁNCOK LÉTREHOZÁSA

A fájlrendszer egyik sajátossága a láncolás (link). Ez a mechanizmus arra szolgál, hogy egy adott állományt több néven is el lehessen érni.

A Unix rendszer kétféle láncolási eljárást ismer, a merev és a lágy láncolást (hard and soft link). A merev láncolás legfõbb jellemzõje, hogy a láncolt fájl teljesen egyenérékû az eredetivel.

Ha például van egy állományunk text néven, akkor az ln parancs segítségével elérhetjük, hogy mondjuk szöveg néven is hivatkozhassunk rá.

$ ln text szöveg

Ekkor a láncolt állományok láncszáma (link count) egyel nagyobb értek.

A láncolás mechanizmusa

Amikor egy fájlt linkelünk, a megfelelõ katalógusba egy új bejegyzést hozunk létre, ami egy már létezõ és más néven már hivatkozott inode-ra mutat. Az inode táblában növeljük a láncszámot. Tehát a fájlhoz magához nem nyúlunk. Láncolt fájl törlésekor töröljük az adott névhez tartozó bejegyzést a megfelelõ katalógusfájlban és az inode táblában a megfelelõ rekordban eggyel csökkentjük a láncszámot. Ha a láncszám 1, akkor töröljük a fájlt és a hozza tartozó bejegyzést az inode táblában illetve a katalógusfájlban.

A szimbolikus lánc vagy lágy lánc

Lényege, hogy a szimbolikus link katalógus bejegyzése nem az inode-jára mutat, hanem egy olyan különleges fájlra, ami a láncolt fájl nevét tartalmazza. A munkakatalógusból a következõ utasítást kiadva:

$ ln -s /usr/lib/sendmail.cf sendmail.cf

ott egy sendmail.cf fájl keletkezik. Ekkor a láncszám nem változik, a fájl típusnál egy l van. A fájl nevénél a következõ van:

sendmail.cf -> /usr/lib/sendmail.cf

Ha olvasni akarjuk a fájlt, akkor az elõzõekben leírt módon eljutunk a /users/demo katalógusfájl sendmail.cf bejegyzéséhez, észrevesszük, hogy egy szimbolikus linkrõl van szó, az operációs rendszer ekkor megnyitja azt a bizonyos fájlt, ami a láncolt fájl nevet tartalmazza, ami itt a /usr/lib/sendmail.cf . Ezt a már ismert módon megkeresi és megnyitja.
 

MOUNTOLÁS

Mountolásnak (csatolásnak) nevezzük azt a tevékenységet, amikor egy különálló fájlrendszert becsatolunk egy már meglévõhöz. (pl. egy floppyn levõ fájlrendszert) Ennek létezik az ellentétes mûvelete is, amikor egy elõzõleg már csatolt fájlt lecsatolunk.
 

SHELL SCRIPTEK

Legyen egy egyszerû Shell script, amelyik a munkakatalógusban levõ fájlok (állományok és könyvtárak) számát írja ki:
$ cat >nf
ls | wc -w
CTRL-D
$

Az nf állomány elkészülte után a futtatást többféle módon is intézhetjük. Az elsõ megoldás azon alapul, hogy a shell is futtatható úgy, hogy a paraméterként átadott fájl tartalmat olvassa be és próbálja meg végrehajtani:
$ sh nf
12
$

A második megoldás az, hogy a shellt egy „közönséges” programnak tekintjük, és átirányítjuk a bemenetet:
$ sh <nf
12
$

A harmadik megoldás azon alapul, hogy a Unix shell minden olyan állományt, amelyik nem bináris állomány, de végrehajtható (a megfelelõ hozzáférési jog engedélyezett), úgynevezett shell fájlnak (shell script) tekint, a benne levõ szöveget pedig végrehajtható parancsoknak, és aszerint próbálja meg végrehajtani.
$ chmod +x nf
$ nf
12
$
 

PROGRAMARGUMENTUMOK

A shell-változók két fajtáját különböztetjük meg, egyik a hagyományos programozási nyelvekben megszokotthoz változó, a másik úgynevezett pozicionális paraméter. A „közönséges” shell-változóknak akár parancsszinten, akár egy programban értékeket lehet adni, azt le lehet kérdezni, illetve módosítani. A pozicionális paraméterek azok az argumentumok, amelyeket végrehajtáskor átad a shell a meghívott shell scriptnek. Ellentétben a közönséges shell változókkal, a pozicionális paraméterek érteket a felhasználó soha nem változtathatja meg.
$ parancs arg1 arg2 arg3
    $0     $1   $2   $3
Alakítsuk át az elõbbi programot, hogy bármilyen könyvtárban meg tudja
számolni az állományokat:

$ cat >nf1
ls $1 | wc -w
CTRL-D                       # létrehoztam az nf1 állományt
$ chmod +x nf1               # futtathatóva teszem
$ nf1 /users/bin             # meghíváskor meg kell adni a könyvtárat
$
 

PARANCSBEHELYETTESÍTÉS

Lényege, hogy egy program eredményét nem a kimenetre küldi, hanem egy másik program paraméterlistájába illeszti. A parancsbehelyettesítéshez a behelyettesítendõ parancsot `prog...` formában kell megadni.
pl.
$ echo Jelenleg `who | wc -l` felhasználó van bejelentkezve.
Jelenleg 14 felhasználó van bejelentkezve.
$