Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
A UNIX állományrendszere és a kapcsolódó parancsok Tartalom 1. Állomány típusok ........................................................................................................................1 2. A UNIX könyvtárszerkezet, fontos könyvtárak .........................................................................1 3. Közönséges állományok..............................................................................................................3 4. A hozzáférési jogok.....................................................................................................................4 5. Az állományok időbélyegei.........................................................................................................7 6. Eszközök .....................................................................................................................................8 7. Állományrendszerek felcsatolása (mount)...................................................................................8 8. A UNIX hivatkozások (link)........................................................................................................9 9. Az stdin, stdout, stderr állományok..........................................................................................10 10. Állomány nevek a parancssoron..............................................................................................10 Az operációs rendszerek állományrendszerei állományrendszerei a könyvtárak illetve állományok elérésének módja szerint lehetnek hierarchikusak (Unix, Dos), relációsak (WinFS) vagy objektum orientáltak (Windows NT). A UNIX állományrendszere hierarchikus, fa szerű struktúra, amely alapvetően két szerkezetből, a könyvtárakból illetve állományokból épül fel.
1. Állomány típusok A UNIX egy általános állományfogalommal dolgozik Mivel a legtöbb program bemenetet olvas és kimenetre ír, ezek pedig nem feltétlenül igazi állományok, hanem sokszor különböző bemeneti eszközök, ezért ezeket illetve más speciális adatot is a rendszer állományként kezel. Így pl. a könyvtárakat is állományoknak tekinti. Ebből adódóan, a rendszer az alábbi állománytípusokat különíti el: -közönséges állomány (regular file) -könyvtár (directory) -eszköz file (special device file) ebből kétféle van: karakter és blokk eszköz -erős hivatkozások (hard link) -szimbolikus hivatkozások (symbolic link) -socket - ezzel a hálózati kapcsolatokat oldják meg -névvel rendelkező csővezetékek (FIFO vagy named pipe) Az állományok neve Az állomány nevek karakterekből állnak, hosszuk rendszerenként változik, de számíthatunk arra, hogy egy modern rendszeren akár 255 karakter hosszúak is lehetnek. Bármilyen karaktert tartalmazhatnak kivéve / és \0 (sztring végi null) karaktereket. Ennek ellenére állomány nevekben nem ajánlatos speciális karaktereket használni, mert bizonyos esetekben zavarhatják a feldolgozásukat. Az ajánlott karakterek a betűkön és számokon kívül a _ , - , . karakterek. Kis és nagybetűk közti különbség számít. 1
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
2. A UNIX könyvtárszerkezet, fontos könyvtárak A könyvtár is egy állomány, amely könyvtári bemeneteket tartalmaz. Ezek adják meg a könyvtár alá szervezett állományok illetve más könyvtárak listáját és elérhetőségét. Az állományrendszer állományok és könyvtárak hierarchikusan elrendezett struktúrája. A könyvtárszerkezet egy gyökérnek nevezett könyvtárral indul amelynek a neve egy karakter , a / (a karakter angol elnevezése slash, a gyökérkönyvtáré pedig: root directory). Felülnézetből a következőket látjuk: -a gyökér alatt fa-szerűen könyvtárak illetve állományok találhatóak -ez a struktúra megismétlődhet minden könyvtár esetében -minden könyvtárban található 2 speciális könyvtár, a . és a .. (az első önmagára, a második közvetlenül a felső szintre mutató könyvtár). [Ábra: állományrendszer ] Legfelül a gyökér könyvtár található, nyilván ez nem tartalmaz .. mutatót. Abban az esetben, ha mégis használná valaki, alapértelmezetten a .. is a / -re mutat, tehát: /../bin vagy /../../bin az ugyanazt a /bin -t jelöli.
A következő szinteken az állományok kategóriákba vannak csoportosítva, a kategóriákat úgy határozták meg, hogy jellegzetességeik szerint csoportosították az állományokat. Így a felhasználó gyorsan megtalál bármilyen állományt, mert nagy valószínűséggel tudja, melyik csoportban található. Ez a felosztás nem teljesen egyforma a különböző UNIX-ok illetve Linux disztribúciók esetében, de a felosztási elvek nagyjából ugyanazok (Az alábbi példák a Redhat cég Fedora disztribúciójában találhatóak így) . /boot A rendszer indításához szükséges állományokat tartalmazza, itt van a kernelt tartalmazó állomány is. /home
A felhasználók saját könyvtárai, az un. home könyvtárak vannak itt. Például: /home/lszabo .
/dev
Az eszközökre mutató állományok a /dev könyvtárban találhatóak.
/bin
Bináris, futtatható állományok helye. Itt vannak a parancsok.
/sbin
csak a szuperuser (root) által végrehajtható állományok
/usr
a felhasználók és rendszer által használt fontos állományok. A /usr alatt találhatóak például: /usr/include C header állományok /usr/bin futtatható állományok /usr/src forrás állományok /usr/lib könyvtárak
/tmp
mindenki által írható ideiglenes állományok helye
/var
terjeszkedő, rendszer által írt állományok (pl. naplózó állományok).
2
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás /proc
ez egy kernel által létrehozott állományrendszer amely a futó folyamatokat és egyéb rendszerparamétereket írja le.
Amikor a rendszeren egy felhasználó dolgozik és egy programot futtat, akkor a program számára létezik néhány fontosabb hely az állományrendszerben. Ezek az alábbiak: -a felhasználó saját, vagy home könyvtára, pl: /home/lszabo -a pillanatnyi munkakönyvtár (working directory): minden egyes futó programnak (vagy folyamatnak) van egy munkakönyvtára. Implicit ebből olvas állományokat illetve ebbe ír. Ehhez a könyvtárhoz viszonyítjuk a relatív elérési utakat (lásd alább). -a . és .. könyvtárak amelyek a kurrens illetve a fölötte levő könyvtárat címzik Az állományok nevét abszolút (teljes útvonal) vagy relatív útvonallal lehet megadni (absolute , relative path). Útvonalnak nevezzünk egy / karakterekkel elválasztott könyvtár és állománynév szekvenciát, amely akár a / karakterrel is kezdődhet (gyökér könyvtár). /usr/include/readline/keymaps.h abszolút útvonal keymaps.h relatív a pillanatnyi munka könyvtárhoz képes
../keymaps.h ugyancsak relatív a munka könyvtárhoz képest, a .. könyvtár használatával
Az alábbiakban bemutatunk két parancsot, amelyek segítenek a programozásnál az állományneveket kezelni a basename (egy abszolut elérési út állománynevét írja ki) és a dirname (egy abszolut elérési út könyvtárnevét írja ki): $ basename /usr/include/readline/keymaps.h keymaps.h $ dirname /usr/include/readline/keymaps.h /usr/include/readline
Állomány elnevezési konvenciók a UNIX alatt nem kötelezőek, bármilyen nevük lehet a különböző tartalmú állományoknak. Pl. bármilyen nevű állomány lehet futtatható. Elnevezési konvenció azonban létezik, és többnyire használjuk is, hogy különbséget tegyünk az állományok közt (.c, .o, .h, .txt, .gz, .ps, .tgz, .tar, .sh, .tex, stb.). A UNIX könyvtárakat létrehozó parancsa a mkdir, könyvtárat törlő parancsa a rmdir. A könyvtár fa struktúrájában a munkakönyvtárat a cd paranccsal lehet váltani.
3. Közönséges állományok A közönséges állományokat a UNIX egyszerű byte folyamnak tekinti (byte stream). (Egy byte = 8 bit = 1 angol ABC-ben található karakter). Megkülönböztetünk szöveges ("szemmel" is olvasható, text) illetve bináris állományokat. A közönséges állományok többnyire mágneses lemezeken találhatóak. A közönséges állományokat kezelő fontosabb parancsok az alábbiak: mkdir (könyvtárat hoz létre), rmdir (könyvtárat töröl), cp (állományokat másol), rm (állományokat töröl), mv (állományt mozgat el illetve átnevez). 3
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
Információt az állományokról az ls (listázás), file (típus kiíratás) és stat (állomány rendszeradatai) nyerünk (valamennyi használatát átvesszük laboron, magyar nyelvű man lapok a tanfolyam honlapján találhatóak). A szöveges állományok igen fontosak a UNIX alatt, a legtöbb program szöveges formában tartja konfigurációs adatait, valamennyi UNIX parancs szövegeket ír ki a kimenetre és szövegeket olvas a bemeneten. A szöveges állományok a használt karakterkészlet olvasható karaktereiből épülnek fel. A karakterek szövegsorokat alkotnak melyeknek végén egy újsor karakter található (ASCII kódja 10). Az állományok lehetnek 0 byte hosszúak (üres file). Maximális hosszukat egy előjeles egész számmal tárolt állományhossz korlátozza. Régebbi rendszereken ez 32 bites előjeles szám, így a maximális hossz kb. 2 GB. Modern rendszerek képesek az állományhosszat 64 bites számban tárolni, ez elméletileg 8 milliárd Gigabyte-os állományokat enged meg (ezek akkorák, hogy egy ilyen hosszú állomány felírása a mai sebességekkel több ezer év nagyságrendű időt adna).
4. A hozzáférési jogok Minden felhasználónak (user) bejelentkezési neve van (login name) és egy csoporthoz (group) tartozik. A felhasználó jelszóval jelentkezik be. A felhasználók illetve csoportok neveit a rendszer a nyilvános password állományban, illetve a csoportokat tartalmazó állományokban tartja (/etc/passwd, /etc/group). Modern rendszerekre való bejelentkezés megtörténhet valamilyen hálózati azonosítással, amikor a felhasználót azonosító adatokat nem az a gép tárolja amelyre bejelentkezünk. A rendszerben egyetlen felhasználónak van jogosultsága bármilyen műveletet elvégezni, ezt a felhasználót a UNIX alapú rendszerek root-nak nevezik (ő a rendszergazda vagy szuperuser). Az összes többi felhasználónak a jogai korlátozottak, és általában a tulajdonában álló objektumok (pl. állományok) vonatkozásában korlátlanok (ezekkel bármit tehet), a más felhasználó tulajdonában álló objektumok vonatkozásában korlátozottak. A felhasználókat a rendszer a felhasználó neve és jelszó szerint azonosítja, a rendszerben viszont egész számokkal tartja nyilván (user id, group id). A bejelentkezett felhasználó az id paranccsal listázhatja ezeket ki (illetve megtalálja őket a passwd állományban): #id uid=500(lszabo) gid=500(lszabo) groups=500(lszabo)
Az állományok jogrendszerét a felhasználó vonatkozásában tárgyaljuk: az állományokat a felhasználó által futtatott programok hozzák létre. A UNIX alapú rendszerekben kétféle tulajdonjog létezik az állományokon: felhasználói (user) és csoport (group). Így minden állomány valamelyik felhasználó illetve valamilyen csoport tulajdona. Létrehozásnál egy új állomány mindig a felhasználó és annak csoportja tulajdonaként jön létre, valamilyen implicit elérési joggal (lásd alább). Ezek a jogosultságok a chmod illetve chown parancsokkal változtathatóak. Az állományok nevének és tulajdonságainak listázására az ls parancsot használjuk. A felhasználó jogosultságai A rendszer négy csoportra osztja a felhasználókat az elérési jogok megállapítására: 4
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
-a felhasználó (user) jogai, a chmod parancsban szimbóluma: u -a csoport (group) jogai: g -a többiek (others) jogai: o (azok akik a tulajdonos szempontjából sem a felhasználót, sem annak csoportját nem jelentik) -mindenki jogai , all, a Az rwx jogok közönséges állományokon A jogokat egy 3 jegyű oktál számmal ábrázolja a rendszer, mert 3 jog állítható be minden állományon 3 kategória számára (user, group, others). Ezek: -olvasás: r -írás: w -végrehajtás: x Tehát egy állományon beállított, tulajdonos-csoport-mások számára beállított jog így nézhet ki: rwxr--r--
a három oktál szám ugo, mindháromnak 3 bitje lehet: rwx, amennyiben egy bit nincs beállítva, helyette kötőjelet írunk. A fenti példa jelentése: a tulajdonos írhatja, olvashatja, végrehajthatja míg a csoport tagjai illetve mások csak olvashatják (oktálban a kombinációt így fejezzük ki: 744 ) Az alábbi jog kombináció esetében a tulajdonos bármit tehet az állománnyal, a többiek viszont csak futtathatják (oktál 711): rwx--x--x
Az rwx jogok könyvtárakon A könyvtárak esetében az r jog jelentése a könyvtár állomány "olvasása": ez gyakorlatilag azt jelenti, hogy a benne levő állománylista listázható (tehát nem a könyvtár tartalma, hanem a könyvtár állomány tartalmára vonatkozik az olvashatóság). A w jog a könyvtár állomány "írhatóságát" jelenti: tehát a könyvtárban létrehozható új állomány, törölhetőek a meglevőek. Az x, végrehajtási jognak megfelelő bit viszont itt egészen mást jelent: éspedig azt, hogy a könyvtár "átjárható", azaz amennyiben egy felhasználó az állományrendszer fastruktúrájában keres, keresheti az illető könyvtár alatti állományokat illetve könyvtárakat, és leolvashatja (írhatja) azokat amennyiben joga van rá. Ugyanakkor cd paranccsal beléphet az ilyen könyvtárakba, és haladhat lefelé a könyvtárstruktúrán. A root felhasználó mindent leolvashat illetve írhat a rendszerben, és azokat az állományokat amelyeken legalább egy x bit be van állítva (bárkinek) végrehajthatja. A chmod parancs A hozzáférési jogok állítása a chmod, a tulajdonos beállítása a chown parancsokkal történik, listázásuk az ls -l paranccsal. A chown parancs végrehajtása közönséges felhasználó számára nem megengedett a setuid mechanizmus veszélyei miatt (lásd alább).
5
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
A chmod parancs Használat:
chmod [kapcsolók] mód állomány(ok)
Fontosabb kapcsolók: -f Erőlteti a változtatást és nem ad ki figyelmeztető üzenetet (force). -R A változtatásokat elvégzi rekurzívan lefelé a könyvtárstruktúrán. Leírás: A mód argumentum kötelező. Kétféleképpen adható meg: oktál formában vagy szimbólikus jelöléssel. Példa az oktál jelölésre: chmod 755 a.txt
A szimbólikus jelölésnél az ugoa szimbólumokat használva adjuk meg a paramétert (u: user, g: group, o: others, a: all). A + jel hozzáadást, a - megvonást jelent, a hozzárendelést az = jellel jelöljük. Pl. chmod u+x elso.sh
végrehajtási jogot állítunk be; chmod u-x, o-w 1.txt
a felhasználótól a végrehajtási jogot, a többiektől az írásjogot vonjuk meg. Megjegyzések: A rekurzív használat veszélyes. (Miért? egyszerre állíthat át könyvtárakon és állományokon jogokat, ami nem várt eredményhez vezethet.) A 1.txt állományra a rwxr--r-- jogot az alábbi parancs segítségével állítjuk: chmod 744 1.txt
az oktál számok segítségével. Ha ezt módosítani akarom a rwxr-xr-- jogra (a csoportomnak végrehajtási jogot adok) akkor az alábbit tehetem ha szimbólumokkal akarom megadni a jogokat a chown parancsnak: chmod g+x
Az implicit jogokat amelyeket a rendszer akkor használ ha egy bizonyos felhasználó egy új állományt hoz létre az umask paranccsal állítjuk (lásd alább). A felhasználó csak azokra a műveletekre jogosultak, amelyeket az állományokon állított jogok megengednek (Kivétel természetesen a root felhasználó). Az említett jogokon kívül. egy negyedik oktál szám speciális információkat tartalmaz a jogosultsági bitek közt: A negyedik, jogokat tartalmazó Kire van szám neve és értéke beállítva
Jelentése
Sticky bit program oktál értéke : 1 jele az ls-ben: t, mások jogait
Állandóan a memóriában marad (ha több felhasználó futtatja ugyanazt a programot). A régi UNIX rendszerek használták, ma már nincs szükség erre a Linuxon.
jelző x helyett áll az ls
6
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
listájában.
könvtár
ha többen írnak ugyanabba a könyvtárba, az írt állományt csak a tulajdonos módosíthatja pl.: /tmp
Set Group Id bit oktál értéke: 2 jele: s vagy S (s = S+x)
group
Set User Id Bit: oktál értéke: 4
user
Ha egy programon be van állítva valamelyik a bitek közül, akkor bárki indítja el a programot, a program a tulajdonos, és nem a futtató jogosultságával fog futni. Pl.: passwd program root-ként fut, bárki indítja el. Ha a Set Group Id bit directory-n van beállítva, akkor az alatta létrehozott könyvtárak a felső szintű könyvtár tulajdonosáé lesznek, és nem a létrehozóé
Oktálban a chmod parancs egy negyedik számjegyet használ a fenti bitek beállításakor, ennek értéke: 4: setuid, 2: setgid, 1:sticky bit. Például a tmp könyvtár jogainak beállításakor az alábbi parancsot kellene kiadni ha betűkombinációkkal adná ki: chmod a+x tmp chmod +t tmp
és az alábbit ha oktál számokkal: chmod
1777
tmp
Az ls -l paranccsal kapott listákban az rwx jogok kijelzése előtt van meg egy karakter, amely a file típusát jelzi. Reguláris file esetében egy kötőjel áll ott, más speciális esetekben az alábbi karakterek: d - könyvtár, l - szimbolikus link, b - blokk eszköz, c - karakter eszköz. Az umask és az implicit jogok Az újonnan létrehozott állományok számára a shell kap a rendszertől egy beállítást, ami meghatározza milyen jogosultságokkal jön létre egy új állomány. A beállítást egy maszk tartalmazza, amelyet umask-nak neveznek, és információként azt tartalmazza, milyen jogosultságot ne állítson be a shell amikor létrehoz egy új állományt. A maszk eleve úgy van beállítva, hogy feltételezi, hogy a végrehajtási jogot amúgy sem kell implicit beállítani (ezt mindig tudatosan állítja be egy program ha szükséges), a többi jogra pedig egy 3 oktál számból álló maszkot ad meg. Ennek eredeti értéke 002 (a szám lehet 4 jegyű is, ha az rwx biteken kívül a kiegészítő biteket is akarjuk állítgatni). A 002 jelentése a létrehozandó állomány ugo csoportjainak rwx bitjeire vonatkozik, és az egyetlen beállított bit, a második balról azt jelenti, hogy egy újonnan létrehozott állomány nem lehet mások által írható. Az implicit jogokat egy új állomány létrehozásakor az umask paranccsal állíthatjuk be. A parancs egy argumentumot fogad el, amivel átállíthatjuk a maszkot. Például az alábbi parancs kiadása után: #umask 022 #touch test.txt #ls -l test.txt -rw-r--r-- 1 lszabo lszabo 0 2008-09-28 20:15 test.txt
az újonnan létrehozott állományok (például a touch parancssal létrehozottak) sem mások, sem a csoport által nem lesznek írhatóak.
7
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
5. Az állományok időbélyegei Minden állomány 3 időbélyeget hordoz, ezek az állományt leíró adatstruktúrában, az i-node-ban vannak tárolva (lásd alább). -az utolsó hozzáférés ideje: atime (access time), ezt ls -ltu mutatja -az utolsó módosítás ideje: mtime (modification time), ezt ls -lt mutatja -az utolsó állapotváltozás (jogrendszerben) ideje: ctime (status change time), ezt ls -lct mutatja (A fenti ls parancsok, amennyiben a t kapcsoló nélkül használjuk kijelzik a megfelelő időbélyeget és név szerint rendeznek. A t kapcsolóval a megfelelő időbélyeg szerint lesznek rendezve.) Az időbélyegek tulajdonképpen egy nagy egész számot tartalmaznak az állományt leíró adatstruktúrában, amelynek típusa UNIX időbélyeg (UNIX timestamp). Ez az 1970 január 1 éjfél óta eltelt szekundumok számát jelenti egy adott időpillanatban.
6. Eszközök Az eszközillesztést csatlakoztató állományok, a /dev könyvtárban vannak. Jellegüket tekintve háromféle eszköz van: blokk eszköz (pl. merevlemez partíció), karakter eszköz (pl. terminál) illetve pseudo eszközök (ilyen pl. a /dev/null vagy a /dev/zero/). A Linuxnál itt találhatóak például a merevlemezekre mutató eszközállományok, pl. /dev/hda1 az első lemez első partíciója, /dev/hda2 az első lemez második partíciója, /dev/sda1 az első SCSI vagy soros IDE lemez első partíciója. Az eszközökre kétféle állomány mutathat, a karakter és blokk (character device, block device) eszközöket jellemző állományok. Ilyenek a konzol, /dev/console (ez karakter eszköz) illetve a merevlemez valamelyik partíciója /dev/hda1 (ez blokk eszköz). Ezeket a megoldásokat a UNIXban később tárgyaljuk.
7. Állományrendszerek felcsatolása (mount) [Ábra: UNIX partíció] A felcsatolás műveletét a mágneslemez partícióinak felcsatolásával illusztráljuk. Egy lemezblokk mérete általában 1024 byte (ez ma már lehet nagyobb, régen lehetett csak 512) MBR – master boot record Egy lemezen több partíció lehet. Ennek belső szerkezete határozza mega típusát, ami klasszikus UNIX-nál pl. UFS állományrendszer, Linuxnál: ext2, ext3, Reiser állományrendszerek. Az állományokat leíró adatstruktúra a UNIX-ban az i-node (information node, index node , ?nem tudjuk). Az i-node tábla tartalmaz minden információt egy állományról, kivéve a nevét. Az adatstruktúrát a rendszer kezeli, és egy egész számmal azonosítható (a UNIX általában ezt a módszert alkalmazza egyedi adatstruktúrák azonosítására). Az állományok i-node számát az ls -i parancs listázza: $ ls -i
8
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás 1698534 elso.txt
1698536 harmadik.txt
1698535 masodik.txt
A gyökér könyvtár az első olyan állomány amely az állomány neveket és a hozzájuk rendelt i-nodeokat tartalmazza. A további alkönyvtárak rendes állományok, amelyek szintén a fenti információt tartalmazzák. Az állományrendszer bármely pontjába ahol egy könyvtár található, egy más, eddig a rendszerbe nem illesztett eszköz állományrendszere csatolható (ha az létre van hozva rajta). Így az eszközön levő állományrendszer bekerül a UNIX állományrendszerének fa struktúrájába. A műveletet a mount paranccsal lehet végrehajtani parancssorból, az alábbi módon: mount eszköznév könyvtárnév opciók
pl. az alábbi parancs a második SCSI harddisk első partícióját, amelyen FAT állományrendszer van illeszti a disk2 könyvtár alá. #mount /dev/sdb1 /disk2 -t msdos
A rendszer indulásakor végrehajtott csatolások a /etc/fstab állományban vannak leírva. [...]
8. A UNIX hivatkozások (link) A UNIX állományrendszerben gyakran dolgozunk un. hivatkozásokkal: ez egyszerűen azt jelenti, hogy egy állomány vagy könyvtárnak kettő vagy több nevet adunk, többnyire azért hogy kényelmesebben dolgozzunk a rendszerrel, vagy elkerüljük a szükségtelen kettőzéseket. Kétféle hivatkozást alkalmaz a rendszer: 1. kemény vagy hard linkek 2. szimbolikus linkek A kemény linkek esetében két névvel hivatkozunk egy állományra, mindkét név egyenértékű. Ilyenkor ha az egyiket megszüntetjük (töröljük az állományt), az állomány megmarad a másik név alatt (mindegy, hogy melyik névvel volt létrehozva). A szimbolikus linkek esetében a második név csak egy mutató az elsőre. Ilyenkor, ha az első név szerint töröljük az állományt, az állomány is törlődik, és a második név a semmibe mutat. Akárhány linket létrehozhatunk egy állományra. Kemény (hard) hivatkozásokat csak ugyanazon a lemez partíción található állománynevek közt hozhatunk létre, a szimbolikus linkek átmutathatnak partíciók fölött. Létrehozásuk az ln paranccsal történik: ln
eredeti_nev
uj_nev
A szimbolikus linkek esetében ezen kívül a -s kapcsolót kell alkalmazni, tehát #ln 1.txt 2.txt
parancs hard linket hoz létre, a #ln -s 1.txt 3.txt
9
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
pedig szimbolikusat. Az alábbi listán látszik, hogy a 3.txt szimbolikus link (kis l betű a sor elején). A GNU ls parancsa a név mellett egy -> jellel is jelzi a hivatkozást. A lista második oszlopa pedig az állományra mutató kemény hivatkozások számát jelzi. #ls -l -rw-rw-r-- 2 lszabo lszabo 5 Sep 21 11:37 1.txt -rw-rw-r-- 2 lszabo lszabo 5 Sep 21 11:37 2.txt lrwxrwxrwx 1 lszabo lszabo 5 Sep 21 11:38 3.txt -> 1.txt
9. Az stdin, stdout, stderr állományok -minden futó program nyitva találja őket A programokat mindig úgy kell megírni, hogy implicit módban (ha nem kapnak más bemenetet, pl. egy állományból) az stdint olvassák és az stdout-ra írnak. A hibákat az stderr-re írjuk. Azokat a programokat amelyek így dolgoznak és egy bemeneti adaton célzott módosítást végeznek, majd a kimenetre írják azt, szűrőknek is (filter) nevezzük. A shell lehetővé teszi a futó programok ki és bemeneteinek egymásba illetve állományba irányítását. A parancssoron alkalmazott műveleti jelek a következők: > (az stdout megy állományba), >> (az stdout megy állományba hozzáfűzéssel), < (a program állományból olvassa a bemenetet). Pontos használatukat és működésüket később tárgyaljuk. Ezeknek az állományoknak tulajdonképpen nincs nevük. Modern UNIX rendszereken azért, hogy az említett állományok név szerint is elérhetőek legyenek, eszköz állományokon keresztül elérhetőek. Így a /dev/stdin, /dev/stdout és /dev/stderr használhatóak az ilyen rendszereken (pl. Linuxon is). Így az alábbi két parancs azonos: #cat
és: #cat < /dev/stdin > /dev/stdout
10. Állomány nevek a parancssoron A parancssoron szelektíven vagy globálisan is tudunk állomány nevekre hivatkozni. Az alábbi táblázatban található jelöléseket lehet használni. Amin látni fogjuk, ezeknek a kezelését a parancsértelmező (shell) végzi el. A jelölések azon a tényen alapulnak, hogy bizonyos karaktereknek a shell számára más jelentéssel bírnak, mint eredeti jelentésük. Az ilyeneket nevezzük metakaraktereknek. Jellegzetes példa a * , amely a shell számára a munkakönyvtárban található állományok listáját jelenti. Szerkezet *
Milyen nevekre hivatkozik A megadott könyvtárban minden állomány nevet jelöl ha egyedül áll: *
de használható más karakterekkel kombinálva is: *.txt
10
Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás
Szerkezet ?
Milyen nevekre hivatkozik Az állománynévben egy karaktert helyettesít: 1?.txt
(minden .txt típusú állomány amely nev 1 -el kezdődik, és utána bármilyen karakter áll a pont előtt) [halmaz]
Karakterhalmazt definiál: a két kapcsos zárójel közé azok a karakterek kerülnek amelyek részei a halmaznak. A halmazzal egy karakterre hivatkozunk. [abx] - jelenti az a, b vagy x karaktereket [a-z] - jelenti a kisbetűket Például: 1[0-9].txt
(minden .txt típusú állomány amely neve 1 -el kezdődik, és utána számjegy áll a pont előtt) Ha az állomány nevekben a metakarakterek vagy a szóköz karakter literálisan fordulnak elő, akkor backslash jelöléssel kell megadni őket. Például a "Az allomanyrendszer" nevű állományra parancssoron így hivatkozunk: Az\ allomanyrendszer .
11