Hirdetés




Terminál és Unix alapok

Az első két részben megismerkedtünk a Terminál program kezelésének alapjaival és néhány alapvető, érdekes unix paranccsal. A Finderben természetes, hogy váltogatjuk a könyvtárakat, újakat hozunk létre, könyvtárakat, állományokat törlünk ha már nincs rájuk szükség. Most megnézzük, hogyan működik ez a Terminálban és ezáltal új lehetőségeket is felfedezünk.

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

Korábban már láttuk, hogy az "open ." parancs segítségével meg tudjuk nézni, hogy mi van az aktuális könyvtárban. Természetesen ezt megtehetjük a Terminál ablakban, a grafikus felület használata nélkül is. Aki figyelmesen olvasta az eddigieket, az ki is találhatja a megfelelő parancsot, hiszen már találkoztunk vele, igaz az ftp program belső parancsaként! Ha kiadjuk az ls parancsot, akkor kapunk egy listát a könyvtárban levő állományokról, de rögtön egy érdekes különbséget is megfigyelhetünk.



Az ftp program ls parancsa egy sokkal részletesebb listát adott, míg most a nevek egy egyszerű listáját láthatjuk csupán.

A shell-ben egy kicsit más az ls parancs alapértelmezése.

Korábban láttuk azt is, hogy egy parancs hatása jelentősen befolyásolható azzal, ha különböző opciókkal egészítjük ki. Így van ez az ls paranccsal is, próbáljuk ki az l, illetve az la opciókkal:
teszt: ls -l
teszt: ls -la

Az első parancs eredménye már nagyon hasonlít arra, amivel az ftp-nél találkoztunk, ennek értelmezésével később részletesebben is foglalkozunk, most arra emlékeztetnék, hogyha egy sor d-betűvel kezdődik, akkor az egy újabb könyvtárt jelöl, amibe a cd (change directory) paranccsal be is léphetünk. Ha az a opciót is odabigygyesztjük a végére, akkor egy kicsit részletesebb listát kapunk, és un. rejtett (hidden) állományok is láthatóvá válnak.

Aki elvégezte az első cikkben bemutatott prompt beállítást, az most az "ls -la" parancs eredményeként látni fogja a .profile nevű fájlt, amit még az echo parancs segítségével alkottunk meg. A "rejtett" fájlok neve tehát egy ponttal kezdődik, és jellemzően különböző programok használják őket működésük során. A .profile fájlt a shell program használja, ennek segítségével lehet beállítani a prompt formáját, tartalmát. Hamarosan meg fogjuk változtatni!

Van még egy olyan rejtett állomány, aminek érdemes megjegyezni a nevét. Ez a .Trash, igen a kuka. Ha a grafikus felületen valamit kidobunk a kukába, akkor azt a Finder ebbe a könyvtárba rakja. Ha bejelentkeztünk a teszt felhasználóhoz és kiadjuk a fenti második parancsot, akkor nagy valószínűséggel nem fogunk .Trash nevű könyvtárt találni. Vajon miért nem? Az nyert aki arra tippelt, hogy azért mert a teszt felhasználó grafikus felületén még nem dobtunk semmit a kukába, ezért a Finder még nem hozta létre ezt a könyvtárt. Nyissunk most egy másik Terminál ablakot, ott a saját felhasználói területünkön vagyunk, és adjuk ki ott is az utóbbi listázó parancsot.

Itt már nagy valószínűséggel megtaláljuk a .Trash nevű könyvtárt. (Ha mégsem akkor dobjuk valami feleslegeset a kukába a grafikus felületen.) Ha az ls parancs után megadjuk egy könyvtár nevét, akkor annak a tartalmát fogja kilistázni, tehát az iménti esetben az "ls -l .Trash" parancs hatására látnunk kell a kukába dobott állomány, vagy állományok nevét.

Miért érdekes ez számunkra, hiszen a grafikus felületen a kukára kattintva sokkal egyszerűbben megkapjuk ugyanezt? Ez igaz, de aki sokat használja a gépét előbb utóbb találkozni fog olyan esettel, amikor a kuka ürítése beragad, vagy nagyon sokáig kell várni, hogy végre megtörténjen a törlés (például már nagyon sok minden van a kukában). Vannak trükkök a Finderben is, de ha egyik sem segít, érdemes próbálkozni a Terminállal és kitörölni itt a .Trash könyvtár tartalmát.

