Következő Előző Tartalom

4. Fájlok és programok

4.1 Fájlok: előzetes megjegyzések

A Linuxban a könyvtárak és a benne lévő fájlok struktúrája nagyon hasonló a DOSWin-ben megismerthez. Minden fájlnak adott szabályokhoz illeszkedő neve van, a fájlokat könyvtárakban tárolják, néhányuk végrehajtható, néhányuk speciális kapcsolókat is igényel ill. megenged. Sőt használhatsz dzsóker karaktereket, átirányítást, csöveket. Csak néhány kisebb különbség van.

  • DOS alatt a fájlneveknek úgynevezett 8.3 alakja van pl.: NOTENOUG.TXT. Linux alatt ez jobban megoldott. Ha a Linuxot egy olyan fájlrendszerrel (nem szükséges, hogy tudd pontosan, mi is ez most) telepíted, mint az ext2, vagy az umsdos, akkor hosszabb neveket is használhatsz (egészen 255 karakterig), több ponttal a névben. Például, Ez.egy_IGEN.hosszú.Fájlnév. Kérlek, vedd észre, hogy kisbetűket és nagybetűket is használtam. Valójában ...
  • A kis- és nagybetűket megkülönböztetjük a fájl- és programnevekben. Így a FÁJLNÉV.tar.gz és a fájlnév.tar.gz nevek két külőnböző fájlt jelölnek. Ugyanez igaz a parancsokkal kapcsolatban is. Ha az ls parancsot kiadod, (ez ugyanaz mint a DOS-ban a DIR), akkor könyvtáradban található fájlok listáját kapod, míg ha az LS parancsot adod ki, akkor egy hibaüzenetet.
  • A Windows felhasználók vigyázzanak a linuxos hosszú fájlnevekkel. Ha fájlnév tartalmaz szóközt (nem javasolt, de lehetséges), a fájlnevet dupla idézőjelek közé kell tenni, ha hivatkozunk rá. Például:
    $ # A következő parancs létrehozza a  "Régi fájljaim" könyvtárat.
    $ mkdir "Régi fájljaim"
    $ ls
    Régi fájljaim    bin     tmp
    
    Továbbá van néhány karakter, ami nem lehet a fájlnév része, pl. !*$&#.
  • Nincs olyan kötelező kiterjesztése a parancs ill. program fájloknak, mint a .COM és az .EXE , vagy a .BAT a batch-fájloknak. A végrehajtható fájlokat egy `*' különbözteti meg a fájlnév végén ha az ls -F paranccsal listáztattad ki. Például:
    $ ls -F
    levél_Józsinak  Cindy.jpg  cjpg*  Ez_egy_könyvtár/  első_scriptem*  régi~
    
    A cjpg* és az első_scriptem* fájlok végrehajthatóak -- ``programok''. DOS alatt a .BAK végződés a biztonsági másolat (backup) fájlokat jelöli; a Linuxban az ilyen típusú fájlok tilde `~' karakterre végződnek. Továbbá, ha egy fájlnevet ponttal kezdesz, akkor ez a fájl rejtett fájlként lesz nyilvántartva. Például: az .én.egy.rejtett.fájl.vagyok fájl nem fog megjelenni az ls parancs után.
  • A DOS alatt egy program kapcsolóit /kapcsoló formában kell megadni, míg a Linux alatt a -kapcsoló vagy a --kapcsoló használatos. Például a dir /s-nek az ls -R a megfelelője. Megjegyzem sok DOS program -- mint a PKZIP vagy az ARJ -- Unix stílusú kapcsolókat használ.

Most már akár a DOS-os parancsok Linuxos megfelelői fejezetre ugorhatsz, de a helyedben én tovább olvasnék.

4.2 Szimbolikus linkek

A Unix rendelkezik egy fájltípussal, ami nem létezik DOS alatt: ez a szimbolikus link. Tekinthetjük ezt úgy, mint egy fájlra vagy könyvtárra mutató pointert, és használhatjuk őket az eredeti fájl vagy könyvtár helyett. Ez hasonló a Windows parancsikonjaihoz. Példa szimbolikus linkre az /usr/X11, amely az /usr/X11R6-ra mutat, és a /dev/modem, amely vagy a /dev/ttyS0-ra vagy a /dev/ttyS1-re mutat.

Szimbolikus link létrehozása:

$ ln -s <fájl_vagy_könyvtár> <linknév>

Example:

$ ln -s /usr/doc/g77/DOC g77manual.txt

Mostantól g77manual.txt-ként is hivatkozhatsz az /usr/doc/g77/DOC fájlra. A linkek így jelennek meg a könyvtárlistában:

$ ls -F
g77manual.txt@
$ ls -l
(egy csomó dolog...)           g77manual.txt -> /usr/doc/g77/DOC

