Hirdetés


Terminál és Unix alapok

A unix egyik legnagyobb erőssége, hogy kezdetektől fogva többfelhasználós rendszerként fejlesztették, így lehetőség van arra, hogy ugyanazt a gépet többen is használhassák úgy, hogy közben saját adataik védve legyenek, ugyanakkor meghatározott adatokat, programokat többen is használhassanak, megoszthassanak egymással.

Azonosítsd magad!

Biztonsági szempontból még akkor is nagyon hasznos lehet legalább két felhasználót létrehozni a gépünkön, ha azt csak egyedül használjuk. Amikor először telepítjük a Mac OS-t, akkor létrehozunk egy felhasználót, aki adminisztrátori jogosultságokkal is rendelkezik. Ha létrehozunk egy másik felhasználót is akinek nem adunk admin jogokat, és azt használjuk mindennapi munkánk során, akkor nem érhet olyan meglepetés minket, hogy pl. egy képet szeretnénk megnyitni, ami valójában csak egy képnek álcázott program, és kattintásunk eredményeképpen automatikusan kitöröl egy sor rendszerállományt, vagy összekavarja azok hozzáférési jogosultságát.

Megjegyzés: meglévő felhasználónkról is levehetjük az admin jogosultságot akkor is ha csak ez az egy felhasználó van a gépen.

Ehhez csak azt kell tenni, hogy létre kell hozni egy másikat, annak bejelölni az admin jogosultságot (System Preferences > Accounts > Allow user to administer this computer) és ezután már megengedi a rendszer, hogy a mindennapok során használt felhasználónkról levegyük azt.

Ez a beállítás csupán olyan "kellemetlenségekkel" jár, hogy programok telepítésekor, fájlok törlésekor, könyvtárak megnyitásakor gyakrabban kapjuk a címben szereplő felszólítást, tehát egy felhasználó (admin) nevet és jelszót kér a rendszer mielőtt az adott műveletet végrehajtaná. Ugyanakkor éppen ez jelenti a nagyobb biztonságot, hiszen van időnk és lehetőségünk eldönteni, hogy engedélyezzük-e az adott műveletet.

Kinek mit szabad és mit nem?

A hozzáférési jogosultságok azt határozzák meg, hogy a gépen levő állományokkal, programokkal ki mit csinálhat, illetve mit nem. Ezt a unix alapból széleskörűen szabályozza, de az Apple még rátett egy lapáttal, amikor bevezette az ACL (Access Control Lists) rendszert. Ez már inkább rendszer-adminisztrátorok számára érdekes és fontos terület, mi most nézzük meg kicsit részletesebben az alapokat.

Az előző részben ismerkedtünk az "ls" paranccsal, és láttuk, hogy az "l" opcióval megadva egy részletes listát kapunk a vizsgált könyvtár tartalmáról. Jó lenne megérteni ezen lista egyes részeinek a jelentését.

Kezdjük egy kis ismétléssel! Lépjünk be kedvenc "teszt" felhasználónk területére, hozzuk létre itt a jogosult nevű alkönyvtárt, abba belépve a minta nevű fájlt (aminek tartalma most lényegtelen) és listázzuk ki az újonnan létrehozott könyvtár tartalmát. Egy lehetséges megoldást mutat a következő ábra:

A lista eredménye pedig így néz ki:
-rw-r--r-- 1 teszt teszt 6 Jul 25 12:01 minta
Kezdjük a végéről: a jobb oldalon látható az új könyvtárban levő egyetlen fájl neve: "minta".

Előtte áll egy dátum, ami a minta fájl módosításának dátuma. Kezdetben természetesen ez a létrehozás dátuma, később viszont, ha módosítjuk a fájlt, akkor ez a dátum is meg fog változni. Ellenőrizzük például úgy, hogy hozzáfűzünk egy új szót: "echo mente >> minta" és listázzuk ki ismét a könyvtárt.

Érdemes megjegyezni, hogy a "touch" paranccsal is létre lehet hozni új (üres) fájlt. Ha a "-t" opcióval hívjuk meg, akkor pedig tetszés szerint módosíthatjuk a fenti módosítási dátumot! Például a "touch -t 200606011201 minta" parancs 2006. június 1. 12 óra 1 percre állítja a dátumot. Akit részletesebben is érdekel, javaslom a manuál fellapozását: "man touch".

