"Szerintem a Unix olyan, mint a női lélek: bonyolult és csodálatos. (Az igazi buherátorok szerint csodálatosabb :-)"
(Csáky István)

Első lecke

Verzió: 1.2

A legfontosabb fájl- és könyvtárkezelő parancsok

Ebben a leckében az alábbi parancsokról lesz szó: cd, ls, cp, mv, rm, mkdir, rmdir, pwd, cat, more, head, tail, wc

A parancsok általános szintaxisa

A Unix rengeteg parancsot és kisebb-nagyobb hasznos segédprogramot tartalmaz; ezek közös jellemzője, hogy nevük -jóllehet néha nehezen felderíthető módon- utal feladatukra, és valamennyit a Unix parancssorában kell begépelni. (A parancssor elejét a prompt jelzi- ez rendszerint % vagy $ jel a sor elején, de bármi más is lehet, gépenként változik!)*

A parancsokat úgy hajtjuk végre, hogy begépeljük a nevüket a parancssorba. A parancs neve után szóközökkel elválasztva kell megadni a paramétereket: ezek határozzák meg közelebbről, hogy a parancs mit is csináljon. A paraméterek közül azokat amelyek mínusz jellel kezdődnek, ezentúl kapcsolóknak fogjuk hívni, mivel ezekkel lehet bekapcsolni egy parancs különféle üzemmódjait. A kapcsolókból rendszerint egyszerre több is megadható, ilyenkor általában elegendő egy mínusz jelet kiírni és felsorolni utána a kapcsolókat (ezt nem minden rendszer teszi lehetővé!). Például az ls -l -a -r parancs megadható így is: ls -alr

Elsősorban PC-n nevelkedett felhasználóknak okozhat kellemetlen meglepetést a Unix szűkszavúsága. Mindig csak annyi üzenetet kapunk, amennyit a rendszer elengedhetetlenül szükségesnek tart. Ezért ne lepődjünk meg, ha egy parancs végrehajtása után semmi sem jelenik meg a képernyőn: ez azt jelenti hogy a parancs hibátlanul végrehajtódott. A Unix programok sikeres végrehajtás esetén soha nem jeleznek vissza, csak hiba esetén.

A Unix törekszik az egységességre, ennek szellemében minden interaktív parancsból ugyanúgy kell kilépni. (Interaktívnak nevezzük azokat a parancsokat, amelyek futás közben elvárják, hogy begépeljünk nekik valamit.) Tehát ha ki akarunk lépni egy ilyen programból, üssük le a <Ctrl-d> billentyűkombinációt.

Ha a parancssorban ütjük le a <Ctrl-d>-t, akkor kijelentkezünk a rendszerből (néhány gépen ez le van tiltva, helyette a logout parancsot kell használnunk). Ez összhangban van az előző alapelvvel, mert amikor be vagyunk jelentkezve, valójában egy programot futtatunk (ez a parancsértelmező, amit shell-nek vagy buroknak hívnak): kijelentkezéskor ebből a programból lépünk ki.

Ugyancsak alapelv, hogy a kis- és a nagybetűk különbözőnek számítanak. Ügyeljünk erre, és lehetőleg semmit ne gépeljük csupa nagybetűvel!

Fájlok

A Unix legfontosabb alapfogalma a fájl. Nem csak programokat és adatokat tárolunk a fájlokban, de a parancsok is futtatható fájlok, sőt még a terminálokra is ugyanúgy írunk, mint egy közönséges adatfájlba. Röviden: a Unixban minden fájl.

A fájlnevek maximális hossza általában 255 karakter, és szinte bármilyen karakterből állhat(nak). Néhány karakternek azonban különleges szerepe van, ezért célszerű a névadáshoz csak az angol ábécé betűit, a számokat, a pontot, valamint a mínusz és az aláhúzás jelet használni. A kis és nagybetűk a fájlnevekben különbözőnek számítanak, csakúgy mint a parancsokban. Lehetőleg ne használjuk a nevekben csillagot (*) és első karakterként pontot.

Listázás