4.3 Hozzáférési engedélyek és tulajdonjogok

A DOS-os fájlok és könyvtárak a következő tulajdonságokkal (attribútumokkal) rendelkezhetnek: A (archív), H (rejtett), R (csak olvasható), és S (rendszer fájl). Csupán a H-nak és az R-nek van értelme Linux alatt. A rejtett fájlok egy ponttal kezdődnek, míg az R megfelelőjét a lentiekben tárgyaljuk.

Unix alatt egy fájl rendelkezik hozzáférési engedélyekkel és tulajdonossal, aki egy ``csoporthoz'' tartozik. Itt egy példa:

$ ls -l /bin/ls
-rwxr-xr-x  1  root  bin  27281 Aug 15 1995 /bin/ls*

Az első mező tartalmazz a /bin/ls fájl hozzáférési engedélyeit. Ez a fájlt a root felhasználóhoz és a bin csoporthoz tartozik. A többi információtól eltekintve, jegyezd meg, hogy a -rwxr-xr-x a következőket jelenti (balról jobbra):

- a fájl típusa (- = közönséges fájl, d = könyvtár, l = link, stb.); rwx a fájl tulajdonosának a hozzáférési engedélyei (olvasható, írható, végrehajtható); r-x a fájltulajdonos csoportjának az engedélyei (olvasható, végrehajtható); (most nem részletezem a csoport fogalmát, kezdőként egyelőre jól megleszel nélküle ;-) végül r-x az összes többi felhasználó engedélyei (olvasható, végrehajtható).

A /bin könyvtárnak szintén vannak hozzáférési engedélyei, olvasd el a Könyvtárak hozzáférési engedélyei fejezetet a részletekért. Emiatt nem törölheted az /bin/ls fájlt, hacsak nem te vagy a root, nincs írási jogot, hogy ezt megtedd. Egy fájl hozzáfárési engedélyeinek megváltoztatása a következőképpen lehetséges:

$ chmod <kiXengedély> <fájl>

ahol a `ki' helyén u (user, azaz a tulajdonos), g (group, azaz a csoport) vagy o (other, azaz bárki más) állhat, az `X' vagy + vagy -, az `engedély' lehet r (read, azaz olvasható), w (write, azaz írható) vagy x (execute, azaz végrehajtható). Általános példák a chmod parancsra:

$ chmod +x file

Ez végrehajthatóvá teszi a file-t. A

$ chmod go-rw file

eltávolítja a fájlról az írási és a olvasási engedélyeket mindenki számára, kivétel csupán a fájl a tulajdonosa. A

$ chmod ugo+rwx file

mindenkinek olvasási, írási és végrehajtási jogot ad. Végül, de nem utolsósorban a

# chmod +s file

paranccsal hozhatóak létre egy úgynevezett ``setuid'' vagy ``suid'' fájl, azaz olyan fájl, amelyet mindenki végrehajthat a tulajdonos jogaival. Általában a root tulajdonában levő suid fájlokkal fogsz találkozni, ezek többnyire fontos rendszerfájlok, mint például az X szerver.

Van egy rövidebb mód is az engedélyek megadására, ez számokkal történik. Az rwxr-xr-x kifejezhető úgy, mint 755. Minden betűnek egy bit felel meg, a --- 0, a --x 1, a -w- 2, a -wx 3, és így tovább. Bonyolultnak látszik, de egy kis gyakorlás után át fogod látni a koncepciót. A root, azaz a rendszergazda, minden fájl hozzáférési engedélyeit megváltoztathatja. OEK.

4.4 DOS-os parancsok Linuxos megfelelői

Bal oldalon vannak a DOS-os parancsok, jobb oldalon a linuxos megfelelői.

ATTRIB:         chmod
COPY:           cp
DEL:            rm
MOVE:           mv
REN:            mv
TYPE:           more, less, cat

Átirányítás és csőszervezés operátorok: < > >> |

Dzsóker karakterek: * ?

nul: /dev/null

prn, lpt1: /dev/lp0 vagy /dev/lp1; lpr

Példák

DOS                                     Linux
---------------------------------------------------------------------

C:\GUIDO>ATTRIB +R FILE.TXT             $ chmod 400 file.txt
C:\GUIDO>COPY JOE.TXT JOE.DOC           $ cp joe.txt joe.doc
C:\GUIDO>COPY *.* TOTAL                 $ cat * > total
C:\GUIDO>COPY FRACTALS.DOC PRN          $ lpr fractals.doc
C:\GUIDO>DEL TEMP                       $ rm temp
C:\GUIDO>DEL *.BAK                      $ rm *~
C:\GUIDO>MOVE PAPER.TXT TMP\            $ mv paper.txt tmp/
C:\GUIDO>REN PAPER.TXT PAPER.ASC        $ mv paper.txt paper.asc
C:\GUIDO>PRINT LETTER.TXT               $ lpr letter.txt
C:\GUIDO>TYPE LETTER.TXT                $ more letter.txt
C:\GUIDO>TYPE LETTER.TXT                $ less letter.txt
C:\GUIDO>TYPE LETTER.TXT > NUL          $ cat letter.txt > /dev/null
        n/a                             $ more *.txt *.asc
        n/a                             $ cat section*.txt | less