Most már csak azt kellene tudni, ezt hogyan tudjuk megtenni! Ennek a cikknek a végére már ez is menni fog. Most gépünk olyan területein fogunk körülnézni ahol a Finder segítségével még nem jártunk (feltéve persze, hogy nem telepítettünk a Finder szolgáltatásait bővítő grafikus segédprogramokat ...). Adjuk ki a
cd /
parancsot. Ezzel a fájlrendszerünk kezdőpontjába érkeztünk.

A unix fájlrendszer úgynevezett fa struktúrában épül fel, ennek van egy kiindulópontja, amit gyökérnek (root) nevezünk. Innen ágazik ki minden.



De először nézzük meg mit találunk a root könyvtárban! Vannak itt a grafikus környezetből már jól ismert könyvtár nevek: Applications, Desktop, Library, Network, de van egy sor olyan könyvtár ahol a rendszer működését biztosító, segítő állományok, programok vannak. Például az "ls bin" a bin nevű könyvtár tartalmát fogja kilistázni, ahol örömmel fedezhetünk fel ismerős parancs neveket: cat, date, echo, kill, ps. Aki kevésnek találja az itt látható program választékot, annak javaslom adja ki a következő listázó parancsot:
ls /usr/bin
... és ez még nem minden! Lehet még tovább keresgélni.

De tessék csak figyelmesen megnézni az iménti parancsot! Ebben két újdonság is van.

Az első az, hogy egy per (/) jel van a könyvtárnév elején. A könyvtárnevet alapvetően kétféleképpen adhatjuk meg: vagy a per jellel kezdjük, vagy nem. Ha kirakjuk a per jelet, akkor a shell úgy értelmezi, hogy a gyökér könyvtárban kell keresni az utána következő könyvtárt - ezt nevezzük abszolút útvonal megadásnak, ha viszont nem tesszük ki, akkor a shell abban a könyvtárban kezdi keresni a megadott könyvtárt, amelyikben éppen vagyunk - ezt nevezzük relatív útvonal megadásnak. A kettő között tehát az a különbség, hogy az abszolút útvonal megadással mindig a gyökér könyvtártól indulunk, a relatív útvonal megadás viszont azt teszi lehetővé, hogy az éppen aktuális pozíciónkból kiindulva változtassuk meg a könyvtárunkat.

A másik újdonság pedig az, hogy két könyvtárnév is szerepel az ls parancs után, és a kettőt szintén egy per jel választja el egymástól. A könyvtárstruktúrában egy ágon szereplő könyvtárnevek felsorolásával így egy, kettő, vagy akár több szinttel is feljebb található könyvtárakat is kijelölhetünk és természetesen nem csupán az ls, hanem más olyan parancsokban is, ahol valamelyik könyvtárra szeretnénk hivatkozni.

Akinek ez újdonság, az kérem hogy feltétlenül álljon meg itt egy kicsit, és végezze el a következő gyakorlatokat annak érdekében, hogy pontosan érthető legyen amiről most beszélünk: lépjen be a gyökér könyvtárba (cd /), lépjen be a Users könyvtárba (cd /Users), lépjen be a teszt könyvtárba (cd teszt), ls paranccsal nézze meg, hogy ismerős helyen jár-e (ls -l), lépjen be innen egyszerre a usr könyvtárban található bin könyvtárba (cd /usr/bin), listázza ki innen ismét a teszt könyvtár tartalmát (ls -l /Users/teszt) és az aktuális könyvtár tartalmát is (ls - l) ... A cd és az ls parancsok segítségével bejárhatjuk és feltérképezhetjük az egész fa struktúrát. (Csak emlékeztetőül: a d betűvel kezdődő sorokat kell keresnünk a listában).

A könyvtárstruktúrában való bolyongást megkönnyíti néhány hasznos dolog. Érdemes megjegyezni őket!

Ha elkezdjük írni egy könyvtár, vagy fájl nevét majd megnyomjuk a Tabulátor billentyűt, akkor a shell kiegészíti nekünk azt, feltéve, hogy a folytatás egyértelmű.

Például elég beírni, hogy ...
teszt: cd /A
megnyomni a Tab billentyűt és megkapjuk az Applications nevet (feltéve, hogy nincs másik A betűvel kezdődő állomány a gyökér könyvtárban).