Az ls (list) parancs megmutatja az aktuális könyvtárban található fájlok neveit. (Az aktuális alkönyvtárunk bejelentkezés után a munkakönyvtár, az un. "home directory". Ide tehetjük a saját dolgainkat, például leveleinket, programjainkat, adatainkat, stb.) A lista alapértelmezés szerint ábécé sorrendben sorolja fel a neveket, de alkalmas kapcsolók segítségével más sorrendet is előírhatunk. Például az
ls -t 
parancs az utolsó módosítás dátuma szerint rendezve listázza ki a fájlok neveit úgy, hogy az utoljára módosított fájl lesz az első a listán. A -l kapcsoló un. hosszú (long) listát ad:
ls -l 

-rw-r--r--   1 owner     user       14649 Sep  6 09:54 nevek.txt 
A dátum és az idő megadja hogy a nevek.txt nevű fájl mikor volt utoljára módosítva. Az 14649-as szám a fájlban található karakterek számát jelenti. A user a csoport neve, amelyikbe a felhasználó tartozik. Az owner a fájl "tulajdonosát", vagyis annak a felhasználónak az username-jét, aki a fájlt létrehozta. A "-rw-r--r--" kódsorozat a fájl elérési jogát mutatja: ezt a fájlt bárki elolvashatja, de csak a tulajdonos (owner) írhatja. Az elérési jogokról részletesen a második leckében lesz szó.

A kapcsolókból egyszerre több is megadható: például az ls -al parancs kilistázza valamennyi fájlt (all) beleértve azokat is, amelyek neve ponttal kezdődik, hosszú (long) formában.

Azt is előírhatjuk, hogy csak bizonyos fájlokat listázzon, például az

ls -l *c
kilistázza valamennyi c betűre végződő nevű fájlt. (A * karakter jelentése: "ezen a helyen bármilyen karakter(ek) állhatnak, tetszőleges számban; ez a szám akár nulla is lehet"). Jegyezzük meg, hogy mindig a kapcsolókat (-l) kell első helyen megadni, és a fájlnevet a másodikon.

A csillaghoz hasonló metakarakter a kérdőjel, jelentése "ezen a helyen bármilyen karakter állhat". Így tehát az

ls a???
parancs az összes a betűvel kezdődő, négy karakter hosszúságú fájlt fogja kilistázni.

Az ls parancs alapértelmezésben nem mutatja meg azokat a fájlokat amelyeknek ponttal (.) kezdődik a nevük. Ha ezeket is látni szeretnénk, használjuk a -a kapcsolót:

ls -a

Másolás, törlés és átnevezés

Az mv parancs átnevez (move = mozgat) egy fájlt egy másik névre. Tehát az
mv régi_név új_név
parancs megszünteti a régi_név fájlt és létrehoz helyette egy új_név nevűt. Ha az új_név nevű fájl már létezik, akkor felülírja azt a régi_név fájl tartalmával, rendszerint anélkül, hogy megkérdezne minket; komolyan felül akarjuk-e írni az új_név fájlt.

Ha másolatot akarunk készíteni egy fájlról, akkor ezt a cp paranccsal tehetjük meg.

cp eredeti másolat 
Ekkor létrejön egy másolat nevű fájl, amely méretben és tartalomban megegyezik az eredeti fájllal.

Ha egy fájlra már nincs szükségünk, letörölhetjük az rm (remove) paranccsal.

rm fájl1 fájl2 fájl3 
Ez a parancs letörli a fájl1, fájl2 és fájl3 nevű fájlokat az aktuális alkönyvtárból.

FONTOS!

Ha egy fájlt letörlünk vagy felülírunk, akkor az megsemmisül és semmilyen eszközzel sem lehet visszaállítani!*

Könyvtárak

A UNIX hierarchikus felépítésű, ami azt jelenti, hogy a fájlokat könyvtárakban tárolja. Egy könyvtárból alkönyvtárak nyílhatnak, amelyek ugyancsak tartalmazhatnak további fájlokat és alkönyvtárakat, és így tovább. Mindig van egy aktuális könyvtár, ahol éppen dolgozunk (working directory) - ez azt jelenti, hogy a fájlokra vonatkozó parancsok (ls, cp, mv, cat, stb.) az aktuális könyvtárban lévő fájlokra fognak vonatkozni.

Bejelentkezéskor a munkakönyvtárba kerülünk (home directory), de szabadon mozogtatunk az ebből nyíló alkönyvtárakban sőt, esetenként még más felhasználók alkönyvtáraiba is átmehetünk.

Alkönyvtárat az mkdir paranccsal tudunk létrehozni, belelépni pedig a chdir vagy cd paranccsal tudunk. Tehát az alábbi két parancs

