Második lecke

Verziószám: 1.1

Ebben a leckében a következő parancsokról lesz szó: chmod, file, ln, du

Mi van még a fájlrendszerben?

Az első leckén való átvergődé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 lehetősé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.

Hogy is néz ez ki a valóságban?

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) elegendő csak a -l kapcsoló használata.

A legelső mező mutatja a fájlelérési jogokat. (Mezőkö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ó mező pedig a fájlnév.

Tehát a fájl tulajdonosa egy csaky nevű 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 első 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övetkező 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övetkező 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”" betű mutatja.

Az utolsó három karakter ”"r--”" jelentése pedig az, hogy az előbbiekben felsoroltakon (owner, group) kívül esők 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 legegyszerűbb 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

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 első szó (chmod) nyilván a parancs neve. Utána következnek a kapcsolók (lásd: első lecke!). A szintaxisban egyszerre felsorolják az összes lehetséges kapcsolót; a zárójelben lévő 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 elő, 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 nevű 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.

További fontos parancsok

Mint láthattuk, egy fájlra be lehet állítani a futtatási jogot is, de előfordulhat 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ülűek számára általában a gép típusát is elárulja). Ezt úgy teszi, hogy a fájl első 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övetkező általános kategóriákat* ismeri: adat, ASCII szöveg, C nyelvű 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ínűleg a life.dat és a life1.dat fájlokból veszi, mivel ezek sima szöveget tartalmaznak.

Linkek

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 mező 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 kezdő "-" jele most l betűre változott. Innen (is) látszik, hogy szimbolikus linkről van szó.

A linkek törlése természetesen a szokásos fájltörlés paranccsal (rm) végezhető. Törlés szempontjából döntő 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 belőle annyi darab másolatot készíteni, ahány helyen szükség van rá. Egy egészen egyszerű alkalmazás: e tanfolyam szervezése során a jelentkezők e-mail címeit egy .addressbook nevű fájlban tartjuk. Ez a név (egy Unix buherátor számára) meglehetősen hosszú, de nem változtathatjuk meg, mert akkor nem találná meg a levelezőprogram. Mivel elég gyakran kell nézelődnünk ebben a fájlban, egy szimbolikus link segítségével létrehoztunk egy cim nevű linket; ezután valamennyi parancsban a cim nevet is használhatjuk a .addressbook helyett.

Mennyi helyet foglalunk a lemezen?

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>  

Melyik könyvtárban mi van?

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:
/
A könyvtárstruktúra gyökere (root directory), minden más könyvtár innen nyílik, illetve itt található a vmunix (vagy unix) nevű futtatható program, ami nem más, mint az operációs rendszer magja (kernel).

/bin
Bináris programok könyvtára, itt vannak a legfontosabb végrehajtható programok (bináris formában).

/dev
Itt vannak az eszközfájlok (terminálok, diszkek, CD ROM olvasók, stb.)

/etc
Egyéb rendszerfájlok, rendszerint a rendszeradminisztrációs fájlok. A legtöbb esetben itt van a jelszavakat tároló fájl is.

/lib
Fontosabb függvénykönyvtárak - ezeket csak a programozók használják.

/tmp
Átmeneti tárolásra szolgáló alkönyvtár. Ezt az alkönyvtárat rendszeres időközönként törlik, ezért soha ne tároljunk itt semmi értékeset!

/usr
A felhasználói fájlrendszer: munkakönyvtárak, stb.

/usr/adm
Rendszeradminisztrációs fájlok.

/usr/bin
A felhasználók által használatos futtatható bináris fájlok.

/usr/man
Az online dokumentáció, amelyet a man paranccsal tudunk megjeleníteni.

/usr/local
Egyéb nyilvános dolgok (hírek, stb.).

/usr/spool
Kommunikációs programok munkakönyvtárai.

/usr/spool/mail
Itt van valamennyi felhasználó postaládája (mailbox). Elolvasni természetesen nem tudjuk más leveleit, de azt megnézhetjük, hogy valakinek van-e levél a postaládájában.

Feladatok

Ha már van valamilyen fájlunk -remélhetőleg igen, hiszen az előző leckéből 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!
  1. Állítsuk be a munkakönyvtárunk hozzáférésének jogát egy biztonságos értékre; (rwxr-xr-x) az ajánlott.

  2. Változtassuk meg a kiszemelt fájlunk hozzáférési jogát ” "rwxrwxrwx”"-re, profibbak használják a jogok számmal történő megadását. A beállított jogokat ellenőrizzük le (ls parancs)!

  3. Most változtassuk meg a jogokat úgy, hogy csak mi tudjuk olvasni, írni és futtatni a fájlt! Ellenőrizzük le a beállítást!

  4. Most változtassuk meg a jogokat "-r--------"-ra, azaz olyanra, hogy még mi se tudjuk írni! Most próbáljuk meg letörölni a fájlt! Sikerül-e vagy sem? Ha igen miért, ha nem miért nem?

  5. Nézzük meg a fájl típusát!

  6. Nézzük meg a /bin/sh fájl típusát.

  7. Hozzunk létre egy egyszerű szövegfájlt az első leckében leírt módon. Az így elkészített fájlra csináljunk egy hard linket "kemeny" néven, és egy soft linket "puha" néven! Nézzük meg (a cat vagy a more segítségével), hogy csakugyan azonos-e a tartalmuk!

  8. Csináljuk egy teljes listát, és a listából állapítsuk meg, hogy a "kemeny" és a "puha" fájlok közül melyik készült hard linkkel és melyik soft linkkel!

  9. Töröljük most le azt a fájlt, amelyikről a linket készítettük!

  10. Nézzük meg, hogy léteznek-e még a "kemeny" és a "puha" nevű fájlok! Ha igen, próbáljuk meg kilistázni tartalmukat a cat paranccsal! Mi történik és miért?

  11. Nézzük meg, hogy eddigi munkánkkal mennyi helyet foglalunk!


*************************************************************************
*=                                                                     =*
*=                           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   =*
*=                                                                     =*
*************************************************************************