Ha éppen nem emlékszünk, hogy pontosan merre is járunk, van egy parancs, amelyik mindig megmondja ezt nekünk:
teszt: pwd – A
fa struktúrában mindig egyértelmű, hogy melyik az eggyel alattunk levő könyvtár (feltéve, hogy nem a gyökér könyvtárban vagyunk, hiszen ott már nincs alattunk semmi).

A következő paranccsal tudunk eggyel visszalépni:
teszt: cd ..
Igen, egyszerűen két ponttal lehet hivatkozni arra a könyvtárra, ami tartalmazza az aktuális könyvtárt. Ha ide belépünk és kilistázzuk, akkor láthatjuk annak a könyvtárnak a nevét a listában, ahonnan érkeztünk. Ezt lehet fokozni is, a "cd ../../" parancs két szinttel lép vissza a fa struktúrában.

Akárhol is járunk, egy rövid parancs segítségével egyből haza tudunk jutni:
teszt: cd ~
hatására mindig az aktuális felhasználó saját könyvtárába tudunk belépni. Minden felhasználónak van egy saját könyvtára (Home), amit a rendszer nyilvántart, és belépéskor ez lesz az aktuális könyvtár. A teszt felhasználó esetében ez alapértelmezésben: /Users/teszt.

A
teszt: cd -
parancs az előző helyünkre repít minket. Tehát a shell tudja, hogy az aktuális könyvtárba honnan léptünk be, és oda tudunk visszalépni ezzel a paranccsal.

Érdemes végiggondolni a három utóbbi parancs közötti különbséget!

Egy meglepő változat a következő parancs:
teszt: cd ./
Ez tulajdonképpen nem csinál semmi mást, minthogy beléptet abba a könyvtárba, ahol éppen vagyunk! Ez első hallásra meglepőnek tűnhet, de például programok parancssori futtatásánál jól hasznosítható, hogy az aktuális könyvtárra így tudunk hivatkozni.

Az első cikkben megmutattam, hogyan lehet megváltoztatni a prompt-ot. Most ismét módosítjuk egy kicsit, hogy folyamatosan lehessen látni, hogy melyik az aktuális könyvtár ahol éppen vagyunk.

Adjuk ki a következő parancsokat:
teszt: cd ~
teszt: echo "export PS1=\"\w \u: \"" > .profile

Egy pici módosítás van a múltkorihoz képest, az eredmény mégis látványos lesz. Ha indítunk egy új Terminál ablakot és abban bejelentkezünk a teszt felhasználóhoz, akkor a prompt mindig mutatni fogja az aktuális könyvtárt, tehát hogy éppen hol vagyunk.

Feltétlenül javaslom a fenti parancsok alapos kipróbálását, érdemes barangolni, körülnézni egy kicsit a fájlrendszerben és megtanulni, megszokni használatukat.

ÉPÍTÜNK ÉS PUSZTÍTUNK

Az első részben létrehoztunk egy teszt nevű felhasználót akinek nincsenek adminisztrátori jogosultságai és most elérkeztünk egy olyan pontra, amikor azt javaslom, hogy aki most kezdi az ismerkedést a unixszal, az feltétlenül jelentkezzen át a su paranccsal a teszt felhasználó területére és ott próbálgassa a következő parancsokat.

Amennyiben a saját területén próbálkozik valaki hasonló parancsokkal, különösen ha még admin jogosultsággal is rendelkezik, akkor könnyen előfordulhat, hogy számára fontos fájlokat elveszít és/vagy újra kell telepítenie az egész operációs rendszert a gépen. Elég egyetlen karaktert elírni, egyetlen billentyűt félreütni és megtörténhet a baj. Érdemes kezdetben olyan területen gyakorolni, ahol nem tudunk kárt okozni.

Fájlokat már létre tudunk hozni (pl. "date > idopont"), de időnként szükség lehet a felesleges állományok törlésére. Erre szolgál az rm parancs:
teszt: rm idopont
Nem kérdez semmit, csak töröl, amennyiben az rm parancs után egy létező fájl nevét adtuk meg! Ez nem újdonság, láttunk már hasonlót, amikor állományokat kérdezés nélkül felülírt a shell.