mkdir alkonyvtar
cd alkonyvtar 
létrehoz egy, az aktuális könyvtárból nyíló alkönyvtárat, és bele is lép. Ha paraméterek nélkül adjuk ki a cd parancsot, akkor visszajutunk a home könyvtárba. Ha most kiadjuk az ls -l parancsot, a fájlok listájában az imént létrehozott alkönyvtár is szerepelni fog:
drwxr-xr-x  2  owner  group 32  Nov 22 24:32  alkonyvtar 
A sor elején szereplő d betű jelzi, hogy alkönyvtárról van szó. A paraméterek nélküli ls parancs által előállított listáról sajnos nem tudjuk megállapítani, hogy melyik név jelent alkönyvtárat és melyik jelent fájlt.

Az rmdir parancs kitöröl egy alkönyvtárat, ha az üres. Ha a törölni kívánt alkönyvtárban fájlok vannak, azokat az rm paranccsal törölhetjük le. Az

rm -r könyvtár_név
parancs nemcsak a kijelölt könyvtárat törli le, hanem belőle nyíló valamennyi könyvtárat és alkönyvtárat is. Így egy mozdulattal eltakaríthatunk egy egész könyvtárstruktúrát, ezért hát legyünk óvatosak!

A gyökér könyvtárnak nincs neve és szülő könyvtára. A / jel jelenti a gyökeret (root), alkönyvtárai pedig az usr, home, stb. a /usr, /home, /stb. hivatkozással érhetők el. Ezt a hivatkozást elérési útvonalnak (pathname) hívják. Ez független attól az alkönyvtártól, amelyikben éppen tartózkodunk. A /usr alkönyvtárnak további alkönyvtárai vannak, például bin, etc, stb. Ezek elérési útvonala /usr/bin, /usr/etc és így tovább.

Ha egy fájlt az aktuális könyvtárból egy másik könyvtárba akarunk másolni vagy mozgatni, meg kell adnunk a cél könyvtár nevét is. Ha a művelet tárgyát képző fájl nincs az aktuális alkönyvtárban, akkor arról is meg kell adni, hogy melyik könyvtárban találjuk meg. Az alábbi parancs az aktuális könyvtárban lévő level1 fájlt átmásolja az (aktuális könyvtárból nyíló) mail könyvtárba:

cp level1 mail 
A következő példa feltételezi, hogy éppen nem tudjuk, melyik könyvtárban vagyunk, és a gyökérből nyíló public/news alkönyvtárból szeretnénk "hazamásolni" (a "home directory"-nkba) a last-news nevű fájlt. Íme:
cp /public/news/last-news $HOME 
A $HOME jel a munkakönyvtárunk rövid neve, így nem kell kiírnunk az általában tekintélyes hosszúságú (/public/users/dept/staff/.......)* munka-könyvtár nevét. Egyes rendszerekben (az un. csh-ban) a $HOME jelnek van egy még rövidebb neve is: a ~ jel. Erről a Shellről szóló fejezetben lesz szó.

Az aktuális könyvtárnak is van egy rövidített neve, mégpedig a pont (.). A következő parancs a /usr/news/legujabb nevű fájt másolja át oda, ahol éppen tartózkodunk -- vagyis az aktuális alkönyvtárba.

cp /usr/news/legujabb .
Végül két hasznos parancs: ha elfelejtettük hogy éppen melyik alkönyvtárban vagyunk, akkor a pwd (print working directory) paranccsal megtudakolhatjuk, a paraméterek nélküli cd parancs pedig hazavisz minket a munkakönyvtárunkba (home directory).

Műveletek szövegfájlokkal

A legegyszerűbb dolog, amit egy szövegfájllal csinálni lehet, hogy tartalmát megjelenítjük a képernyőn. Ezt a cat paranccsal érhetjük el.
cat fájl_név 
Erre a fájl tartalma megjelenik a képernyőn. A cat parancsnak több fájlnevet is átadhatunk, ilyenkor egymás után jeleníti meg a fájlok tartalmát. Ha a szöveg több, mint amennyi egy képernyőn elfér, akkor leszalad a képről. Ilyenkor használjuk a more parancsot.
more fájl_név 
A szövegből most egy képernyőnyi rész jelenik meg, a szóköz (space) billentyű lenyomására megmutatja a következő oldalt. Ha nem akarjuk végignézni az egész fájlt, üssük le a q betűt vagy a <Ctrl-c>-t.