A dátum előtt álló szám a fájl mérete bájtokban. Jelen példában éppen 6, de ez nyílván függ a fájl tartalmától.

A fájlméret előtt kétszer is látható a "teszt" szó. Nos ez nem azért van, mert a unix dadog, hanem ez két különböző dolgot jelöl. Az első a minta fájl tulajdonosát, a második pedig a csoportját mutatja meg. A tulajdonos az érthető, hiszen a "teszt" felhasználó területén tevékenykedünk, logikus, ha az itt létrehozott új állomány az ő tulajdonába kerül. A csoport már kicsit érdekesebb.

Egy nagyobb unix rendszeren lehetséges, hogy nagyon sok felhasználó van. Hasznos lehet, ha őket csoportokba tudjuk rendezni. Az egy csoportba tartozó felhasználók például láthatják a közös fájlok tartalmát, azok közül egyeseket bárki módosíthat és/vagy futtathat is a csoport tagjai közül. A csoportokba sorolást rendszer-adminisztrátori jogosultságokkal lehet elvégezni.

A felhasználó neve előtt is van egy szám, ez is megérdemel néhány gondolatot. Úgy hívják, hogy láncszám (link count). Kezdetben az értéke 1.

Adjuk ki most a következő parancsokat:
teszt: ln minta k-minta
teszt: ln -s minta l-minta

majd listázzuk ki a könyvtár tartalmát.

Látszólag most van két újabb fájl, és több apróság is megváltozott a listában. Ha a "cat" paranccsal kilistázzuk őket, azt tapasztaljuk, hogy mind a három fájlnak pontosan ugyanaz a tartalma! Az első parancs létrehozott egy úgynevezett linket (hard link) a "minta" fájlról. Ennek az az értelme, hogy a "minta" nevű fájl a "k-minta" névre is hallgat. (Természetesen a k-minta helyett bármilyen más nevet is adhattunk volna.) Ugyanaz a fájl tehát különböző nevek alatt is elérhető a unix-ban. Ha összehasonlítjuk a "minta" és a "k-minta" sorát a listában, láthatjuk, hogy csak a névben különböznek egymástól. A láncszám viszont megváltozott, 2-re növekedett. Ha egy újabb linket is létrehozunk hasonló módon a "minta" fájlra, akkor már 3-ra fog növekedni a láncszám és ezen az újabb néven is elérhetővé válik ugyanaz a fájl. Több előnye is van ennek a technikának. Az első cikkben említettem, hogy a unix-nak nagyon sok fajta ága van, és ezek mindegyike folyamatosan fejlődik. Előfordul az is, hogy átvesznek egymástól bizonyos megoldásokat.

Ennek lehet olyan következménye, hogy ugyanazzal a névvel kellene elnevezni egy újonnan bevezetett fájlt, mint ahogy a mi rendszerünkben korábban már egy másikat elneveztünk. Az ilyen névütközéseket fel lehet oldani a linkeléssel. Ezen kívül ügyes technikákkal jelentős helymegtakarítás is elérthető használatával.

A második link egy kicsit különbözik ettől, ezt a "-s" opcióval adtuk meg, és szimbolikus (vagy soft) linknek nevezik. Ez egy új fájlt hoz létre, ami azonban csak egy mutató fájl, megmutatja, hogy hol van az eredeti, amire szeretnénk hivatkozni. Ennek a mérete is kisebb, és a lista elején álló betűk is megváltoztak. A szimbolikus link sora egy "l" betűvel kezdődik a listában. A szimbolikus link később alakult ki a unix fejlődése során, és szélesebb körben, bonyolultabb fájlrendszerek esetében is használható.

A lényeg itt is az, hogy ugyanazt a fájlt többféleképpen is elérhetjük.

Ha például ellenállhatatlan indíttatást érzünk, hogy esténként lefekvés előtt a gépünkre telepített apache web server licencét a Terminálban olvasgassuk, akkor mindig egy ilyen hosszú parancsot kellene begépelni:
teszt: cat /Library/Documentation/Services/apache/LICENSE
Hoppsz! Itt két gond is van, nem csak a fájl elérési neve hosszú, hanem maga az állomány tartalma is hosszabb az eddig megszokottaknál, a "cat" parancs elegánsan a végére repít, az elejéhez meg görgetni kell csomót. Az elsőt egy pillanat alatt megoldhatjuk a szimbolikus link segítségével, az teszt: ln -s /Library/Documentation/Services/apache/LICENSE licence
a parancs végrehajtása után már csak egyszerűen a "cat licence" parancsot kell kiadnunk. Miután "belinkeltük" a fájlt az aktuális könyvtárba, ezért úgy tudunk vele dolgozni, mintha valójában itt is lenne.

