A fájlrendszert kezelő parancsok
Az 5.ábra illusztrálja a UNIX fájlrendszerének felépítését. Látszik, hogy az egész struktúra leginkább egy fejjel lefele fordított fára emlékeztet. A fa gyökerének szerepét betöltő katalógust root directory-nak, azaz gyökérkatalógusnak nevezik, s ebből ágaznak el a további katalógusok, azokon belül további alkatalógusok és így tovább. A fa leveleinek pedig a katalógusokban található fájlok felelnek meg, ezekből nem ágaznak tovább katalógusok. Minden UNIX fájlrendszer a fentieknek megfelelően épül fel, eltérések csak a katalógusnevekben és a katalógusok tartalmában jelentkeznek.
A fájlrendszer kitüntetett pontjai
A UNIX fájlrendszerében három kitüntetett pont létezik az egyes felhasználók számára: a fájlrendszer kezdőpontja, ahonnan az egész állományrendszer felépül (gyökérkatalógus, root directory); az egyes felhasználókhoz tartozó kiindulási pont, ahonnan kezdve ő helyezheti el saját állományait (kiindulási katalógus, vagy alapkatalógus, home directory); végül az a pont, ahol a felhasználó éppen tartózkodik az állományrendszerben (aktuális katalógus vagy másnéven munkakatalógus, current directory).
A fájlrendszerrel való ismerkedést a pwd (print working directory) nevű paranccsal kezdjük. E parancsot meghívva az aktuális katalógus neve íródik ki a képernyőre.
$ pwd
/users/demo
$
A fenti kiírásban a UNIX állományrendszerének hierarchikus felépítése tükröződik, s a következőképpen kell értelmezni: a gyökérkatalógus alatt elhelyezkedő users katalógus demo nevű alkatalógusában tartózkodunk. A pwd eredményében látható / jel kettős szerepet tölt be: egyfelől jelöli az állományrendszer kezdőpontját, azaz a gyökérkatalógust, másfelől az egyes katalógusszintek elválasztójeleként is funkcionál. (A DOS-hoz szokott olvasót figyelmeztetjük, hogy noha az állományrendszer koncepciója és a jelölésmód erős hasonlóságot mutat, itt nem a DOS alatt megszokott \ (backslash) karaktert kell használni a katalógusszintek elválasztására.)
Ha már tudjuk, hogy hol tartózkodunk az állományrendszerben, valószínűleg azt is szeretnénk megtudni, milyen fájlok találhatóak az egyes katalógusokban. A katalógusok tartalmát az ls (list) paranccsal listázhatjuk ki. Ha semmi mást nem mondunk, az aktuális katalógusban lévő fájlok nevét listázza ki, ábécésorrendben:
$ ls
FULL-INDEX text
$
Ha az ls parancsnak argumentumai is vannak, akkor két eset lehetséges: ha az argumentum egy közönséges fájl neve volt, akkor az adott fájlra vonatkozó információkat írja ki az ls parancs, ha viszont az argumentum egy katalógusfájl neve volt, akkor az ebben a katalógusban szereplő összes fájl adatait. Mivel az ls parancsnak is megadhatunk több parancs argumentumot, ezek lehetnek vegyesen fájl és katalógusnevek, az ls mindegyiket a neki megfelelő módon fogja kezelni.
Ha a -l opciót is kiadjuk, részletesebb információt is kapunk a fájlokról:
$ ls -l
total 354
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 19 Aug 23 20:23 text
$
Nemsokára részletesebben is visszatérünk a fentebb látható kiírás értelmezésére, most csak dióhéjban: a legelső sor (total ...) azt adja meg, hogy a kilistázott katalógusban lévő fájlok összesen hány blokknyi helyet foglalnak el a lemezen (egy blokk általában 512 karakter, azaz fél kilobájt).
A többi sorban az első oszlop a hozzáférési jogokat mutatja, azaz azt, hogy kinek milyen joga van az adott fájllal kapcsolatban (írhatja, olvashatja, végrehajthatja-e); a következő oszlopban álló szám az úgynevezett láncszám (link count): ez mutatja meg, hogy egy adott fájlra hány különböző néven (link) lehet hivatkozni; aztán az állomány tulajdonosának és csoportjának neve következik, majd a fájl mérete bájtokban, aztán az utolsó módosítás ideje, s legvégül a fájl neve.
Az ls számos opciója közül most csak a leggyakrabban használtakat emeljük ki. Ha a fájlokat nem ábécésorrendben, hanem időrendben (a legutolsó módosítás ideje szerint) szeretnénk kilistázni, akkor a -t opciót kell megadni; ha fordított sorrendű rendezést kívánunk, akkor a -r opciót. A -R opció hatására az ls parancs rekurzív módon a megadott katalógusnév alatti teljes fájlstruktúrát kilistázza, nem csak a megnevezett katalógusban szereplő fájlokat. Az opciók persze kombinálhatóak is, így például ls -lrt fordított idősorrendben hosszú listázást ad, a legrégebbi fájlokat sorolva fel elsőként, a legfrissebbeket utoljára.
Az állományrendszerben való mozgásra a cd (change directory) parancs szolgál. Paraméterként a megcélzott katalógus nevét kell megadni, ami történhet mind abszolút (teljes) elérési út (absolute pathname), mind relatív elérési út (relative pathname) megadásával.
Abszolút megadás esetén a keresett katalógus teljes elérési útvonalát meg kell adnunk, a gyökérkatalógustól kezdve, s minden alkatalógust fel kell sorolni, amelyeken keresztül a célhoz jutunk. Ebben az esetben a cd parancs paramétere a / karakterrel kell hogy kezdődjön, a cd parancs erről ismeri fel, hogy abszolút elérési útról van szó.
Relatív címzés esetén azt mondjuk csak meg, hogy pillanatnyi tartózkodási helyünkhöz, tehát az aktuális katalógushoz képest hol helyezkedik el a megcélzott katalógus, ilyenkor a cd parancs paramétere nem kezdődhet a / karakterrel. Nézzünk egy példát mindezekre! Tegyük fel, hogy /usr/users/janos katalógusban vagyunk, amely alatt található egy src nevű alkatalógus. Hogy ide eljussunk, kiadhatjuk a cd /usr/users/janos/src parancsot, de ezzel egyenértékű lenne a cd src parancs is.
Minden olyan esetben, amikor egy katalógust vagy fájlt meg kell nevezni, e kétfajta kijelölési mód egyformán használható.
Ha a cd parancsot argumentum nélkül hívjuk meg, akkor a kiindulási katalógusunkba helyez el minket. Ez igen hasznos lehet akkor, ha az állományrendszer egy távoli, sok szinttel odébb lévő pontjáról szeretnénk "hazajutni".
A fájlrendszeren belüli mozgáshoz még két további jelölés is használható: a . (pont) karakterrel az aktuális katalógusra hivatkozhatunk, míg a .. karakterekkel a szülő katalógusra. Ezek a jelölések tetszőlegesen kombinálhatóak is. A fentiekre nézzünk egy példát:
$ pwd
/users/demo
$ cd ..
$ pwd
/users
$ cd ..
$ pwd
/
$ cd ..
$ pwd
/
$ cd users
$ cd demo
$ pwd
/users/demo
$ cd /
$ cd /users/demo
$ pwd
/users/demo
$ cd /etc
$ pwd
/etc
$ cd
$ pwd
/users/demo
$
Minek nevezzelek? Névkonvenciók
A UNIX állományok és katalógusok nevére vonatkozólag viszonylag laza és kötetlen szabályok vonatkoznak, legalábbis ha a DOS alatt megszokott szigorú 8+3 karakteres névadási megkötésre gondolunk. A UNIX-ban a legfontosabb megkötés az, hogy a fájlnév hossza maximum 14 karakter lehet, de a legtöbb korszerű UNIX fájlrendszernél ez az érték opcionálisan 255 karakterre is állítható. E hosszon belül a fájlnév tetszőleges tagolású lehet; akárcsak a DOS alatt, itt is a . (pont) karakter szolgál szeparátorkarakterként, de ellentétben a DOS-sal, egy fájlnév tetszőleges számú, ponttal leválasztott utótagot tartalmazhat, s legális fájlnév az is, ami egyáltalán nem tartalmaz előtagot, tehát rögtön a pont karakterrel kezdődik. Az alábbiak tehát mind érvényes UNIX állománynevek:
alma, alma.korte, alma.korte.gyumolcs, .alma, .alma.23
A fájlnevekben elvileg az ASCII kódkészlet alsó 128 karakterkészlete szabadon használható, mindazonáltal célszerű kerülni azokat a karaktereket, amelyek a shell számára speciális jelentést hordoznak, mert ezek beírása sok gondot okozhat. Tipikusan ezek közé a karakterek közé tartozik: *?@#$!& és a név elején álló '-' jel.. Célszerű tehát az angol ábécé alfanumerikus karaktereire, valamint az aláhúzás és mínusz karakterre korlátozni választásunkat.
Nem szabad azonban megfeledkeznünk arról, hogy a UNIX parancsértelmezők esetérzékenyek (case sensitive), azaz különbséget tesznek a nagy- és kisbetűk között. UNIX alatt tehát igenis nem azonos a valami, Valami és a VALAMI fájl!
Azokat a fájlokat, amelyeknek a neve a pont karakterrel kezdődik, a UNIX kicsit másképpen kezeli, mint a többit. E fájlok az úgynevezett rejtett fájlok (hidden file), s a katalógusok listázásánál ezek neve nem jelenik meg, csak explicit kérésre. Ennek az az oka, hogy a rejtett fájlok általában adminisztrációs és konfigurációs információkat tartalmaznak, melyek egy-egy felhasználó kiindulási katalógusában kell hogy elhelyezkedjenek, ugyanakkor nem célszerű, ha ezek a felhasználó saját anyagaival keverednek. (Ilyen fájlok például a .login, .cshrc, .profile, .logout, amelyek a felhasználó bejelentkezési környezetét állítják be, vagy a .mailrc, .exrc, stb, amelyek egy-egy program indulási konfigurálását végzik.) Az ls parancs például alapértelmezés szerint nem jeleníti meg a pont karakterrel kezdődő nevű rejtett fájlokat. Ha ezekre is kíváncsiak vagyunk, az erre vonatkozó információt a -a opcióval "csalhatjuk elő":
$ ls -al
total 370
drwxr-xr-x 2 demo users 1024 Aug 23 20:29 .
drwxr-xr-x 43 root sys 1024 Aug 17 09:40 ..
-rw-r--r-- 1 demo users 818 Aug 13 1992 .cshrc
-rw-r--r-- 1 demo users 347 Aug 13 1992 .exrc
-rw-r--r-- 1 demo users 377 Aug 13 1992 .login
-rw-r--r-- 1 demo users 382 Aug 13 1992 .profile
-rw------- 1 demo guest 1370 Aug 23 20:29 .sh_history
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 19 Aug 23 20:23 text
$
Katalógusok létrehozása: a mkdir parancs
Új katalógusokat a mkdir (make directory) paranccsal hozhatunk létre. Egyszerre több katalógusnevet is megadhatunk, a rendszer mindegyiket létrehozza. Ha a létrehozandó katalógus egy olyan katalógus alatt helyezkedne el, amely maga sem létezik, akkor a katalógus létrehozása sikertelen lesz. Ebben az esetben a -p opcióval érdemes kiadni a mkdir parancsot; ennek hatására a az összes szükséges szülő katalógust létrehozza a rendszer.
$ mkdir newdir/new1dir
mkdir: cannot access newdir: No such file or directory
$ mkdir -p newdir/new1dir
$ ls -laR newdir
total 6
drwxrwxrwx 3 demo guest 1024 Aug 23 20:41 .
drwxr-xr-x 3 demo users 1024 Aug 23 20:41 ..
drwxrwxrwx 2 demo guest 24 Aug 23 20:41 new1dir
newdir/new1dir:
total 4
drwxrwxrwx 2 demo guest 24 Aug 23 20:41 .
drwxrwxrwx 3 demo guest 1024 Aug 23 20:41 ..
$
Katalógusok törlése: az rmdir parancs
Már létező katalógust az rmdir (remove directory) paranccsal törölhetünk. (Most is megadhatunk több paramétert.) Fontos megjegyezni, hogy e paranccsal csak üres katalógust törölhetünk, ha a katalógusban fájlok vannak, a UNIX nem hagyja a katalógus törlését, előbb törölni kell a fájlokat. (Másik megoldás az rm -r parancs használata, lásd később.)