Egy fájl első sorait a head programmal lehet megjeleníteni:

head -15 fájl_név 
A fájl első tizenöt sorát listázza ki. Időnként szükséges, hogy ne a fájl elejét, hanem a végét tanulmányozzuk. Ezt a tail paranccsal tehetjük meg, ez a példa a szövegfájl utolsó három sorát mutatja meg:
tail -3 fájl_név 
A wc (word count) parancs megszámolja a szövegfájl sorainak, szavainak és karaktereinek számát: eredményül e három számot írja ki a képernyőre.
wc fájl_név 
A -l kapcsolót megadva csak a sorok számát írja ki, -w esetén csak a szavak számát, -c-re pedig csak a karakterek számát.

Feladatok

A feladatokat lehetőleg mindenki egyénileg oldja meg, és igyekezzen a felmerülő problémákat a lecke újraolvasásával és gondolkodással megoldani! Ha nem sikerül, írja meg a problémát az orlando@mars.sztaki.hu címre!
[Ez a cím már nem létezik! -- a szerk.]

* A FELADATOK MEGOLDÁSÁT NEM KELL BEKÜLDENI!!!!

Mindenki saját belátása szerint gyakoroljon, és csak akkor írjon, ha segítségre van szüksége. A gyakran feltett kérdésekre a választ mindenkinek el fogjuk küldeni egy FAQ fájlban.

Első lépésként hozzunk létre egy egyszerű szövegfájlt! Ezt úgy tehetjük meg, hogy cat bemenetét nem egy fájlból, hanem a terminálról vesszük; kimenetét pedig nem a terminálra küldjük, hanem egy fájlba. (Minthogy a Unix a terminált is fájlnak nézi, ez nem jelent neki különösebb nehézséget.) Az átirányításról egy későbbi leckében lesz szó; most elégedjünk meg annyival, hogy a "proba1" nevű fájl létrehozásához a következőt kell begépelnünk a parancssorba:

cat >proba1 
Ezután kezdjünk el gépelni; a sor végén üssük le az Entert, írjunk újabb sorokat, stb. Ha meguntuk a gépelést és a fájl létrehozását be akarjuk fejezni, akkor lépjünk ki a parancsból, azaz üssük le a <Ctrl-d> billentyűkombinációt.

Most pedig...

  1. Hozzunk létre a "proba1" fájlból egy-egy másolatot "proba2" és "probalkozas" néven!

  2. Hozzunk létre egy "masik1" nevű fájlt a fent ismertetett módon! (Azaz a cat paranccsal.) Írjunk bele valami mást, mint amit a proba1be írtunk!

  3. A "masik1" fájlból készítsünk másolatot "masik-file" néven!

  4. Listázzuk ki egymás után proba1 és masik1 fájlt, egyetlen cat paranccsal!

  5. Ismételjük meg az előző parancsot úgy, hogy kimenetét irányítsuk át egy nagy_file nevű fájlba, a > jel segítségével! Hány sort, hány karaktert és hány szót tartalmaz az így létrejött fájl? (Még a nagyon-nagyon kezdők se manuálisan számolják meg!)

  6. Nézzük meg, hogy most milyen fájlok vannak az alkönyvtárunkban!

  7. Ellenőrizzük le, hogy csakugyan a "home directory"-ban vagyunk-e? Ha nem, akkor térjünk vissza oda!

  8. Hozzunk létre egy "proba" és egy "masik" nevű alkönyvtárat a munkakönyvtárunkból nyílóan!

  9. Valamennyi "proba"-val kezdődő fájlt mozgassunk a "proba" alkönyvtárba, a "masik"-kal kezdődőeket pedig a "masik" alkönyvtárba (használjuk a * karaktert)!

  10. Lépjünk vissza a munkakönyvtárunkba (home directory) és adjuk ki az ls -R (nagy R betűvel!) parancsot! Mit tapasztalunk?

  11. Lépjünk be valamelyik általunk létrehozott alkönyvtárba (proba vagy masik) és listázzuk ki az ott található fájlok tartalmát a képernyőn! Hogyan lehet egyetlen paranccsal valamennyi fájl tartalmát kilistázni?


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