A szimbolikus link egyik legfőbb előnye a hard linkkel szemben, hogy például ha behelyezünk egy DVD-t a meghajtónkba, akkor arról is belinkelhetünk fájlokat a saját könyvtárunkba, vagy ahová szeretnénk.

Ha a DVD-t kivesszük, akkor persze hibajelzést kapunk, ha egy onnan belinkelt fájlra hivatkozunk, de később ha visszatesszük, akkor már ismét működni fog! Megjegyzés: A szimbolikus link legjobban arra hasonlít, amikor a Grafikus felületen a "Make alias" paranccsal készítünk egy mutatót egy tetszőleges fájlra.

Most pedig nézzük a másik problémát! Szomorú lenne ha csak a cat paranccsal tudnánk megnézni egy állomány tartalmát a unix-ban. Nem is kell csalatkoznunk, jó pár megoldást találhatunk erre is.

Nézzünk a dolgok mélyére!

Ha hosszú állományokat szeretnénk olvasgatni, nagyon kellemes parancs a more:
teszt: more licence

Ez kiírja a fájl elejét, de csak annyi sort, amennyi éppen kifér az aktuális Terminál ablakban. Ha nagyobb ablakot nyitunk, akkor többet ír ki. Lapozni egyszerűen a szóköz billentyű nyomogatásával lehet. A bal alsó sarokban azt is láthatjuk, hogy az állomány hány százalékát néztük eddig meg.

Kicsit bajban vagyunk, ha nem emlékszünk pontosan, hogy mit olvastunk az előző oldalon, visszalapozni ugyanis nem tudunk vele, tehát ki kell lépni (q-billentyű, vagy ctrl+c – ezeket már jól ismerjük!) és kezdhetjük elölről.

Aki többre vágyik, ismerkedjen meg a "less" paranccsal! teszt: less licence Lapozni itt is a szóköz billentyűvel lehet előre, visszafelé pedig például a b billentyűvel (backward). A
teszt: less -? parancs egy mindig kéznél levő segítség.

Megmutatja, hogy milyen billentyű kombinációk segítségével, hogyan tudunk lépkedni, ugrálni, keresni a fájlban előre, hátra soronként, oldalanként, fél oldalanként, hogyan lehet a fájl elejére, végére ugrani és még sok minden mást. Fontos tulajdonsága, hogy nagy méretű fájlokat, például log-fájlokat is gyorsan és hatékonyan lehet nézegetni a segítségével. Nagyon hasznos kis program állományok nézegetésére.

Előfordul, hogy csak a fájl első, vagy utolsó néhány sorára vagyunk kíváncsiak. Erre van közvetlen megoldás is, a teszt: head -n 2 licence
teszt: tail -n 7 licence

parancsok rendre a licence fájl első kettő, illetve az utolsó 7 sorát listázzák csak ki.

És ha már itt tartunk, akkor ne feledkezzünk meg a wc (word ... count) programról sem! A "wc -c licence", "wc -w licence", "wc -l licence" parancsok rendre megmondják, hogy a licence fájlban hány karakter, mennyi szó és hány sor van. Lehet más fájlokkal is próbálkozni ...

Ezután a kis kitérő után térjünk vissza az "ls -l" lista értelmezéséhez. Most már csak a lista elején álló 10 karakter magyarázata maradt hátra. Az első karakter mutatja a fájltípust: általános fájl esetében egy kis vonalat találunk itt, könyvtár esetében d-betűt, a szimbolikus linket pedig egy l-betű jelöli. Ezek a legfontosabbak, ezekkel már találkoztunk is.

A következő 9 karaktert pedig 3-szor 3- as bontásban kell nézni: az első 3 karakter a tulajdonosra vonatkozik, a második 3-as a csoportra, a harmadik pedig a többiek hozzáférési jogosultságait mutatja. Három betű szerepelhet itt: az 'r', a 'w' és az 'x'.

