Harczs Tamás - 1 - Linux-s ábrák és fnts ismeretek: Kitüntetett felhasználó: rt, UID= 0, minden felhasználó adat-hzzáférési jgsultságával rendelkezik, user-ek jelszavait ő sem tudja lvasni, legfeljebb törölni Segítségkérés egyes prgramkról: help és man, pl. ls help vagy man ls, legalább az egyik minden prgramra létezik! A Linux fájlrendszere: A múlt órán megismert parancsk áttekintése: ls [list], cd [change directry], pwd [print wrking dir.], mkdir [make dir.], rmdir [remve dir.], tuch [create file], cat [cncatenate, list r edit files], rm [remve], cp [cpy], mv [mve]. A mai órán a fájlrendszerrel kapcslatsan megismerendő parancsk:
Harczs Tamás - 2 - ln [link], chmd [change permissins], chwn [change wner], chgrp [change grup]. A lánclás: ln: A UNIX fájlrendszerének egyik jellemző sajátssága a lánclás (linkelés) fgalma, ami a DOS és más egyfelhasználós perációs rendszerek alatt nem található meg. E mechanizmus arra szlgál, hgy egy adtt állmányt több néven is el lehessen érni az állmányrendszerben. Ha például van egy állmányunk text néven, akkr a linkelés segítségével elérhetjük, hgy mndjuk szveg néven is hivatkzhassunk rá. Pl. cd ; cat >text ; ln text szveg ; ls la Ha ls la paranccsal kilistázzuk a könyvtárunkat, láthatjuk a másdik szlpban a link cunt (lánclási szám) szlpt. Ez mutatja, hgy egy fizikai állmányra hány néven hivatkzunk a fájlrendszerben. Ez a fajta lánclás egyrészt helyet takarít meg, másrészt a (gyakrlatlan) felhasználó számára teljesen láthatatlan. Ezen lánclás az ún. hard link, mert közvetlenül az adtt fájl inde-tábla bejegyzésére mutat a fájlrendszerben. (Minden egyes fájlhz ill. könyvtárhz tartzik egy egyedi számaznsító, ez az inde [index nde, listázása: ls i]. A partíció elején található az ún. inde-tábla, ami megmndja, hgy hányas inde-ú fájl a merevlemezen fizikailag hl található, illetve, hgy milyen jgk és egyéb attribútumk érvényesek rá.) A hard link csak egy fájlrendszeren belül működik; nem linkelhetünk be például flppy-ról egy fájlt. Létezik még a sft link, avagy a szimblikus lánclás is. Lényege, hgy a szimblikus link nem a fájl inde-tábla bejegyzésére mutat, hanem egy lyan különleges fájlra, ami a lánclt fájl nevét tartalmazza. Szimblikus linket szintén az ln paranccsal hzunk létre, de a -s pciót is meg kell adni: Pl. cd ; ln s /etc/hsts ; ls la A láncszám ebben az esetben nem váltztt (az csak a hard link esetén nő), a fájltípusnál egy 'l' betű szerepel, jelezvén, hgy szimblikus linkről van szó, s a fájlnévnél a '->' karakterek jelzik, hgy melyik fájlhz van lánclva az állmány. Mire jó a szimblikus link? Legfntsabb előnye az, hgy lehetővé teszi különböző fájlrendszerek közti lánclást. Ennek megértéséhez néhány szóval meg kell említeni a UNIX fájlrendszer egy érdekes tulajdnságát, mégpedig a muntlhatóság fgalmát. A UNIX fájlrendszere, ahgy azt a felhasználó szerves egésznek látja, nem feltétlenül egységes fizikai szinten is. Ha például több merevlemez van a gépben, ezeken külön-külön UNIX fájlrendszerek vannak installálva, hasnlóképpen, egy CD-n, vagy egy flppy diszken is. Muntlásnak hívják azt a tevékenységet, amikr egy ilyen különálló fájlrendszert becsatlunk egy már meglévőhöz. Aznban minden egyes önállóan becsatlható fájlrendszerben független a számzás (az inde-k mindenhl 2-től kezdődnek [/]). Tehát az inde érték önmagában nem nyújt elégséges infrmációt arra nézve, hgy a keresett fájl a teljes állmányrendszerben hl található. Ezért ha fájlrendszerek közti lánclást próbáltunk meg, az alábbi, vagy hasnló értelmű hibaüzenetet kapunk: ln: different file system. A fenti prblémát kikerülhetjük a szimblikus lánclással, mert a szimblikus linkben szereplő név akárhva, más állmányrendszerbe, nem létező, vagy pillanatnyilag el nem érhető helyre is mutathat. A Windws-ban egyébként csak ilyen fajta (sft link-hez hasnló) lánclás létezik (pl. a parancsiknk az asztaln). Hzzáférési jgk: Láttuk már, hgy a UNIX a belépő felhasználókat a bejelentkezési név alapján ismeri fel. Ezen kívül még két aznsítót is rendel a UNIX az egyes felhasználókhz, a felhasználói aznsítót (user id, uid) és a csprtaznsítót (grup id, gid). Mindkét aznsító egy egész szám. Amikr valamilyen módn hzzá szeretnénk férni egy fájlhz vagy könyvtárhz, a rendszer aszerint srl be minket, hgy milyen tulajdnsi visznyban vagyunk az adtt fájllal: lehetünk tulajdnsa (azns uid), lehetünk csprttagk (azns gid), vagy "egyéb". A fájllal kapcslats tevékenységek szempntjából hárm fő csprt van: az állmány lvasása, írása, illetve végrehajtása (könyvtár esetében keresése). A fájlművelet előtt a UNIX megnézi, hgy melyik tulajdnsi kategóriába esünk, s utána azt, hgy ebben a kategóriában engedélyezett-e vagy sem a végrehajtani kívánt művelet. A hzzáférési jgsultságkat legkönnyebben így vizsgálhatjuk meg: cd ; ls la
Harczs Tamás - 3 - A megjelenített lista balldali szlpa tartalmazza a hzzáférési jgsultságkat. Az szlp legszélső mezője a fájltípust kódlja, az alábbiak szerint: [-] közönséges fájl, [d] könyvtár, [p] speciális cső (pipe), [l] szimblikus link [c] karakteres készülékmeghajtó (device driver), [b] blkks meghajtó. A következő kilenc karakter tartalmazza, hármszr hármas bntásban, a hzzáférési jgsultságkat. Ha egy művelet engedélyezett, a neki megfelelő betű látszik a listán, ha nem, a '-' karakter jelzi a tiltást. Az 'r' az lvasás (read), a 'w' az írás (write), az 'x' pedig a végrehajtás (execute) jele. Az első hármas csprt a tulajdns, a másdik a csprt, végül a harmadik a többiek jgsultságait mutatja. Könyvtáraknál az lvasás azt jelenti, hgy láthatjuk a benne lévő bejegyzéseket; az írási jg jelentése, hgy bejegyzéseket tudunk létrehzni, módsítani, vagy törölni a könyvtárban, illetve törölhetjük/létrehzhatjuk magát a könyvtárat; és a végrehajtást pedig ez esetben keresésnek kell értelmezni - egy könyvtár kereshető, ha a shell egy végrehajtható fájlt megkereshet és elindíthat az adtt könyvtár. A hzzáférési jgsultságk a chmd paranccsal állíthatóak. E parancsnak két használati módja van, az új jgsultságkat mind ktálisan, mind szimblikus módn be lehet állítani. Mi mst az ktális megadást fgjuk megvizsgálni. A beállítandó jgkat ktális szám frmájában kell megadni, az alábbiak szerint: az lvasás értéke 4, az írásé 2, a végrehajtásé 1, ezeket az értékeket össze kell adni, és így tulajdnsi kategóriánként képződik hárm ktális számjegy, ezeket kell beírni. Ha például azt akarjuk, hgy a file1 fájlunkat a tulajdns tudja lvasni, írni, végrehajtani, a csprttagk végrehajtani és lvasni, a többiek pedig csak lvasni, akkr a jgsultságk kódlása 4+2+1, 4+1, 4, azaz 754 lesz. Pl. cd ; tuch file1 ; chmd 754 file1 ; ls la Tulajdns- és csprtváltás: lehetőségünk van arra, hgy az általunk birtklt állmány tulajdnsát és csprtját megváltztassuk. Ez a chwn, illetve a chgrp paranccsal történik. E két parancs használatakr egyet ne felejtsünk: ha egy állmány tulajdnsi jgait átadtuk, akkr a tvábbiakban azt mi nem vehetjük vissza, csak az új tulajdns dönthet így! Reguláris kifejezések (Regular expressins - regexp): A Linux szép számú adatmanipulációs eszközt nyújt a felhasználónak az editrkn kívül is. Az eszközök közül nagyn sk használ mintaillesztést. Vannak lyan parancsk, ahl a felhasználó adja meg a keresendő mintát, ilyen a grep parancs, máskban rejtve dlgzik a mintakereső algritmus. Reguláris kifejezések használatakr egy mintát adunk meg (ez a reguláris kifejezés), s azt vizsgáljuk, hgy a feldlgzandó adatk (az esetek túlnymó részében szöveges fájlk, tehát karakterlánck) melyik része illeszkedik a megadtt mintára. A reguláris kifejezések karakterekből állnak, ezek közül néhány speciális jelentést hrdz, ezeket metakaraktereknek hívjuk. A legismertebb metakarakter a csillag [ * ], jelentése: bármely karakterből bármennyi (0 is), fnts még a kérdőjel [?], melynek jelentése: bármely karakter (tehát semmit nem jelent!) a metakarakterek és működésük szemléltetésére legjbb eszköz az ech és az ls parancs, pl.: cd /etc ; ech * [a /etc/ összes fájljának listázása] cd /etc ; ech [abc]* [a,b vagy c-vel kezdődő nevű fájlk listázása] cd /etc ; ech [ab]?? [a vagy b-vel kezdődő, 3 betű hsszú nevű fájlk listázása] cd /etc ; ech [a-fk-z]?m [a,b,c,d,e,f,k,l,m,n,,p,q,r,s,t,u,v,w,x,y vagy z-vel kezdődő, 3 betű hsszú, m betűre végződő nevű fájlk listázása] cd /etc ; ech [a-cu-z]*m [a,b,c,u,v,w,x,y vagy z-vel kezdődő, m betűre végződő nevű fájlk listázása] cd /etc ; ech [t-c]* [HELYTELEN! Alfabetikus srrendben kell lenniük!] cd /etc ; ech [!ab]* [nem a-val és nem b-vel kezdődő nevű fájlk listázása] cd /etc ; ech *[!a-u] [lyan fájlk, melyek nem [a-u]-ra végződnek] Perl-ben használats teljes regexp tárház: http://peter.verhas.cm/perlh/rege.html
Harczs Tamás - 4 - Átirányításk és csővezetékek: Láttuk, hgy a prgramk túlnymó többsége a billentyűzetről várja a bemeneti adatkat (input), és a képernyőre küldi az eredményeket (utputt). E két perifériát, azaz a billentyűzetet és a képernyőt a UNIX standard be- és kimeneti csatrnának nevezi. Pntsabban fgalmazva, a UNIX hárm standard be- és kimeneti csatrnát definiál, a standard bemenetet (stdin, 0); a standard kimenetet (stdut, 1) és a standard hibacsatrnát (stderr, 2). A standard bemenet alapértelmezés szerint a billentyűzet, a kimenet és a hibacsatrna pedig a képernyő. Az utóbbi kettő szétválasztásának alapesetben nincs értelme, hiszen mind a futó prgramk eredményét, mind az esetleges hibaüzeneteket látni szeretnénk. Nyilvánvaló, hgy nem skra megyünk lyan prgramkkal, amelyek csak a billentyűzetről tudnak adatkat fgadni, és csak a képernyőre tudnak kiírni; e gndn segít az: átirányítás (redirectin). Ennek lényege az, hgy tetszőleges prgramt utasíthatunk arra, hgy bemenetét ne a billentyűzetről várja, illetve eredményeit ne a képernyőre írja. E mechanizmusnak a UNIX alatt kitüntetett jelentősége van: gyakrlatilag minden, a standard utputra író prgram kimenete átirányítható egy tetszőleges állmányba, s hasnlóképp, bármelyik prgram, amelyik a standard inputról lvas, tetszőleges állmányból veheti inputját. A bemenet átirányításának jele a '<' karakter, a kimeneté a '>' karakter. Például az alábbi parancs a könyvtár tartalmát nem a képernyőre listázza ki, hanem a file nevű állmányba teszi: ls la >file ;cat file [könyvtárlista a file nevű fájlba + megjelenítés] wh >temp ; cat temp [ki van bejelentkezve bekerül a temp fájlba] rm temp ; wh >temp ; srt <temp >tempabc ; cat tempabc csővezeték (pipeline). A fenti utlsó példában az egyik prgram kimenetét használta fel a másik prgram bemenetként, egy ideiglenes állmány közbeiktatásával. Ennek és az ehhez hasnló feladatknak a megldására szlgál a csővezeték (pipe), amely annakidején a UNIX egyik alapvető újítása vlt. A pipe, melynek jele a ' ' karakter, az egyik prgram kimenetét a másik prgram bemenetével köti össze. Az előző példaprgram tehát így írható rövidebben: wh srt [ki van bejelentkezve? Alfabetikus listában.] wh grep rt wc l [hányszr van bejelentkezve a rt?] Flyamatk (előtér- és háttérflyamatk, démnk és jbk): Prgramk és flyamatk: A UNIX, mint multitasking rendszer, képes arra, hgy egyszerre több feladat futhassn a gépen. Ennek kapcsán két igen fnts fgalm merül fel, amelyek szrsan összefüggenek ugyan, de egymással nem helyettesíthetőek be: a prgram és a flyamat (prcess). A prgram egy futtatható (akár gépi kódt tartalmazó bináris, akár a shell által értelmezhető parancskból álló) fájl; valahányszr egy prgramt elindítunk, egy új flyamat jön létre. Némileg leegyszerűsítve, a flyamat egy prgramnak egy futó példánya, a saját külön adatterületével. Lehetséges tehát, hgy ugyanazt a prgramt egyszerre többen is futtassák a rendszerben - ilyenkr ugyanabból az egy prgramfájlból annyi darab önálló, egymástól teljesen független flyamat jön létre, ahányan elindíttták a prgramt. Háttérflyamatk és démnk: A parancsk (pntsabban a parancsk elindításával életre keltett flyamatk) végrehajtása szekvenciálisan történik; ez annyit jelent, hgy ha a felhasználó elindít egy parancst, addig nem kapja vissza a parancs prmptt, s nem indíthat el újabb parancst, amíg az éppen futó be nem fejeződött. Ha aznban a felhasználó egy háttérflyamatt (backgrund prcess) indít el (&), rögtön visszakapja a parancsprmptt, s lehetősége van újabb parancs végrehajtására. Pl. grep valami ~/* >~/eredmeny & A fenti parancs végignézi a hme-unk összes fájlját valami után kutatva; az eredményt az eredmeny nevű fájlba teszi. A prgramt a shell a & jel miatt háttérflyamatként
Harczs Tamás - 5 - (backgrund prcess) indítja. A felhasználó számára ez abban jelentkezik, hgy rögtön visszakapja a prmptt, s a rendszer kiír egy számt. Ez a szám az adtt prcessz flyamataznsítója, az úgynevezett prcess-id (PID). Ezt az aznsítót a későbbiekben az adtt prcesszre való hivatkzáskban használhatjuk. E mechanizmus használata kiváltképp lyankr előnyös, ha egy hsszan futó flyamat futtatása mellett más tevékenységgel is szeretnénk fglalkzni. A háttérflyamatknak egy speciális válfaja a démn (daemn) flyamat. Ez egy lyan flyamat, amit rendszerint autmatikusan indít el a rendszer, s valamilyen felügyeleti szerepet ellátva állandóan fut a háttérben. Démn flyamatk gndskdnak például a nymtatási kérelmek besrlásáról és végrehajtásáról, a terminálvnalak figyeléséről, hgy van-e újnnan belépő felhasználó, de démnk felügyelik a memóriahasználatt éppúgy, mint a lkális hálózatn történő belépéseket. A rendszer "üresjáratában", amikr éppen nincs bejelentkezett felhasználó, általában több tucat ilyen démnflyamat fut, biztsítva a rendszer flyamats működését. A démnknak végrehajtásra átadtt nymtatást és egyéb kérelmeket jb-knak (feladatknak) nevezik, ezeket a démn sürgősségi és egyéb szempntk alapján srba rendezi (queue), és egyenként hajtja végre őket. Flyamatk lelövése: a kill parancs. A prcess-id leggyakribb alkalmazása az, amikr egy túl skáig futó, netán hibás, vagy nem az általunk várt eredményt adó háttérprcesszt le akarunk állítani. Nem háttérben futó prgramt a CTRL-C billentyűvel lehet lelőni! Lelőhetetlen prgramk futását a CTRL-Z-vel bármikr félbeszakíthatjuk. Ilyenkr a prgram nem kerül ki a memóriából, csupán a futása függesztődik fel! Erre figyelni kell! Pl. man wh ; CTRL+Z [ezzel lett egy leállíttt, ps-sel listázható flyamatunk] A nemkívánats flyamatk leállítására szlgál a kill parancs. Paraméterként a "lelövendő" flyamat PIDjét kell megadni. Már ha tudjuk. Szükségtelen mndani, hgy a felhasználó - hacsak nem rendelkezik superuser jgsítványkkal - csakis a saját maga által elindíttt flyamatkat lőheti le. Flyamatk (és PID-jeik) kilistázása: a ps parancs. A ps alapértelmezés szerint az érdeklődő felhasználó futó flyamatainak legfntsabb adatait listázza ki, köztük a flyamataznsítót is; ennek birtkában már célzttan hívható meg a kill. Pl. ps [keressük meg a man-hz tartzó PID-et] (vagy ps grep man), aztán kill -9 _kill_pidje_ [-9 = KILL szignál, alapból TERM szignált küld] ki lehet lőni a saját bash-unkat is csúnya kilépés