Verziószám: 1.1
Ebben a leckében a következo parancsokról lesz szó: chmod, file, ln, du
Az elso leckén való átvergodés után mindenki vérbeli Unix buherátornak képzelheti magát, de sajnos ez nem így van. A Unix fontos tulajdonsága, hogy többfelhasználós (multiuser), tehát biztosítania kell, hogy a felhasználók egymás fájljaihoz ne nyúlhassanak hozzá. Ennek elérése érdekében találták ki a Unix alkotói a fájlelérési jogokat (file permissions). Ennek az a lényege, hogy a tulajdonos (user vagy owner) kontrollálja azt, hogy ki férhet hozzá az általa a gépen elhelyezett fájlokhoz, könyvtárakhoz.
A Unix lehetoséget biztosít arra is, hogy felhasználói csoportok tagjai fájlokat megosszanak egymás között, és a közös fájlok lehetnek a csoport (és nem egyetlen felhasználó) tulajdonában.
Három féle fájlelérési jog létezik: olvasási (read), írási (write) és futtatási (execute).
Ezeket a jogokat három osztályba osztva adhatjuk meg: magunkra (user, owner), a csoportunkra (group) és mindenki másra (world, others) nézve.
Itt az ideje, hogy ezt konkrétan is lássuk: listázzuk ki a könyvtárunkat (ls parancs; a "-l" és a "-g" kapcsolókkal, így kilistázzuk a fájlelérési engedélyeket és a felhasználó csoportját is):
woland> ls -lg -rw-r--r-- 1 csaky student 6242 Aug 28 1992 applied.rtf woland>
Megjegyzés: Egyes Unix változatoknál (System V alapúak) elegendo csak a -l kapcsoló használata.
A legelso mezo mutatja a fájlelérési jogokat. (Mezokön egymástól szóközökkel elválasztott karaktersorozatokat értünk.) A harmadik a fájl tulajdonosát, a negyedik pedig azt, hogy a felhasználó milyen csoportba tartozik. Az utolsó mezo pedig a fájlnév.
Tehát a fájl tulajdonosa egy csaky nevu felhasználó, aki a student csoportba tartozik, a "-rw-r--r--" pedig a jogokat jelenti a tulajdonos, a csoport, végül pedig mindenki más számára.
Az elso karakter (”"-”") a fájl típusát jelöli. A "-" azt jelenti, hogy ez egy "sima”" fájl (nem könyvtár, stb.). A következo három karakter ”"rw-”" jelentése, hogy a tulajdonos (jelen esetben csaky) olvashatja és írhatja a fájlt, de nem futtathatja. Ez így van jól, mivel ez a fájl nem program, így nincs is nagyon értelme futtatni.
A következo három karakter, "r--", a csoportra vonatkozó jogokat definiálja. E szerint a student csoportba tartozó felhasználók olvashatják a fájlt, amint ezt a kis ”"r”" betu mutatja.
Az utolsó három karakter ”"r--”" jelentése pedig az, hogy az elobbiekben felsoroltakon (owner, group) kívül esok is olvashatják a fájlt.
Fontos itt megjegyezni, hogy az egyes fájlelérési jogok függnek annak a könyvtárnak az elérési jogától is, amelyben megtalálhatóak. Például, még ha egy fájl elérési joga "-rwxrwxrwx" (tehát mindenki mindent csinálhat vele), mások nem férhetnek hozzá, ha a könyvtár amiben van, tiltja az olvasási és futtatási jogokat. Tehát a legegyszerubb módja annak, hogy fájljainkat mások számára hozzáférhetetlenné tegyük az, hogy a munkakönyvtárunk hozzáférési jogait ”"-rwx------”"-ra állítjuk: így senkinek sem lesz hozzáférése se a munkakönyvtárunkhoz, se pedig ahhoz ami benne van.
Az elérési jogok megváltoztatása a chmod paranccsal lehetséges a tulajdonos számára. Szintaxisa pedig:
chmod [augo][+-][rwx] fájlnév...
Lássuk, hogyan kell értelmezni egy ilyen szintaxis leírást! Az elso szó (chmod) nyilván a parancs neve. Utána következnek a kapcsolók (lásd: elso lecke!). A szintaxisban egyszerre felsorolják az összes lehetséges kapcsolót; a zárójelben lévo kapcsolók közül meg lehet adni egyszerre egyet vagy többet is. A fájlnév utáni három pont azt jelenti, hogy egy sorban több fájlnevet is megadhatunk, ilyenkor a Unix mindegyik megadott fájlra végrehajtja a parancsot.
Az [augo] kapcsolókkal írjuk elo, hogy kinek adjuk a jogot. Adhatunk jogokat a tulajdonosnak (u - user), a csoportnak (g - group), másoknak (o - others) vagy pedig mindenkinek egyszerre (a - all). A [+-] azt jelenti, hogy adhatunk (+) vagy elvehetünk (-) jogokat. Végül pedig, hogy olvasási (r - Read), írási (w - Write) vagy futtatási (eXecute) jogot adunk. Néhány példa:
chmod a+r applied.rtf - olvasási jog mindenki számára chmod +r applied.rtf - ugyanaz, mivel az alapértelmezés az ”"all”" chmod go-rwx applied.rtf - a tulajdonoson kívül senkinek semmi
Természetesen az igazi Unix buherátorok nem így változtatják meg az elérése jogokat, hanem egy szám megadásával. Például:
chmod 644 applied.rtf
Ennek a parancsnak a hatására az applied.rtf nevu fájl elérési joga ”"-rw-r--r--”"-ra változik.
Ez a megadási mód sem bonyolult: az olvasási jog száma 4, az írásé 2, a futtatásé pedig 1. Ha ezeket összeadjuk, akkor megkapjuk a számot, amit be kell írnunk. Természetesen ez csak egyetlen szám, a jogokat pedig a parancsnak ennek a változatában mind három osztály számára be kell állítanunk. Tehát ” "rw-”" a tulajdonosnak az 4+2 = 6, ”"r--”" a csoportnak az 4 és ” "r--”" mindenki másnak az 4; együtt 644.
Mint láthattuk, egy fájlra be lehet állítani a futtatási jogot is, de elofordulhat olyan eset, amikor nem tudjuk, hogy egy fájl program-e vagy sem. Ilyenkor segít a file parancs, ami megpróbálja megállapítani egy fájlról, hogy az milyen típusú (vájtfüluek számára általában a gép típusát is elárulja). Ezt úgy teszi, hogy a fájl elso párszáz karakterét beolvassa és az alapján a fájlt megpróbálja besorolni az általa ismert kategóriákba. Az én gépem (NeXT) például a következo általános kategóriákat ismeri: adat, ASCII szöveg, C nyelvu forráskód, FORTRAN forráskód, assembler forráskód, troff kimeneti fájl, shell script (ejtése: szkript), C-shell script, futtatható program.
Lássunk egy példát:
woland> file * d2u.c: c program text keybind.c: c program text life: Mach-O executable life.c: c program text life.dat: ascii text life1.dat: ascii text slice.c: c program text trans.c: c program text unarj: directory woland>
Ezen a könyvtáron látható, hogy egy programozó fájljait rejti, aki C-ben végzi munkáit. A life program, ami a life.c c-program fordítása, adatait valószínuleg a life.dat és a life1.dat fájlokból veszi, mivel ezek sima szöveget tartalmaznak.
Van olyan eset, amikor az ls -l parancs igencsak furcsa dolgot ír ki, például:
lrwxrwxrwx 1 root 18 Dec 14 02:27 LocalApps -> /HD/NextStuff/Apps/@
Ez az eddig számunkra teljesen ismeretlen dolog a link. A link arra jó, hogy egy fájlnak több neve legyen, esetenként külön könyvtárban. A fenti példában azt, hogy a fájl (esetünkben könyvtár) link, onnan tudható, hogy a nevében egy kis nyíl van és utána a hely, ahol a valódi fájl található. Tehát a LocalApps a /HD/NextStuff/Apps alteregója. Ezt a fajta linket szimbolikus (symbolic vagy soft) linknek nevezzük. (Ha az ls paranccsal nem hosszú listát kérünk, akkor csak a LocalApps nevet fogjuk látni).
A link másik fajtája a hard link, aminek bár funkciója ugyanaz, az operációs rendszer másképp kezeli. Ennél a fajtájú linknél nem lehet kideríteni (illetve nagyon nehezen) azt, hogy melyik fájlra mutat, és az eredeti fájl tulajdonosa lesz az új fájl tulajdonosa is.
Linkeket az ln paranccsal hozhatunk létre (a forrás- és célnév természetesen könyvtár is lehet):
ln [ -s ] forrásnév célnév
Az ln kapcsolók nélkül hard linket készít, ha pedig megadjuk az ”"-s”" kapcsolót, akkor szimbolikus linket.
Például:
Hard link készítése:
woland> ls -l egy -rw-r--r-- 1 csaky student 12 Aug 5 14:20 egy woland> ln egy ketto woland> ls -lg egy ketto -rw-r--r-- 2 csaky student 12 Aug 5 14:20 egy -rw-r--r-- 2 csaky student 12 Aug 5 14:21 ketto
(Most már ezt is eláruljuk: a második mezo jelenti a fájlra mutató linkek számát.)
Most az egy és a ketto ugyanaz a fájl - tehát, ha az egyiket módosítjuk a másik is módosul, mivel csak a név más, a fájl ugyanaz. Úgy is felfoghatjuk, hogy egy fájlnak egyszerre két neve is van.
Soft, avagy szimbolikus link készítése:
woland> ln -s egy ketto woland> ls -lg ketto lrwxrwxrwx 1 csaky student 12 Aug 5 14:25 ketto -> egy@
Vegyük észre, hogy a fájlelérési jogok kezdo "-" jele most l beture változott. Innen (is) látszik, hogy szimbolikus linkrol van szó.
A linkek törlése természetesen a szokásos fájltörlés paranccsal (rm) végezheto. Törlés szempontjából dönto különbség van a hard linkek és a soft linkek között. Ha letörlünk egy fájlt, amelyre link kapcsolatok mutattak, akkor a hard linkkel létrehozott új fájl továbbra is megmarad és tartalma megegyezik a letörölt fájléval. A soft linkkel létrehozott fájlnév ugyan megmarad, de ha olvasni próbálunk a fájlból, akkor hibaüzenetet kapunk.
Mire jók a linkek? Például szeretnénk, hogy ugyanaz a fájl egyszerre több helyen is látható legyen, de mégse kelljen belole annyi darab másolatot készíteni, ahány helyen szükség van rá. Egy egészen egyszeru alkalmazás: e tanfolyam szervezése során a jelentkezok e-mail címeit egy .addressbook nevu fájlban tartjuk. Ez a név (egy Unix buherátor számára) meglehetosen hosszú, de nem változtathatjuk meg, mert akkor nem találná meg a levelezoprogram. Mivel elég gyakran kell nézelodnünk ebben a fájlban, egy szimbolikus link segítségével létrehoztunk egy cim nevu linket; ezután valamennyi parancsban a cim nevet is használhatjuk a .addressbook helyett.
Nagyon hasznos dolog ha tudjuk, hogy mennyi a fájljaink által elfoglalt diszkterület. A Unixban természetesen mindenre van parancs, ez esetünkben a du.
Szintaxisa:
du [ -a ] [ -s ] könyvtárnév
Példa:
woland> du $HOME 10 /Users/student/csaky/.NeXT/services 2 /Users/student/csaky/.NeXT/Colors 1 /Users/student/csaky/.NeXT/.NextTrash .. .. .. 2 /Users/student/csaky/mail 6003 /Users/student/csaky/pin-ups 6798 /Users/student/csaky woland>
Az eredmény szerint csaky felhasználó elég sok helyet foglal: 6798 kilobájtot (a du kilobájtban adja az eredményt) azaz majdnem 7 megabájtot. Ennek nagyrészét azonban a pin-up alkönyvtárban található ízléses aktfotók teszik ki (ami nem feltétlenül része programozói munkájának).
Az ”"a”" kapcsolóval azt lehet beállítani, hogy a du minden fájlunkról adjon információt, ne csak a könyvtárakról. Az ”"s”" kapcsoló pedig arra való, hogy du csak egyetlen számot írjon ki, a teljes helyfoglalást.
woland> du -s $HOME 6798 woland>
A Unixban igencsak szerteágazó és kiterjedt könyvtárszerkezetet találunk. Van néhány könyvtár, amelyet hagyományosan ugyanúgy hívnak minden Unix változatban, és a bennük található programok és adatfájlok is ugyanahhoz a témához kapcsolódnak. Például:
Ha már van valamilyen fájlunk -remélhetoleg igen, hiszen az elozo leckébol tudjuk, hogy hogyan kell csinálni egyet- elkezdhetjük a munkát. Vigyázat! A feladatokban több ízben is szerepel a fájl törlése, ezért keressünk valami értéktelen fájlt gyakorlatozásaink céljára!
************************************************************************* *= =* *= SZERZOI JOGOK =* *= =* *= Ez a dokumentum a Unix operacios rendszer es a szamitogepes =* *= halozatok elterjedeset kivanja elosegiteni, ezert dijmentesen =* *= terjesztheto. Nem szabad azonban a terjesztes soran a szoveget =* *= megvaltoztatni, barmilyen modon megcsonkitani es a szerzoi =* *= jogokra vonatkozo megjegyzest eltavolitani! Sem a dokumentum, =* *= sem annak barmely resze nem hasznalhato fel segedanyagkent vagy =* *= tankonyvkent profitorientalt intezmenyekben vagy tanfolyamokon, =* *= a szerzok elozetes irasbeli engedelye nelkul! =* *= =* *= (C) Csaky Istvan es Mork Peter Miskolc, 1994. januar 19 =* *= =* *************************************************************************