A Read, Write és az eXecute szavakból, magyarul: olvasás, írás és végrehajtás. A következő konkrét példák megvilágítják ezen kódok jelentését. Ha az adott betű látható, akkor a jogosultság él, ha csak egy kis vonal helyettesíti, akkor tiltva van.

A minta fájl első 3-as csoportjában szerepel az r és a w betű, ez azt jelenti, hogy a minta fájl olvasható és írható a tulajdonosa (teszt nevű felhasználó) által. A másik két hármas csoportban csak egy-egy 'r' betű található, ez azt jelenti, hogy a teszt nevű csoport tagjai és mindenki más is csak olvashatja ezt a fájlt.

Adjuk ki most a
teszt: chmod u-r minta
parancsot. A chmod (change mode) parancs segítségével megváltoztathatjuk a jogosultságokat. Az 'u' betű a user (felhasználó) rövidítése, így a fenti parancs azt jelenti, hogy vegyük el a felhasználótól az olvasási jogot.

Most egy érdekes helyzet állt elő: a tulajdonos nem tudja olvasni a fájlt, tessék csak kipróbálni a "cat minta" parancsot! Az eredmény "Permission denied", azaz a jogosultság megtagadva. Ugyanakkor a többieknek van olvasási joga a fájlhoz, tehát ha egy másik Terminál ablakból, ahol nem vagyunk bejelentkezve a "teszt" felhasználóhoz, kiadjuk a "cat /Users/teszt/jogosult/minta" parancsot, akkor már el tudjuk olvasni annak a tartalmát. Megjegyzés: ehhez a "jogosult" könyvtár megfelelő beállítása is szükséges, hamarosan látni fogjuk!

Szeretnénk visszaadni a tulajdonosnak az olvasási jogosultságot? Egyszerű, a fenti parancsban csak egy plusz jelet kell írni:
teszt: chmod u+r minta
Ha az u-betű helyett 'g', illetve 'o' jelet írunk, akkor a csoport (group), illetve a többiek (other) beállításait tudjuk megváltoztatni.

Ha mindenkitől el szeretnénk venni az olvasási jogosultságot, akkor az 'a' betűt használhatjuk (all):
teszt: chmod a-r minta
Ekkor senki sem tudja olvasni a fájl tartalmát, mindaddig amíg vissza nem állítjuk az olvasási jogosultságot valamilyen formában.

A fájlra vonatkozó írás jogosultságokat ugyanígy tudjuk állítani. Ha elvesszük a tulajdonos írás jogosultságát, akkor nem tudja módosítani a fájl tartalmát. Próbáljuk ki:
teszt: chmod u-w minta
Vajon mi történik a "echo masik >> minta" parancs hatására? Bizony csak egy hiba üzenetet kapunk: nincs jogunk ezt megtenni.

Az egyik legjobban elterjedt, emberbarátibb unixos szövegszerkesztő program a "pico", vagy új nevén "nano". (A Tigris alatt mindkét néven elérhető.) Ha kiadjuk a
teszt: nano minta

Eléggé fapados, ahogy a fájlok tartalmát eddig változtatgattuk. Az kétségtelen, hogy a kimenet átirányítása egy nagyon hasznos művelet a unix-ban, de jó lenne már valami közvetlen módszert is látni fájlok tartalmának szerkesztésére, hiszen a unix messze földről híres a fájlok manipulálásában.
    A klasszikus file editor az un. "vi" (kimondva: viáj) program, amit sokan nem kedvelnek, mert nagyon nehézkes a használata. Azért érdemes róla tudni, hogy sokáig ez volt az editor program. Az igaz, hogy rengeteget kell tanulni ahhoz, hogy valaki hatékonyan és jól tudja használni, de aki megtanulta és nap, mint nap használja, az rá se néz más hasonló programokra. Rengeteget tud és kiválóan programozható.
    Mindez persze nem vigasztalja azokat, akik nem napi rendszerességgel használják a unix-ot. Nekik valóban értelmetlen ezzel bíbelődni. Aki mégis kíváncsi rá, annak jó hír, hogy most már van egy továbbfejlesztett változata is: "vim" (a "man vim" paranccsal érdemes kezdeni!).
