A Linux helye az operációs rendszerek között 386/486/P I/P pro/P II/P III alapú IBM PC-k esetében: sebesség és megbízhatóság tekintetében messze túlszárnyalja a leginkább elterjedt DOS, Windows, Windows '95, Windows ’98 rendszereket és felveszi a versenyt a Windows NT 4.0 rendszerekkel is. Teljesen megszokott, hogy egy Linux-os szerver éjjelnappali üzemben dolgozva, 10-20 felhasználó által igénybe véve hónapokig megbízhatóan üzemel. A Linux valóban 32 bites és valóban többfelhasználós (multiuser) és többfeladatos (multitasking) operációs rendszer, szemben a DOS-szal és a Windows-zal, amely egyfeladatos és egyfelhasználós, valamint a Windows NT munkaállomással, amely többfeladatos és egyfelhasználós. A Linux írója nem egy korábbi rendszert kezdett el tökéletesítgetni, hanem elölről írta meg az operációs rendszert, felhasználva sok más programozó tapasztalatát, később programrészleteit. A Linux rendelkezik a szokásos funkciókkal: virtuális memória, merevlemez gyorsítótár, memórialemez, Internet hozzáférés, a leggyakoribb hardverelemek (CD-olvasó/író, nyomtató, IDE és SCSI lemezek, stb.) kezelése. A rendszer kidolgozottsága olyan fokú, hogy egyre több helyen alkalmazzák UNIX-os munkaállomásként, vagy hálózati szerverként. Mindkét esetben hatalmas előny a szokásos IBM PC-s programokkal szemben a nagyfokú megbízhatóság és az alacsony ár, valamint az sem elhanyagolható, hogy nagyon nagy a hasonlóság a Linux és a „nagygépek” operációs rendszerei közt, azaz pl. egy Linuxos program könnyen átvihető mondjuk egy Sun SPARC gépre, de gondos programozás esetén akár egy CRAY szupergépre is. Mivel a Linux szabadterjesztésű, így a programozók számára nem biztosít megélhetést (bár az utóbbi időben több disztribúció is a tőzsdére került). A Linux nem kereskedelmi OS, így egészen az utóbbi időkig a széles nyilvánosság számára nem volt ismert, mivel nem reklámozták magukat, mint a kereskedelmi cégek. Ez lehet az egyik oka, hogy kevésbé elterjedt, mint pl. a Microsoft termékei.
A Linux felépítése A Linux a UNIX-hoz hasonlóan 4 részből épül fel:
Kernel – A kernel mag az operációs rendszer lelke. Ez vezérli a perifériákat és szabályozza a rendszer működését. A kereskedelmi operációs rendszerek készítői rendszerint féltett kincsként őrzik a kernel forráskódját, mert abból a hozzáértők könnyen ki tudják deríteni a rendszer kisebb-nagyobb titkait, esetleg hibáit. A Linux éppen azért olyan stabil, gyors és megbízható, mert a kernel forráskódja szabadon tanulmányozható. Ez akkor is bizonyíték lehet számunkra, ha mi magunk esetleg soha nem fogunk élni ezzel a lehetőséggel.
Függvénykönyvtárak – A függvénykönyvtárak azért jöttek létre, mert a programokban nagyon sok azonos funkció van. Ezeket a függvényeket nem kell mindig lefordítani, és a programmal együtt tárolni, hanem egy közös helyen tárolva bármelyik program elérheti őket. Ezek a könyvtárak nem azonosak a könyvtárszerkezet könyvtáraival. A függvénykönyvtárak általában C nyelvben írt programfájlok.
Shell – A shell (héj) dolga, hogy beolvassa, értelmezze az operációs rendszer számára kiadott parancsokat. A shell tulajdonképpen az operációs rendszer felhasználói felülete. A shell ad lehetőséget arra is, hogy billentyűzet vagy egér segítségével felhasználói és egyéb programokat indíthassunk el.
Felhasználói programok – A felhasználói programok a felhasználó igényeinek megfelelő feladatokat látnak el (pl. szövegszerkesztés, adatbázis kezelés, stb.).
A fájlrendszerek A Linux ős fájlrendszere Andrew Tannenbaum Minix operációs rendszerének fájlrendszere volt. Linus Torvalds ennek szerkezetét használta kezdetben (ennek neve Minix-1 volt). Ez a legstabilabb rendszer. Frank Xia elkészítette a xiafs-t, amely a Minix-1 továbbfejlesztett változata volt. Ez a leggyorsabb rendszer. A következő fájlrendszert Remy Card fejlesztette ki, amely a „kiterjesztett” nevet kapta, azaz extfs. 255 karakteres fájlneveket és hatalmas partíciókat támogat, de nagyon lassú. Ennek kiküszöbölésére Remy Card átdolgozta a rendszert és megszületett a második verzió, azaz az ext2fs. A fájlrendszer a lemezen tárolt adatok kezelhetőségét biztosítja. Annak érdekében, hogy a Linux más fájlrendszerek támogatását is tudja biztosítani, a kernel és a fájlrendszerek között létezik egy szint, amelyet virtuális fájlrendszernek neveznek. Ez rendelkezik azokkal a rutinokkal, amelyek szükségesek egy fájlrendszeren történő műveletvégzéshez. Ez biztosítja a különböző fájlrendszerek közötti átjárhatóságot, mert a felhasználónak nem is kell tudnia, hogy milyen fájlrendszeren történik a műveletvégzés, csak kiadja a parancsot, és az érintett fájlrendszer-kezelő lefordítja a megfelelő fájlrendszer-hívásokra. A Linux saját fájlrendszere az ext2fs de az operációs rendszer a legtöbb ismert fájlrendszert támogatja (pl. ext, hfs, hpfs, iso9660, fat16 – msdos, fat32 – vfat, minix, nfs, ntfs (csak olvasni), smbfs, stb.) A lemezpartíció és a rajta levő fájlrendszer közti különbség nagyon fontos. Néhány program, mint pl. a fájlrendszereket létrehozó programok, közvetlenül a lemez szektoraival dolgoznak. Ilyen program egy már esetleg meglevő fájlrendszert súlyosan megrongálhat. A legtöbb program viszont csak a fájlrendszert használva ír a lemezre, ezért ezek csak megfelelő fájlrendszert már tartalmazó partíción működnek. Mielőtt egy lemezpartíciót fájlrendszerként kezdünk használni, inicializálni kell, és a nyilvántartó adatstruktúrákat a lemezre kell írni. Ezt a folyamatot fájlrendszer készítésnek, formázásnak nevezzük. A Linux ext2fs fájlrendszerében az adatstruktúrát a szuperblokk, az inode-ok és az indirekt blokkok hordozzák:
A szuperblokk az ext2 fájlrendszer egészéről tartalmaz információkat, mint pl. a teljes méret.
Az inode-ok egy-egy fájl minden adatát tartalmazzák a nevén kívül. A név ugyanis a könyvtárban tárolódik az inode sorszámával együtt. Az inode több adatblokk sorszámát tartalmazza, melyek a fájl adatait tárolják.
Az inode-ban csak néhány adatblokk sorszámának van hely, és ha ennél több szükséges, automatikusan több terület kerül lefoglalásra. Ezek a dinamikusan lefoglalt blokkok az indirekt blokkok.
A könyvtárszerkezet A fájlokat valahogyan rendszerezni kell, és erre a legelfogadhatóbb megoldást a hierarchikus könyvtárszerkezet biztosítja. A hierarchikus szerkezet azt jelenti, hogy a könyvtárak tartalmazhatnak fájlokat és alkönyvtárakat is. A könyvtárszerkezet alapját a gyökérkönyvtár (root directory) adja. Ebben a könyvtárszerkezetben az egyes fájlokra úgy tudunk hivatkozni, hogy meg kell adnunk, mely könyvtárakon keresztül érhetjük el a könyvtárszerkezet gyökerétől kiindulva. Ezt nevezik a fájl teljes (vagy abszolút) elérési útjának. Az elérési út egyes tagjait a „/” jel választja el egymástól, a legelső „/” jel a hierarchia legtetején lévő úgynevezett gyökér-könyvtárat jelöli, amelyből a többi elágazik.
Nagyon kényelmetlen lenne, ha minden fájl elérését csak a gyökértől tudnánk meghatározni, ezért kialakították a munka-könyvtár fogalmát (working directory, lekérdezhető a pwd utasítással). Így elég a munka-könyvtár alatt lévő könyvtárak nevét felsorolni a bennük lévő fájlok eléréséhez. Ez a relatív elérési út. A fájlokra való hivatkozáskor nem kell tudnunk azt, hogy milyen fizikai eszközön (floppy, CD-ROM, merevlemez, stb.) helyezkednek el, elég a „könyvtár hierarchia”-beli helyüket megadnunk. A különböző fizikai (vagy logikai) eszközök (pl. floppy, merevlemez partíciója, stb.) a könyvtárszerkezetből érhetők el a csatlakoztatási könyvtárukon (mount point) keresztül. Ennek érdekében automatikusan, vagy manuálisan csatlakoztatni kell a különböző eszközöket a könyvtárszerkezethez (mount utasítás). A különböző eszközökön különböző fájlrendszerek lehetnek, de ezt a csatlakoztatás után nem észleli a felhasználó. Pontosabban nem észleli a fájlrendszer típusát, csak bizonyos tulajdonságait (pl. Cd-rom csak olvasható). A különböző eszközöket az operációs rendszer leállítása folyamán le kell választani a könyvtárszerkezetről (umount utasítás). Ez szintén automatikusan vagy manuálisan kell, hogy megtörténjen. Az automatizmushoz a „/etc/fstab” nevű fájlt kell megfelelően megszerkeszteni. Ez a fájl tartalmazza azokaz az információkat, amelyek az automatikus csatlakoztatáshoz, illetve lecsatlakoztatáshoz szükségesek (az eszköz neve, az eszköz fájlrendszerének típusa, a könyvtárszerkezet csatlakoztatási pontja, stb.). A Linux gyökérkönyvtárában helyezkednek el a rendszerkönyvtárak és a felhasználók „home” könyvtárai. A rendszerkönyvtárakban a Linux rendszer működését segítő alkalmazások találhatóak, míg a /home könyvtárban lévő könyvtárak a felhasználók bejelentkező könyvtárai. A könyvtáraknak azt a sorozatát, amelyik a gyökérkönyvtárból kiindulva elérhető egy könyvtár, a könyvtár elérési útvonalának hívjuk (path). A fájl neve és az elérési útvonal együttesen adják meg a fájl telje elérési útvonalát. A Linux alapvető könyvtárai a gyökérkönyvtárban a következők (ABC sorrendben):
/bin : Binárisokat, azaz futtatható programokat tartalmazó könyvtár. Itt tárolódnak a standard parancsok és segédprogramok.
/boot : A rendszer bootolásakor használatos fájljait tartalmazó könyvtár.
/dev : Ebben a könyvtár találhatók a különböző eszközök kezeléséhez szükséges fájlok.
/etc : Itt olyan fájlok találhatók, melyek a rendszer és az egyes alkalmazások alapvető beállításaival vannak kapcsolatban. Rendszerkonfigurációs fájlokat tartalmaz.
/home : Ebben a könyvtárban kapnak helyet a felhasználók saját, bejelentkező (login) könyvtárai. Ezeket a könyvtárakat csak a tulajdonosa olvashatja.
/lib : Itt olyan fájlok találhatók, melyek a különböző programok függvénykönyvtárait tartalmazzák.
/mnt : ez a könyvtár arra szolgál, hogy a benne lévő könyvtárakat csatlakoztatási könyvtárnak használják (pl. /mnt/cdrom – a Cd-rom csatlakoztatására). Természetesen új könyvtárakat is létrehozhatunk az eszközöknek.
/proc : Ezt a könyvtárat csak az operációs rendszer használhatja!
/root : Ez a rendszergazda (root) bejelentkezési (login) könyvtára, amely más számára nem olvasható.
/sbin : A rendszerindításhoz és karbantartáshoz használt rendszeradminisztrációs parancsokat tartalmazó könyvtár.
/tmp : Ez az ideiglenes fájlok könyvtára, amelyet azok a programok használnak, amelyeknek szükségük ilyen fájlokra működésükhöz. A könyvtár tartalmát rendszerindításkor az operációs rendszer kitörli.
/usr : Általában ez az egyik legnagyobb könyvtár. Olyan fájlok és könyvtárak vannak benne, amelyek parancsokat (bin), rendszerparancsokat (sbin), függvénykönyvtárakat (lib), dokumentációkat (doc), kézikönyveket (man), forrásokat (src), ideiglenes fájlokat (spool) tartalmaznak.
/var : Olyan fájlokat tartalmazó könyvtár, amelyek állandóan változnak (pl. log fájlok).
A fájlok és könyvtárak hozzáférési jogai A fájlokhoz és a könyvtárakhoz különböző jogosultságok rendelhetők. Ezek a jogok a következők:
r – olvasás; Fájl esetén a fájl olvasható, de ettől még nem módosítható vagy törölhető; Könyvtár esetén a könyvtár tartalma olvasható, de a könyvtár ettől még nem törölhető, nem hozható létre benn fájl vagy könyvtár és nem törölhető belőle fájl vagy könyvtár.
w – írás; Fájl esetén a fájl módosítható vagy törölhető, de ettől még nem olvasható (olvasás nélkül nem módosítható, csak törölhető); Könyvtár esetén a könyvtár tartalma módosítható (azaz törölhető belőle fájl, vagy létrehozható egy új fájl vagy könyvtár), de ettől még nem olvasható a tartalma.
x – futtatás (végrehajtás); Fájl esetén ez a fájl futtatható, de ettől még nem írható és nem olvasható; Könyvtár esetén ez is szükséges a könyvtár tartalmának listázásához, vagy a könyvtárba való belépéshez.
A különböző jogokat több szinten lehet kiosztani a felhasználók között. A szintek a következők:
owner – tulajdonos; A fájl vagy könyvtár tulajdonosa az a felhasználó, aki létrehozta. Ez a jog átruházható a chown paranccsal más felhasználóra.
group – csoport; A tulajdonos felhasználó valamilyen (egy vagy több) csoportba tartozik. A vele azonos csoportba tartozó felhasználókra utal a csoport megnevezés.
others – egyebek; Minden felhasználó, aki nem tartozik az első kettőbe.
Ennek ismeretében a fájlokhoz és a könyvtárakhoz igen bőséges variációban lehet hozzáférési jogokat rendelni. Ezt a hozzárendelést a chmod utasítással tehetjük meg. Példa: Ha egy könyvtár tartalmát ki akarjuk listázni a tartalmának minden paraméterével, akkor a következő utasítást kell használni: ls –al Ennek hatására a következőt láthatjuk: [misokaz@redhat temp]$ ls –al total 20 drwxr-xr-x 5 misokaz drwx-----7 misokaz dr-xrw—wx 2 misokaz -rw-r-x-wx 1 misokaz [misokaz@redhat temp]$
users users users users
4096 4096 4096 245
Sep 7 13:12 Sep 7 13:22 Sep 7 13:30 Sep 7 13:35
. .. proba1 proba2
Itt látható, hogy pl. a proba2 nevű fájlnál a jogok a következők
-rw-r-x-wx Az első jel egy típusmutató. Ezek a típusok a következők lehetnek: b c d l p s
közönséges fájl; blokk eszköz (például: adattároló eszközök); karakteres eszköz (például: nyomtató, terminál, stb.); könyvtár; szimbolikus link (azaz egy olyan fájl, ami egy másikra mutat); pipe (csatorna); socket ;
A „-” azt jelzi, hogy ez egy közönséges fájl. Az ezt követő első három jel „rw-” a tulajdonos (misokaz) jogait jelzi, azaz olvasás és írás (de nem futtatás). A középső három jel „r-x” a csoport (users) jogait jelzi, azaz olvasás és futtatás (de nem írás). Az utolsó három jel „-wx” a többi felhasználó jogait jelzi, azaz írás és futtatás (de nem olvasás). Ez az összeállítás valószínűleg ritkán fordul elő, de nem lehetetlen. Ha a proba2 nevű fájlhoz tartozó jogokat –rwxrwxrwx alakúra akarjuk változtatni, akkor a következőt kell tenni: chmod 777 proba2 Ennek hatására a következőt láthatjuk: [misokaz@redhat temp]$ chmod 777 proba [misokaz@redhat temp]$ ls –al total 20 drwxr-xr-x 5 misokaz users 4096 drwx-----7 misokaz users 4096 dr-xrw—wx 2 misokaz users 4096 -rwxrwxrwx 1 misokaz users 245 [misokaz@redhat temp]$
Sep 7 13:12 Sep 7 13:22 Sep 7 13:30 Sep 7 13:35
. .. proba1 proba2
Látható, hogy az utasítás hatására a proba2 fájl jogai –rwxrwxrwx alakúra változtak.
Suid, sgid és sticky bit A suid (Set User Identification) azt jelenti, hogy a „felhasználói azonosító megváltoztatása”. Ennek megértéséhez tudnunk kell azt, hogy időnként szükség van arra, hogy egy egyszerű felhasználó egy privilegizált felhasználó jogaival rendelkezzen. Talán a legegyszerűbb eset a jelszó megváltoztatása. Egy egyszerű felhasználó nem írhatja közvetlenül a rendszer jelszófájlját, hiszen akkor bármikor korlátlan jogokhoz juthatna, de a saját jelszavát meg kell tudnia változtatni. Ehhez viszont írnia kell a jelszófájlba. Ezt az ellentmondást oldják fel úgy, hogy a programot ruházzák fel privilegizált jogokkal, a suid bit beállításával. A passwd parancs engedélyei a következők: -rwsr-xr-x
1
root
root
28896 Sep 7 13:40
/usr/bin/passwd
Látható, hogy a suid bit be van kapcsolva, így futásának idejére az őt futtató felhasználó rendszergazdai jogkört kap, tehát a root jogosultságaival olvassa és írja a /etc/passwd fájlt, mivel a fájl a root tulajdonában van.
A UN*X típusú rendszerekben a programok azokkal a felhasználói jogokkal futnak, amivel az őket elindító felhasználó rendelkezik. Ezt lehet megváltoztatni a suid és az sgid bitekkel. Egy suid bittel rendelkező program elindításakor a program a tulajdonosának jogaival fog futni, fájlokat olvasni, írni és más programokat futtatni. Tehát a passwd parancs a (mivel a root tulajdonában van,) a root jogaival fut, olvas és ír, bármelyik felhasználó indítja el. A sgid bit (Set Group Identification) azt jelenti, hogy a „csoportazonosító megváltoztatása”. Beállítása esetén a program annak a csoportnak a jogaival fog futni, akinek a fájl a birtokában van. A sgid bitet könyvtárak esetén is be lehet kapcsolni. Ennek eredményeként, ha ebben a könyvtárban bárki létrehoz egy fájlt (ehhez a többi jognak rendben kell lennie), akkor a fájl csoporttulajdonosa nem az a csoport lesz, amelyikbe a felhasználó tartozik, hanem az, akinek a könyvtár a birtokában van. A sticky bit bekapcsolása fájlok esetén azt jelzi az operációs rendszernek, hogy a fájlt tartsa a memóriában a végrehajtás után is. Ennek a tulajdonságnak akkor van értelme, ha azt szeretnénk, hogy egy program minél gyorsabban induljon el, ne kelljen várni arra, hogy betöltődjön a memóriába. A sticky bitet be lehet kapcsolni könyvtárak esetén is. Az ilyen bittel ellátott könyvtárban bárki írhat fájlokat (a többi jognak is rendben kell lennie), de mindenki csak a sajátját törölheti. Ezt a lehetőséget pontosan azért tervezték, hogy az olyan, mindenki által írható könyvtárakban, mint például a /tmp, a felhasználók ne tudják a másik felhasználó által írt fájlokat módosítani, letörölni. A fájlokhoz tartoznak egyéb információk is a jogosultságokon kívül:
a fájlra mutató linkek száma; a fájl tulajdonosának azonosítója; a fájl csoporttulajdonosának azonosítója; a fájl mérete; a fájl utolsó módosításának dátuma; a fájl utolsó hozzáférésének dátuma; a fájl létrehozásának vagy utolsó státuszmódosításának dátuma; a fájl típusa (könyvtár, sima fájl, stb.).
Néhány disztribúció A legismertebb Linux disztribúciók:
a Debian Linux (Egy teljesen szabad, nagyon jól karbantartott disztribúció. DEB csomagokat használ.);
a Red Hat Linux (Talán a legelterjedtebb disztribúció. RPM csomagokat használ.);
a Slackware Linux (A legelső disztribúciók egyike. TGZ csomagokat használ.);
a Caldera OpenLinux (Pénzért vásárolható Linux disztribúció. Nagyon könnyű telepíteni. RPM csomagokat használ.);
a S.u.S.e. Linux (Németországban készített disztribúció, többnyelvű telepítővel. Kezdőknek a leginkább ajánlott. A YaST nevű program segítségével szinte mindent menükön keresztül lehet beállítani. RPM csomagokat használ.);
a Mandrake Linux (A Red Hat 6.0 Linux-szal kompatibilis disztribúció. RPM csomagokat használ.). Az utóbbi 1-2 évben rengeteg cég kiadta a saját linux disztribúcióját. Köztük a Microsoft egyik nagy ellenlábasa, a vektorgrafikus és pixelgrafikus programjairól ismert Corel is.
(Érdekességként megemlítem, hogy az alaplapgyártó Abit, mely a jól tuningolható PII-es alaplapjairól híres, szintén kiadott egy saját disztribúciót, melyet az alaplapjaihoz mellékel.) A Linux mára egyre jobb alternatívát kínál a Microsoft-tal szemben a SOHO és a közép-vállalati környezetek számára, mivel egyre-másra jelennek meg az irodai szoftvercsomagok (pl. a Sun által gyártott StarOffice 5.2, az Applixware által gyártott office csomag az Applixware 5.0, KDE által fejlesztett Kde Office, stb…).