Megjegyzések:

  • A * karakter alkalmazása a Linux alatt elegánsabb. A * kifejezéshez minden fájl illeszkedik kivéve a rejtett fájlokat. A rejtett fájlok a .* kifejezéshez illeszkednek, de vigyázat, az aktuális könyvtár `.' és a szülőkönyvtár `..' is illeszkedik! A *.* kifejezéshez csak azok a fájlok illeszkednek amelyeknek a közepén '.' található. A p*a kifejezésre mind a papa, mind a pipa, míg a *g* kifejezésre mind a `régi' és mind a `rugók' szavak illeszkednek.
  • Ha a more programot használod, akkor a <szóköz> billentyűt használd a lapozáshoz, és a 'q' billentyűt a kilépéshez. A less program sokkal jobban használható, s itt használhatod nyíl-billentyűket is.
  • A Linuxban nincs UNDELETE, tehát jól gondold meg mielőtt bármit is kitörölsz.
  • A DOS < > >> jelein túlmenően, a Linux ismeri a 2> jelet, amivel átirányítható szabványos hibakimenet (stderr), továbbá a 2>&1 a szabványos hibakimenetet (stderr) a szabványos kimenetre (stdout), míg a 1>&2 a szabványos kimenetet a szabványos hibakimenetre irányítja.
  • A Linux rendelkezik még egy dzsóker karakterrel, a [] jellel. Használata: az [abc]* kifejezés azokhoz a fájlnevekhez illeszkedik amelyek a, b vagy c betűvel kezdődnek. A *[I-N,1,2,3] kifejezés azokhoz a fájlnevekhez illeszkedik amelyek I, J, K, L, M, N, 1, 2, 3 betűvel végződnek.
  • Az lpr <fájl> kinyomtatja a fájlt a háttérben. A nyomtatási sor ellenőrzésére használd a lpq parancsot. Az lprm paranccsal kitörölheted a fájlt a nyomtatási sorból.
  • Nincs olyan parancs mint a DOS alatti RENAME, így a mv *.xxx *.yyy nem fog működni. Egy REN-hez hasonló parancs letölthető az ftp://sunsite.unc.edu/pub/Linux/utils/file FTP-helyről.
  • Használj cp -i-t és mv -i-t, ha azt szeretnéd, hogy a rendszer szóljon, ha valamit felül készül írni.

4.5 Programok futtatása: többfeladatúság

Ha futtatni akarsz egy programot akkor a DOS-hoz hasonlóan itt is a program nevét kell begépelned. Ha a könyvtár ( Könyvtárak használata fejezet), amiben a programot eltároltad megtalálható a PATH ( Rendszerinicializáló fájlok fejezet) környezeti változóban, a program el fog indulni. Kivétel: a DOS-tól eltérően a Linux alatt az aktuális könyvtárban lévő program is csak akkor fog elindulni, ha a könyvtár benne van a PATH-ban. Tipp: ilyen esetben, ha a programod prog akkor azt gépeld, hogy ./prog.

Így néz ki egy tipikus parancssor:

$ parancs [-k1 [-k2] ... [-kn]] [par1 [par2] ... [parn]] [< bemenet] [> kimenet]

ahol a -k1, ..., -kn a program kapcsolói, és a par1, ..., parn a program paraméterei. Egy sorban több parancsot is begépelhetsz:

$ parancs1 ; parancs2 ; ... ; parancsn

Ennyit a programok futtatásáról, bár könnyű a következő lépés megtétele is. Az egyik legfontosabb indok, ami a Linux használata mellett szól, hogy a Linux többfeladatú operációs rendszer, azaz képes több program (ezentúl processzek) párhuzamos (egyidejű) futtatására. Elindíthatsz processzeket a háttérben, és amíg ezek futnak, tovább folytathatod a munkádat. Sőt, a Linux lehetővé teszi, hogy egyidejűleg többször bejelentkezve különböző virtuális terminálokon is dolgozz: ez olyan mintha több számítógéped lenne egyszerre, amin dolgozhatsz!

  • Az 1-től 6-ig terjedő virtuális terminálokra való átlépéshez nyomd le az <ALT-F1> ... <ALT-F6> billentyűket.
  • Egy új session indításához az aktuális virtuális terminálon add ki a su - <loginname> parancsot. Például: su - root. Ez akkor hasznos, ha egy olyan feladatot kell elvégezned, amit csak a root tehet meg.
  • A sessiont az exit paranccsal lehet befejezni. Ha vannak leállított munkáid (lásd később), akkor a rendszer figyelmeztet.
  • Ha a háttérben szeretnél elindítani egy processzt, írj egy `&' jelet a parancssor végére:
    $ progname [-kapcsolók] [paraméterek] [< bemenet] [> kimenet] &
    [1] 123
    
    A burok (shell) a processzt egy munkaszámmal (például ez fent [1]) és a processz azonosítójával (PID) azonosítja (példánkban ez 123).
  • Ha szeretnéd látni, hogy összesen hány processz fut, írd be azt, hogy ps ax. Ez a parancs kilistázza az összes jelenleg futó processzt.
  • Ha szeretnél lelőni (leállítani) egy processzt, használd a kill <PID> parancsot. Elképzelhető, hogy le kell lőnöd egy processzt, ha nem tudod, hogyan kell leállítani, kilépni belőle... ;-). Néha a processz csak a kill -SIGKILL <PID> alkalmazásával lőhető le: A burok megengedi, hogy megállíts egy processzt, időszakosan szüneteltesd a futását, háttérbe küldjed, vagy a háttérből az előtérbe hozd vissza. Ebben az összefüggésben a processzeket ``munká''-nak nevezik.
  • Ha szeretnéd látni, hogy hány munka fut, írd be: jobs. Itt a munkákat a munkaszámuk azonosítja, nem a PID-jük.
  • Egy előtérben futó processz leállításához nyomd le a <CTRL-C>-t (nem mindig működik).
  • Egy előtérben futó processz futása felfüggeszthető a <CTRL-Z> lenyomásával (szintén nem mindig működik).
  • Egy futásában felfüggesztett processzt a bg <%job> paranccsal lehet a háttérbe küldeni (a processz munkává válik).
  • A munka előtérbe hozására használd a fg <%job> parancsot. A legutoljára háttérbe küldött munka előtérbe hozásához elég kiadni a fg parancsot.
  • Egy munka lelövéséhez a kill <%job> parancsot kell használni, ahol a <job> a burok által a processzhez rendelt munkaszám: 1, 2, 3, ...