parancsot, akkor az aktuális Terminál ablakunkat birtokba veszi a szövegszerkesztő program, kilistázza a kérdéses fájlt és nagyon egyszerűen javíthatjuk azt. A nyíl billentyűkkel mozoghatunk a szövegben fel, le, jobbra, balra, a delete billentyűvel törölhetünk a kurzortól balra, ha lenyomunk egy karakter billentyűt, akkor a megfelelő karakter megjelenik a kurzor helyén. Egyszóval éppen úgy működik, ahogy azt egy karakteres szövegszerkesztőtől elvárja az ember. A Terminál ablak alján állandóan láthatjuk a leggyakrabban használt billentyű parancsokat.

Például a ctrl+w-t lenyomva kereshetünk a szövegben: csak meg kell adni a keresendő karaktersorozatot, majd Enter és a kurzor máris ott villog a keresett rész első előfordulásának helyén. Ha ismét megnyomjuk a ctrl+w-t, majd az Enter-t, akkor a kurzor a következő találati helyen villog.

Amikor készen vagyunk a szükséges javításokkal, akkor a ctrl+x billentyűkombinációval léphetünk ki a nano programból. Ekkor a Terminál képernyő alján levő párbeszédre kell figyelni. Megkérdezi a program, hogy el akarjuk-e menteni a változtatásokat.

Lehetőség van itt visszakozni:
  • ha megnyomjuk az "n" gombot (No), akkor a program kilép és a fájl marad az eredeti állapotában, a változtatások elvesztek,
  • ha viszont szeretnénk elmenteni a módosításokat, akkor az "y" gombot (Yes) kell megnyomni.
Az utóbbi esetben felajánlja azt, hogy a változtatásokat a korábbi fájlnév alatt menti el, vagy meg is változtathatjuk azt, ha új néven szeretnénk menteni, megőrizve a régi állományt is.

Aki becsülettel követte a fenti sorokat, annak a mentés ugyanazon a néven nem fog sikerülni! Ugyanúgy, mint a fenti átirányításnál, ami felülírta volna a minta fájlt, most is csak egy hiba üzenetet kapunk, hogy ehhez bizony nincs jogosultságunk.

Nagy gond azért nincs, elmenthetjük más néven, vagy pedig nyithatunk egy másik Terminál ablakot, ahol visszaállítjuk az írás jogot ("chmod u+w minta") a fájlra, és azután már el tudjuk menteni a nano programon belül is az eredeti nevén!

Érdemes próbálkozni, gyakorolni, hamarosan használni is fogjuk új ismerősünket! Akinek a vim és a nano nem elég, javaslom a "terminal text editors" keresést a Google-ban, és kedvére lubickolhat a találati listában amíg megtalálja szíve választottját. Van miből válogatni bőven ...

Van még egy harmadik jogosultság, amit nem vizsgáltunk eddig. Ha az "x" betű látható a listában, akkor az azt jelenti, hogy a fájl végrehajtható, vagy úgyis mondhatjuk, hogy futtatható. Na de mi értelme van, hogy például a minta fájlt futtassuk. Semmi! Hiszen ez csak egy szöveges fájl. Hát akkor írjunk egy programot! Legyen a neve, mondjuk "udv" és ha lefuttatjuk, akkor írja ki a képernyőre, hogy: Most nagyon meleg van! Kezdjük a programozást úgy, hogy:
teszt: nano udv
A szövegszerkesztő segítségével gépeljük be pontosan a következő két sort:
#!/bin/sh
echo "Most nagyon meleg van!"

majd mentsük és adjunk neki futás jogot:
teszt: chmod u+x udv
Ha sikerült és kilistázzuk, akkor a megfelelő sorban ezt látjuk:
-rwxr--r-- 1 teszt teszt 40 Jul 25 12:02 udv
Látjuk, hogy megjelent az x-betű a tulajdonos jogait mutató első karakter-hármasban.

Hogyan lehet futtatni ezt a programot? Biztosan mindenki emlékszik rá, az előző részben már utaltam erre: egyszerűen a neve elé kell egy pontot és egy törtvonalat írni: teszt: ./udv
és persze Enter. Máris lefuttattuk első shell programunkat, vagy más néven shell script-et!

