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
|
SEGÉDPROGRAMOK SHELLEK |
|
|
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:
../
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:
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.
$