Megjegyzés: a fájl nevét megadhatjuk teljes elérési útvonallal (abszolút megadás), tehát nem kell belépni abba a könyvtárba ahol a fájl található, hanem akárhol is vagyunk, bármelyik fájlt törölhetjük így egy lépésben, ha van hozzá jogosultságunk. Különösen kezdetben ezt NEM javaslom, könnyű elgépelni az elérési útvonalat és másik állományt törölhetünk a kívánt helyett. Biztonságosabb belépni az adott könyvtárba, kilistázni annak a tartalmát, és csak azután törölni ami felesleges.

A teszt felhasználó saját könyvtárában ki lehet próbálni az rm parancs következő, igen hatékony változatát: ez minden fájlt ki fog törölni a könyvtárak kivételével. Tehát a
teszt: cd ~
paranccsal belépünk a teszt felhasználó saját könyvtárába, ahol csak tesztelésre szánt anyagaink vannak (ellenőrizzük: ls -l) és beírjuk, hogy:
teszt: rm *
A csillag azt jelenti a shell számára, hogy sorra veszi az összes állományt az aktuális könyvtárban és megpróbálja azokat törölni. A könyvtárakat nem törli ily módon, de a többit igen, tessék csak megnézni az eredményt egy "ls -l" paranccsal, csupa d-betűvel kezdődő sor maradt.

Ez egyrészt nagyon hasznos parancs ha sok mindent szeretnénk egyszerre törölni, másrészt viszont veszélyes is, hiszen ha nem figyelünk eléggé, könnyen beleeshetnek a szórásba fontos anyagok is! Ha már csak könyvtáraink maradtak, nézzük meg hogyan lehet újat létrehozni. Erre szolgál az mkdir (make directory) parancs:
teszt: mkdir minta1
Ez a parancs létrehozza a minta1 nevű könyvtárt. Próbáljuk ki most az "mkdir minta2/minta3" parancsot.

Erre egy hibaüzenetet kapunk, amennyiben a minta2 nevű könyvtár nem létezik. A probléma könnyen orvosolható két lépésben: először hozzuk létre a minta2 könyvtárt, és azután adjuk ki ismét az előző parancsot.

A unix szereti a kényelmes megoldásokat, ezért most is egyszerűsíthetjük a munkát, ha ismerjük a p opciót. A következő parancs
teszt: mkdir -p minta/minta/minta/minta
már automatikusan létrehozza a közbülső könyvtárakat is amennyiben azok nem léteznének.

A végére maradt egy csattanó.

Próbáljuk kitörölni az imént létrehozott minta1 könyvtárt. Már láttuk, hogy ha kiadjuk az "rm minta1" parancsot, a shell nem fogja kitörölni, hanem figyelmeztet, hogy könyvtárról van szó! Semmi gond, akkor mondjuk meg neki, hogy könyvtárt kell törölni és használjuk a d (directory) opciót: "rm -d minta1". Kész, a minta1 könyvtár törölve, figyelmeztetés nem volt! Megjegyzés: könyvtárak törlésére szolgál az rmdir parancs is.

Ezen felbuzdulva próbáljuk ki a következő parancsot: "rm -d minta". Megint csak hiba üzenetet kapunk, most az a baj, hogy a minta nevű könyvtár nem üres. Mit lehet ilyenkor tenni? A cd paranccsal belépünk a legbelső könyvtárba, ott mindent törlünk, visszalépünk egyet a "cd .." paranccsal és töröljük a könyvtárt a d opcióval. Ezt addig folytatjuk amíg mindent töröltünk, amire nincs szükség a továbbiakban.

Hát ez így elég unalmas, főleg ha sok tisztogatni valónk van. Erre is van segítség, mégpedig az R (recursive) opció. (Az opciók megadásánál fontos figyelni a kis- és a nagybetűkre!) Az
teszt: rm -R minta
parancs akkor is kitörli a minta nevű könyvtárt, ha az nem üres! Természetesen mindent töröl, ami benne volt. Kérdezés nélkül és nincs visszalépési lehetőség. Könnyű hozzászokni az R opció használatához, hiszen sokkal kényelmesebb, mint lépésről-lépésre törölgetni mindent.

Viszont nagyon veszélyes is lehet ha figyelmetlenül használjuk, különösen ha még a *- gal is kombináljuk! Nagyon könnyen eltüntethetünk fontos állományokat! Emlékeztetnék a beépített manuálok használatára, az rm parancs feltétlenül megérdemli, hogy alaposabban is tanulmányozzuk (man rm).

Major Zoli
zoli @ mac.com


A lap tetejére


Alkalmazás cikkeink 2006-ban