A "./" megmondja a shell programnak, hogy az aktuális könyvtárban keresse azt a programot, aminek a neve az "udv", tehát csupán meg kell mondani neki, hol van a futtatható program. Ezt megtehetjük kicsit hosszabban is, megadhatjuk a program abszolút elérési útvonalát:
teszt: /Users/teszt/jogosult/udv
Az eredmény most is ugyanaz lesz ha a sor végén lenyomjuk az Enter-t. Ezt a hosszabb útvonal megadást bárki megteheti a gépen. Például nyithatunk egy új Terminál ablakot, ahol nem vagyunk teszt felhasználóként bejelentkezve, és ott is beírhatjuk, hogy:
akarki: /Users/teszt/jogosult/udv
Ekkor a jól ismert hiba üzenet következik, nincs jogosultságunk a fenti program futtatásához! Semmi gond, a teszt felhasználós Terminálban adjuk ki "chmod a+x udv" parancsot. Most már működni fog a másik Terminálban is az udv program, hiszen mindenkinek megadtuk a futtatási jogot.

Megjegyzés: A chmod parancsban a jogosultságokat egy oktális számhármas segítségével is beállíthatjuk. Pl. a "chmod 644 minta" egyből visszaállítja a kezdeti beállításokat, akármit is ügyködtünk a chmod paranccsal.

Most már mindent tudunk!?

Nos aki azt gondolja, hogy most már mindent ért az nézze meg, hogy a "jogosult" könyvtár milyen jogosultságokkal rendelkezik! Lépjünk be a teszt felhasználó Home könyvtárába (cd ~) és listázzuk ki azt:
drwxr-xr-x 9 teszt teszt 306 Jul 25 12:03 jogosult
Odáig rendbe van, hogy d-betűvel kezdődik, hiszen könyvtár, de mit jelent az a sok x-betű a jogosultságok listájában. Nem akarjuk mi futtatni a könyvtárt, mi értelme lenne annak? Vegyük is le gyorsan a futás jogot ("chmod a-x jogosult"), majd lépjünk be. Az eredmény elszomorító:
-su: cd: jogosult/: Permission denied
... a belépés megtagadva. Adjunk most csak magunknak futtatási jogot ("chmod u+x jogosult"):
drwxr--r-- 9 teszt teszt 306 Jul 25 12:04 jogosult
Húúú, fellélegezhetünk, most már beenged, és láthatjuk, hogy minden változatlan a könyvtáron belül. A shell script-ünk futtatható, mindent látunk, módosíthatunk.

Adjuk meg ismét mindenkinek a futtatási jogot a script-re ("chmod a+x udv"). Próbáljuk futtatni a másik Terminálból, a másik felhasználó területéről, a teljes elérési úttal.

Az imént ez még működött. De most nem! Mert a script-et tartalmazó könyvtáron csak a tulajdonosnak van futtatási joga, másoknak nincs. De innen nem csak futtatni nem tudjuk, olvasni, írni sem, még akkor sem, ha mindenkinek mindent engedélyezünk:
-rwxrwxrwx 1 teszt teszt 40 Jul 25 12:05 /Users/teszt/jogosult/udv
Érdemes kipróbálni! Végezetül álljon itt egy fontos megjegyzés még a mai napra. A chmod parancs használható a -R opcióval is. Ha ezt használjuk, akkor fokozottan ügyeljünk, mert a kiindulási könyvtártól lefelé az összes alkönyvtárban is elvégzi a megadott beállításokat, ami nem mindig a várt eredményt szolgáltatja. Korábban már találkoztunk a * (csillag) karakter használatával! A "chmod -R u-r * " parancs az aktuális könyvtártól kezdve abban, és minden alkönyvtárában az összes könyvtár és fájl esetében törli az olvasási jogosultságot.

Az alkönyvtárak elérhetetlenek lesznek. Az eredeti állapot visszaállítása pedig bonyolultabb fájlstruktúra esetében nem biztos, hogy egyszerű, vagy szinte lehetetlen a rendszer újratelepítése nélkül! A Disk Utility program Permission repair opciója a szabványos hozzáférési jogosultságokat próbálja visszaállítani a rendszeren, ha azok esetleg megsérültek. Rendszerfrissítések előtt azért is érdemes lefuttatni ezt a programrészt, hiszen látható, hogy nem megfelelő beállítás esetén előfordulhat, hogy az új rendszer egyes részeit sikerül, másokat viszont nem tud felrakni a telepítő, ami kisebb-nagyobb problémákat okozhat.

Major Zoli
zoli@mac.com


A lap tetejére


Alkalmazás cikkeink 2006-ban