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