Ezeknek az utasításoknak a használatával egyszerre tudsz egy lemezt megformázni, fájlok egy csoportját tömöríteni, kitömöríteni archivált fájlokat, programokat fordítani, és még mindig rendelkezésedre áll egy prompt, tovább dolgozhatsz zavartalanul! Próbáld ugyanezt megtenni DOS alatt! És próbáld ki ugyanezt Windows alatt is, csak hogy lásd a teljesítménybeli különbséget a két megvalósítás között (ha ugyan le nem fagy közben)!

4.6 Programok futtatása távoli gépeken

Egy távoli gépen történő programfuttatáshoz elsőként be kell jelentkezned oda, s ehhez tudnod kell a gép nevét vagy IP-címét.

$ telnet tavoli.gep.hu

Bejelentkezés után elindíthatod kedvenc programod. Gondolom szükségtelen megemlítenem, hogy a másik gépen is kell rendelkezned felhasználói azonosítóval.

Ha van X Window rendszered, akkor akár X-es alkalmazásokat is futtathatsz a távoli gépen oly módon, hogy az a te képernyődön jelenik meg. Legyen például a távoli gép a tavoli.gep.hu, míg a Te géped az sajat.gep.hu. Egy a távoli gépen levő X-es program futtatása az sajat.gep.hu-n a következőképpen lehetséges:

  • indítsd el az X-et, majd azon belül egy xterm-et, vagy egy azzal ekvivalens terminál emulátort (rxvt, color-xterm, nxterm, kvt, ...), majd gépeld be:
    $ xhost +tavoli.gep.hu
    $ telnet tavoli.gep.hu
    
  • bejelentkezés után:
    tavoli:$ DISPLAY=sajat.gep.hu:0.0
    tavoli:$ program &
    
    (A DISPLAY... sor helyett, esetleg a setenv DISPLAY local.linux.box:0.0 sor kell beírnod. Ez a távoli gépen futó parancsértelmező buroktól függ.)

És láss csodát! A távoli gépen elindul a program, ami majd a te képernyődön fog megjelenni. Azonban modemes kapcsolat esetén nem érdemes ezzel próbálkozni, használhatatlanul lassú lesz. Ráadásul ez egy durva és nem biztonságos módszer, az ``Remote X Apps mini-HOWTO'' http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps foglalkozik a témával részletesebben.


Következő Előző Tartalom