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 users 4096 Sep 7 13:12. drwx------ 7 misokaz users 4096 Sep 7 13:22.. dr-xrw wx 2 misokaz users 4096 Sep 7 13:30 proba1 -rw-r-x-wx 1 misokaz users 245 Sep 7 13:35 proba2 [misokaz@redhat temp]$
Itt látható, hogy pl. a proba2 nevű fájlnál a jogok a következők - r w - r - x - w x Az első jel egy típusmutató. Ezek a típusok a következők lehetnek: - közönséges fájl; b blokk eszköz (például: adattároló eszközök); c karakteres eszköz (például: nyomtató, terminál, stb.); d könyvtár; l szimbolikus link (azaz egy olyan fájl, ami egy másikra mutat); p pipe (csatorna); s 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 Sep 7 13:12. drwx------ 7 misokaz users 4096 Sep 7 13:22.. dr-xrw wx 2 misokaz users 4096 Sep 7 13:30 proba1 -rwxrwxrwx 1 misokaz users 245 Sep 7 13:35 proba2 [misokaz@redhat temp]$ 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.); használ.); a Red Hat Linux (Talán a legelterjedtebb disztribúció. RPM csomagokat csomagokat használ.); a Slackware Linux (A legelső disztribúciók egyike. TGZ 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 ).