1
Bagoly Zsolt, Papp Gábor
Bevezetés a UNIX rendszerekbe egyetemi jegyzet informatikus fizikus szakos hallgatóknak
1993-1994, ELTE, Budapest
2
Tartalomjegyzék 1. A UNIX kialakulásának története
13
2. UNIX alapok 2.1. A UNIX rendszerek elérése . . . . . . . . . . . . 2.1.1. Bejelentkezés a UNIX rendszerbe . . . . 2.1.2. Jelszó használata . . . . . . . . . . . . . 2.1.3. Kijelentkezés . . . . . . . . . . . . . . . 2.1.4. A használt shell beállítása (chsh parancs) 2.2. A UNIX shell parancsok . . . . . . . . . . . . . 2.2.1. A parancs végrehajtásának megszakítása 2.2.2. A parancsok javítása . . . . . . . . . . . 2.2.3. Az utasítások kapcsolói . . . . . . . . . . 2.2.4. Az utasítások argumentumai . . . . . . . 2.2.5. A man parancs . . . . . . . . . . . . . . 3. Állományok használata 3.1. A UNIX állományok . . . . . . . . . . . . 3.1.1. Az állományok típusai . . . . . . . 3.1.2. Állományok létrehozása . . . . . . 3.2. Állományok kilistázása . . . . . . . . . . . 3.3. Állományok tartalmának megjelenítése . . . 3.3.1. A cat parancs . . . . . . . . . . . 3.3.2. Nagyobb állományok megjelenítése 3.4. Állományok másolása, átnevezése és törlése 3.4.1. Állományok másolása . . . . . . . 3.4.2. Állományok átnevezése (mv) . . . . 3.4.3. Állományok törlése . . . . . . . . . 3.5. Szöveg keresése: a grep parancs . . . . . . 3
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
15 16 16 17 18 18 19 19 20 20 22 22
. . . . . . . . . . . .
23 23 24 24 25 27 28 29 31 31 32 32 33
TARTALOMJEGYZÉK
4
3.6. Állományok sorbarendezése a sort utasítás . . . . . . 3.7. A UNIX helyettesít˝o karakterei . . . . . . . . . . . . . 3.8. Könyvtárak használata . . . . . . . . . . . . . . . . . 3.8.1. Abszolút és relatív útvonal . . . . . . . . . . . 3.8.2. A könyvtárrendszer használata . . . . . . . . . 3.8.3. Állományok másolása, mozgatása és linkelése . 3.8.4. Könyvtárak létrehozása és törlése . . . . . . . 3.8.5. Állomány megkeresése a könyvtárstruktúrában 3.9. Állományok védelmének beállítása . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
33 34 37 39 39 40 41 41 42
4. Állományok szerkesztése 45 4.1. A vi editor használata . . . . . . . . . . . . . . . . . . . . . . . 45 4.2. A MicroEMACS szerkeszt˝o . . . . . . . . . . . . . . . . . . . . 46 5. Állományok nyomtatása 5.1. A printer állapotának lekérdezése . . . . . . . . . . . . . . . . . . 5.2. A nyomtatási kérés megszakítása . . . . . . . . . . . . . . . . . . 6. Ki- és bemenetek átirányítása, különleges shell parancsok 6.1. Parancs kimenetének átirányítása . . . . . . . . . . . . 6.2. Bemenet átirányítása . . . . . . . . . . . . . . . . . . 6.3. A cs˝o (pipe) használata . . . . . . . . . . . . . . . . . 6.4. Parancs eredményének továbbhasználata . . . . . . . . 6.5. Parancsállományok létrehozása . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
49 50 51
53 . . . 53 . . . 54 . . . 56 . . . 56 . . . 57
7. Programok futtatása
59
8. Kommunikációs programok 8.1. Párbeszédes kapcsolat . . . . . . 8.1.1. A write utasítás . . . . 8.1.2. A talk parancs . . . . . 8.1.3. A mesg utasítás . . . . . 8.2. Elektronikus levelezés . . . . . 8.2.1. A mail levelez˝o program 8.2.2. Az elm levelez˝o program 8.3. Hálózat használata . . . . . . . 8.3.1. A telnet parancs . . . 8.3.2. Az ftp utasítás . . . . .
63 63 63 64 65 65 65 68 70 70 71
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
TARTALOMJEGYZÉK
5
8.3.3. A finger parancs . . . . . . . . . . . . . . . . . . . . . 74 8.4. A tin elektronikus újság . . . . . . . . . . . . . . . . . . . . . . . 75 8.5. A gopher elektronikus adatkeres˝o program . . . . . . . . . . . . 78 9. A Korn shell 9.1. A környezetváltozók . . . . . . . . 9.2. A parancsok kiértékelése a shellben 9.3. Véd˝okarakterek . . . . . . . . . . . 9.4. Parancssor szerkesztés . . . . . . . 9.5. Visszatérési értékek . . . . . . . . . 9.6. A Korn shell kapcsolói . . . . . . . 9.7. A Korn-shell beépített parancsai . . 9.8. A függvények . . . . . . . . . . . . 9.9. Feltételes kifejezések . . . . . . . . 9.10. Speciális parancsok . . . . . . . . . 9.11. Aritmetikai Kifejezések . . . . . . . 9.12. Parancs eredményének helyettesítése 9.13. Állománynév helyettesítés . . . . . 9.14. Ki- és bemenetek átirányítása . . . . 9.15. Helyettesít˝o nevek (alias) . . . . . 9.16. A tilde helyettesítés . . . . . . . . . 9.17. Paraméter helyettesítés . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
10. Állományok feldolgozása 10.1. A grep parancs ismertetése . . . . . . . 10.2. A sed pipe szerkeszt˝o . . . . . . . . . . 10.2.1. A sed parancsai . . . . . . . . . 10.3. A uniq utasítás . . . . . . . . . . . . . 10.4. Az awk programnyelv . . . . . . . . . . 10.4.1. Az adatállomány feldolgozása . 10.4.2. Az awk programnyelv . . . . . 10.4.3. A kiterjesztett reguláris kifejezés 10.4.4. Az összehasonlítások . . . . . . 10.4.5. A minták kombinációja . . . . . 10.4.6. A BEGIN és END kifejezések . . 10.4.7. Változók . . . . . . . . . . . . 10.4.8. Az awk utasításai . . . . . . . . 10.4.9. Példák . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
83 84 84 85 86 87 87 87 89 89 91 97 97 98 98 99 100 100
. . . . . . . . . . . . . .
107 107 110 111 115 117 118 118 118 120 120 121 121 123 126
TARTALOMJEGYZÉK
6
10.5. Állományok sorrendbe rendezése: a sort utasítás . . . . . . . . . 127 11. Archiválás és archív állományok használata 11.1. Könyvtárak archiválása . . . . . . . . . . 11.1.1. A tar parancs . . . . . . . . . . 11.1.2. A dd adatkonvertáló utasítás . . . 11.1.3. Mágnesszalagos egységek . . . . 11.1.4. Példák archiválásra . . . . . . . . 11.2. Tömörít˝o programok . . . . . . . . . . . 11.2.1. A compress eljárás . . . . . . . . 11.2.2. A pack eljárás . . . . . . . . . . 11.3. Kódolási eljárások . . . . . . . . . . . . 11.3.1. Az uuencode/uudecode parancs . 11.3.2. A btoa/atob eljárás . . . . . . . 11.3.3. Állományok szétdarabolása . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
133 134 134 135 137 138 140 140 141 141 141 142 142
12. Programok fordítása és futtatása 12.1. A UNIX C Fordító (cc) . . . . . . . . . . . . . . . . . . . 12.2. A UNIX FORTRAN fordító (f77) . . . . . . . . . . . . . 12.3. A Pascal fordító . . . . . . . . . . . . . . . . . . . . . . . 12.4. A UNIX fordítói könyvtárkezelése (ar, ranlib) . . . . . 12.5. A futtatható program összeszerkesztése: az ld parancs . . 12.6. Programok futtatása . . . . . . . . . . . . . . . . . . . . . 12.6.1. A batch parancs . . . . . . . . . . . . . . . . . . 12.6.2. Feladatok rendszeres futtatása: a crontab parancs 12.7. Hibakeresés és ellen˝orzött futtatás (dbx) . . . . . . . . . . 12.8. Programok újrafordítása: a make parancs . . . . . . . . . . 12.8.1. Kiterjesztések . . . . . . . . . . . . . . . . . . . . 12.8.2. Makrók . . . . . . . . . . . . . . . . . . . . . . . 12.8.3. A make kapcsolói . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
145 146 148 149 150 152 155 158 158 160 166 167 168 169
. . . . . .
173 173 174 176 177 178 178
13. A vi editor használata 13.1. Üzemmódok a vi-ban . . . . . . 13.2. A vi editor különböz˝o beállításai 13.3. A vi parancsai . . . . . . . . . 13.3.1. Mozgás az állományban 13.3.2. String keresés . . . . . . 13.3.3. A szövegírás üzemmód .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
TARTALOMJEGYZÉK
7
13.3.4. Szövegváltoztatás a parancs módban 13.3.5. Másolás és mozgatás . . . . . . . . 13.3.6. Visszaállítás és parancs-ismétlés . . 13.3.7. Szövegrész helyettesítés . . . . . . 13.4. Állománykezelés . . . . . . . . . . . . . . 13.5. A shell elérése a vi-ból . . . . . . . . . . . 13.6. Makrók és parancsok definiálása . . . . . .
. . . . . . .
179 180 180 181 181 182 183
. . . . . . .
185 185 186 187 187 188 189 190
15. A mail program muködése ˝ 15.1. A mail felépítése . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2. Parancsok levél küldése közben . . . . . . . . . . . . . . . . . . 15.3. A mailbox alparancsok . . . . . . . . . . . . . . . . . . . . . . .
193 193 195 196
16. Az elm részletes használata 16.1. Az elm alaputasításai . . . . 16.2. A postaládák . . . . . . . . 16.3. Aliasok . . . . . . . . . . . 16.4. A konfigurációs file (elmrc)
. . . .
203 204 206 207 208
. . . . . . . . .
209 209 210 211 212 213 214 215 216 216
14. A MicroEMACS szövegszerkeszt˝o leírása 14.1. A legfontosabb MicroEMACS parancsok 14.2. Mozgás az állományban . . . . . . . . . 14.2.1. Törlés és beszúrás . . . . . . . . 14.3. Keresés és helyettesítés . . . . . . . . . . 14.3.1. Állománykezelés . . . . . . . . . 14.3.2. Buffer és ablak kezelés . . . . . . 14.4. Speciális utasítások . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
. . . . . . . . . . . . . .
. . . .
17. Hálózati alapismeretek és egyéb programok 17.1. TCP/IP alapok . . . . . . . . . . . . . . . . . . . 17.1.1. A TCP/IP protokollok általános felépítése 17.1.2. A TCP szint . . . . . . . . . . . . . . . . 17.1.3. Socketek és applikációk . . . . . . . . . 17.1.4. Egyéb protokollok: UDP, ICMP és ARP . 17.1.5. Repeaterek, bridge-ek és routerek . . . . 17.2. Az rlogin és rsh utasítások . . . . . . . . . . . 17.2.1. Az rlogin utasítás . . . . . . . . . . . . 17.2.2. Az rsh utasítás . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . .
TARTALOMJEGYZÉK
8
17.3. Anonymous ftp használata . . . . . . . . . . . . . . . . . . . . . 217 18. A tin elektronikus újság részletes leírása 18.1. A rovatok kiválasztása . . . . . . . . 18.2. Cikkek elküldése . . . . . . . . . . . 18.3. A tin környezete . . . . . . . . . . . 18.4. A tin parancsai . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
219 220 221 222 223
El˝oszó Könyvünket több tanfolyam és a mindennapi élet tapasztalatai alapján két részre osztottuk: az els˝o részt a teljesen kezd˝o, a UNIX (ejtsd junix) rendszerrel ismerked˝o felhasználóknak szántuk. Ennek megfelelo˝ en az egyes fejezetekben az adott téma (program) használatáról csak a legfontosabb tudnivalókat foglaltuk össze. Megítélésünk szerint ez az egyes segédprogramokról szóló néhány oldal elegend˝o az elinduláshoz és a legegyszer˝ubb használathoz (a szerz o˝ k tapasztalata szerint az egy oldalt meghaladó leírásokat senki sem olvassa el1 ...). Az els˝o részben ismertetett parancsok és programok részletes leírását a könyv második felében tárgyaljuk. Ezt a részt azoknak szántuk, akik jobban meg szeretnék ismerni az egyes programokat és/vagy a rendszer részletesebb m˝uködését. Ebben a részben több olyan fejezet is található, amely már programozási alapismereteket is feltételez (pl. a programok fordításáról és futtatásáról szóló rész). Mivel a könyv a fentiek értelmében két részre oszlik, a kereszthivatkozásokat ☞ A kereszthivattipográfiailag külön is jelöltük a margón. kozásokat A hivatkozott UNIX parancsokra és programokra külön bet˝ utípus hívja fel tipográfiailag is a figyelmet. A parancsok ismertetésénél [ ] között jelöltük az esetlegesen megad- külön jelöltük a ható paramétereket, ilyenkor a paraméterek megadásához a [ ] jeleket nem kell margón. beírni. Amennyiben a paramétereket | választja el. akkor közülük csak egyet lehet kiválasztani. A d˝olt bet˝ukkel kiemelt parancsrészeket nem kell (nem szabad) bet˝u szerint beírni, ezeket mindig értelemszer˝uen helyettesíteni kell az aktuális értékekkel. Ugyanígy d˝olt bet˝u emeli ki a példáknál a magyarázatokat: természetesen ezeket sem kell (szabad) begépelni. A gyakorlást segít˝o példákra egy másik jel hívja fel a figyelmet a margón. A ✎ példákban a felhasználó által beírandó szövegrészt így jelöltük. A példák különböz o˝ shellek (parancs értelmez˝o programok) alatt másképpen m˝uködnek: mi a Kornshell (ksh, l. a 9. fejezetet) használatát feltételezzük. Törekedtünk arra, hogy a példák (szinte) minden UNIX rendszerben m˝uködjenek. Tekintve, hogy nagyon 1
A szerz˝ok sem olvassák el!
9
10
TARTALOMJEGYZÉK
sok, részben különböz˝o UNIX rendszer létezik, ezért el˝ofordulhat, hogy az egyes parancsoknál megadott paraméterek némelyike nem, vagy nem úgy m˝uködik, mint az a könyvben szerepel. Mivel a UNIX nyelve az angol, ezért megtartottuk a parancsok eredeti angol kiejtését (pl. vi ejtsd víáj). A számítástechnikában a köznapitól eltér o˝ en használt kifejezések és az idegen szavak magyarázatát a könyv végén, a ??. oldalon adjuk meg.
I. Alapismeretek
11
1. fejezet A UNIX kialakulásának története A UNIX operációs rendszert a Bell Laboratóriumban (AT&T) fejlesztették ki a 60-as években, eredetileg egy DEC PDP-7 típusú számítógépen. Az operációs rendszer szorosan kapcsolódik a C programozási nyelvhez, maga a rendszer dönt˝oen ezen a nyelven íródott és csupán minimális, a processor típusától függ o˝ gépi kódú részt tartalmaz. Mivel a legtöbb számítógépre ma már létezik C fordító, ezért a UNIX operációs rendszer könnyen átviheto˝ ezekre a gépekre. Ez összecseng a UNIX eredeti céljaival. A fejleszt˝ok, Dennis Ritchie és Brian W. Kernighan olyan operációs rendszert akartak létrehozni, amely: -
"hordozható" eszközfüggetlen állományrendszert tartalmaz modulrendszer˝u többfelhasználós több programot párhuzamosan futtat
Rugalmassága következtében a UNIX operációs rendszer gyors fejl o˝ désnek indult, és egyre újabb verziói jelentek meg. Ugyanakkor egymástól független fejlesztések következtében megjelentek a különbözo˝ UNIX változatok. 1979-ben az AT&T fejlesztését felhasználva a Berkeley Egyetemen egy némileg ett o˝ l eltér˝o UNIX változatot dolgoztak ki (BSD UNIX), s manapság ennek a két f o˝ ágnak a fejlesztése párhuzamosan folyik. Remélheto˝ leg azonban az eltér˝o változatok a szabványosítási tendenciák következtében a POSIX szabványban egyesülni fognak. A legismertebbek: 13
FEJEZET 1. A UNIX KIALAKULÁSÁNAK TÖRTÉNETE
14 -
AT&T System V R4 BSD UNIX 4.4 (Ez a Berkeley University fejlesztése) AIX 3.2 (IBM) SCO UNIX (Santa Cruz Operation), INTERACTIVE UNIX (Kodak), Coherent UNIX, 386BSD (Ezek IBM PC kompatibilis gépeken futnak) SUNOS 4.1, SOLARIS 2.1 (SUN) ULTRIX 4.4, OSF/1 (DEC) HP-UX (Hewlett-Packard) IRIX 4.0 (Silicon Graphics) UNICOS (Cray)
2. fejezet UNIX alapok A UNIX alapvet˝o sajátsága az ún. multitasking. Ez azt jelenti, hogy minden feladatot külön eljárásként kezel, és minden más feladattól függetlenül tudja azt végrehajtani. Így egyid˝oben (pl. a DOS rendszerrel ellentétben) a gép több különböz˝o programot is futtathat. Az operációs rendszer másik jellegzetessége, hogy igen nagy szabadságot ad a programok bemeno˝ és kimen˝o adatainak kezelésében. Ennek keretében több futó feladat ki és bemenete össze is kapcsolható (pipe), illetve a bemenet és kimenet tetsz˝oleges eszközre átirányítható. A UNIX operációs rendszer egyszerre több felhasználót is ki tud szolgálni egyid˝oben, akár úgy is, hogy mindegyik felhasználó egyszerre több feladatot futtat alatta. A rendszer rugalmasságához tartozik, hogy mindegyik felhasználóhoz külön "méretre is szabható", mivel bejelentkezés során egy ún. shell (burok) alakul ki a felhasználó körül, melynek paramétereinek egy része szabadon állítható. Shellekb˝ol többfajta is van egy UNIX rendszeren, de a gyakorlott felhasználók akár maguk is írhatnak ilyen burkokat. A modulrendszer következtében igen sok UNIX parancs van (300 fölött). Ráadásul mindegyiknek vannak kapcsolói, melyekkel egy-egy parancs hatását lehet módosítani. Ilyen nagyszámú parancs használata már igen körülményes, és nem tartható fejben, ezért a UNIX rendszer része egy beépített kézikönyv (l. a man parancsot a 22. oldalon). A UNIX rendszer talán a legnagyobb hasonlóságot a DOS rendszerrel mutatja.1 1
Pontosabban az állítás fordítva igaz: a DOS eredetileg a UNIX és a VMS operációs rendszerek keresztezéséb˝ol és teljes „lecsupaszításából” született...
15
16
FEJEZET 2. UNIX ALAPOK
2.1. A UNIX rendszerek elérése 2.1.1. Bejelentkezés a UNIX rendszerbe A belépéshez felhasználói névvel és jelszóval(kulcsszó,password) kell rendelkeznünk a megadott gépen. A felhasználói név egy — általában 8 bet˝unél rövidebb — szó, amivel a rendszer azonosítja a felhasználókat (ez lehet a család- vagy keresztnév, becenév, stb.). A kulcsszó a felhasználói nevet védi: csak a megfelel˝o jelszóval lehet a rendszerbe bejelentkezni. A jelszó így megvéd minket és állományainkat az illetéktelen behatolóktól. A felhasználókat a rendszer csoportokba osztja: mindenki egy vagy több csoporthoz tartozhat. Ennek a hozzáférési jogoknál lehet szerepe: pl. bizonyos állományokat csak egy adott csoport tagjai érhetnek el, stb. A UNIX a felhasználói név és jelszó alapján dönti el, hogy jogosultak vagyunke a gép használatára. Felhasználói nevet és kezdeti jelszót a gép rendszergazdájától lehet kapni. A bejelentkezés a következo˝ lépésekb˝ol áll: - ellen˝orizzük, hogy be van-e kapcsolva a terminál vagy PC. - hálózat használata esetén futtassuk le a megfelelo˝ kommunikációs programot (pl. telnet ludens.elte.hu, amennyiben a ludens.elte.hu gépre szeretnénk bejelentkezni). Várjunk, amíg a bejelentkezési prompt meg nem jelenik (ezt megel˝ozheti egy rövid, pl. a gép nevét és típusát tartalmazó információ). - A login: promptnál gépeljük be a felhasználói nevünket. - Ha a felhasználói névhez jelszó tartozik, akkor azt a rendszer a Password: prompt megjelenítésével kéri. A jelszó biztonsági okokból begépeléskor nem jelenik meg a képerny˝on. (Egyes esetekben bizonyos felhasználói nevek esetén nincs jelszó. Ilyenkor általában csak korlátozott felhasználást engedélyez az operációs rendszer). Ha rossz felhasználói nevet, vagy jelszót adtunk meg, erro˝ l a rendszer hibaüzenettel értesít minket. Ilyenkor a következo˝ promptnál korrigálhatunk. Általában bizonyos számú hibás bejelentkezés után a gép bontja a hálózati kapcsolatot. A UNIX operációs rendszer megkülönbözteti a kis és nagy bet˝uket, ezért nagyon figyeljünk, hogy a felhasználói nevünkben, illetve jelszavunkban milyen bet˝uk fordulnak el˝o.
2.1. A UNIX RENDSZEREK ELÉRÉSE
17
Példa: A következ˝o bejelentkezésben a felhasználói név: Joska, a jelszó pedig: 2pistA. A helyes bejelentkezési eljárás: ✎ login: Joska Enter Password: 2pistA Enter $
ez természetesen nem látszik a képerny˝on ez már a shell promptja, bejelentkeztünk Helytelen bejelentkezés a következ˝o (a kis- és nagybet˝ut megkülönbözteti a rendszer): login: joska Enter Password: 2pistA Enter You entered an invalid login name or password. login:
A jogosulatlan belépési próbálkozások ellen kétféleképpen védekezik a rendszer: egyrészt értesíti a felhasználót, hogy mikor és melyik terminálról próbáltak meg sikertelenül belépni a felhasználói azonosítójával, másrészt a rendszergazda számára ezeket az információkat egy állományban tárolja, aki szükség esetén ennek alapján megfelel˝o ellenintézkedéseket tehet.
2.1.2. Jelszó használata A jelszó megváltoztatására a UNIX rendszerben a passwd parancs szolgál. Az el˝obbi példa jelszavát a következ˝oképpen változtathatjuk meg: ✎ $ passwd Enter Changing password for "Joska" Joska’s Old password: 2pistA Enter Joska’s New password: 3juli Enter Re-enter Joska’s new password: 3juli Enter
ez nem jelenik meg ez sem jelenik meg a második beírás a véletlen elütést védi ki A fenti példából látható, hogy a jelszavakat csak a korábbi ismeretében változtathatjuk, ilyen módon is védve vagyunk az idegen beavatkozástól. Amennyiben hibásan gépeltük be a jelszavunkat, vagy az új jelszó kétszeri begépelése nem egyezik meg, hibaüzenetet kapunk és a változtatás nem következik be. A nevünket használó jogosulatlan belépések megakadályozásához tartsuk be a következ˝oket: - A jelszó nagyon fontos biztonsági eszköz a UNIX rendszerben, tartsuk jelszavunkat titokban!
FEJEZET 2. UNIX ALAPOK
18
- Ne használjuk jelszóként nyilvánvaló szavakat, pl. keresztnév, gyermek neve, stb.! Illesszünk a bet˝uk közé számo(ka)t is! - A rendszergazda beállíthatja, hogy a jelszó egy adott ido˝ múlva érvényét veszítse. Ha ez már küszöbön áll, meg kell változtatni jelszavunkat. Gyakori, hogy új felhasználóként az els˝o belépéskor a rendszer felszólít minket a jelszó azonnali megváltoztatására, amit ezután már a rendszergazda sem ismer. - Amennyiben elfelejtettük a jelszót, vagy más ok miatt nem tudunk belépni, akkor keressük fel a rendszergazdát, aki vagy új jelszót ad ki a számunkra, vagy kitörli a jelszót. Ilyenkor célszer˝u azonnal megváltoztatni az új jelszót.
2.1.3. Kijelentkezés Mindig jelentkezzünk ki a gépb˝ol, bármilyen rövid id˝ore is hagyjuk azt szabadon. Kijelentkezni többféleképpen lehet a rendszerbo˝ l. Lehet az exit paranccsal, a Ctrl és D billenty˝uk egyidej˝u lenyomásával, illetve bizonyos esetekben a logout utasítással2 . ✎ Példa: $ logout login:
Enter
vagy
Enter $ exit You have stopped jobs $ exit Enter login:
a rendszer figyelmeztet, hogy a háttérben még programjaink futnak a kilépéshez meg kell ismételni a parancsot
A kijelentkezés után a rendszer azonnal felkészül a következ o˝ bejelentkezésre.
2.1.4. A használt shell beállítása (chsh parancs) A bejelentkezés után egy ún. burok fogad minket. A rendszergazda több különböz˝o program közül választja ki az új felhasználó kezdeti burkát. Ha ez nekünk nem felel meg, a chsh paranccsal átállíthatjuk ezt. A parancs felsorolja a rendszerben található burkokat, kiírja, hogy éppen melyiket használjuk. Ezután megkérdezi, hogy meg akarjuk-e változtatni. Amennyiben igen, meg kell adnunk az új shell teljes nevét (pl. /bin/ksh). Az új shell a következo˝ bejelentkezést˝ol él. Megjegyezzük, hogy általában ezt a parancsot csak ritkán szükséges kiadni. Egy shellt a chsh helyett közvetlen futtatással (nevének beírásával) próbáljunk ki! 2
Ezt akkor kell használnunk, ha a csh -t, vagy hasonló burkot futtatunk.
2.2. A UNIX SHELL PARANCSOK
19
2.2. A UNIX shell parancsok A UNIX shell egy olyan interaktív program, amely egyszerre tölti be a parancs értelmez˝o (command interpreter) és az adatközvetíto˝ szerepét. A különböz˝o rendszerszolgáltatásokat, például nyomtatás, másolás, megjelenítés, keresés, szerkesztés, sorbaállítás, törlés, kommunikáció, stb. a shellnek eljuttatott parancsokkal valósíthatjuk meg. A shell promttal jelenkezik be, ami általában a $ jel, ez után lehet a parancsokat begépelni. A parancsokat általában egy sorban adjuk be: el o˝ ször a parancsot, majd az esetleges módosító kapcsolókat és argumentumokat. A parancsot az Enter billenty˝uvel zárjuk. Vigyázzunk, mert a UNIX rendszer megkülönbözteti a nagy és kisbetuket! ˝ A parancsok nagy részét kisbet˝uvel kell írni. Példaként vegyük a who parancsot, amely kilistázza az összes bejelentkezett ✎ felhasználót, a hozzájuk tartozó terminállal, valamint a bejelentkezési id o˝ pontjukkal együtt: $ who Joska root Zoli
Enter tty2 console ttyp4
Jan 02 10:02 Jan 02 07:56 Jan 22 22:45
Ha a shell parancs kiadása közben lenyomjuk az Enter billenty˝ut, akkor a rendszer vagy hibaüzenettel, vagy — megkezdett idézo˝ jelek esetén — egy ún. másodlagos prompttal (ez általában a > jel) jelzi. A másodlagos prompt esetén a rendszer várja annak lezárását. A másodlagos promptnál befejezhetjük a parancsot, de meg is szakíthatjuk azt a Ctrl - C billenty˝uk lenyomásával. Hibaüzenet esetén a begépelt parancs elveszik. Például az echo paranccsal kiírhatjuk a képernyo˝ re az idéz˝ojelek között sze- ✎ repl˝o szöveget: $ echo "Ennyi az Enter lenyomjuk az Enter -t még miel˝ott végeznénk >egesz" Enter befejezzük a parancsot Ennyi az egesz $
2.2.1. A parancs végrehajtásának megszakítása Bizonyos esetekben szükség lehet a parancs leállítására annak futása közben: például ha egy parancs már túl hosszú ideje fut, vagy közben eszünkbe jut, hogy nem
FEJEZET 2. UNIX ALAPOK
20
ezt az utasítást akartuk futtatni. A parancs leállítására a Ctrl és C billenty˝uk egyidej˝u lenyomása szolgál. Ezzel megszakítjuk a parancs futását, és visszakapjuk az eredeti shell promptot. A parancs futását — amikor az adato(ka)t kérdez be — a Ctrl és D egyidej˝u lenyomásával is megszakíthatjuk. A Ctrl-D a UNIX operációs rendszerben az adatállomány végét jelzi. Parancssorban alkalmazva a rendszer befejezi az adott parancssorozat végrehajtását, azaz így kilépünk a rendszerb o˝ l.3 Ha egymás után többször alkalmazzuk ezt a módot, akkor elo˝ ször a futó programot, aztán a shellt állítja le a rendszer.
2.2.2. A parancsok javítása Ha a parancsot hibásan gépeltük be, akkor a UNIX rendszer nem tudja végrehaj✎ tani és hibaüzenetet küld. Például: $ whoa Enter whoa: not found $
a shell válasza: nincs ilyen parancs
A gépelési hiba kijavítására a Backspace billenty˝u (esetleg a Ctrl - H kombináció, vagy a Delete ← felirattal ellátott gomb) szolgál. Ez törli a kurzor el˝ott álló karaktert. Bizonyos esetekben (pl. PC-s hálózati programnál) célszer˝u ✎ az általunk használt törl˝ogomb beállítása. Ezt pl. a Backspace gombra a $ stty erase
Backspace Enter
utasítással tehetjük meg. A kurzort mozgató gombok a UNIX rendszerben általában csak „különleges” shell programok (pl. tcsh, bash) esetén használhatók a parancsok javítására! Az egész parancssor törlésére a Ctrl - U billenty˝uk szolgálnak. Ezt akkor használjuk, ha túl sokat hibáztunk a parancs beírásakor.
2.2.3. Az utasítások kapcsolói A kapcsolók az alaputasítás végrehajtását módosítják. Szinte minden utasítás rendelkezik kapcsolóval. A kapcsolókat az utasítás után a mínusz (-) vagy ritkábban a plusz (+) jellel elválasztva adjuk meg. A kapcsolók általában egy bet˝ub o˝ l állnak. A UNIX operációs rendszer itt is megkülönbözteti a kis- és nagybet˝uket! 3
Ez nem mindig van így, pl. csh vagy tcsh shell esetén esetén az ignoreeof környezeti változó értékét˝ol függ˝oen m˝uködik.
2.2. A UNIX SHELL PARANCSOK
21
A kapcsolókat az utasítástól illetve annak argumentumaitól szóköz(ök) választják el. Ha az egyes kapcsolókat külön-külön adjuk meg, akkor azok közé szintén szóköz(ök) kellenek. A következ˝o példákban egy feltételezett felhasználói könyvtárban nézzük az ✎ állományok listáját4 : Az ls parancs az aktuális könyvtárban levo˝ állományok felsorolását adja:
✎
$ ls Enter choice cm kocsi log test Mail
A -l kapcsoló módosítja az ls utasítás alapértelmezését, és állományok részletes ✎ listáját írja ki (ami oszloponként a következo˝ t tartalmazza: védelmi (hozzáférési) státusz, link szám, a file birtokosa (felhasználó és csoport), méret byte-ban, az utolsó változtatás ideje és a file neve): $ ls -l Enter total 20 -rw-w--w--rw-w--w--rw-w--w--rw-w--w--rwxr-xr-x drwx--x--x
2 1 1 1 1 2
galahad galahad galahad galahad galahad galahad
lovag lovag lovag lovag lovag lovag
3910 21 198 5 31 512
Oct Oct Oct Dec Oct Jul
26 26 26 05 26 06
1992 1992 1992 1992 1992 1992
choice cm kocsi log test Mail
A -a-l kapcsoló részletesen kilistázná a könyvtárban levo˝ összes állományt (be- ✎ leértve a .-tal – ponttal – kezd˝od˝oeket is5 ), ha az ls -a-l helyett az ls -a -l (vagy az ezzel azonos az ls -al) parancsot írtunk volna, azaz $ ls -a-l Enter bad switch
helyett a következ˝o a helyes: $ ls -a -l Enter total 32 drwxr-xr-x 3 galahad drwxr-xr-x 9 galahad -rw-r--r-1 galahad 4
✎
lovag lovag lovag
512 Dec 05 1992 1024 Mar 05 11:45 166 Nov 02 1992
. .. .index
Amennyiben ezeket a parancsokat saját könyvtárunkban kipróbáljuk, az eredmények általában nem fognak megegyezni az itt szereplo˝ kkel. 5 Ezek általában speciális állományok, ezért nem listázza ki o˝ ket az ls alapértelmezésben.
FEJEZET 2. UNIX ALAPOK
22 -rw-w--w--rw-w--w--rw-w--w--rw-w--w--rwxr-xr-x drwx--x--x
✎
1 1 1 1 1 2
galahad galahad galahad galahad galahad galahad
lovag lovag lovag lovag lovag lovag
3910 21 198 5 31 512
Oct Oct Oct Dec Oct Jul
26 26 26 05 26 06
1992 1992 1992 1992 1992 1992
choice cm gral log test Mail
Érdekes kivétel a következ˝o parancs: $ who am i galahad
Enter tty2
Jan 02 10:02
amely kiírja az éppen aktuális felhasználói nevünket (ez nem is olyan felesleges pl. több gép egyszerre való használatakor).
2.2.4. Az utasítások argumentumai A kapcsolók mellett a UNIX operációs rendszer utasításainak nagy része paramétereket is elfogad. Amíg a kapcsolók módosítják az adott parancs hatását, addig a paraméterek határozzák meg, hogy mire vonatkozik az utasítás. A parancs után el˝oször a kapcsoló(ka)t, majd a paramétereket adjuk meg szóközökkel elválasztva. ✎ Általában több paraméter is megadható. A már korábban is említett echo parancs például az argumentumát jeleníti meg a képernyo˝ n: Enter parancs és paraméter $ echo haliho haliho az echo parancs által megjelenített paraméter
2.2.5. A man parancs A UNIX operációs rendszerben a parancsokról részletes (angol nyelv˝u) leírást kaphatunk a man (manual) parancs használatával. A man parancs után megadva a kérdéses utasítás nevét a Szóköz billenty˝ure laponként, Enter -re soronként írja ki az információt a rendszer. Ha abba akarjuk hagyni, a q billenty˝ut nyomjuk meg. Ha egy Kulcsszót szeretnénk keresni a kézikönyvben, akkor a $ man -f Kulcsszó
utasítással azoknak a fejezeteknek a rövid listáját kapjuk meg, amiben ez a kulcsszó szerepel. ✎ Például az ls parancs leírását a $ man ls
Enter
utasítással kaphatjuk meg.
3. fejezet Állományok használata 3.1. A UNIX állományok A számítógépeken az információt file-ban (állományban) tároljuk. Az információ lehet szöveg, adat, kép vagy akár hang is. Állományban tárolja a rendszer a futtatható programokat is. A UNIX operációs rendszerben az állományok maximális méretét általában a rendszergazda korlátozza. A fizikai eszközök tárolókapacitása szintén határt szab az állományokban tárolható információknak. A UNIX operációs rendszer az állományokra a nevükkel hivatkozik. Az állományok nevét bizonyos minimális megkötésekkel és fenntartott nevek kivételével szabadon választhatjuk meg. A pont (.) kezdet˝u fileneveket a burok (shell) ill. az egyik leggyakrabban használt parancs, az ls különlegesen kezeli. Ezek általában ún. inicializáló állományok, és — hacsak külön nem kérjük – nem látszódnak listázáskor. Minden állomány valamelyik felhasználóhoz tartozik, aki általában az, aki létrehozta a állományt. Az állományok tipikusan a merevlemezen helyezkednek el, de hajlékony mágneslemezen, optikai lemezen, vagy mágnesszalagon is lehetnek. A UNIX operációs rendszer feljegyzi minden file utolsó módosításának és utolsó használatának idejét. A UNIX rendszerekben az állománytörléssel felszabadított helyet a rendszer akár azonnal is lefoglalhatja, így itt nincsen undelete típusú parancs a törölt állomány visszaállítására. A törlés a UNIX-ban VÉGLEGES! 23
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
24
3.1.1. Az állományok típusai Háromfajta állomány létezik a UNIX operációs rendszerben: • a „közönséges” állományok tartalmazhatnak szövegeket, adatokat, adatbázisokat, de akár futatható programokat is. Általában ezeket az állományokat használjuk. • az ún. speciális állományok az operációs rendszer számára tartalmaznak információt. Ezek általában egy rendszer adott hardware eszközeinél használatosak. Az átlagos felhasználó csak ritkán használja ezeket. • a könyvtárállományok segítik az állományok rendszerezését (a UNIX könyvtárrendszerr˝ol a 37. oldalon található részletes leírás). A rendszer könyvtárai a / (gyökér) könyvtárból indulnak ki, és fa-struktúrát alkotnak. A felhasználó saját maga alakíthatja ki saját könyvtárállományait (általában csak a bejelentkezési könyvtára alatt, de bizonyos estekben (pl. scratch disk1 ) máshol is hozhatunk létre könyvtárat).
3.1.2. Állományok létrehozása A legegyszer˝ubb módon a (a kés˝obbiekben tárgyalandó) cat parancsot használhatjuk állományok létrehozásához. A késo˝ bbi példákhoz hozzuk létre a gyakorlas ✎ állományt a következ˝o parancssorozattal (csak a vastagbet˝us részt kell begépelnünk, a szóközökkel együtt): $ > > > > > > >
cat > gyakorlas <
’ es a * Enter Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42 Enter ALLJ Enter
Ellen˝orzésképpen írassuk ki az állományt: $ cat gyakorlas Enter Ez egy proba sor ami csak betuket tartalmaz Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 1
A scratch disken az állományok általában csak néhány napig (esetleg hétig) maradnak meg, utána a rendszer törli o˝ ket.
3.2. ÁLLOMÁNYOK KILISTÁZÁSA
25
Ebben a sorban nehany furcsa karakter van % @ ! Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
$ > > > >
Ugyanígy hozzuk létre a rovidfile állományt is cat > rovidfile «"ALLJ" Enter Ez egy egyszeru szovegfile, ami semmire sem jo, Enter csak hogy tanuljuk vele a UNIX operacios rendszer Enter hasznalatat. Enter ALLJ Enter
3.2. Állományok kilistázása Az állományok kilistázására az ls parancs szolgál. A lista formátumát sokféle kapcsolóval módosíthatjuk. Példák: Hat file van az adott könyvtárban: choice, cm, kocsi, log, test és a Mail: ✎ $ ls Enter choice cm kocsi log test Mail
Leellen˝orizzük, hogy az adott choice file megtalálható-e az adott könyvtár- ✎ ban: $ ls choice choice
Enter
Ha az adott file nincs benne az adott könyvtárban, akkor hibaüzenetet kapunk: ✎ $ ls rossz-szoveg Enter rossz-szoveg: No such file or directory
A parancs a -s kapcsoló hatására kiírja a állományok nevét, és diszkblokkok- ✎ ban2 mért méretét: $ ls -s 2
Enter
Ez a helyi rendszert˝ol függ, lehet 512 byte, de lehet 1, 2 so˝ t 4 kbyte is.
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
26 total 1475 1 cm 1 log 4 choice 1 cm
✎
1 Mail 1 test
A parancs a -l kapcsoló hatására kiírja az állományok, ill. könyvtárak (könyvtár esetén az els˝o bet˝u d, míg közönséges állománynál -) hozzáférési jogait (lásd kés˝obb), a rájuk vonatkozó kapcsolatok számát, a tulajdonosuk nevét és felhasználói csoportját3 , a hosszát byte-okban, az utolsó módosításuk idejét, végül a nevét: Enter $ ls -l total 5 -rw-w--w-1 galahad lovag 3910 Oct 26 1992 choice -rw-w--w-1 galahad lovag 21 Oct 26 1992 cm -rw-w--w-1 galahad lovag 198 Oct 26 1992 gral -rw-w--w-1 galahad lovag 5 Dec 05 1992 log -rwxr-xr-x 1 galahad lovag 31 Oct 26 1992 test drwx--x--x 2 galahad lovag 512 Jul 06 1992 Mail A Mail könyvtár, minden állománynak galahad a tulajdonosa, valamint minden állomány a lovag csoportba tartozik, a gral hossza 198 byte és 1992. október
26-án volt utoljára módosítva. ✎ A parancs a -a kapcsoló hatására kiírja az aktuális könyvtárban lev o˝ összes file-t, beleértve a bizonyos szempontból rejtett, ponttal kezdo˝ d˝o állományokat is: $ ls -a . cm
✎
Enter .. gral
.index log
choice test
Mail
A -F kapcsoló hasznos lehet akkor, ha meg szeretnénk állapítani az aktuális könyvtárban lev˝o állományok típusát: $ ls -F cm
Enter gral
log neve után álló / arra
choice
Mail/
test*
A file utal, hogy a bejegyzés könytár, a * pedig arra, hogy az végrehajtható program. Hasznos az állományok elnevezésekor a következo˝ kre figyelni: - állományok létrehozásánál ügyeljünk arra, hogy a filenév egyedi legyen egy adott könyvtáron belül, különben felülírjuk az adott név alatt már létez o˝ állományt. Különböz˝o könyvtárakban természetesen lehetnek azonos nev˝u 3
BSD alapú rendszerekben ehhez esetleg a -g kapcsolót is használni kell.
3.3. ÁLLOMÁNYOK TARTALMÁNAK MEGJELENÍTÉSE
27
állományok. Például, ha létrehoztuk a /usr/galahad/test és a /usr/galahad/Mail könyvtárakat, akkor mind a kett˝oben tarthatunk egy-egy proba nev˝u állományt, melyek tartalma különböz˝o. - Válasszunk beszédes neveket, hogy a késo˝ bbiekben is tudjuk, mit tartalmaz az adott file. - Használhatunk kis- és nagybet˝uket, illetve ezek kombinációját is az állománynevek megadásakor. Ügyeljünk arra azonban, hogy a UNIX operációs rendszer megkülönbözteti a kis- és nagybet˝uket, így az állománynévre való hivatkozáskor ezeket helyesen kell begépelni. - Az állomány nevében a bet˝ukön, számokon kívül bármelyik ASCII karakter használható, kivéve az ASCII 0, és a / karaktereket. A speciális karakterek közül leggyakrabban a pont (.), az aláhúzás (_), valamint a köt o˝ jel (-) használatos.
-
-
-
-
FIGYELEM! Ne kezdjük az állomány nevét köto˝ jellel (-), mert ez zavaró lehet a burok (shell) számára, és kapcsolóként értelmezi az utána jöv o˝ karaktereket. Ne használjunk állománynévben olyan speciális karaktereket, mint a vessz o˝ (,), az idéz˝ojelek (’ vagy "), mivel ezek különleges jelentéssel bírnak a shellekben. Az állománynév minimum egy, maximum 256 karakter hosszú lehet (a maximumot bizonyos állományrendszerekben 14-16 karakterre korlátozzák). hasznos lehet a ugyanolyan végz˝odések használata az állománynevekben. Például a levélállományoknak a .lev végzo˝ dést adhatjuk, így pl. a galahad nev˝u felhasználótól kapott levelet a galahad.lev állományra keresztelhetjük el. néhány program automatikusan generál végzo˝ déseket. Például a C fordítóprogram létrehoz egy ún. object állományt, amit a .o végzo˝ déssel lát el. A forráskódú programokat a kialakult szokás szerint az adott programozási nyelvre utaló végz˝odéssel látjuk el. Így például a C nyelv˝u programok a .c, a FORTRAN nyelv˝u programok a .f végz˝odést kaphatják.
3.3. Állományok tartalmának megjelenítése Sokszor szükségünk van az állományok tartalmának megjelenítésére a képerny o˝ n. Erre a célra ugyan szövegszerkeszt˝oket is használhatunk (pl. vi-t), de sokszor
28
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
hatékonyabb a cat, a pg vagy a more parancsok használata. A cat parancsot célszer˝u rövidebb állományok esetén használni, melyek tartalma elfér egy képerny˝ooldalon, míg hosszabb állományok megjelenítésére inkább a pg és a more parancs a célszer˝u. A pg és a more parancsokat csak szövegállományokra adjuk ki. A nem szöveg típusú (bináris vagy könyvtár típusú) állományokból ilyen módon nem nagyon lehet információt kiolvasni, s˝ot a bináris állományokban található speciális karakterek elállíthatják terminálunkat.
3.3.1. A cat parancs Kisebb állományok megjelenítésére a UNIX operációs rendszerben a cat parancsot használjuk az állomány(ok) nevével, mint paraméterrel. Egyszerre több állománynév is megadható, ilyenkor a rendszer a megadott sorrendben jeleníti meg az állományok tartalmát. A paraméterlistában használhatjuk a burok (shell) helyettesít˝o karaktereit, a csillagot (*), amely egy tetszo˝ leges stringet helyettesít, vagy a kérd˝ojelet (?), amely egy tetsz˝oleges bet˝ut helyettesít (ezekr˝ol a 3.7 fejezetben, a 34. oldalon. található b˝ovebb magyarázat). Példák: ✎ A 24. oldalon látható módon, a gyakorlas állományhoz hasonlóan a rovidfile állomány tartalmát így írathatjuk ki : $ cat rovidfile Enter Ez egy egyszeru szovegfile, ami semmire sem jo, csak hogy tanuljuk vele a UNIX operacios rendszer hasznalatat.
✎
Két (vagy több) állománynévvel a megadott sorrendben, elválasztás nélkül íródnak ki az állományok: Enter $ cat gyakorlas rovidfile Ez egy proba sor ami csak betuket tartalmaz Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42 Ez egy egyszeru szovegfile, ami semmire sem jo,
3.3. ÁLLOMÁNYOK TARTALMÁNAK MEGJELENÍTÉSE
29
csak hogy tanuljuk vele a UNIX operacios rendszer hasznalatat.
3.3.2. Nagyobb állományok megjelenítése Nagyobb állományok megjelenítésekor hasznos a pg vagy a more parancs, mivel ezek formázva jelenítik meg az állományok tartalmát. Egyszerre csak egy képerny˝ooldalnyi anyag jelenik meg az állományból, és utána a pg, ill. a more parancs megkérdezi, hogy mit csináljon. Lehet tovább olvasni az állományt, befejezni az állomány olvasását, de akár visszafelé is mozoghatunk az állományban. A hosszú állományok tartalmának megjelenítésére általában rendelkezésre áll a less parancs is, amely a more program kib˝ovített változatának tekinthet˝o. Az állományok elejének megtekintésésre a head parancsot, végének megtekintésésre a tail parancsot használhatjuk, amelyek alapértelmezésben 10 sorra vonatkoznak. A pg utasítás Az állomány megjelenítésére a pg parancs paramétereként a megjelenítend o˝ állomány(ok) nevét kell megadni. Az els˝o képerny˝ooldal után a képerny˝o alján egy kett˝ospont (:) prompt jelenik meg. Például nézzük meg a gyarolas állományt: ✎ $ pg gyakorlas Enter Ez egy proba sor ami csak betuket tartalmaz Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * :
Az esetleges következ˝o lap megjelenítéséhez nyomjuk le az Enter billenty˝ut. Átugorhatunk egyszerre több lapot is, ha a (:) promptnál a plusz (+) billenty˝ut és egy számot nyomuk le. A szám értéke mondja meg, hogy hány lapot óhajtunk átugrani. Például három lap átugrásához +3-at gépelünk be, majd leütjük az Enter -t.
30
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
Visszalapozni az el˝oz˝ohöz hasonlóan a mínusz (-) utasítással tudunk. Például két oldalt a -2 Enter beütésével lapozunk vissza. A megjelenítés befejezését a q Enter begépelésével érjük el. Ezután a shell promptnak kell megjelennie. Ha az állomány végére érünk, a pg parancs befejezi a megjelenítést, és visszatér a shellbe. A pg parancs még számos, egyéb lehet˝oséget is kínál, például keresés a szövegben, file m˝uveletek, parancsok végrehajtása a shellben, amelyeket a : promptnál beírt h Enter (help) információ lekérésével nézhetünk meg. A more utasítás A pg parancshoz hasonlóan m˝uködik a more parancs is: $ more gyakorlas Enter Ez egy proba sor ami csak betuket tartalmaz Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42 --More-(99%)
A parancs megjeleníti a file tartalmát a képernyo˝ n, és a képerny˝o legalsó sorában a képerny˝on már látott állományrész hosszát jelzi százalékban. A Szóköz billenty˝u leütésével laponként, az Enter leütésével soronként tudunk haladni az állományban. Az el˝ore lapozást az f , a visszafelé lapozást pedig a b billenty˝u leütésével is végezhetjük. Itt is a q billenty˝u leütésével szakíthatjuk meg a more futását. A more, a pg parancshoz hasonlóan számos egyéb funkcióval is rendelkezik (keresés, shell parancsok), amit a h (help) billenty˝u leütésével (help) kapott táblázatban nézhetünk meg. Egy érdekes és sokszor hasznos lehet˝osége a more parancsnak, hogy a v billenty˝u leütésével a vi editort lehet meghívni. Ekkor a vi-t használhatjuk a file kezelésére, és akár át is szerkeszthetjük az állományt. Itt hívjuk fel a figyelmet arra, hogy — bár ez rendszerro˝ l rendszerre eltér˝o lehet — a man parancs (manuál) leggyakrabban szintén a more-t használja a szöveg megjelenítésére.
3.4. ÁLLOMÁNYOK MÁSOLÁSA, ÁTNEVEZÉSE ÉS TÖRLÉSE
31
3.4. Állományok másolása, átnevezése és törlése 3.4.1. Állományok másolása Állományokról másodpéldány készítésésére a cp parancs szolgál. Például a
✎
$ cp gyakorlas masolat Enter a gyakorlas állomány tartalmát átmásolja a masolat nev˝u állományba.
Amennyiben létezhet olyan nev˝u állomány, amelyikre rá akarunk másolni, használjuk a -i kapcsolót. Ez meger˝osítést kér minden olyan állománynál, amelyet felül kellene írni. Vigyázzunk a cp parancs haszálatakor, mivel a másolás során — egy régebbi állományra való másolással — könnyen megsemmisíthetünk adatokat ha nem használjuk ezt a kapcsolót! Adjuk ki újra az el˝oz˝o példa parancsát a -i kapcsolóval ✎ Enter $ cp -i gyakorlas masolat overwrite masolat? y Enter
A rendszer ilyenkor megkérdezi, hogy felülírja-e a masolat állományt. Amenynyiben erre y-nal (yes) válaszolunk, akkor felülírja, egyébként a másolás nem történik meg. A cp parancsnak egyszerre több állománynevet is megadhatunk, s o˝ t a shell ún. kifejt˝o mechanizmusa révén helyettesít˝o karaktereket is használhatunk (l. 34. oldal). A parancs így használható pl. egy könyvtár tartalmának átmásolására egy másik könyvtárba4 (kivéve a .-al kezd˝od˝o állományokat). Például a ✎ $ cp * masik
Enter
átmásolja az aktuális könyvtárban lev˝o összes állományt a masik nev˝u alkönyvtárba. A parancs a könyvtárakat nem másolja. Könyvtárakat a teljes alkönyvtárrendszerükkel együtt a -r kapcsoló 5 segítségével másolhatunk át. Például a ✎ $ cp -r /usr/user /u/user/tmp Enter átmásolja a /usr/user könyvtár összes állományát és az abból nyíló összes alkönyvtárat a /u/user/tmp könyvtárba. Ezáltal a teljes /usr/user könyvtárban lév˝o állománystruktúra megjelenik a /u/user/tmp könyvtárban is.
A cp utasítás – ugyanúgy, mint a többi állománykezelo˝ parancs – hibajelzéssel áll meg, ha nincs engedélyünk arra, hogy az adott helyre írjunk (l. a 3.9 fejezetet, a 42. oldalon). 4 5
A UNIX könyvtárrendszerr˝ol a 37. oldalon található részletes leírás. Bizonyos UNIX rendszereknél ez a kapcsoló nem m˝uködik.
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
32
3.4.2. Állományok átnevezése (mv) Állományok átnevezésére vagy átmozgatására az mv parancs szolgál. A parancs kérdezés nélkül felülírja a már létez˝o állományokat, de ennek elkerülésére használhatjuk a cp parancsnál már említett -i kapcsolót. Ha meg szeretnénk tartani a file eredeti nevét más könyvtárba való másolásnál, ✎ akkor elegend˝o, ha az mv utasítás céljaként a könyvtárat adjuk meg. Például a $ mv level /u/user/test Enter átmozgatja a level állományt tárba az eredeti level néven.
az aktuális könyvtárból a /u/user/test könyv-
Az mv parancsnak — a cp parancshoz hasonlóan — több állománynevet is megadhatunk, de ilyenkor a legutolsó argumentumnak (a célnak) könyvtárnak kell lennie.
3.4.3. Állományok törlése Állományokat az rm paranccsal törölhetünk. Egyszerre több állományt is megadhatunk, s˝ot a shell kifejt˝o mechanizmusa révén helyettesít˝o karaktereket is használhatunk. Az rm parancs kérdezés nélkül töröl minden megadott állományt. A -i kapcsolóval a törlés el˝ott — a cp-hez hasonlóan — az rm rákérdez, és törlési meger˝osítést vár minden egyes állományra. Amennyiben biztosítani szeretnénk ✎ magunkat a véletlen törlések ellen, akkor az alias rm="rm -i" parancssort kell a $HOME/.profile állományba beírni. használni fogja a -i kapcsolót.
Ekkor a rm automatikusan
Az rm parancsnak egyszerre több állománynevet is megadhatunk, s o˝ t a shell ún. kifejt˝o mechanizmusa révén helyettesít˝o karaktereket is használhatunk. A -r kapcsoló rekurzív törlést eredményez, azaz a megadott könyvtártól lefelé a teljes alkönyvtár rendszerben sor kerül a törlésre, az utasítás még a könyvtárakat is kitörli. A $ rm -r *
Enter
a UNIX egyik „leghatásosabb” parancsa, az adott könyvtártól kezdve felszámolja a teljes állománystruktúrát, és még az alkönyvtárakat is kitörli! Csak akkor adjuk ki, ha valóban törölni akarunk mindent! A UNIX rendszerekben az állománytörléssel felszabadított helyet a rendszer akár azonnal is lefoglalhatja, így itt nincsen undelete típusú parancs a törölt állomány visszaállítására!
3.5. SZÖVEG KERESÉSE: A GREP PARANCS
33
3.5. Szöveg keresése: a grep parancs A grep paranccsal gyorsan megkereshetünk egy adott szöveget (karaktermintát) ☞ grep az állományokban. A keresett minta lehet egy szó, vagy bet˝uk és számok valami- részletes leírása a 107. féle csoportja. Ha a grep parancs megtalálja a mintát, akkor a mintát tartalmazó oldalon sort kiírja a képerny˝ore. A parancs használatához meg kell adni a keresett karaktersort és azt az állományt (vagy állományokat), amely(ek)ben keresni akarunk. Ha a karaktersor több szóból áll, vagy szóköz(öke)t tartalmaz, akkor aposztrófok közé kell tenni (nem tévedhetünk, ha mindig aposztrófok közé tesszük a keresett szót). Példák: ✎ Enter $ grep ebben gyakorlas Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
A parancs kilistázza azt a sort a gyakorlas nev˝u file-ból, amelyben a ebben szó szerepel. Természetesen a grep parancs is megkülönbözteti a keresett karaktersorban a kis és nagybet˝uket, ezt a különbségtételt azonban a -i kapcsolóval kikapcsolhatjuk: ✎ $ grep -i ebben gyakorlas Enter Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
A grep parancs alapesetben kiírja a képernyo˝ re az állományok azon sorait, amelyekben a keresett karaktersorozatot megtalálta. Amennyiben a -n kapcsolót megadjuk, a sorok el˝ott azok sorszáma is megjelenik. Néha arra van szükség, hogy csak a állományok nevét kapjuk meg, amelyekben ez a minta el˝ofordul. Ilyenkor a -l (list) kapcsolót használjuk: ✎ $ grep -l ’egy’ * gyakorlas rovidfile
Enter
3.6. Állományok sorbarendezése a sort utasítás Néha szükségünk van arra, hogy egy állomány tartalmát valamilyen módon sorba ☞ sort részletes rendezzük: erre a sort parancs szolgál. leírása a 127. oldalon
34
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
A sort utasítás minden sor legels˝o karaktere szerint m˝uködik. Ha az els˝o karakterek megegyeznek, akkor a második, harmadik, stb. karaktereket hasonlítja össze. A sorbarakás a szokásos ASCII kódok esetén az írásjelek – számok – nagybet˝uk – kisbet˝uk sorrend szerint történik. A -r kapcsolóval a rendezési sorrendet teljesen megfordíthatjuk. Az állomány sorai néha oszlopokba rendezett adatok mezo˝ it tartalmazzák. A mez˝ok között valamilyen határoló vagy elválasztó jelnek kell állnia, ez alapesetben a szóköz vagy a tabulátor. Ha sort parancsot a +Szám kapcsolóval használjuk, a Szám által meghatározott mez˝ot kihagyva végzi a sorbarendezést. A -Szám hatására a rendezés a Számnál megadott mezo˝ nél ér véget. Például rendezzük sorba a korábban létrehozott gyakorlas (l. 24. oldalon) ✎ állományt : Enter $ sort gyakorlas A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Ez egy proba sor ami csak betuket tartalmaz Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
A következ˝o parancs a sorbarendezést az ötödik mezo˝ n (az ötödik szónál) ✎ kezdi el, és a hetedik mez˝onél fejezi be: $ sort +4 -7 gyakorlas Enter Ez egy proba sor ami csak betuket tartalmaz Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42 Ebben a sorban nehany furcsa karakter van % @ ! A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42
3.7. A UNIX helyettesít˝o karakterei A UNIX operációs rendszerben lehet˝oség van arra, hogy a parancsokban szereplo˝ egyes konkrét kifejezéseket (pl. állományneveket), illetve bizonyos stringeket felsorolás helyett egy mintával való azonosság alapján adjuk meg. Állományokra való hivatkozáskor a kérdo˝ jel (?) az állomány nevében egy
3.7. A UNIX HELYETTESÍTO˝ KARAKTEREI
35
karaktert helyettesíthet, ennek helyén a névben bármilyen karakter (de csak egy) állhat, kivéve a névkezd˝o .-ot. A csillag (*) karakter az állomány nevében minden bet˝usorozattal (nem csak egy karakterrel) helyettesítheto˝ . Egy adott karakterhalmazt a [] jelek között felsorolva a kifejezés a halmaz bármelyik tagjával megegyezik. Egy tartományt kijelölhetünk a két végkarakter közé tett mínusz jellel. Szövegben a pont (.) egyezik meg egy bármilyen karakterrel, míg a csillag (*) az o˝ t megel˝oz˝o karakter tetsz˝oleges számú (akár nulla) ismétl˝odésével egyezik meg. A ^ a sor elejével, a $ a sor végével egyezik meg. Szövegekben a egy adott karakterhalmazt az állományneveknél említett módon, a [] jelekkel tudunk kijelölni. A helyettesít˝o karakterek használatakor a shell el˝oször kifejti a karaktereket és a kapott file listát adja tovább a parancsnak. Ha a helyettesíto˝ karaktereket tovább akarjuk adni paraméterként egy parancsnak, akkor azokat macskaköröm (") vagy aposztróf (’) jelek közé kell zárni. Az aposztróf minden speciális karak\ tert megvéd, míg a macskaköröm nem védi a $, \ és a (visszafelé aposztróf) karaktereket6 . Speciálisan az ún. backslash (\) megvédi a kifejtésto˝ l a közvetlenül utána jöv˝o karaktert. Az elmondottakat a következ˝o példákon érthetjük meg: A következ˝o parancs kilistázza az összes a-val kezdo˝ d˝o két bet˝us állományt a ✎ /bin könyvtárban Enter $ ls /bin/a? /bin/ar /bin/as
A következ˝o utasítás kilistázza az összes a-val kezd˝od˝o file nevet: $ ls /bin/a* Enter /bin/acledit /bin/aclget
/bin/aclput /bin/adb
/bin/adfutil /bin/ar
✎
/bin/as /bin/awk
A kövekez˝o parancs kilistázza az összes file-t, aminek nevében az ar karak- ✎ terek el˝ofordulnak: $ ls /bin/*ar* Enter /bin/ar /bin/sysdumpstart /bin/startsrc /bin/tar
6
/bin/xargs
Ezek részletes magyarázatát a 83. oldalon, a Korn shell leírásában találhatjuk meg.
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
36 ✎
A grep parancsnál is használhatjuk a helyettesíto˝ karaktereket. Az el˝oz˝o grep példákat folytatva a következ˝o parancs kiírja a ma + egy karakter kifejezést tartalmazó sorokat: Enter $ grep ma. gyakorlas Ez egy proba sor ami csak betuket tartalmaz Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 !
✎
Ha az összes, számot tartalmazó sorra kíváncsiak vagyunk, akkor a következ o˝ kifejezés a célszer˝u: $ grep ’[0123456789]’ gyakorlas Enter Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
✎
Az el˝oz˝o utasítás helyett használhatjuk a következo˝ tömörebb kifejezést is: Enter $ grep ’[0-9]’ gyakorlas Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
✎
Az összes soreleji Ebb kifejezést a következ˝o utasítás keresi meg: $ grep ’^Ebb’ gyakorlas Enter Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ !
✎
A következ˝okben speciális karaktert keresünk: Enter $ grep ’*’ gyakorlas A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
✎
Használhatjuk a \-t is: Enter $ grep \* gyakorlas A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
✎
Ha a $ grep ’$’ gyakorlas
Enter
3.8. KÖNYVTÁRAK HASZNÁLATA
37
parancsot adjuk ki, ez minden sort kiír (minden sornak van vége!): Ez egy proba sor ami csak betuket tartalmaz Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Itt mar szamok is vannak a furcsa karakterekkel egyutt 1 % @ 42 ! A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
ezért $ karaktert csak levédve kereshetünk:
✎
$ grep ’\$’ gyakorlas Enter A sorban a UNIX metakarakterei is itt szerepelnek $ > ’ es a * Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
3.8. Könyvtárak használata A könyvtárak olyan speciális állományok, amelyek más állományok szervezésére és csoportosítására használatosak. A UNIX operációs rendszer könyvtárai egy hierarchikus fastruktúrát alkotnak. Például egy elképzelt rendszerben a következ o˝ oldalon látható struktúra alakulhat ki. A UNIX könyvtár-rendszerének tetején helyezkedik el a gyökér könyvtár, amit a / jel jelöl. Innen kiindulva minden file elérheto˝ a rendszerben. Az elérési utat path-nak (ösvény, útvonal) hívjuk. A könyvtárak más könyvtárakat vagy állományokat tartalmazhatnak. Minden könyvtárnak van parent ("szül o˝ ") könyvtára, amelyik a struktúrában felette álló könyvtár. Az egyedüli kivétel a gyökér (/) könyvtár. A felhasználó HOME könyvtára és a hozzá tartozó file-ok és az alkönyvtárrendszer csak egy kis részét alkotja a UNIX teljes könyvtárrendszerének. A HOME könyvtár az a könyvtár, amibe a felhasználó bejelentkezés után automatikusan bekerül. Az el˝oz˝o példában pl. galahad HOME könyvtára a /u/lovag/galahad, míg a sirrobiné a /u/lovag/sirrobin. A HOME könyvtár alatt a felhasználó létrehozhatja saját könyvtárrendszerét. Az éppen használt könytárat aktuális munkakönyvtárnak nevezzük (CWD, current working directory). Ezt kiírathatjuk, ill. a gyökér könyvtárhoz viszonyított útvonalat lekérdezhetjük a ✎ $ pwd Enter /u/lovag/galahad
38
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
/ ! Z ! Z ! ! Z !! Z ! Z ! u dev bin b , A , b b A , b , A b tty0 rst1 lovag local , bb A b , A b , b AA b , galahad sirrobin bin b C b % D ll b C % D b l b C % D l b % C b D l gral proba test artur elevel Mail T T T T T TT TT incoming
Egy elképzelt UNIX állományrendszer struktúrája.
Könyvtár Speciális (hardver) file „Közönséges” file
3.8. KÖNYVTÁRAK HASZNÁLATA
39
paranccsal. A parancs információja szerint pl. most a galahad felhasználó HOME könyvtárában vagyunk7 (az egymás alatti alkönyvtárakat a / jel választja el egymástól). A UNIX rendszerben bárhol, ahol állománynevet adhatunk meg, használhatjuk az állományt az elérési útvonallal együtt. Azaz — ha az elo˝ z˝o példában megadott könyvtárban vagyunk — a test állományt a /u/lovag/galahad/test néven is megadhatjuk. A /u/lovag/galahad/test nevet bármelyik könyvtárból használhatjuk, ez mindig erre az állományra hivatkozik.
3.8.1. Abszolút és relatív útvonal Az útvonal megadásánál kétféle leírást használhatunk. Az abszolút útvonal-név megadásakor a gyökér (/) könyvtárból indulunk és leírjuk a teljes útvonalat. Ilyen útvonal lehet pl. a /u/local/bin. A relatív útvonal-név az éppen aktuális könyvtárból adja meg az elérési útvonalat. Például ha a galahad felhasználó a HOME könyvtárában van benn, akkor a Mail/incoming adja meg a Mail alkönyvtárbeli incoming állomány elérését. Minden könyvtárban használhatjuk a .. jelölést, ami egy olyan speciális állomány, ami az egy szinttel feljebb lev˝o könyvtárra mutat. Amennyiben a felettünk lev˝o könyvtárból nyíló alkönyvtárra akarunk hivatkozni, akkor a ../ után írjuk be az alkönyvtár nevét. Például, ha a /u/lovag/galahad/Mail könyvtárban vagyunk benn, akkor a ../../../sirrobin/artur adja meg a /u/lovag/sirrobin könyvtárbeli artur állomány elérését. A .. jelhez hasonlóan lehet használni a . jelölést, ami az éppen aktuális munkakönytárra hivatkozik.
3.8.2. A könyvtárrendszer használata A könyvtárak között a cd paranccsal lehet mozogni. Ha egy könyvtárból annak egy Alkönyvtárába mozgunk akkor elég a cd Alkönyvtár
parancsot kiadni. Ha más könyvtárba mozgunk, ki kell írni a teljes elérési útvonalat. Két szinttel feljebb pl. a ✎ $ cd ../..
Enter
paranccsal juthatunk. 7
Természetesen saját gépünkön valamilyen más eredményt kapunk.
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
40
3.8.3. Állományok másolása, mozgatása és linkelése Másolni és mozgatni állományokat a már említett cp ill. mv paranccsal tudunk. ✎ Az el˝oz˝o példáknál maradva a $ cp /u/lovag/sirrobin/artur .
✎ parancs az aktuális könyvtárba másolja az artur állományt. A $ mv /u/lovag/sirrobin/* .
parancs az összes, a /u/lovag/sirrobin könyvtárban lévo˝ állományt átmozgatja az aktuális könyvtárba8 . Ekkor — mivel az eredeti helyr˝ol az állományok kitörl˝odnek — természetesen törlési jogunknak kell lennie a /u/lovag/sirrobin könyvtárban (l. a chmod parancsot a 42. oldalon). A UNIX egyik érdekes lehet˝osége az ún. linkek létrehozása: ekkor egy állománynak (ami akár könyvtár is lehet) több neve is lehet. A legegyszer˝ubb ilyen link, az ún. szimbolikus link egy mutatót jelent csak, amin keresztül más név alatt ✎ is elérhetjük a megadottállományt9. Példánknál maradva a $ ln -s /u/lovag/sirrobin/artur elevel parancs a /u/lovag/sirrobin/artur állományt elevel néven is elérheto˝ vé teszi: $ ls -ltr elevel lrwxrwxrwx 1 galahad lovag 13 May 1992 elevel -> /u/lovag/sirrobin/artur
A szimbolikus kapcsolat csak egy mutatót jelent, így az állomány mindkét néven írható, olvasható (és esetleg futtatható). Azonban ha az elevel állományt kitöröljük, akkor az maga az /u/lovag/sirrobin/artur állomány nem törl˝odik, de az adatokat már nem tudjuk elérni elevel néven. Az /u/lovag/sirrobin/artur állomány törlésekor viszont a csak a link marad meg, az adatok az /u/lovag/sirrobin/artur állománnyal együtt elvesznek. Szimbolikus linket könyvtárak között is létrehozhatunk:
✎
$ ln -s /u/local/bin bin
A parancs eredményeként pl. a /u/local/bin/gnuplot állományt a bin/gnuplot név alatt is elérhetjük.10 8
Kivéve a .-tal kezd˝od˝o állományokat. Lehet˝oség van ún. hard link létrehozására is, de ez néha kényelmetlen. 10 Vigyázzunk a könyvtárak szimbolikus linkjeivel a csh típusú shellek esetén, mivel ezek kifejtik a linkek értékét, és az eredményt állítják be az aktuális munkakönyvtárnak. Ez az jelenti, hogy ha egy alkönyvtárba belépünk, majd onnan a cd .. paranccsal visszalépünk, egészen máshol találjuk magunkat. (Ez egy ritkán várt „feature” ...)! 9
3.8. KÖNYVTÁRAK HASZNÁLATA
41
3.8.4. Könyvtárak létrehozása és törlése Könyvtárakat a mkdir paranccsal hozhatunklétre. Argumentumként akár több könyvtárnevet is megadhatunk. Például a: ✎ $ mkdir test test/artur /u/lovag/galahad/tmp
Enter
létrehozza az aktuális könyvtárból nyíló test, az abból nyíló artur, valamint a bejelentkezési könyvtár (itt a /u/lovag/galahad) alatti tmp könyvtárakat. Természetesen nem hozhatunk létre könyvtárat egy "normális" file alatt. Ugyanígy sikertelen a parancs, ha nincs engedélyünk alkönyvtár létrehozására (beleírására) az adott könyvtárban. Ha egy id˝o után nem lesz többé szükség egy Könyvtárra, és célszer˝u azt kitörölni, akkor erre a UNIX operációs rendszerben az rmdir Könyvtár
parancsot használhatjuk. Az rmdir parancs a mkdir parancshoz hasonlóan több argumentumot is elfogad. Amennyiben olyan könyvtárat akarunk kitörölni, amelyik nem üres, a UNIX operációs rendszer hibajelzést ad. Ilyenkor — kello˝ óvatossággal — használhatjuk a 32. oldalon említett rm -r parancsot. Néha a kitörlend˝o könyvtárban ún. rejtett állományok helyezkedhetnek el, amelyeket a szokásos ls parancs nem listáz ki, csak a -a kapcsoló használatával. A rejtett állományok ponttal kezd˝odnek, és általában bizonyos programok (elm, vi, tin, xv ...) használják o˝ ket. Ha a könyvtárban — amelyet ki akarunk törölni — rejtett állományok vannak, és egészen biztosak vagyunk benne, hogy nem kellenek, egyenként kitörölhetjük o˝ ket. VIGYÁZAT!! SOHA ne adjunk ki törlési parancsot a .* állományokra vonatkozólag, mivel egy ilyen törlés automatikusan elindul a .. különleges jelentése miatt felfelé is a könyvtárstruktúrában! Megoldás lehet ilyenkor pl. legalább 3 karakter megadása a törlésnél (.??* alakot), esetleg karaktertartomány kijelölése.
3.8.5. Állomány megkeresése a könyvtárstruktúrában Állományokat a find parancs segítségével kereshetünk meg a könyvtárrendszerben. Például a ✎ $ find . -name test.c -print
parancs az aktuális könyvtártól lefelé megkeresi az összes test.c állományt, és a nevüket kiírja a képerny˝ore. Ha nem tudjuk a teljes nevet, csak azt hogy c-re végz˝odik, akkor a ✎ $ find . -name ’*c’ -print
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
42
parancsot használva a find az aktuális könyvtártól lefelé megkeresi az összes c végz˝odés˝u állományt, és a nevüket kiírja a képernyo˝ re. A parancs általánosabb alakja: find KiindulásiKönyvtárak -name Állomány -Parancs
a KiindulásiKönyvtárakból elindulva a könyvtárstruktúrában lefelé keresi a megadott nev˝u Állományt és végrehajtja rá a megadott Parancsot. A find sokoldalú parancs, részletes leírását pl. a man find utasítással kérhetjük elo˝ .
3.9. Állományok védelmének beállítása Az állományok védelmi kódját a chmod paranccsal állíthatjuk. A védelmi kód 3 darab oktális (8-as számrendszerbeli) szám, melyek szimbolikusan is jelölhetünk. Az ls -l Állomány parancs az els˝o oszlop a 2-10. karakterpozíciójában kijelzi a védelmi kódokat: a kódot külön állítjuk az állomány tulajdonosára (u – user, 2-5 pozíció), a felhasználó csoportjára (g – group, 6-8 pozíció) és mindenki másra (o – others, 8-10. pozíció). A védelmi kódok szabályozzák az állomány futtatását (x – eXecute = 1), írását (w – write = 2), és olvasását (r – read = 4). Akinek írási joga van, az törölheti is az adott állomány tartalmát (de magát az állományt nem). A könyvtárra kiadott futtatási jog engedélyezi az adott könyvtárba való belépést. ✎ Például a korábban létrehozott gyakorlas állomány védelme általában 644es: $ ls -l gyakorlas total 20 -rw-w--w--
Enter 1 galahad
lovag
3910 Oct 26 1992
gyakorlas
Az adott bet˝u jelenléte a megadott hozzáférést engedélyezi, a - jel pedig a tiltást jelenti. ✎ A $ chmod 755 gyakorlas
Enter parancs megváltoztatja a gyakorlas állomány védelmi kódját a következ o˝ módon: az els˝o szám a tulajdonosra (galahad) vonatkozik, a következo˝ a csoportra (lovag), és az utolsó a többiekre. A 7=4+2+1 alapján a tulajdonosnak megvan a
futtatási (1), az írási (2) és az olvasási (4) joga is, másoknak csak a futtatási és az ✎ olvasási joga. Ha a parancsot a $ chmod 55 gyakorlas
Enter
alakban adjuk ki, akkor csak a csoport és a többiekre vonatkozó beállítás változik, a tulajdonosra vonatkozó védelmi kód nem változik.
3.9. ÁLLOMÁNYOK VÉDELMÉNEK BEÁLLÍTÁSA
43
Az el˝oz˝o parancs kiadható szimbolikusan is: $ chmod u+rwx * $ chmod go+rx-w *
Enter Enter
Ekkor a tulajdonosnak megadtuk az összes jogot, a többiekt o˝ l pedig elvettük az írási jogot. A második parancs helyett a $ chmod go=rx *
is használhatjuk.
Enter
✎
44
FEJEZET 3. ÁLLOMÁNYOK HASZNÁLATA
4. fejezet Állományok szerkesztése 4.1. A vi editor használata A különböz˝o szerkeszt˝oket (editorokat) állományok létrehozására és módosítására használjuk. A UNIX operációs rendszerekben a vi editor az általánosan elterjedt, egész képerny˝os szerkeszt˝o program, mely része az operációs rendszernek. Egy file szerkesztéséhez egyszer˝uen adjunk meg a vi parancsnak az állomány nevét: $ vi Állomány
Enter
Ha az adott állomány nem létezik, akkor a vi létrehozza azt1 . A szerkeszt˝obe ún. parancs üzemmódban lépünk be, de bármikor máskor is ide kerülünk vissza az Esc (vagy Escape ) gomb – esetleg a Ctrl - [ kombináció – megnyomásával. Ha a gomb megnyomásakor esetleg egy sípolást hallunk, akkor már eleve parancs üzemmódban voltunk (ez nem hiba!). A parancs üzemmódban különböz˝o utasításokat adhatunk ki az egyes gombok lenyomásával. A : parancs után további parancsokat adhatunk ki. Pl. a vi-ból kilépni a parancs üzemmódból a :x paranccsal tudunk, a változtatások elmentésével. Ha mégsem akarjuk elmenteni a változtatásokat, akkor a :q! parancsot használjuk a kilépéshez! A parancs üzemmódból az a és az i paranccsal léphetünk át a szövegírás üzemmódba: az a az aktuális karakter után, az i pedig az elé kezdi beilleszteni a szöveget. Az o (kis o bet˝u) parancs az aktuális sor után, az O (nagy O bet˝u) pedig az el˝oz˝o sorba kezdi szöveget beilleszteni. A parancs üzemmódba az Esc gomb megnyomásával kerülhetünk vissza. 1
Természetesen csak ha van jogunk a megadott helyre írni.
45
FEJEZET 4. ÁLLOMÁNYOK SZERKESZTÉSE
46
☞
vi
részletes leírása a 173. oldalon
A parancs üzemmódban az x gombbal törölhetjük ki a kurzor helyén lév o˝ bet˝ut. Szavak és sorok törléséhez a d parancsot kell használnunk: egy szó kitörlését a dw paranccsal végezhetjük el, míg az aktuális sort a dd parancs törli ki. A kurzort a parancs üzemmódban a h-j-k-l gombokkal mozgathatjuk balrale-fel-jobbra, de általában a billenty˝uzeten található nyilakat is használhatjuk ehhez. Ha gyorsabban akarunk mozogni az állományban, akkor használhatjuk a képerny˝ooldalnyival mozgató parancsokat is: a Ctrl - F egy teljes képerny o˝ vel el˝ore visz, a Ctrl - B pedig egy képerny˝ovel visszafelé lapoz. A vi nagyon sok utasítással rendelkezik, az ez iránt érdeklo˝ d˝oknek ajánljuk a 173. oldalon található részletes leírást.
4.2. A MicroEMACS szerkeszt˝o A MicroEMACS szövegszerkeszt˝o ugyan nem része az eredeti UNIX operációs rendszereknek, de a UNIX világ egy széles körben2 elterjedt többablakos editora. A szövegszerkeszt˝o el˝onye, hogy a UNIX mellett VAX/VMS és IBM PC (DOS) rendszereken is futtatható. Mivel mindegyik operációs rendszerben ugyanazokat az utasításokat használhatjuk, ezért egy kezdo˝ számára hasznos lehet ezt a szerkeszt˝ot el˝oször megtanulni. A programnak létezik egy sokkal nagyobb, több mindenre képes változata, az ún. GNU emacs szövegszerkeszt o˝ , ami szintén használatos UNIX rendszereken. Ugyan a két program sok parancsa megegyezik, mégis célszer˝u szétválasztani a kett˝ot.3 A továbbiakban csak a MicroEMACS programmal foglalkozunk. A MicroEMACS szerkeszt˝o a $ uemacs Állománynév
Enter
parancs kiadásával hívjuk meg. Néhány gépen a uemacs parancs helyett az emacs parancsot kell használnunk. A szerkeszt˝obe való belépés után beírhatjuk a kívánt szöveget, törölni a szokásos módon lehet a Backspace gombbal (ezt néha Delete vagy ← felirat jelzi). A szerkesztés végén az Esc-Z (lenyomjuk az Esc gombot, elengedjük, majd lenyomjuk a Z gombot) utasítás elmenti a változtatásokat és kilép a szerkeszt˝ob˝ol. Ha nem akarjuk a változtatásokat mego˝ rizni (pl. ha rossz file-t nyitottunk meg), akkor a Ctrl-X Ctrl-C utasítást használjuk (folyamatosan lenyomva tartva 2
A program forráskódja C nyelven szabad programként (ún. public domain) mindenki rendelkezésre áll ingyen. 3 A GNU emacs inkább egy programozási stílust képvisel, mint egy szövegszerkeszt o˝ t...
4.2. A MICROEMACS SZERKESZTO˝
47
a Ctrl gombot el˝oször lenyomjuk az X gombot, elengedjük, majd lenyomjuk a C gombot). A szövegben való mozgásra a billenty˝uzeten található nyilakat használhatjuk 4 . Amennyiben a nyilak nem m˝uködnek, használhatjuk a Ctrl-Bet˝ u kombinációkat ˝ re (lenyomva tartve a Ctrl gombot lenyomjuk a Bet˝ u gombot): a Ctrl-F el o ugrik egy bet˝uvel, a Ctrl-B visszalép egy bet˝unyit, míg a Ctrl-N a következ o˝ sorra ugrik, a Ctrl-P pedig az el˝oz˝o sorra lép. Ha gyorsabban akarunk mozogni, akkor használhatjuk a képerny˝ooldalnyival mozgató parancsokat is: a Ctrl-Z egy teljes képerny˝ovel el˝ore visz, a Ctrl-V pedig egy képerny˝ovel visszafelé lapoz. A uemacs sok más utasítással és lehet˝oséggel rendelkezik (pl. több file egy- ☞ idej˝u szerkesztése, ablakok, makrók, stb.), az ez iránt érdekl o˝ d˝oknek ajánljuk a emacs részletes leírása a 185. 185. oldalon található részletes leírást. oldalon
4
Lehet, hogy a billenty˝uzet nyilai nem m˝uködnek rendesen (ez általában a 84 gombos IBM PC billenty˝uzetnél fordulhat el˝o): ekkor a számbillenty˝uzet (numeric keypad) 2-4-6-8 gombjaival próbálhatjuk mozgatni a kurzort.
48
FEJEZET 4. ÁLLOMÁNYOK SZERKESZTÉSE
5. fejezet Állományok nyomtatása El˝obb-utóbb ki szeretnénk nyomtatni állományainkat. A multitasking rendszerben a UNIX több különböz˝o helyi, ill. távoli géphez kötött nyomtatót is tud egyszerre kezelni. A felhasználó így maga döntheti el, melyik nyomtatót óhajtja használni. Az azonos nyomtatók közül — beállítástól függo˝ en — a rendszer automatikusan is kiválaszthatja az éppen szabad printert. Amennyiben az összes elérhet o˝ nyomtató foglalt, a UNIX operációs rendszer várakozó listába (ún. queue) rendezi a nyomtatási kérést, és mihelyt egy nyomtató felszabadul, a beérkezési sorrendben, vagy méret szerinti kiosztásban elkezdi a következ o˝ várakozó állomány nyomtatását. Egyszerre több példányban is kinyomtathatunk egy állományt, valamint lehet˝oség van a már elküldött nyomtatási kérések törlésére, illetve azok állapotának lekérdezésére. A nyomtatókra egyszer˝uen a várakozó lista (queue) megadásával hivatkozunk. Ha a rendszerre egyszerre több printer is rá van csatlakoztatva, ezek közül az egyik az ún. rendszernyomtató. Ez azt jelenti, hogy ha másként nem rendelkezünk, akkor a nyomtatás erre a printerre megy. Egy adott rendszerb˝ol elérhet˝o helyi és távoli nyomtatók használatáról (pl. a queue neve, a nyomtató típusa és helye, stb.) a rendszergazda adhat pontos információt. Nyomtatni általában1 az lpr paranccsal tudunk: a ✎ $ lpr gyakorlas
Enter
parancs a rendszernyomtatón nyomtatja ki a gyakorlas állományt2 . 1
Néha a nyomtató queue nem konvertál automatikusan, ilyenkor pl. PostScript printer esetén az ASCII szövegünket lehet, hogy át kell alakítani. 2 Ha nincs ilyen parancs (pl. bizonyos System V rendszerekben), akkor az lp parancsot használhatjuk az lpr helyett.
49
FEJEZET 5. ÁLLOMÁNYOK NYOMTATÁSA
50 ✎
A következ˝o utasítás a gyakorlas állományt a hpc214 nev˝u3 printeren nyomtatja ki (a -P kapcsoló után szóköz kihagyása nélkül kell beírni a printer nevét) 4 : $ lpr -Phpc214 gyakorlas
✎
Enter
A -# kapcsoló után megadhatjuk a kívánt pédányszámot. Például ha 2-2 példányt szeretnénk gyakorlas és a masolat állományokból, akkor az el o˝ z˝o utasításhoz hasonlóan: $ lpr -#2 -Phpc214 gyakorlas masolat
Enter
5.1. A printer állapotának lekérdezése A nyomtatási várakozó-lista(printer queue) állapotát az lpq utasítás listázza ki. Ugyanez a parancs mutatja meg, hogy a nyomtató milyen állapotban van (például ✎ kikapcsolták, vagy kifogyott a papír, stb.). Például a hpc214 nyomtatót állapotát a $ lpq -Phpc214
Enter
parancs5 kérdezi le. A válasz például a következo˝ lehet: Queue Dev hpc214 lp0
Status Job Files User PP running 42 gyakorlas galahad 10
% 83
Blks 12
CP 1
Rnk 1
A parancs kilistázza a nyomtató queue nevét, a hozzá tartozó eszközt (Dev), a queue állapotát6 (Status), valamint az éppen a queue-ban lévo˝ nyomtatási kérés(ek) sorszámát (Job), a hozzá tartozó állomány(oka)t és felhasználó(ka)t. Az éppen nyomtatás alatt álló file esetében a rákövetkezo˝ oszlopok a már kinyomtatott részt százalékban adják meg. A válaszból leolvasható még a file hossza és a kért példányok száma is. A példában a galahad felhasználó gyakorlas 12 blokkhosszúságú állományának 83%-át kinyomtatta már a hpc214 nyomtatón és csak 1 példány készül bel o˝ le. 3
Általában a printer neve utal a típusra és az elhelyezkedésre: a hpc214 egy, a C épület második emelet 14-es szobájában lévo˝ HP nyomtatóra utalhat. 4 Az lp parancsnál az lp -d kapcsolót kell használni. 5 Ha nincs ilyen parancs, akkor esetleg az lpstat parancsot használhatjuk. 6 A running azt jelenti, hogy a file-t éppen nyomtatja a nyomtató, a queued pedig azt, hogy a file arra vár, hogy rá kerüljön a sor.
5.2. A NYOMTATÁSI KÉRÉS MEGSZAKÍTÁSA
51
5.2. A nyomtatási kérés megszakítása A nyomtatási kérés megszakításához tudnunk kell a kérés sorszámát (ezt az el o˝ bbiekben tárgyaltlpq paranccsal is lekérdezhetjük). Az el˝oz˝oekben említett példában a ✎ $ lprm -Phpc214 42
Enter
7
parancs kitörli a 42-es számú nyomtatási kérést a hpc214 queue-ból (már futó nyomtatás esetén azt megszakítja és úgy törli ki). Lehet˝oség van az egy felhasználóhoz tartozó minden kérés kitörlésére: az ✎ Enter $ lprm -Phpc214 galahad parancs minden, a galahad felhasználóhoz hpc214 queue-ból.
7
tartozó nyomtatási kérést kitöröl a
Ha hiányzik ez a parancs, akkor esetleg a cancel parancsot használhatjuk az lprm helyett.
52
FEJEZET 5. ÁLLOMÁNYOK NYOMTATÁSA
6. fejezet Ki- és bemenetek átirányítása, különleges shell parancsok A UNIX operációs rendszerben a felhasználó belépésekor egy ún. shell(burok, héj) program indul el. A shell program fogadja a parancsokat és — részben átalakítva — továbbadja azokat az egyes speciális programoknak. A shellen belül megteremtették a programok összekapcsolásának leheto˝ ségét is, mivel általában minden program innen indul el. Az átirányítás lehet˝ové teszi, hogy egy program végeredményét egy másik program használja, külön állomány létrehozása nélkül. Egy parancssorban több átirányítást is használhatunk, pl. az els˝o utasítás a bemenetét egy megadott állományból veszi, majd a második parancs az elso˝ kimenetét (eredményét) dolgozza fel, végül a harmadik a második kimenetét továbbalakítva a végeredményt egy kimeneti állományba írja. Mindez nagy közbülso˝ állományok létrehozása nélkül történik, ezért sokkal gyorsabb a parancsok egyenkénti futtatásánál.
6.1. Parancs kimenetének átirányítása Egy program végeredményét egy állományba is beleírhatjuk a képerny o˝ helyett. Ehhez a parancs után egy > jelet, majd a kívánt file nevét kell írnunk. Például: $ ls -l > filelista Enter $ cat filelista Enter total 6 -rw-w--w-1 galahad -rw-w--w-1 galahad
lovag lovag
3910 Oct 26 1992 21 Oct 26 1992
53
choice cm
54 FEJEZET 6. KI- ÉS BEMENETEK ÁTIRÁNYÍTÁSA, KÜLÖNLEGES SHELL PARANCSO -rw-w--w--rw-w--w--rw-w--w--rwxr-xr-x drwx--x--x
1 1 1 1 2
galahad galahad galahad galahad galahad
lovag lovag lovag lovag lovag
0 198 5 31 512
Dec Oct Dec Oct Jul
05 26 05 26 06
1992 1992 1992 1992 1992
filelista gral log test Mail
Az els˝o parancs az ls -l utasítás eredményét a filelista állományba írja bele, majd a cat paranccsal a filelista file tartalmát írjuk ki a képernyo˝ re. Az átírányítás felülírja a már létez˝o állományt. Ha ehelyett az állomány végéhez akarjuk az eredményt f˝uzni, akkor a >{}> jelet kell használnunk. A UNIX ekkor ellen˝orzi, létezi-e a megadott nev˝u file. Ha igen, akkor a végéhez f˝uzi az új adatokat, ha pedig nem létezik a file, akkor létrehozza azt. Az el o˝ z˝o ✎ példát folytatva : $ ls > filelista Enter $ ls -l >> filelista Enter $ cat filelista Enter choice cm filelista gral kocsi log test Mail total 6 -rw-w--w-1 galahad lovag 3910 Oct 26 1992 choice -rw-w--w-1 galahad lovag 21 Oct 26 1992 cm -rw-w--w-1 galahad lovag 68 Dec 05 1992 filelista -rw-w--w-1 galahad lovag 198 Oct 26 1992 gral -rw-w--w-1 galahad lovag 5 Dec 05 1992 log -rwxr-xr-x 1 galahad lovag 31 Oct 26 1992 test drwx--x--x 2 galahad lovag 512 Jul 06 1992 Mail Az els˝o ls felülírja a filelistat, míg az ls -l a végéhez f˝uzi a részletes ál-
lománylistát.
6.2. Bemenet átirányítása Nem csak a képerny˝ore való kiírást (az ún. standard outputot), hanem a billenty˝uzeten történ˝o adatbevitelt (standard input) is átirányíthajuk. Például a grep ✎ parancs állomány megadása nélkül a bemenetro˝ l olvassa a sorokat, és keresi bennük a megadott szót: Enter $ grep ’ben’ Itt nincs a keresett karakter Enter Ebben mar van Enter
6.2. BEMENET ÁTIRÁNYÍTÁSA
55
Ctrl - D Ebben mar van
Irányítsuk át a bemenetet a gyakorlas állományból! Ehhez a < jelet kell ✎ használnunk: $ grep ’ben’ < gyakorlas Enter Ebben a sorban mar vannak szamok is , peldaul az 1 es a 42 Ebben a sorban nehany furcsa karakter van % @ ! Most mindent egyutt szerepeltetunk ebben a sorban ’vege’ $1 * 42
56 FEJEZET 6. KI- ÉS BEMENETEK ÁTIRÁNYÍTÁSA, KÜLÖNLEGES SHELL PARANCSO ✎
Másik példa a wc -l parancs, amelyik megszámolja a bemeneten érkez o˝ sorokat: $ wc -l < gyakorlas 6
Enter
6.3. A cs˝o (pipe) használata A UNIX-ban lehet˝oség van arra, hogy közbüls˝o file létrehozása nélkül kapcsoljunk össze két (vagy több) programot. Ilyenkor az elso˝ program kimenete a második bemenete lesz. A két összekötni kívánt programot az ún. pipe jellel (ez a |) kell a parancssorban elválasztani. Egyszerre több parancsot is összekapcsolhatunk a | jellel, ezt pipeline-nak (cs˝ovezeték) nevezzük. Példák: Kilistázzuk a /bin könyvtár tartalmát az ls parancs segítségével és az ered✎ ményt a more segítségével megjelenítjük a képernyo˝ n: $ ls -l /bin || more
✎
Enter
A who parancs kiírja az aktuális felhasználókat (soronként egyet), a wc -l parancs pedig megszámolja a sorok számát. Így az éppen aktív felhasználók számát a $ who || wc -l
Enter
adja meg.
6.4. Parancs eredményének továbbhasználata Bizonyos esetekben szükségünk lehet egy parancs eredményére, de nem bemenetként, hanem egy utasítás argumentumanként. Ilyenkor a fordított aposztróf karakterek közé kell zárni a forrásként szereplo˝ utasítást: a fordított aposztrófok közé írt parancs végeredménye közvetlenül behelyettesíto˝ dik a parancssorba. Pél✎ dául a \
\
$ more grep -l ’egy’ * Enter parancs minden, az egy szót tartalmazó állományt megjelenít a képerny o˝ n a more
segítségével.
6.5. PARANCSÁLLOMÁNYOK LÉTREHOZÁSA
57
6.5. Parancsállományok létrehozása Néha egymás után többször ugyanazt a parancssorozatot kell lefuttatnunk. Ilyenkor célszer˝u lehet ezt egy állományban, új parancsként összefoglalni. Például hozzuk létre egy szövegszerkeszto˝ vel a ddir állományt, a következ˝o ✎ tartalommal: echo "Most kovetkezik az allomanylista" ls -l echo "Vege van az allomanylistanak"
Ezután változtassuk meg az állomány védelmi kódját futtathatóra: $ chmod +x ddir
Enter
majd a ddir parancs egymás után lefuttatja a három parancsot. A parancsállományokról és a bennük használható parancsokról a 83. oldalon, a Korn shell ☞ ksh részletes leírásában kaphatunk b˝ovebb információt. leírása a 83. oldalon
58 FEJEZET 6. KI- ÉS BEMENETEK ÁTIRÁNYÍTÁSA, KÜLÖNLEGES SHELL PARANCSO
7. fejezet Programok futtatása A UNIX operációs rendszerben egyszerre több parancsunk is futhat párhuzamosan. Ez, ha csak egy terminált használunk, úgy valósul meg, hogy egy parancsunk az el˝otérben fut (teljesen lefoglalva a terminált, billenty˝uzetet), miközben a többiek a háttérben futnak. A háttérben futó eljárások is írhatnak a képerny o˝ nkre, de nem kaphatnak bemen˝o adatokat a billenty˝uzetr˝ol. Egy végrehajtható programot (file-t) a nevével futtatunk. A shell a PATH környezeti változóban megadott könyvtárakat sorra végignézi, amíg meg nem találja a megadott nev˝u programot. Ha ez nem tartalmazza az aktuális könyvtárat, akkor a teljes elérési útvonallal kell megadni az állományt (pl. ./a.out, /usr/ucb/mail). Egy már futó programot a Ctrl - Z gombok egyidej˝u lenyomásával állíthatunk meg. Az így leállított program még benne van a gépben, csak nem fut, bármikor folytatható a futtatása. Ha egy programból ki akarunk lépni úgy, hogy az befejezze a futást, a Ctrl - C lenyomásával tehetjük ezt meg. A háttérbe tett (futó vagy megállított) programokat a jobs paranccsal nézhetjük meg. A parancs felsorolja a programok hivatkozási számát, állapotát (Running, Stopped). Az aktuális háttérprogram mellett a + jel látható. A programokat az fg (foreground) paranccsal elo˝ térbe, a bg (background) paranccsal háttérbe tehetjük. A parancsoknak meg kell adni, hogy melyik programot akarjuk el˝o- vagy háttérbe tenni. Ha nem adunk meg azonosítót, akkor a parancs az aktuális programra hat. Az azonosító a jobs parancsnál kiírt kis egész szám. A 2-es számú program háttérben való továbbfuttatása pl. a ✎ $ bg %2
Enter
paranccsal történik. Egy parancsot futtathatunk azonnal is a háttérben. Ehhez a parancs legvégére 59
FEJEZET 7. PROGRAMOK FUTTATÁSA
60
☞
at
leírása a 156. oldalon
☞
batch
leírása a 158. oldalon
tegyünk egy & jelet. A háttérben futó parancsok kisebb prioritással bírnak, s így terhelt rendszeren lassabban futnak le. Ha sokan futtatnak a rendszeren, célszer˝u más módon elküldeni a futtatásokat (lásd az at és batch parancsokat a 156. és a 158. oldalon). A háttérben indított parancsok befejezik futásukat, ha kijelentkezünk a gépr˝ol. Ha ezt el akarjuk kerülni, akkor a háttérbe küldendo˝ parancs elé be kell írni a nohup parancsot: $ nohup Program KimenetiFile &
Enter futva a lista
Például a következ˝o parancs a háttérben állományba beleírja az összes, az adott könyvtárban és az alkönyvtárakban található hello.c állomány ✎ nevét: $ nohup find . -name hello.c -print >lista &
Enter
Minden futó eljárásnak a rendszerben van egy azonosító száma, az ún. PID (Process IDentification number). A PID megadja az elindított program sorszámát a gép elindítása óta, s így egyedi az adott gépen futó programokra (pl. a futó shellünknek is van ilyen száma). A bejelentkezési shellhez tartozó programokat a ps paranccsal kérdezhetjük le. Ha más terminálon is dolgozunk, akkor a $ ps -u FelhasználóiNév
Enter
paranccsal kérdezhetjük meg az adott FelhasználóiNévhez tartozó összes futó eljárást1 . A felesleges programjainkat le is állíthatjuk a kill parancs segítségével. A $ kill -9 PID-szám
Enter
parancs leállítja a PID-szám azonosítójú eljárást. A -9 kapcsoló a felhasználó által elindított alprogramok leállításához szükséges ún. trap jel értéke 2 . Csak a saját programjainkat tudjuk leállítani. Háttéreljárásainkat leállíthatjuk más módon is, ha a PID-szám helyére a jobs parancsnál kapott kis egész azonosítószámot írjuk ✎ a % jel után. Például a $ kill -9 %2
Enter
leállítja a 2. számú háttéreljárást. A UNIX rendszer minden futó eljáráshoz egy ún. prioritási értéket rendel: minél kisebb ez a szám, annál nagyobb százalékát kapja meg a CPU id o˝ nek az adott program. Amennyiben nagy és hosszú háttérben futó programot akarunk elindítani, ajánlatos ezt nagyobb prioritási értékkel („lassabb futással”) elindítani.3 Ha a gép üres, akkor így is megkapja a program a teljes CPU ido˝ t, míg 1
Ezt azt utasítást BSD alapú gépeken ps -u formában kell helyesen kiadni. A -9 helyett a -1 — -8 kapcsolókat is használhatjuk, „kíméletesebb” leállításhoz. A -9-et csak végs˝o esetben használjuk. 3 Néhány gépen a rendszer automatikusan nagyon nagyra állítja a prioritási értéket, ha a prog2
61 pl. egy interaktív bejelentkezéskor a program futása lelassul, és lehet o˝ vé teszi az interaktív (gyorsabb) használatot. A csökkentett prioritás beállítására a nice parancs szolgál4 : $ nice [-Szám] Parancs
Enter
A Szám 1 és 19 közti érték, és a növekv˝o értékek csökken˝o prioritásra utalnak. Az alapérték a 10. A nice magától nem futtat a háttérben, ezért általában a háttérben a következ o˝ típusú paranccsal futtathatunk: $ nohup nice Program KimenetiFile &
Enter
A prioritást egy már futó programnál is átállíthatjuk a renice parancs segítségével: $ renice Új-prioritás PID-szám
Enter
ahol a PID-szám az átállítandó program azonosítóját jelenti.
ram a háttérben magas prioritással sokáig fut. 4 A C shellben van a nice parancson kívül egy beépített nice is, mely speciális esetekben másképpen viselkedik.
62
FEJEZET 7. PROGRAMOK FUTTATÁSA
8. fejezet Kommunikációs programok A UNIX operációs rendszer szerves része a hálózati kapcsolat, melynek segítségével lehet˝oség nyílik különböz˝o elektronikus információcserére. A legismertebb ilyen programok közül a write és a talk közvetlen üzenetküld o˝ utasításokkal, a mail és az elm elektronikus levelez˝oprogramokkal, a tin elektronikus újságolvasó programmal, valamint a TCP/IP hálózatot használó telnet, ftp, ˝ programmal foglalkofinger utasítással és a gopher elektronikus adatlekérdezo zunk röviden ebben a részben. A könyv második részében ezen utasítások b o˝ vebb leírása mellett más hálózati programok használatát ill. leírását is megtalálhatjuk ☞ b o˝ vebb TCP/IP (rlogin, rsh, nslookup, archie és az u.n. anonymous ftp leheto˝ ség). ismeretek a 215. oldalon
8.1. Párbeszédes kapcsolat 8.1.1. A write utasítás A write utasítás segítségével rövid, egysoros üzeneteket küldhetünk a rendszerben éppen dolgozó felhasználóknak. Az üzenet ugyan csak rövid lehet, de használata kényelmes, mivel rögtön megjelenik a címzett képernyo˝ jén, és elolvasásához nem szükséges kilépni az éppen futó programból. A paranccsal csak a rendszert interaktívan használó felhasználóknak üzenhetünk. Például: El˝oször nézzük meg, be van-e jelentkezve akit keresünk (tegyük fel, hogy felhasználói nevünk vilma): ✎ $ who Enter fredi tty36 Mar 21 20:05
63
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
64 vilma tty4 Mar 21 19:15 irma pty/2 Mar 21 18:19
Ezután üzenhetünk pl. fredinek: $ write fredi Enter Szia fredi, mi ujsag Enter
A parancs kiadása után minden sor végén Enter -t gépelve a sor tartalma megjelenik fredi képerny˝ojén. Ha be akarjuk fejezni az írást, akkor az állományvége karaktert (Ctrl-D ) kell beírnunk. Fredi képerny˝ojén az éppen aktuális kurzorpozícióban a következo˝ üzenet jelenik meg ekkor: Message from vilma on tuzko (tty4) [Mar 21 21:12:05 1993] Szia fredi, mi ujsag
Ha fredi válaszolni akar, akkor hasonlóképpen a $ write vilma Enter
utasítással válaszolhat. A write hívásokat a mesg n utasítás letiltja.
8.1.2. A talk parancs A write utasítás csak rövid beszélgetések esetén kényelmes, mivel a képerny o˝ n saját üzeneteink és a válaszok összekeverednek. Hosszabb beszélgetéseket éppen ezért célszer˝ubb a talk utasítással kezdeményeznünk. Például ha felhasználói ✎ nevünk vilma a dino gépen, akkor fredivel a tuzko gépen a $ talk fredi@@tuzko
Enter
paranccsal próbálhatunk kapcsolatot teremteni. Az utasítás hatására fredi felhasználó képerny˝ojén egy figyelmeztet˝o üzenet jelenik meg, hogy vilma@@dino szeretne beszélni vele: Message from TalkDaemon@tuzko... talk: connection requested by vilma@dino. talk: respond with: talk vilma@dino
Ha erre fredi a $ talk vilma@@dino
Enter
paranccsal válaszol, akkor mindkett˝ojük képerny˝oje két részre oszlik: a fels˝o részen írhatják be üzeneteiket, míg az alsó részen a partner gépelése jelenik meg folyamatosan. A beszélgetést a Ctrl-C paranccsal lehet befejezni.
8.2. ELEKTRONIKUS LEVELEZÉS
65
Amennyiben nem adunk meg gépnevet, az automatikusan a helyi gépre vonatkozik. A talk hívásokat a mesg n utasítás letiltja.
8.1.3. A mesg utasítás Néha zavartalanul szeretnénk dolgozni, minden, közvetlenül a képerny o˝ nkön megjelen˝o üzenet nélkül. Ilyenkor a ✎ $ mesg n
Enter
utasítással megakadályozhatjuk, hogy zavarjanak bennünket a write és a (már tárgyalt) talk utasításokkal.1 A hívásokat a $ mesg y
Enter
parancs után újra fogadni fogjuk.
8.2. Elektronikus levelezés 8.2.1. A mail levelez˝o program A mail utasítás segítségével elektronikus leveleket küldhetünk más felhasználóknak. A levél elküldése után a címzett vagy azonnal értesítést kap err o˝ l (ha éppen be van jelentkezve a rendszerbe), vagy a következo˝ bejelentkezéskor a UNIX rendszer figyelmeztetni fogja az új levélre. A UNIX mail programja és az elm2 csak két különböz˝o, az operációs rendszer alap levelez˝oszolgáltatását használó program, így ugyanonnan veszik az új leveleket. Ezáltal elképzelhet˝o, hogy valaki felváltva használja o˝ ket. A UNIX sendmail levéltovábbító programja — történeti okok miatt — csak 7 bitet visz át. Magyar ékezetes szövegek elküldéséhez ezért a levelet kódolnunk kell, amire pl. a uuencode parancsot használhatjuk, vagy szöveget a TEX (esetleg ☞ uuencode az etex) formátumba is átalakíthatjuk. leírása a 141. A UNIX rendszerek különböz˝o mail programokat használnak. A következo˝ k- oldalon. ben egy széles körben elterjedt programot, az ún. UCB mail programot ismertetjük. Ez a program fut alapértelmezésben a mail meghívásakor pl. az IBM AIX és a DEC Ultrix rendszerekben. A SUNOS/Solaris rendszerben a mail alapesetben 1 2
Természetesen ilyenkor is elérhet˝oek vagyunk, pl. elektronikus levéllel bárki üzenhet. Az elm nem része az eredeti UNIX rendszernek, hanem u.n. közprogram.
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
66
☞
elm
leírása a 68. oldalon
ugyan a /bin/mail nagyon egyszer˝u programra vonatkozik, de a /usr/ucb/mail parancs itt is az UCB mail programot futtatja3 . Az UCB mail helyett — amennyiben lehet˝oség van rá — célszer˝ubb a menüvel ellátott elm levelez˝o programot használni, melynek leírását a 68. oldalon találhatjuk meg. Levél küldése Egy egyszer˝u, rövid üzenetet a mail program segítségével küldhetünk el. Ha levelünk hosszú, célszer˝u lehet el˝oször a pl. vi szerkeszt˝o segítségével megírni, és utána elküldeni. A mail utasítás sorában meg kell adni a címzett(ek) felhasználói nevét. Ezután a program el˝oször a rövid tartalmat kérdezi meg (Subject: ), majd soronként fogadja az üzenetet. Az üzenetet egy, csak egy .-ot tartalmazó sorral zárjuk le (használhatjuk a Ctrl-D kombinációt is). A legvégén - beállítástól függ o˝ en - a ˝ ségét (Cc:) is más felmail program felajánlja "másolatok" küldésének lehet o ✎ használóknak. Például: $ mail galahad Enter Subject: delutani talalkozo Enter Delutan 3 orakor megbeszeles lesz Enter a kerekasztalnal Enter Sir Robin Enter . Enter Cc: Enter
Ha file formájában már rendelkezésre áll az elküldendo˝ információ (pl. egy program futásának végeredménye, vagy egy elo˝ re megírt levél, stb.), akkor azt ✎ egyszer˝uen a standard input átirányításával küldhetjük el. Például: $ mail galahad
elküldi a galahad felhasználónak. Egyszerre több felhasználónak is elküldhetjük ugyanazt a levelet, ha a mail parancs után egyszer˝uen felsoroljuk a neveiket szóközzel elválasztva. Ha a címzett nem ugyanazon a gépen dolgozik, ahonnan mi szeretnénk küldeni a levelet, akkor nemcsak a felhasználói nevet, hanem a másik gép nevét is ismernünk kell. A címbe ilyenkor a felhasználói név és a gép neve közé egy @@ jelet kell tennünk. 3
Rendszeres használat esetén célszer˝u az alias mail="/usr/ucb/mail" parancssort a $HOME/.profile állományba beírni. Ekkor a mail automatikusan az UCB mail-re vonatkozik.
8.2. ELEKTRONIKUS LEVELEZÉS
67
Példa:
✎
$ mail sirrobin arthur@@anglia.elte.hu galahad < fontos.level Enter A program a fontos.level file-t elküldi a az arthur nev˝u felhasználónak, aki a anglia.elte.hu elnevezés˝u gépen dolgozik, valamint sirrobin és galahad
felhasználónak a helyi gépen. Természetesen mindenki ugyanazt a levelet kapja meg. Levél fogadása Egy új levél érkezésekor a "YOU HAVE MAIL" (levele érkezett) üzenetet írja ki általában az operációs rendszer a képernyo˝ re. Ha éppen dolgozunk a gépen akkor ez a levél érkezésekor megtörténik, máskülönben pedig a következ o˝ bejelentkezésünkkor kapjuk az üzenetet. Például az új levelet a ✎ $ mail Enter
utasítással olvashatjuk el. A UNIX rendszer ekkor a következo˝ képpen válaszol: Mail version 2.18 5/19/83. Type ? for help. "/usr/spool/mail/lancelot": 3 messages 3 unread R 1 arthur Tue Sep 23 11:28 24/725 "Gyules" N 2 arthur Thu Sep 26 13:32 10/315 "Hova tetted a Gralt?" U 3 arthur Thu Sep 26 14:35 11/305 "A fecske sebessege..." &
A legels˝o sorban, rögtön a program neve után jelzi a mail, hogy ?-et gépelve segítséget kaphatunk. A következ˝o sorban a levelesláda file nevét írja ki a rendszer, majd ezután következik a levelek felsorolása. Minden levélre kiíródik az állapota (R - már olvasott, U - még olvasatlan, N - új levél), a levél sorszáma, a küld o˝ neve, a küldés ideje, a levél hossza sorban/karakterben, és végül a levél Subject: sora. Az & karakter után a kívánt sorszámot beütve a levél tartalma megjelenik a képerny˝on. Például: ✎ & 2 Message 2: From anglia Tue Sep 3 11:28:16 1991 Date: Tue, 3 Sep 91 11:26:57 -2300 From: arthur (Gral Knight) To: lancelot Subject: Hova tetted a Gralt? Lancelot, mar napok ota keresem a Gralt. Nem lattad valahol?
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
68
Arthur
A hosszabb levelek kiírását a Ctrl-S-Ctrl-Q gombokkal szabályozhatjuk. A mail parancs & promptjánál különböz˝o utasításokat adhatunk meg az éppen olvasott levélre vonatkozóan. Példák: ✎ Az & s levelem.doc
Enter
paranccsal kiírhatjuk a levelet egy levelem.doc nev˝u file-ba. ✎ A & d
Enter
utasítás kitörli az adott levelet a levelesládából. ✎ Az & f*
☞ mail
részletes leírása a 193. oldalon
Enter
utasítás kilistázza az adott levelesládában található leveleket, ugyanúgy, mint a mail programba való belépéskor. A programból a q (quit) vagy az x (exit) parancsokkal léphetünk ki. A q utasítás kilép a mailb˝ol, és a levelesládát megváltoztatja az esetleges törléseknek megfelel˝oen. Az x parancs NEM változtatja meg a mailbe való belépés elo˝ tti állapotot, azaz pl. nem törli ki a mailben a d paranccsal törölt leveleket. Figyelem! Az q és az x parancs pontosan "fordítva" m˝uködik, mint ahogy azt esetleg megszoktuk a VAX/VMS operációs rendszerben! A mail több más utasítást is ismer, a 193. oldalon egy részletes leírás található a programról.
8.2.2. Az elm levelez˝o program Az elm elektronikus levelez˝orendszert a $ elm
☞
elm
els˝o elindítása a 203. oldalon
paranccsal hívjuk be. Amennyiben az elso˝ alkalommal hívjuk be a gépen az elmet, feltétlenül olvassuk el a 203. oldalon található részletes magyarázatot a program beindításáról. A UNIX mail programja és az elm csak két különbözo˝ , a UNIX rendszer levelez˝oszolgáltatását használó program, így ugyanonnan veszik az új leveleket. Ezáltal elképzelhet˝o, hogy valaki felváltva használja o˝ ket. Az elm f˝omenüje egy teljes képerny˝ot betölt˝o rendszer. A képerny˝o tetején a program kiírja a levelesláda helyét és azt, hogy hány levél található benne.
8.2. ELEKTRONIKUS LEVELEZÉS
69
Többféle levelesláda (folder) lehet; a bejövo˝ új leveleken, valamint az eltárolt régi leveleken kívül létrehozhatjuk magunknak még például az elküldött levelek másolatát, vagy egy adott témával kapcsolatos levelek gy˝ujt o˝ jét is. Az elm az új posta vizsgálatával jelentkezik be: N O NU
Folder is ’/usr/mail/guest’ with 4 messages [elm 2.3 PL2] 1 Aug 17 Bokor Gyorgy (25) targyalas 2 Aug 19 J.F. Kenedi (22) Re: a tiedet 3 Sep 28 [email protected] (37) Mi ez!!! 7 Oct 21 POSTMASTER (76) Undeliverable mail
You can use any of the following commands by pressing the first character d)elete or u)ndelete mail, m)ail a message, r)eply or or f)orward mail, q)uit To read a message, press . j=move down, k=move up, ?=help Command:
Minden levélr˝ol egy egysoros bejegyzést láthatunk (amennyiben van levelünk). A UNIX mailt˝ol eltér˝oen az elm olyankor is elindul, ha nincs új levelünk. A bejegyzés elején a levél státusza áll (új, még nem olvasott, törölt, stb.), azt követi egy sorszám, a levél beérkezésének dátuma, a feladó, a levél hossza sorokban, és a levél tárgya. A képerny˝o alján rövid segítséget ad a program a legfo˝ bb, az adott menüben használható utasításokról. Kilépni a q gomb lenyomásával tudunk a levelez o˝ programból. Ha volt levelünk, akkor az elm a kilépés során megkérdezi, hogy a törlésre kijelölt leveleket kitörölje-e, az olvasott leveleket áttegye-e az olvasott levelek gy˝ujt˝ojébe. Minden kérdésre felajánl egy alapmegoldást, amit az Enter -re elvégez. Levelet úgy tudunk elolvasni, hogy rámegyünk a kurzorral (a kiválasztott levél fordított színekkel vagy a -> jellel van megjelölve a képernyo˝ n). Mozogni a kurzormozgató nyilakkal tudunk, de beállítástól függo˝ en a vi szövegszerkeszt˝o utasításai is m˝uködnek: a j lefelé, a k felfelé mozgat. Ha a kiválasztott levélen vagyunk, az Enter lenyomásával kezdhetjük el azt olvasni. Az elm a more programot használja a levél tartalmának kiírására, így a more parancsait is használhatjuk. Levelet a f˝omenüben az m (mail) gomb lenyomásával küldhetünk. A beépített mail levelez˝orendszerhez hasonlóan ilyenkor az elm megkérdezi, kinek akarjuk küldeni a levelet a Send the message to: kiírásával. Ide kell beütni a címzett E-mail címét (vagy amennyiben létrehoztuk, a becenevét). Ezek után az elm a Subject of the message: kiírásával a levél tárgyát kérdezi meg (igen rövid leírása annak, hogy milyen ügyben írtuk a levelet). Amennyiben ezt a mez o˝ t nem
70
☞
elm
részletes leírása a 203. oldalon
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
töltjük ki, az elm megkérdezi, hogy folytatni akarjuk-e a levél elküldését. Ha igen, válaszoljunk y -nal. Az elm beállításától függo˝ en ezek után vagy mindjárt írhatjuk a levelet, vagy még el˝obb megkérdezi a program, hogy küldjön-e másolatot valakinek a Cc: (Carbon Copy) kiírásával (ha nem akarunk senkinek másolatot küldeni, nyomjuk le az Enter gombot, különben írjuk be a címe(ke)t). Amikor ezeken túljutottunk nagy valószín˝uséggel a vi szövegszerkeszt o˝ ben találjuk magunkat. Ebben megírhatjuk a levelet, és a vi-ból kilépve az elm megkérdezi, hogy elküldje-e a levelet. Ezt az opciót ajánlja fel ( s – send), így Enter -re a levelet elküldi. Ha nem akarjuk a levelet elküldeni, akkor a f (forget) lenyomásával állíthatjuk le a levél elküldését. Az elm részletesebb leírását lásd a 16. fejezetben, a 203. oldalon.
8.3. Hálózat használata 8.3.1. A telnet parancs A telnet paranccsal jelentkezhetünk be interaktívan egy távoli gépre. Például a $ telnet rs1 belép az rs1 nev˝u gépbe, míg a $ telnet 193.6.30.1 belép a 193.6.30.1 Internet számú
a képerny˝on:
gépre. Ilyenkor pl. a következo˝ jelenik meg
Trying . . . Connected to rs1 Escape character is ’^T’. AIX telnet (rs1) IBM AIX Operating System Version 3.2 (C) Copyright IBM Corp. 1992 (/dev/pts0) login:
A parancs kiadása után a helyi gépünk megpróbálja a távoli gépet elérni, és sikeres kapcsolatfelvétel esetén megjelenik a távoli gép promptja, mintha terminálról jelentkeznénk be. A telnet parancs képes arra, hogy a távoli géppel a kapcsolat kiépítésekor megállapodjon a használt terminál típusában (bizonyos esetekben azonban ezt kézzel kell beállítani a rendszer /etc/profile vagy a felhasználó $HOME/.profile állományaiban). Amennyiben a termináltípust sikerült megállapítania a parancsnak, a távoli gépen automatikusan beállítja erre a TERM változó értékét. A beál-
8.3. HÁLÓZAT HASZNÁLATA
71
lítandó termináltípust felülbírálhatjuk a telnet parancs -e kapcsolójával. Ismeretlen termináltípus esetén a vt100 típus beállítása az esetek nagy részében m˝uködik.
8.3.2. Az ftp utasítás Az ftp paranccsal állományokat vihetünk át a helyi gép és egy távoli gép között. A parancs ezt az TCP/IP File Transfer Protocol (FTP) használatával valósítja meg. A parancs formátuma a következ˝o: $ ftp GépNév
ahol a GépNév a távoli gép Internet neve vagy címe. A kapcsolat kiépülése után az ftp megkérdezi a távoli gépen használandó azonosítót és kulcsszót. Az ftp> prompt után az ftp programnak különbözo˝ utasításokat adhatunk, amikkel pl. könyvtárakat listázhatunk ki, állományokat vihetünk át az egyik gépr o˝ l a másikra, stb. A parancs ugyan nagymértékben tudja követni a felhasználói igényeket, de az FTP szabvány megkötései miatt nem tud bizonyos file paramétereket átvinni (pl. tulajdonos neve, védelem, dátum, stb.). Ha ilyen típusú átvitelt szeretnénk megvalósítani (pl. alkönyvtárak kijelölése, stb.), akkor a tar archiváló parancsot (l. 134. oldal) célszer˝u használnunk. Futtatható, archív és más bináris állományok átvitelénél az FTP binary üzemmódját kell használni. Az ftp kapcsolatot automatikusan építi ki a program a megadott gépre, ha a felhasználó $HOME/.netrc állományában a GépNévhez beírjuk az azon a gépen használandó felhasználói azonosító adatokat. Például ha a .netrc állományban a következ˝o bejegyzés van: ✎ machine rs1 login tas password huha machine rs2 login kond
akkor az ftp rs1 parancs automatikusan belép a tas felhasználói azonosítóra huha jelszóval. Az ftp rs2 parancs elvégzi a belépést, de megkérdezi a kond felhasználó jelszavát, tekintve, hogy ez nincs benne a .netrc-ben. Ha el akarjuk kerülni, hogy az ftp használja a .netrc adatait, akkor ftp -n GépNév formátumot használjuk. A $HOME/.netrc állomány fontos személyes információkat tartalmaz, éppen ezért a UNIX rendszer nem használja ezt, amennyiben a file elérhet o˝ a csoport vagy a külvilág számára (megfelel˝o biztosíték pl. a 600-as védelmi kulcs beállítása a
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
72 $ chmod 600 $HOME/.netrc
utasítással ). Egy interaktívan futó ftp használatot a quit vagy bye utasításokkal, vagy az End of File (Ctrl-D) billenty˝uvel szakíthatunk meg az ftp> promptnál. Egy file átvitelt az Interrupt billenty˝uvel (Ctrl-C) szakíthatunk félbe. Az ftp utasításai Az ftp értelmezi az ftp> prompt után megadott parancsokat. Ha a parancsok használata során állománynévként a köto˝ jelet (-) adjuk meg, akkor a standard inputot (általában a billenty˝uzetet) használja a program bemenetként, a standard outputot (általában a képerny˝ot) pedig kimenetként. A leggyakrabban használt ftp utasítások a következo˝ k (a gyakorlott felhasználók a felsoroltakon kívül több más parancsot is használhatnak, pl. makrózáshoz): user Felhasználó
a helyi felhasználót a megadott Felhasználó paraméterekkel azonosítja a távoli gépen. cd TávoliKönyvtár
belép a megadott TávoliKönyvtárba a távoli gépen. lcd HelyiKönyvtár
belép a megadott HelyiKönyvtárba a helyi gépen. pwd
kiírja az aktuális könyvtárat a távoli gépen. dir [TávoliKönyvtár]
Kiírja az aktuális könyvtár (vagy a megadott TávoliKönyvtár) állománylistáját. ascii
átkapcsolja az átviteli módot ASCII formátumba (alapértelmezés). binary
átkapcsolja az átviteli módot bináris formátumba. get TávoliFile [HelyiFile]
átmásolja a TávoliFile-t a helyi gépre. Ha megadjuk a HelyiFile paramétert, az új állomány neve ez lesz. put HelyiFile [TávoliFile]
átmásolja a HelyiFile-t a távoli hostra (az esetlegesen megadott TávoliFile néven).
8.3. HÁLÓZAT HASZNÁLATA
73
prompt
bekapcsolja/kikapcsolja az interaktív promptot. Kikapcsolása általában az mput/mget parancsoknál szokásos. mdelete TávoliFile
kifejti a TávoliFile kifejezést, és kitörli a távoli gépen ezeket az állományokat. mget TávoliFile
kifejti a TávoliFile kifejezést, és átmásolja a távoli gépro˝ l ezeket az állományokat a helyi gépre. mput [HelyiFile]
kifejti a HelyiFile kifejezést a helyi gépen, és a megadott állományokat átmásolja a távoli gépre. !Parancs [Paraméter]
meghívja a shellt a helyi gépen az esetleges Parancscsal és Paraméterekkel. quit
lezárja az ftp bejelentkezést és kilép az ftp programból. Az ftp-t például a következ˝oképpen használhatjuk: ✎ $ ftp rs1 rácsatlakozunk az rs1 gépre Connected to rs1. 220 rs1 FTP server (Version 4.1 Fri Aug 28 11:37:57 GDT 1987) ready. ftp> user kond felhasználói nevünk pl. kond 331 Password required for kond. Password: megadjuk jelszavunkat, de ez nem jelenik meg 230 User kond logged in. ftp> dir kérünk egy file listát a távoli (rs2) gépen 200 PORT command successful. 150 Opening ASCII mode data connection for /bin/ls. total 60 drwx-----2 kond boss 512 Oct 19 23:45 Mail -rwxr-xr-x 1 kond boss 1564 Oct 11 10:27 drawzdata -rw-r----1 kond boss 9546 Sep 30 16:37 dwhetc.c -rw-r--r-1 kond boss 3051 Dec 06 03:44 smit.log drwxr-xr-x 2 kond boss 512 Dec 10 18:03 tmp -rw-r----1 kond boss 9820 Oct 11 10:28 z05001.gpl 226 Transfer complete. 827 bytes received in 0.19 seconds (4.2 Kbytes/s)
74 ftp> get dwhet.c
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK áthozzuk a dwhet.c állományt, ASCII (default) üzemmódban a távoli gépr˝ol a helyi gépre
200 PORT command successful. 150 Opening ASCII mode data connection for dwhetc.c (9546 bytes). 226 Transfer complete. local: dwhetc.c remote: dwhetc.c 9903 bytes received in 0.031 seconds (3.1e+02 Kbytes/s)
a két méret a sorvégi konverzió miatt nem egyezik ftp> !ls a helyi gépen megnézzük, megérkezett-e config.tel dwhetc.c gro tmp ftp plsr wave átvisszuk a távoli gépre a config.tel állományt ftp> put config.tel 200 PORT command successful. 150 Opening ASCII mode data connection for config.tel. (6122 bytes) 226 Transfer complete. local: config.tel remote: config.tel 6043 bytes sent in 0.039 seconds (1.5e+02 Kbytes/s) ftp> binary átkapcsolunk bináris üzembe 200 Type set to I, binary transfer mode ftp> mget z* áthozzuk a távoli gépr˝ol az összes z-vel kezd˝od˝o filemget z05001.gpl? y
t. az ftp egyesével végigkérdezi, hogy át akarjuk-e hozni az adott állományt
200 PORT command successful. 150 Opening BINARY mode data connection for z05001.gpl (9820 bytes). 226 Transfer complete. local: z05001.gpl remote: z05001.gpl 9820 bytes received in 0.036 seconds (272 Kbytes/s) ftp> quit kilépünk a programból 221 Goodbye.
8.3.3. A finger parancs A finger paranccsal egy adott gépen található felhasználó(k)ról kaphatunk információt. A paranccsal egy adott gépen (alapesetben a helyi gépen) létez o˝ felhasználóról, vagy egy adott gépet éppen használó felhasználókról kaphatunk információt. Példák:
8.4. A TIN ELEKTRONIKUS ÚJSÁG
75
Az rs2 gépen interaktívan bejelentkezett felhasználókat a $ finger @@rs2
Enter
parancs listázza ki: kond tas huba
console Mar 15 pts0 Mar 15 tty0 Mar 15
✎ 13:19 13:01 13:01
A kond felhasználóról az rs2 gépen $ finger kond@@rs2 Enter
a
parancs a következ˝ot írja ki: Login name: kond Directory: /u/kond Shell: /bin/ksh On since May 8 07:13:49 on console No Plan.
A finger program ilyenkor kiírja a felhasználó HOME könyvtárát, a login shellt, és a $HOME/.plan, valamint a $HOME/.project file tartalmát is. Bizonyos gépeknél a fenti információk módosulhatnak, megjelenhet pl. a felhasználó telefonszáma, van-e új levele, stb.
8.4. A tin elektronikus újság A UNIX rendszerekben külön programokkal (ilyen pl. a tin, trn, rn, inn) olvashatjuk az UseNet elektronikus újságot. A tin nem része az eredeti rendszernek, de talán az egyik legegyszer˝ubben használható kedvelt public domain újságolvasó program. Az UseNet újság olyan rovatokba van szervezve, melyek nagy része teljesen nyilvános, mindenki számára olvasható, bárki írhat beléjük. Ezek mellett lehet˝oség van teljesen zárt, csak meghatározott felhasználók számára olvasható rovatok megadására is, valamint bizonyos rovatokba csak a rovat szerkeszt o˝ jén keresztül lehet írni. Az újságot a $ tin -r
Enter
vagy a $ rtin
Enter
paranccsal indítjuk el, a rendszer beállításától függo˝ en. Ezután az egyes rovatok listájával jelentkezik a képerny˝on a program. A rovat neve tartalmazza, hogy mi
✎
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
76
☞
tin
els˝o elindítása a 220. oldalon
célt szolgál, milyen körben osztják szét, stb. Amennyiben a legels o˝ alkalommal hívjuk be a gépen a tint, olvassuk el a 220. oldalon található leírást a rovatok kiválasztásáról. A program a képerny˝o tetején és alján néhány sorban kijelzi az aktuális állapotot (a Ctrl-L gomb mindig újraírja a képerny˝ot). A legalsó sorban kiadhatjuk a kívánt tin parancsot, ill. a rendszer ide írja ki az állapot- és hibaüzeneteket. A fels˝o sorban az adott állapot kijelzése mellett a program megadja, milyen szinten dolgozunk éppen. Ez háromféle lehet: • rovatlista szint (Selection Group Level) : A rovatlista szintre a program elindítása után kerülünk. Az egyes rovatok sorszáma mellett megjelenik a rovat neve és a rovatban található még nem olvasott cikkek száma. A - jel azt jelzi, hogy az adott rovatot még egyáltalán nem olvastuk, ha pedig semmi nincs kiírva, akkor a rovat utolsó olvasása óta nem érkezett újabb cikk. Például:
->
21 22 23 24 25 26 27 28 29 30
Group Selection (77) comp.graphics.gnuplot comp.lang.fortran comp.lang.idl-pvwave comp.lang.postscript comp.laser-printers comp.mail.elm comp.sources.misc comp.sources.postscript comp.sources.unix comp.sources.x
78 6 -
Type ’h’ for help
144
A j és k gombok (esetleg a fel- és lefelé nyilak) segítségével kiválaszthatjuk az éppen aktuális rovatot (ezt egy nyíl vagy inverz felirat jelzi a képerny˝on). Az Enter gomb lenyomásával belépünk a jelzett rovatba. Ilyenkor megjelenik a rovat cikklistája. • cikklista szint (Group Level) : A tin ekkor az adott rovathoz tartozó cikkek adatait (sorszám, válaszok száma, tartalom és feladó) jeleníti meg. Például: comp.lang.idl-pvwave (23 33) -> 1 2 3 4
+ 2 + + +
Could I (please) be sent the FAQ?? I’m writing an FAQ for IDL applying poly_2d to larger images List widget problem
Type ’h’ for help [email protected] [email protected] (patric [email protected] [email protected] (
8.4. A TIN ELEKTRONIKUS ÚJSÁG 5 6 7 8 9
RENDER in PV CL 4.0 test Forcing motif type windows FAQ: Where is the FAQ? Request for neural network archite
77 [email protected] (DB Baird) [email protected] (DB Baird) [email protected] (DB Baird) [email protected] (Ke G [email protected] (
Egy adott cikket – az el˝oz˝o szinthez hasonlóan – a j és k gombokkal (esetleg a fel- és lefelé nyilakkal) válaszhatunk ki. A kiválasztott cikket az Enter gombbal kezdhetjük el olvasni. A szintr˝ol az q (quit) parancs tér vissza az el˝oz˝o, rovatlista szintre. • cikkolvasás (Article Level) :
Ezen a szinten a kiválasztott cikk jelenik meg a képernyo˝ n. A fels˝o három sorban az adott cikkek adatai (dátum, rovat, sorszám, tartalom, az esetleges válaszok száma és a feladó) jelennek meg. Például:
1 Mar 1993 14:01:45 GMT comp.lang.idl-pvwave Thread 1 of 23 Article 49 Re: Could I (please) be sent the FAQ?? Respno 1 of 2 [email protected] Dr. Joseph M Zawodny at NASA Langley Research In article [email protected] writes: >Hi: >I’m new to this group and would like a copy of the most recent FAQ. >Please, e-mail the FAQ to the address below. Thanks. > Jon > [email protected] Jon
I’m not sure there is a FAQ for this group (at least I’ve never seen one). Just go ahead and ask the question. --More--(84%) [1037/1229]
Ha a cikk hosszabb, mint egy oldal (amire a -More-(84%) [1037/1229] utal), akkor a Szóköz -zel ( Space ) lapozhatunk a következo˝ oldalra. Az tin program egy adott cikket és a rá érkezett „válaszokat” csoportként kezeli ún. „thread” formájában, ami nagyban megkönnyíti az egy témához kapcsolódó cikkek olvasását. A Szóköz parancs a cikk vége után automatikusan az els˝o, második, stb. válaszlevélre ugrik, de közvetlenül is megadhatjuk a válaszlevél sorszámát. A 0 (nulla) mindig az eredeti levélre vonatkozik. A szintr˝ol a q (quit) parancs (esetleg a balranyíl gomb) tér vissza az elo˝ z˝o, cikklista szintre.
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
78
☞
tin
részletes leírása a 219. oldalon
A tin minden szintjén egy saját (angol nyelv˝u) segítség-rendszert hívhatunk el˝o a h (help) utasítással. A programból a q (quit) paranccsal léphetünk ki. A program ilyenkor megkérdezi, elmentse-e az olvasott cikkek listáját (célszer˝u ilyenkor y -nal válaszolni). A tin sok más utasítással is rendelkezik (pl. cikkek beküldése, keresés a cikklistában, stb.), az ez iránt érdekl˝od˝oknek ajánljuk a 219. oldalon található részletes leírást. Szintén ajánljuk a news.announce.newusers rovatot, ahol a kezd˝o olvasók sok értékes információt találhatnak.
8.5. A gopher elektronikus adatkeres˝o program A TCP/IP hálózatok egyik érdekes lehet˝osége az elosztott információforrások használata. Ezek az adatok különbözo˝ gépeken vannak, de a felhasználó általában ezt nem érzékeli, mivel a keres˝oprogramok automatikusan váltanak az egyes távoli adatszolgáltató gépek között. Az elosztott információforrások egyik megvalósítása az ún. gopher protokoll. A gopher — amely általában nem része az eredeti UNIX rendszernek — egy egyszer˝uen kezelhet˝o, felhasználóbarát public domain adatkereso˝ program. A felhasználó egy menürendszert lát, ahonnan egy menüpontot kiválasztva a program a hálózaton keresztül lekérdezi a megfelelo˝ gépr˝ol a kívánt információt. Az egyes adatforrások között az átkapcsolás automatikus. A lekérdez˝o programot a $ gopher
Enter
vagy a $ gopher IndulóAdatforrásGépNév
Enter
paranccsal indítjuk el. Az els˝o esetben a program a keresést az alapértelmezésben beállított gépen kezdi el, míg a második esetben az IndulóAdatforrásGépNév Internet névvel (vagy címmel) megadott gépro˝ l kérdezi le az induló menüt. A program ezután az egyes adatok (ill. adatcsoportok) listáját írja ki a képerny˝ore. A listán az egyes sorszámok után röviden le van írva, hogy az adott pont ✎ mit tartalmaz. Például a $ gopher ludens.elte.hu
Enter
utasítás után a következ˝o képerny˝o jelenik meg: Root gopher server: ludens.elte.hu -->
1. 2.
LUDENS gopher server/ ELTE gopher server/
8.5. A GOPHER ELEKTRONIKUS ADATKERESO˝ PROGRAM Press ? for Help, q to Quit, u to go up a menu
79 Page: 1/1
A program a képerny˝o alján egy sorban kijelzi az aktuális állapotot (a Ctrl-L gomb újraírja a képerny˝ot). Egy adott menüpontot a kurzormozgató fel- és lefelé nyilakkal, vagy a sorszám megadásával válaszhatunk ki. A kiválasztott pontra az Enter vagy a kurzormozgató jobbranyíl ( → ) gombbal léphetünk rá. Egy elo˝ z˝o szintre a balranyíl (ez a kurzormozgató ← gomb, nem tévesztendo˝ össze a Backspace gombbal) vagy az u parancs lép vissza. A programból a q (quit) paraccsal léphetünk ki (a program ilyenkor meger˝osítést kér a y gombbal). A h (help) gomb kiírja a gopher utasításait. Ha az el˝oz˝o példánál az els˝o pontot választjuk ki, a következ˝o menübe jutunk: Internet Gopher Information Client v1.1 LUDENS gopher server -->
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Olvass el. VMS alapismeretek/ Szolgaltatasok a Ludens-en/ Levelezesi alapismeretek/ Egyetemkozi Hirdetotabla/ NEWS Archivum/ TTK-s NYUZ, 8. felevfolyam / Hollosi Information eXchange (HIX)/ ELTE csillagaszati gopher server/ Caesar gopher server/ Csoma gopher server/ BKE gopher server/ The European root Gopher Server/
Press ? for Help, q to Quit, u to go up a menu
Page: 1/1
Egy adatnak többféle típusa lehet: újabb menüszint, szöveges adat, kép, hang, stb. A program automatikusan megkülönbözteti ezeket: belép egy újabb menüszintre, kiírja a szöveges adatot, áthozza a bináris állományt (pl. programot) a helyi gépre, megjeleníti a képet, megszólaltatja a hangot, stb. Az el o˝ z˝o példában az újabb menüszintekre a / végz˝odés, míg az adatfile-ra a . végz˝odés utal.4 Megjegyezzük, hogy a HIX (Hollosi Information eXchange) faliújságot, ill. ennek egyes rovatait is ezen a szerveren keresztül lehet elérni (8. pont). A szöveges adat lekérdezése esetén azt a gopher a more parancs segítségével jeleníti meg: ha az adat hosszabb, mint egy oldal akkor a Szóköz -zel lapozhatunk a következ˝o, a b -vel pedig az el˝oz˝o oldalra. A q gombbal kiléphetünk az olvasásból. Ha a PAGER környezeti változóban más programot (pl. less) adunk 4
Ez csak ebben a példában van így, máshol ezt másképp vagy egyáltalán nem jelölik.
80
FEJEZET 8. KOMMUNIKÁCIÓS PROGRAMOK
meg, akkor a program a more helyett azt használja. Az adatsor után a program megkérdezi, elmentse-e az adatot egy állományba (s opció), elküldje-e levélben valakinek (m opció), vagy egyszer˝uen lépjen vissza az elo˝ z˝o menübe ( Enter opció). Bináris állományoknál a program megkérdezi, milyen nev˝u állományba hozza át a helyi gépre az adatokat. Kép megjelenítésére csak grafikus felülettel (pl. X11), hang megjelenítésére csak a szükséges hang kimenettel rendelkez o˝ gépek (pl. SUN munkaállomás) képesek. A gopher menüszintjén az O (Opció) paranccsal állíthatjuk át az alapértelmezésbeli értékekro˝ l azokat a különböz˝o UNIXbeli adatkezel˝o parancsokat, amelyeket a gopher az adott információtípusok esetén használ (ez pl. xv lehet képek megjelenítésére). Bizonyos menüpontoknál a program keresést hajt végre egy nagyobb adatbázisban: ilyenkor meg kell adnunk a keresendo˝ szót (search string). A gopher program a gyakran olvasott menüpontokat képes egy ún. bookmark (olvasójel) állományba összefoglalni. Az aktuális menüpontot az a paranccsal adhatjuk ehhez az állományhoz. Az olvasójel listát a v paranccsal nézhetjük meg: ilyenkor itt ugyanúgy mozoghatunk és kereshetünk adatokat, mint a „f o˝ ” menüben. Egy adott pontot — amennyiben az olvasójel listán vagyunk — a d gombbal törölhetünk. Ha a programot a gopher -b utasítással indítjuk, akkor rögtön az olvasójel listába lépünk be. Megjegyzend˝o, hogy a gopher mellett több más, hasonló adathálózat (pl. a World Wide Web (WWW), Hytelnet, stb.) is létezik. Ezeket vagy pl. egy gopher– WWW kapuként üzemel˝o gépen keresztül, vagy a gopher mellett más protokollt is kezel˝o programok segítségével érhetjük el (ilyen nagyon jól használható program pl. az ASCII alapú lynx, vagy az X11 Window alapú NCSA xmosaic).
II. Túl az alapokon
81
9. fejezet A Korn shell A UNIX rendszereken többféle shell (burok) program futtatható. A legrégibb a Bourne shell (sh vagy bsh), illetve a C nyelv szintaxisát követo˝ C-shell (csh). A továbbiakban a Korn shellt (ksh) ismertetjük, amely az egyik leginkább elterjed˝oben lev˝o shell. A shell felülr˝ol teljesen kompatibilis a Bourne shellel, és a C-shell számos hasznos tulajdonságát is magába ötvözi. A legtöbb forgalomban lév˝o UNIX operációs rendszer a Korn shellt már eredetileg tartalmazza, de mivel a program közprogramként is beszerezheto˝ , így a többi gépen is használhatjuk ezt a shellt. Megjegyzend˝o, hogy az említett három shell mellett közprogramként felt˝untek más, még többet tudó shellek is (tcsh, zsh, bash stb.), de ezek alapértelmezésben nem részei egyetlen forgalomban lev˝o operációs rendszernek sem. A Korn shell maga egy interaktív parancsértelmezo˝ és programmozási nyelv, amely a következ˝o funkciókat tartalmazza: • • • • • • • • • • •
shell parancsok függvények, feltételek és aritmetikai kifejezések kiértékelése különleges parancsok job vezérlés parancs helyettesítés állománynév helyettesítés bemenet és kimenet átirányítása helyettesít˝o nevek alkalmazása ~ (tilde) helyettesítés paraméter helyettesítés parancssor szerkesztése 83
FEJEZET 9. A KORN SHELL
84
Ha a Korn shellt bejelentkezéskor hívja meg a rendszer, az végrehajtja a /etc/profile shell állomány parancsait, majd a $HOME/.profile állomány shell parancsait. Ezután beolvassa az ENV környezetváltozó által definiált állományból a parancsokat. Amennyiben a ksh parancs után megadunk egy állománynevet, akkor az adott állományban felsorolt shell parancsok is végrehajtódnak. A megadott állománynak olvashatónak kell lenni (l. chmod parancs).
9.1. A környezetváltozók A környezetváltozók tárolják az egy-egy program számára átadható információkat. A környezetváltozónak van egy neve és ehhez rendelhetünk értéket. Értéket egyszer˝uen a Név=Érték utasítással adhatunk a változónak1 . Ez az értékadás csak az adott shellre érvényes, ha azt akarjuk, hogy az abból nyíló újabb shellek is átvegyék a környezetváltozót, azt exportálni kell2 : $ export Név
A leggyakrabban használt környezetváltozók közé tartozik a TERM, mely a terminálunkat azonosítja a rendszer számára, a LOGNAME, mely bejelentkezési nevünket tartalmazza, a PWD, mely az aktuális könyvtár nevét adja meg, a PATH pedig a parancsok keresési útvonalát tartalmazza. Interaktív használatkor a shell a parancsokra a PS1 környezetváltozóban definiált prompttal vár. A Korn shell a PS1 értékét a prompt kiírása elo˝ tt mindig kiértékeli. Így a $ export PS1=’$PWD > ’
parancs hatására a prompt mindig az aktuális könyvtárnév lesz (a PS1 változó mindig az aktuális PWD változó értékét fogja tartalmazni). Amennyiben a parancsot nem fejeztük be az „újsor” karakter ( Enter ) kiadása elo˝ tt (pl. a ’ vagy " nyitó karaktereknek nem adunk meg párt), akkor a Korn shell a PS2 környezetváltozó értékét rakja ki másodlagos promptként.
9.2. A parancsok kiértékelése a shellben Minden alkalommal, amikor átadunk egy parancsot a rendszernek, a shell kiértékeli, és feldolgozza azt. Amennyiben a rendszer egy speciális beépített parancsát 1
C-shellben ez set Név=Érték alakú. A C-shellben a set helyett a setenv paranccsal kell ilyenkor értéket adni a környezeti változónak. 2
˝ 9.3. VÉDOKARAKTEREK
85
adjuk ki, az az adott shellben hajtódik végre (például a test parancsra a shell beépített utasítása hajtódik végre, még akkor is, ha létezik általunk létrehozott, ˝ lépésben a shell leellen˝orzi, hogy test nev˝u futtatható állomány). A következo a kiadott parancs nem egy általunk megadott függvény-e. Amennyiben igen, a pozícionális paraméterek (azaz az adott parancs parancssorban lév o˝ argumentumai) elment˝odnek, majd behelyettesít˝odnek a függvénybe. Amikor a függvény lefut, a shell visszatölti az eredeti paramétereket. Egy függvény mindig az utoljára végrehajtott parancs visszatérési értékével fejezi be a futását, hacsak a return utasítással nem adunk neki más értéket. A függvény az aktuális shellben hajtódik végre. Amennyiben a parancs fordítás és linkelés eredménye (pl. az a.out állomány), akkor az adott shellben futtatja le. Ha a utasítás se nem linkelt ill. beépített parancs, se nem függvény, akkor azt a shell parancsokat tartalmazó állománynak tekinti, és alshellt indít el azok beolvasására és végrehajtására. Ilyenkor a nem exportált alias- és függvénydefiniciók nem adódnak át. A zárójelek közti parancsok is alshellben futnak le, de megkapják a nem exportált változókat is. A parancsot a rendszer a PATH környezetváltozó értékeként megadott könyvtárakban keresi. A PATH-ban több könyvtárnevet is megadhatunk, egymástól kett˝osponttal elválasztva. A parancs keresése a megadott felsorolási sorrendben történik. Az aktuális könyvtárat két egymás utáni ketto˝ sponttal jelöljük, esetleg a lista végén lev˝o kett˝osponttal, de ki is írhatjuk a . könyvtárnévvel hivatkozva. Amenynyiben a parancs / jelet tartalmaz, akkor a shell nem használja a PATH értékét, hanem megpróbálja útvonalként értelmezni a parancsot. A parancsot csak akkor indítja el a shell, ha annak védelmi kódja (amit a chmod paranccsal állíthatunk be) lehet˝ové teszi a futtatást.
9.3. Véd˝okarakterek Minden ún. metakarakter (ezek a fordított törtvonal \, aposztróf (’), fordított \ aposztróf ( ), macskaköröm ("), gömböly˝u (()), szögletes ([]) és kapcsos ({}) zárójelek, kisebb és nagyobb jel (<>), függo˝ leges vonal (|), és-jel (&), pontosvessz˝o (;), csillag (*) kérd˝ojel (?) és a dollár ($) jel) speciális jelentést hordoz a shell számára. Amennyiben azt akarjuk, hogy a shell ne értelmezzen egy karaktert, akkor azt le kell védeni. Egy karaktert az elé helyezett fordított törtvonal (\) védi meg a shellt˝ol. A sor végén álló \ azt jelzi, hogy a parancs a következo˝ sorban folytatódik. Több karaktert aposztrófok (’) közé kell tenni (ezzel az szövegben el˝oforduló aposztrófot nem tudjuk levédeni). A macskakörmök közötti szöveg-
86
FEJEZET 9. A KORN SHELL
részben végrehajtódik a paraméter- és parancshelyettesítés, de a fordított törtvonal \ levédi a fordított törtvonalat, a fordított aposztrófot ( ), a macskakörmöt (") és a dollár ($) jelet. A macskakörmök és aposztrófok közötti részt a shell egy szónak kezeli (egy pozíciós paramétert foglal). A $* és $@@ pozíciós paraméterek (az összes átadott argumentum) egyforma hatású amikor nem tesszük macskakörmök közé, de macskakörmök között a $* egy szóként kezeli az összes átadott paramétert, míg a $@@ minden paramétert külön szóba ír. A fordított aposztrófok között a fordított törtjel levédi a fordított aposztrófot és a dollár jelet. Amennyiben a fordított aposztróf macskakörmök között fordul elo˝ , akkor a fordított törtvonal levédi a fordított aposztrófok közötti macskakörmöt is. A fenntartott szavak valamint a helyettesít˝o nevek (alias) felismerését megakadályozhatjuk, amennyiben bármelyik karakterüket levédjük (ezek felismerése még a véd˝okarakterek kiértékelése el˝ott történik). A beépített parancsok, valamint a függvények felismerését ilyen módon nem akadályozhatjuk meg.
9.4. Parancssor szerkesztés A Korn shell az utolsó 128 végrehajtott parancsot a $HOME/.sh_history állományban tárolja el. Az állomány neve a HISTFILE környezetváltozóval megváltoztatható, az eltárolt parancsok számát meg a HISTSIZE környezetváltozó értéke szabja meg. Alapbeállításban a begépelt parancsok a bejelentkezések között is eltárolódnak, és amennyiben egyszerre több bejelentkezésünk is fut ugyanazon a gépen, akkor mindegyik ugyanabba az állományba írja be a begépelt parancsokat, ezért más bejelentkezésben beírt parancsainkat is visszahívhatjuk. A parancsok visszahívására az fc parancs szolgál. Ennél hatékonyabb módja is van a régi parancsok visszahívásának és szerkesztésének, ezért aki ezt a parancsot akarja használni, olvassa el a számítógépen található kézikönyv (man) oldalakat. A legtöbb gépen az fc -e - parancs az r bet˝uhöz van hozzárendelve alias-szal, és az r l parancs végrehajtja a legutoljára begépelt, l-lel kezd o˝ d˝o parancsot (nemcsak egy bet˝u adható meg a parancsból). Az FCEDIT környezetváltozó értéke az a szövegszerkeszt˝o, melyet a szerkesztéshez szeretnénk használni, például a vi vagy az emacs. A szövegszerkeszto˝ ket a teljes útvonallal érdemes (path) definiálni. A szövegszerkeszt˝o felfelé lépés (el˝oz˝o sor) parancsa hívja viszsza az el˝oz˝o parancsokat, a lefelé lépés (következo˝ sor) utasítással pedig az egyre kés˝obbi parancsokat érhetjük el (vi üzemmódban a k és a j gombok használatát az ESC gombbal célszer˝u indítani, mivel beszúrási üzemmódból indulunk). A szerkeszt˝okarakterekkel (törlés, helyettesítés ...) javíthatunk a parancsokon, és az
9.5. VISSZATÉRÉSI ÉRTÉKEK
87
lenyomásával a már javított parancsot adjuk át a rendszernek. A parancssor szerkesztését az FCEDIT definiálása nélkül, az EDITOR, illetve ennek hiányaban a VISUAL környezetváltozók beállításával is megadhatjuk. Ha a változó értéke emacs, gmacs, vagy vi-ra végz˝odik, akkor a megfelel˝o parancsszerkesztési mód lép m˝uködésbe. Általában ezek egyike sincs definiálva, err o˝ l a felhasználónak kell gondoskodnia (például a .profile állományon keresztül). Az EDITOR és VISUAL környezetváltozók helyett a set -o vi, ill. a set -o emacs parancsokkal is beállíthatjuk a parancssorok szerkesztését. Ezeket a parancsokat szintén célszer˝u a .profile állományba beleírni. Enter
9.5. Visszatérési értékek Minden lefuttatott parancs egy u.n. visszatérési értéket ad vissza az o˝ t elindító shellnek (programnak) Ha külön, a return utasítással nem adunk neki más értéket, akkor egy shell scriptben ezt normális lefutás esetén az utolsó lefuttatott parancs visszatérési értéke adja meg. A futás közbeni hibákat a shell kiírja a hibát tartalmazó sor számával (egynél több sor esetén), a hívott függvény nevével és a hibaüzenettel együtt.
9.6. A Korn shell kapcsolói A Korn shell lefuttatható programként is (akárcsak a többi shell). A ksh parancsnak megadhatók kapcsolók is (melyeket a már futó shellben is állíthatunk a set paranccsal). A legfontosabb kapcsolókat a set ismertetésekor, a 93. oldalon ☞ set részletes soroljuk fel. leírása a 93. oldalon
9.7. A Korn-shell beépített parancsai A Korn shell a következ˝o fenntartott szavakat ismeri fel, amennyiben azok a parancs els˝o szavai, véd˝okarakaterek nélkül: if elif
for do
case select
then fi
while done
esac time
else {}
for Azonosító [in Érték ...]; do Lista ;done Minden alkalommal, amikor a for parancs lefut,
until [[ ]]
function
az Azonosító értéke az
FEJEZET 9. A KORN SHELL
88
következ˝o szavát veszi fel. Ha nem adjuk meg az in Érték kifejezést, akkor a Listában felsorolt parancsokat a pozíciós paraméterekre hajtja végre.
Érték
select Azonosító [in Érték ...] ;do Lista ;done A select parancs kinyomtatja a standard hibakimeneten
az Értékben felsorolt szavakat, sorszámmal ellátva. Ha nem adjuk meg az Értéket, a pozíciós paramétereket használja a shell. A PS3-ban definiált promptot kiírva olvassa be a választ. Amennyiben a beolvasott sor tartalmaz egy számot, akkor az Azonosító értéke a kiválasztott szó lesz, üres sor esetén a választási lista jelenik meg újra, egyébként pedig az Azonosító nem kap értéket. A beolvasott sort a REPLY környezetváltozó tartalmazza. Minden kiválasztásra végrehajtódnak a Listában felsorolt parancs(ok).
case Szó in [[ ( ] Minta[ || Minta] ... ) A case parancs végrehajtja a Szóval egyez˝o
Lista ;;] esac
els˝o Mintához tartozó Listát. A Minta az állománynév helyettesítésben ismertetetett helyettesíto˝ karaktereket tartalmazhat.
if Lista ;then Lista [elif Lista ;then Lista] ...
[;else Lista] ;fi
Az if parancs végrehajtja az els˝o Listában felsorolt parancsokat, és ha az utolsó nulla visszatérési értéket ad, akkor az utána következo˝ Listát hajtja végre. Ellenkez˝o esetben az elif utáni részt értékeli az el˝oz˝ohöz hasonlóan. Amennyiben egy feltételnél sem nulla a visszatérési érték az else utáni Listát hajta végre. while Lista ;do Lista ;done until Lista ;do Lista ;done A while parancs folyamatosan
végrehajtja az utána felsorolt parancsokat, és amennyiben az utolsó parancs visszatérési értéke nulla, végrehajtja a do utáni parancssorozatot, különben kilép a hurokból. Az until parancs hasonlóan m˝uködik, csak a feltételnek nulla értékére lép ki a hurokból.
( Lista )
A Lista parancs(sorozatot) külön környezetben hajtja végre, így a végrehajtás során létrejött vátozások (környezetváltozó módosítása, könyvtárváltás) nem befolyásolják a munkakörnyezetünket. Amennyiben egymásba kell ágyazni több ilyen hívást, tegyünk szóközt a zárójelek közé, mivel az aritmetikai kiértékelés használja a kett˝os zárójelet (a (( jelet). {Lista ;}
Egyszer˝uen végrehajtja a parancsokat. Mivel a kapcsos zárójel fenntartott
9.8. A FÜGGVÉNYEK
89
szó, ezért a shell csak akkor ismeri fel, ha a sor elején vagy a parancsokat elválasztó pontosvessz˝o után áll. [[ Kifejezés ]]
Kiértékeli a Kifejezést, és nulla értékkel tér vissza, ha az igaz. function Azonosító {Lista ;}
vagy az Azonosító () { Lista ;} az Azonosítóhoz rendel egy függvényt. A függvény a {} közötti Listában felsorolt parancsokat hajtja végre. time Parancssorozat
Végrehajtja a Parancssorozatot és kiírja a felhasznált rendszer- és felhasználói id˝ot a standard hibakimeneten.
9.8. A függvények A függvényeket a shell magában tárolja el definiálásukkor. A parancshoz hasonlóan a függvényeknek is átadhatunk pozicionális paramétereket. A függvények a hívó paranccsal egy eljárásban (process) futnak le, és megosztják annak er˝oforrásait (könyvtár, állományok, nyomkövetés, változók ...). A függvényb˝ol a return speciális paranccsal térhetünk vissza. A függvény végrehajtása során fellép˝o hiba is felfüggeszti a függvény futását.
9.9. Feltételes kifejezések A feltételeket a test, az [ és ] illetve a [[ és ]] parancspárral adhatjuk ki, állományok jellemz˝oinek vizsgálatára, számok, stringek összehasonlítására. A shell nem bontja fel szavakra, és nem hajt végre állománynév helyettesítést a [[ és ]] jelek között. Minden kifejezést a következo˝ kifejezésekb˝ol állíthatunk össze: -a File
Igaz, ha a File létezik. -d File
Igaz, ha a File létezik, és könyvtár. -f File
Igaz, ha a File létezik, és közönséges állomány.
FEJEZET 9. A KORN SHELL
90 -n String
Igaz, ha a String nem nulla hosszúságú. -r File
Igaz, ha a File létezik, és olvasható az eljárás számára. -s File
Igaz, ha a File létezik, és nem nulla hosszúságú. -w File
Igaz, ha a File létezik, és az adott eljárás tudja írni. -x File
Igaz, ha a File létezik, és a futó eljárás végre tudja hajtani. Ha a File könyvtár, akkor a futó eljárásnak joga van keresni a könyvtárban. -z String
Igaz, ha a String nulla hosszúságú. -L File
Igaz, ha a File létezik, és szimbolikus link. File1 -nt File2
Igaz, ha File1 létezik és újabb, mint File2. File1 -ot File2
Igaz, ha File1 létezik és régebbi, mint File2. File1 -ef File2
Igaz, ha File1 és File2 is létezik, és ugyanarra az állományra mutatnak. String = Minta
Igaz, ha a String egyezik a Mintával. String != Minta
Igaz, ha a String nem egyezik a Mintával. String1 < String2
Igaz, ha a String1 megel˝ozi az ASCII alapú könyvtári sorrendben a String2 kifejezést. String1 > String2
Igaz, ha String1 a String2 után következik könyvtári sorrendben. Kifejezés1 -eq Kifejezés2
Igaz, ha a Kifejezés1 egyenl˝o Kifejezés2-vel. Kifejezés1 -ne Kifejezés2
Igaz, ha a Kifejezés1 nem egyenl˝o Kifejezés2-vel. Kifejezés1 -lt Kifejezés2
Igaz, ha a Kifejezés1 kisebb, mint Kifejezés2.
9.10. SPECIÁLIS PARANCSOK
91
Kifejezés1 -gt Kifejezés2
Igaz, ha Kifejezés1 nagyobb, mint Kifejezés2. Kifejezés1 -le Kifejezés2
Igaz, ha Kifejezés1 kisebb vagy egyenlo˝ , mint Kifejezés2. Kifejezés1 -ge Kifejezés2
Igaz, ha Kifejezés1 nagyobb vagy egyenlo˝ , mint Kifejezés2. Összetett kifejezéseket ezekb˝ol a következ˝oképp gyárthatunk (csökken˝o prioritással): (Kifejezés)
Igaz, ha a Kifejezés igaz. A kifejezések csoportosítására használjuk. !Kifejezés
Igaz, ha a Kifejezés hamis. Kifejezés1 && Kifejezés2
Igaz, ha a Kifejezés1 és a Kifejezés2 is igaz. Az && helyett a -a feltétel is használható. Kifejezés1 ||| Kifejezés2
Igaz, ha vagy a Kifejezés1 vagy a Kifejezés2 igaz.Az ||| helyett a -o feltétel is használható.
9.10. Speciális parancsok A Korn shellbe beépített parancsok a shell eljáráson belül futnak le. Használhatjuk a bemeneti és kimeneti átirányítást is. Általában a kimenet az 1. állományleírójú állományba (standard kimenet) íródik, és sikeres végrehajtás esetén az utasítás nulla értékkel tér vissza. A következ˝okben a legfontosabb beépített parancsokat ismertetjük: .
File
Beolvassa a File-t, majd végrehajtja az aktuális shellben és környezetben. A File-t a PATH környezetváltozó alapján keresi meg. A visszatérési érték az utolsó végrehajtott parancs visszatérési értéke. A . parancs beolvassa a teljes File-t miel˝ott végrehajtaná. Ezért a File-on belüli alias, stb. parancsoknak már nem lesz hatása a végrehajtás során. Ha interaktív bejelentkezésb o˝ l futtatunk így, akkor az állományban található exit utasítás hatására mindjárt a shellb˝ol is kilépünk.
FEJEZET 9. A KORN SHELL
92
alias [-tx] [Név[=Érték]] ... Argumentum nélkül az alias parancs kiírja a helyettesíto˝ nevek listáját Név=Érték formátumban. Argumentumot megadva beállítja a Név=Érték formában megadott hozzárendelést. Például az alias dir=ls hatására a dir parancs
is kiírja egy könyvtár tartalmát. Az x kapcsoló hatására az utasítás exportált (azaz az aleljárások számára is elérhet˝o) lesz, illetve kiíráskor csak az exportált helyettesíto˝ neveket írja ki. A t kapcsoló bekapcsolja a nyomkövetést az adott Névre. break [n]
Kilép a while, until, for vagy select hurokból. Az opcionális n paraméter mondja meg, hogy egymásba ágyazott hurkok esetén hány szintet lépjen feljebb. continue [n] A while, until, for vagy select következ˝o ciklusát kezdi el. Az opcionális n paraméter mondja meg, hogy egymásba ágyazott hurkok esetén
hány szintet lépjen feljebb.
eval [Argumentum ...]
Beolvassa az Argumentumokat shell inputként, és az eredményként létrejöv˝o parancso(ka)t végrehajtja. Ezzel az utasítással kétszer történik meg az Argumentumban található speciális karakterek kiértékelése. exit [n]
A shell befejezi futását és az n értékkel tér vissza. Ha nem adunk meg visszatérési értéket, akkor az az utolsó végrehajtott parancs értékével tér vissza. export [Név[= Érték]] ...
A megjelölt neveket exportálja. Ezáltal az így kijelölt változók automatikusan átadódnak a shellb˝ol indított aleljárásoknak is, még ha közben meg is változtattuk értéküket. getopts OpcióString Név [Argumentum ...]
Lellen˝orzi a shell parancs Argumentumát (pozíciós paramétereit) az opciók szempontjából. Opció a + vagy a - jellel kezdo˝ d˝o bet˝u (vagy szó). Ha az argumentum nem plusz vagy mínusz jellel kezdo˝ dik, vagy a -- jel fordul el˝o, azon túl nem keres opciót. Az OpcióString tartalmazza azokat a bet˝uket, amit a getopts parancs opcióként felismer. Az adott bet˝u utáni kett˝ospont azt jelzi, hogy annak az opciónak argumentuma van. Az opció argumentumát vagy közvetlenül az opció után, vagy attól szóközzel elválasztva kell megadni. A getopts parancs
9.10. SPECIÁLIS PARANCSOK
93
a soron következ˝o opcióbet˝ut a Név változóba helyezi, amennyiben az opciót a + (vagy -) jel el˝ozte meg. A következ˝o argumentum pozícióját az OPTIND változó, az adott opció argumentumát az OPTARG változó tartalmazza. let Kifejezés ...
Kiértékeli a megadott atritmetikai kifejezést. Nulla értékkel tér viszsza, ha az utolsó kifejezés értéke nem nulla, máskülönben eggyel. print [-Rnprsu[n]] [Argumentum ...]
Kinyomtatja az argumentumokat a standard kimenetre. A kapcsolók jelentése a következ˝o: az R és r nem hajtja végre az ún. escape szekvenciák (\n \t \b \r, stb.) kifejtését, az n nem ír ki új sor karaktert a lista végére. A p kapcsoló cs˝obe ír, az s kapcsoló hatására pedig az utasítás beleíródik a HISTFILE állományba. Az u kapcsoló segítségével az n számmal megadott állományleíróba írhatunk. pwd
Kiírja az aktuális könyvtárat. Hatása azonos a print -r - $PWD paranccsal. read [-prsu[n]] [Név?Prompt] [Név ...]
Beolvas egy sort a standard bemenetr˝ol és szavakra bontja a mez˝oelválasztó karaktereket definiáló IFS környezetváltozó alapján. A sor elejére kiteszi a Promptot, és a Név változóba olvassa a sort. Az r kapcsoló hatására szavakat az egymás után felsorolt Név változókba teszi, és a sorvégi fordított törtjelet nem értelmezi folytatósor jelzésre. Ha nem adunk meg nevet, a sort a REPLY változóba olvassa be. A visszatérési érték nulla, kivéve ha file vége jelet olvas be. A p kapcsoló cs˝ob˝ol olvas, az s kapcsoló hatására a parancs beleíróddik a HISTFILE állományba. Az u kapcsoló segítségével az n számmal megadott állományleíróból olvashatunk.
readonly [Név [=Érték] ] ...
A megadott Nevet csak olvashatónak jelöli meg, és ezáltal a változó értékét nem lehet kés˝obb megváltoztatni. return [n]
A shell függvény futását lezárja és a hívó eljárásba adja vissza a vezérlést n visszatérési értékkel. set [+||-aefhkmnopstuvx] [+|-o Opció ]...
[+|-A Név ][Argumentum...]
A shell különböz˝o paramétereit állítja. A következ˝o parancsokat használhatjuk:
FEJEZET 9. A KORN SHELL
94 -A
-a -f -n -o
Tömb hozzárendelés. Törli a Név el˝oz˝o értékét és egymás után hozzárendeli a felsorolt Argumentumokat. Ha a +A kapcsolót használjuk nem törli el˝oz˝oleg az eredeti értéket. Minden további definiált változó automatikusan exportált lesz. Letiltja az állománynév helyettesítést. Beolvassa és leellen˝orzi a parancsokat, de nem hajtja o˝ ket végre. Az utána megadható, leggyakrabban használt opciók a következ o˝ k: emacs : emacs módban lehet a parancssort szerkeszteni; gmacs : gmacs módban lehet a parancssort szerkeszteni; vi : a vi beszúrási üzemmódjában hajtja végre a parancssor szerkesz-
tését; : minden begépelt karaktert vi bemeneti karakterként dolgoz fel; ignoreeof : a shell nem lép ki a file vége karakterre, csak az exit parancsra; markdirs : minden az állománynévkifejtés eredményeként kapott könyvtárnév végére egy törtvonalat illeszt; ˝ noclobber : megakadályozza hogy a > átirányítás hatására már létez o állományokat felülírjon a shell. Ilyenkor a > || jellel érthetünk el felülírást; nolog : megakadályozza, hogy a függvénydefiniciókat a shell a history file-ba mentse. viraw
Ha nem adunk meg opciókat, a beállított opciókat írja ki. A pozíciós paramétereket abc sorrendbe állítja. Kilép egy parancs beolvasása és végrehajtása után. A helyettesítés során hibának értelmezi, ha egy változó értéke nincs beállítva. -v Kiírja a végrehajtandó parancsot ahogy beolvassa. -x Kiírja a végrehajtandó parancsot kifejtés után ahogy végrehajtja. - Kikapcsolja az x és v kapcsolók hatását. ˝ argumen-- A kapcsolók feldolgozásának végét jelzi. Az utána következ o tum már kezd˝odhet minusz jellel anélkül, hogy azt a shell opciónak értelmezné.
-s -t -u
Amennyiben a fenti kapcsolókat mínusz helyett plusz jellel adjuk meg, akkor az kikapcsolja az adott kapcsoló hatását. A kapcsolók aktuális beállítását a $- környezetváltozó tartalmazza. shift [n]
Átszámozza a pozíciós paramétereket $n+1-t˝ol kezdve $1, $2 ...-re. Az
9.10. SPECIÁLIS PARANCSOK
95
alapértéke 1, és megadható tetsz˝oleges aritmetikai kifejezés, mely a pozíciós paraméterek számánál ($#) kisebb vagy egyenlo˝ , nem negatív számot eredményez. n
times
Kiírja a shell, és a bel˝ole indított eljárások által felhasznált rendszer- és felhasználói id˝ot. trap [Parancs] [Jel] ...
Beolvassa és végrehajtja a Parancsot ha a shell megkapja a Jelet. (A kiadható jeleket a kill -l paranccsal listázhatjuk ki.) A Jelet akár számként, akár a jel nevével is megadhatjuk. A nyomkövetés nem m˝uködik olyan jelekre, melyeket a shell indításakor vagy késo˝ bb a set paranccsal letiltottunk. A nyomkövetések a jelek sorszáma szerinti sorrendben hajtódnak végre. Ha nem adunk meg Parancsot, akkor törli a nyomkövetéséket eredeti értékükre. A trap $HOME/.logout EXIT parancs hatására a shellbo˝ l való kilépéskor a rendszer végrehajtja a bejelentkezési könyvtárunkban lev o˝ .logout állományt. typeset [+HLRZfilrtux[n]] [ Név [=Érték]] ...
Beállítja a shell változók értékeit és típusát. Függvényhíváson belül létrehozott Név esetén azt külön helyen tárolja, és a függvényhívás végén visszaállítja annak eredeti, shellbeli értékét. A kapcsolók jelentése a következ o˝ : L
R Z f i l r u x
Levágja a szó elején lev˝o szóközöket, és balra rendezi az Értéket. Az ˝ n definiálja a mez˝o szélességét. Ha nem adjuk meg, akkor az elso hozzárendelésb˝ol állítja be értékét a shell. Jobbra rendezi a változó értékét. Jobbra rendez, amennyiben az Érték számmal kezdo˝ dik. Azt jelzi, hogy a Név függvény. A változó egész típusú. Ez meggyorsítja az aritmetikai m˝uveleteket. A kiíráshoz használandó számrendszert az n értéke határozza meg. Kisbet˝ukre konvertálja a nagybet˝uket. A nagybet˝u u kapcsolóját hatálytalanítja. A kijelölt Neveket csak olvashatónak deklarálja. A kisbet˝uket naggyá konvertálja. Az l kapcsoló ellentéte. A felsorolt Neveket exportálásra jelöli ki.
Ha a kapcsolónál a - jel helyett a + jelet használjuk, akkor az kikapcsolja az adott kapcsoló hatását. Ha nem adjuk meg a Név paramétert, akkor a megadott kapcsolóhoz tartozó Nevek listáját adja vissza. Ha kapcsolót sem adunk meg, minden változót kiír az Értékével.
FEJEZET 9. A KORN SHELL
96 ulimit [-HSacdfmst] [Limit]
Beállítja, vagy (ha nem adjuk meg a Limitet) megmutatja az ero˝ forrás határokat. Nem minden UNIX rendszer támogatja az itt felsorolt ero˝ forrásokat. A Limit értéke vagy a típusától függ˝o szám, vagy unlimited ha nem adunk meg rá korlátot. Kétféle határ van, a kemény határ (H kapcsoló), és a puha határ (S kapcsoló). A kemény határt általában a rendszergazda állítja be (pl. a rendszer fizikai határértékeire), és ezeket a felhasználó nem tudja átállítani. A puha határ az a kemény határon belül levo˝ érték, amit a felhasználó a kemény határértékig megváltoztathat. A parancs, hacsak nem adjuk meg a H kapcsolót, a puha határokat írja ki. A többi kapcsoló jelentése: -a -c
-d -f -m -s -t
Kilistázza az összes határértéket. A core dump (futási hiba esetén a program memóriaképe a core állományba másolódik, és ezt a dbx paranccsal megvizsgálhatjuk) maximális mérete 512 byte-os egységekben. Az adatmez˝onek fenntartott hely maximális mérete kbyte-okban. Az aleljárások által kiírható maximális állománynagyság 512 byte-os blokkokban. A felhasználható fizikai memória nagysága kbyte-okban. A stack terület legnagyobb mérete kbyte-okban. Az eljárás által felhasználható maximális rendszerido˝ másodpercben.
umask [Mask]
Az újonnan létrehozott állományok alap védelmi beállítását szabályozza. A Mask értéke vagy egy oktális szám, vagy a chmod parancsban ismertetett szimbolikus érték. Szimbolikus megadás esetén az umask új értéke a komplementere lesz annak a maszknak, amit úgy kapunk, hogy az az új Maskot alkalmazzuk a régi Mask értékének komplementerére. Ha nem adjuk meg a Maskot, kiírja annak értékét. unalias Név ...
Kiveszi a felsorolt Neveket az alias listából. unset [-f] Név ...
A felsorolt Nevekhez tartozó értékeket és jellemzo˝ ket kitörli. A csak olvashatónak kijelölt változók nem törölhet˝ok. Az f kapcsoló esetén a Név függvénynév. Az ERRNO, LINENO, MAILCHECK, OPTARG, OPTIND, RANDOM, SECONDS, TMOUT, _ változókra alkalmazva megszünteti azok speciális jelentését, mégha a kés˝obbiekben újradefiniáljuk is o˝ ket. wait [Job]
Vár a megadott eljárásra (Job), és tudósít futásának befejezésér o˝ l. Ha nem
9.11. ARITMETIKAI KIFEJEZÉSEK
97
adjuk meg az eljárást, az összes aleljárásunk végére vár. A megadott eljárás visszatérési értékét adja vissza. whence [-pv] Név ...
Minden megadott Névre megmutatja, hogyan értelmezné a shell parancsként. A p kapcsoló hatására végignézi a PATH környezetváltozó alapján, hogy hol található a megadott parancs, mégha a megadott Név alias, függvény vagy fenntartott szó is. A v kapcsoló részletesebb kiírást eredményez.
9.11. Aritmetikai Kifejezések Egész típusú számolásokat a let speciális parancs segítségével hajthatunk végre. A kiértékelés az ún. long integert (a mai gépeken ez általában egy 32 bites számot jelent) használja. A konstansokat [Bázis#] Szám módon adhatjuk meg, ahol a Bázis egy 2 és 36 közötti, tízes számrendszerbeli érték, mely a Szám megadásához használt számrendszer alapját definiálja. Alapértéke 10. Az aritmetikai kifejezések a C nyelv szintaxisát, prioritási sorrendjét és csoportosítási szabályait követik. A ++, -, ?: kivételével minden egész típusú m˝uvelet megengedett. Az aritmetikai kifejezésekben a változókra hivatkozhatunk a nevükkel, nem kell a paraméter helyettesítési szabályokat (dollár jel) alkalmazni. Mivel sokszor lehet szükség az aritmetikai kifejezésekben a macskaköröm használatára, ezért a let parancson kívül megengedett a dupla zárójel (azaz a (( ... )) ) használata is. A dupla zárójelek közötti részt macskakörmözött aritmetikai kifejezésként értelmezi a shell.
9.12. Parancs eredményének helyettesítése Egy parancs kimenetét felhasználhatjuk egy másik parancsban is. Hagyományosan ezt a fordított aposztrófokkal lehet elérni, de a Korn shellben használható még a $( Parancs ) alak is. Mindkét esetben a kimenetr˝ol a shell kisz˝uri a lezáró „újsor” karaktert. Az aritmetikai kifejezéseket a $(( Kifejezés )) módon írhatjuk be parancssorba. A fordított aposztrófok esetén a shell kifejti a véd o˝ karaktereket, miel˝ott végrehajtaná a parancsot.
98
FEJEZET 9. A KORN SHELL
9.13. Állománynév helyettesítés A parancs minden szavát a shell leellen˝oriz a * ? [ , karakterek szempontjából. Amennyiben ilyet talál, akkor a szót mintának tekinti, és behelyettesíti ABC sorrendben a mintának megfelel˝o állománynevekkel. Ha nem talál egy állománynevet sem, akkor változatlanul hagyja a szót. A speciális karakterek a következ˝o helyettesítést jelentik: a csillag helyettesít minden karakterláncot, beleértve a nulla stringet is. A kérd˝ojel egy karaktert helyettesít. A szögletes zárójelek közt felsorolt karakterek között az egyikkel egyezni kell. Megadhatunk egy egész karaktertartományt is a - jel használatával. Ha a szögletes zárójelen belül az els o˝ karakter a felkiáltójel, az negálja a kifejezést (minden fel nem sorolt karakterrel történhet egyezés). A mínusz jelet a legelso˝ karakterként adhatjuk meg. Az [a-zA-Z] minta az összes (kis vagy nagy) bet˝ut jelenti. Összetett mintákat a következ˝o eljárással hozhatunk létre: jelölje a MintaLista az egy, vagy több || jellel elválasztott mintát. Ekkor ?(MintaLista) *(MintaLista) +(MintaLista) @(MintaLista) !(MintaLista)
Az adott minták közül bármelyikkel egyezik. Az adott minták egyszer sem, vagy többször fordulnak el o˝ . Az adott minták egyszer vagy többször fordulhatnak el o˝ . Csak az egyik megadott mintával egyezik. Egyik megadott mintával sem egyezik.
A .-tal kezd˝od˝o állományneveknél expliciten ki kell tenni a pontot a minta elejére, különben a shell nem helyettesíti be azokat. Lehet˝oleg ne adjunk olyan állomány és könyvtárneveket, melyek csillagot, kérd˝ojelet vagy szögletes zárójeleket tartalmaznak. A szögletes zárójelek között használhatók még az elo˝ re definiált karakterosztályok is [:Osztály:] alakban, ahol az osztály a C-nyelv ctype rutinjainak megfelel˝oen a következ˝o lehet: alnum, alpha, digit, lower, print, punct, space, upper, xdigit.
9.14. Ki- és bemenetek átirányítása A shell — még miel˝ott végrehajtaná a parancsokat — lehet˝oséget biztosít, hogy azok bemenetét és kimenetét átirányítsuk. Az átirányítási parancsokra is végrehajtódik a shell helyettesítése, de csak a kifejtett értékek adódnak át a meghívott programnak.
9.15. HELYETTESÍTO˝ NEVEK (ALIAS)
99
A File állományból veszi a standard bemenetet. >File
A File állományba teszi a standard kimenetet. Amennyiben az állomány létezik, felülírja, ellenkez˝o esetben létrehozza. > ||File
Ugyanaz, mint a >, de a noclobber opció esetén is felülírja a létezo˝ állományt.
> >File
A File állományba teszi a standard kimenetet úgy, hogy létezo˝ állomány esetén annak végéhez hozzáír. <>File
A File állományt írás-olvasásra nyitja meg standard bemenetként. <<Szó
A shell a Szó el˝ofordulásáig vagy a file vége jelig olvassa be a standard inputot. Az így keletkezett szöveg lesz a standard bemenet. Amennyiben a Szó bármely karaktere le van védve, akkor a keletkezett szövegen nem történik shell helyettesítés, különben paraméter és parancssor helyettesítés zajlik le. Ha a Szó elé a - karaktert helyezzük, akkor ez a szövegb o˝ l kivágja a sor eleji tabulátorokat. <&Számjegy
A standard inputot a Számjegy állományleíróból kapja. >&Számjegy
A standard kimenetet a Számjegy állományleíróba teszi. A fenti jelek el˝otti szám az adott számhoz tartozó állományleíró átirányítását jelöli. A 2>&1 helyettesítés a 2-es állományleírójú eszközt (standard hibakimenet) az 1-be (standard kimenet) irányítja. Többszörös átirányítás esetén ügyelni kell a sorrendre. A 1>File 2>&1 kifejezés az 1. állományleírót a File-hoz rendeli, majd a 2. állományleírót az 1.-höz, ami már a File, azaz mindent a File-ba ír. Fordított sorrend esetén a hibakimenetet a standard kimenetre, az eredeti standard kimenetet pedig a File-ba írja.
9.15. Helyettesít˝o nevek (alias) Minden parancs els˝o szavát a shell kicseréli, amennyiben az adott szót helyettesíto˝ névnek (alias) definiáltuk. A helyettesít˝o név els˝o karaktere tetsz˝oleges nyomtatható karakter lehet, de a többi karakterre ugyanazok a megkötések érvényesek,
100
FEJEZET 9. A KORN SHELL
mint a változó nevekre. A helyettesít˝o szöveg (amire a shell az alias-t kicseréli) tartalmazhat bármely létez˝o shell scriptet, akár metakarakterekkel is. A shell a helyettesít˝o szöveg összes parancsának els˝o szavát is megpróbálja helyettesít˝o névként kifejteni. Amennyiben a helyettesíto˝ érték utolsó karaktere szóköz, akkor a shell az alias utáni szóra is megpróbál alias helyettesítést elvégezni. Aliasokat használhatunk a beépített parancsok újradefiniálására, de nem használhatók a fenntartott szavak átdefiniálására. Helyettesíto˝ neveket az alias paranccsal hozhatunk létre, és az unalias paranccsal törölhetünk. Ha aleljárásokban is akarunk használni egy helyettesít˝o nevet, azt exportálni kell. Az alias helyettesítés a parancs beolvasásakor történik meg, és nem végrehajtásakor. Ezért id˝oben kell gondoskodni a helyettesít˝o név definiálásáról. A következ˝o exportált aliasokat beépítették a Korn shellbe (de ezek törölhet o˝ k és átdefiniálhatók): autoload=’typeset -fu’ false=’let 0’ functions=’typeset -f’ hash=’alias -t’ history=’fc -l’ integer=’typeset -i’ nohup=’nohup ’ r=’fc -e -’ true=’:’ type=’whence -v’
9.16. A tilde helyettesítés Az alias helyettesítés után a shell megvizsgál minden szót, hogy nem ~ jellel kezd˝odik-e. Az utána a / jelig következ˝o szót a shell megnézi, hogy el˝ofordul-e a /etc/passwd állományban felhasználói névként. Ha igen, akkor az adott felhasználó bejelentkezési könyvtárát helyettesíti be a szó helyére, ellenkez o˝ esetben nem történik helyettesítés. Amennyiben a ~ a / jelet közvetlenül megel o˝ zi, akkor a HOME változó értékére helyettesít˝odik. A ~+ a PWD, a ~˜ az OLDPWD változó értékére helyettesít˝odik.
9.17. Paraméter helyettesítés A paraméter egy azonosító, a *, @@, #, ?, -, $, ! karakterek valamelyike, illetve egy vagy több számjegy lehet. A számjegyes paraméterek az ún. pozicionális paraméterek, melyek egy shell hívásakor a shellnek átadott argumen-
9.17. PARAMÉTER HELYETTESÍTÉS
101
tumokat tartalmazzák a megadott sorrendben. A speciális karakteres paraméterek a shell által használt és általában beállított paraméterek. A paramétereknek általában értékük és beállított tulajdonságaik vannak. A beállítható tulajdonságokat a typeset parancsnál, a 95. oldalon ismertettük. A Korn shell támogatja az egy dimenziós tömbök használatát. A tömb egy elemére annak indexével (szögletes zárójelek közti aritmetikai kifejezés) hivatkozunk. Értéket egy tömbnek a set -A paranccsal adhatunk. A tömb indexe 0 és 512 közötti érték lehet. E határok közt a shell automatikusan létre is hozza a tömböt. Ha egy tömbre index nélkül hivatkozunk, az a 0. elemét jelöli. Egy paraméter értékét megadhatjuk még egyszer˝u hozzárendeléssel: $ Név=Érték [ Név=Érték ]
formában is. Amennyiben -i (egész) típusúnak állítottuk be a Név változót, akkor az Érték egy aritmetikai kifejezés is lehet, amit a shell kiértékel. A pozicionális paramétereknek a set speciális paranccsal adhatunk értéket. Ha scriptet hívunk meg, akkor a $0 a hívó parancs neve, $1, $2, ... pedig az átadott argumentumok. A $* és a $@@ az összes átadott argumentumot jelenti. A shell a következ˝o helyettesítéseket hajta végre: ${Paraméter}
A shell beolvassa az összes két kapcsos zárójel közti karaktert egy szóként, mégha kapcsos zárójeleket vagy metakaraktereket tartalmaz is. Amennyiben definiálva van ilyen változó, annak értékét helyettesíti be. A kapcsos zárójeleket elhagyhatjuk, ha nem kell a változó neve után közvetlenül egy bet˝ut, számot, vagy aláhúzás karaktert illeszteni, vagy ha a paraméternek indexet adunk. Az egy számjegynél nagyobb pozicionális paramétereket is kapcsos zárójelbe kell tenni. ${#Paraméter}
A Paraméter értékének a hosszát helyettesíti be. A * illetve a @ Paraméternél a pozíciós paraméterek számát adja meg. ${#Azonosító[*]}
A tömbben található elemek száma. ${Paraméter:-Érték}
Ha a Paraméter létezik, és nem nulla az értéke, akkor azt helyettesíti be, különben az Értéket. ${Paraméter:=Érték}
Ha a Paraméter nem létezik, vagy nulla az értéke, akkor az Értékre állítja be, és ezután helyettesíti be.
FEJEZET 9. A KORN SHELL
102 ${Paraméter:?Érték}
Ha a Paraméter létezik, és nem nulla az értéke, akkor azt helyettesíti be, különben kiírja az Értéket és kilép a shellb˝ol. ${Paraméter:+Érték}
Ha a Paraméter létezik, és nem nulla az értéke, akkor az Értéket helyettesíti be, különben semmit nem helyettesít be. ${Paraméter#Minta} vagy ${Paraméter##Minta} Ha a Paraméter értékének eleje egyezik a Mintával, akkor a Mintának megfelel˝o részt kitörölve helyettesíti be a Paramétert, különben a teljes értékét. A # jelölés a minimális, a ## jelölés a maximális egyezo˝ tartományt törli ki. ${Paraméter%Minta} vagy ${Paraméter%%Minta} Ugyanaz, mint az el˝oz˝o, csak a Paraméter értéke végének egyezését figyeli. A fenti esetekben az Érték egy kifejezés is lehet, és nem értékelo˝ dik ki, hacsak nem o˝ t használja a shell helyettesítésre. Például az echo ${d:-$(pwd)} utasításban a pwd parancs nem kerül végrehajtásra, ha a d paraméter értéke nem nulla. A következ˝o paramétereket a shell automatikusan beállítja: # ? $
_ ! ERRNO LINENO OLDPWD OPTARG OPTIND PPID PWD RANDOM
A shellnek átadott pozicionális paraméterek száma. A shell hívásakor bekapcsolt opciók. Az utoljára végrehajtott parancs visszatérési értéke. A legtöbb parancs sikeres végrehajtáskor 0 értékkel tér vissza. A shell processz-száma (PID). Leggyakoribb alkalmazása egyedi állománynév generálása: pl. a /tmp/temp.$$ a processz egyedi számával ellátott állománynevet jelenti. Az el˝oz˝o parancs utolsó argumentuma. A háttérben utoljára elindított eljárás processz-száma. A hibakóddal utoljára visszatért eljárás hibakódja. A script állományon vagy a függvényen belüli, éppen végrehajtás alatt álló sor száma. A cd parancs által beállított el˝oz˝o munkakönyvtár. A getopts parancs által feldolgozott utolsó opció argumentuma. A getopts parancs által feldolgozott utolsó opció indexe. A shell szül˝oeljárásának processz száma. Az aktuális munkakönyvtár. Minden híváskor egy 0 és 32767 közötti "véletlen számot" generál. A kezd˝oértéke beállítható.
9.17. PARAMÉTER HELYETTESÍTÉS
103
A select és a read speciális parancsok által beállított változó, mely a választ tartalmazza. SECONDS A shell meghívása óta eltelt id˝ot írja ki másodpercekben. Ha kezd˝oértéket adunk neki, onnan számolja az id˝ot. REPLY
A shell a következ˝o változókat használja: CDPATH COLUMNS EDITOR ENV
FCEDIT IFS HISTFILE HISTSIZE HOME
LINES MAIL
MAILCHECK
MAILPATH
A cd parancs keresési útvonala. A shell ennek a változónak az értékét használja a szerkesztési módokban és a select parancs alkalmazásakor az ablak szélességének megállapításához. Ha ennek értéke emacs, gmacs, vagy vi-ra végzo˝ dik, és a VISUAL változó nincs beállítva, akkor a megfelel˝o parancsszerkesztési mód lép m˝uködésbe. Új shell meghívása el˝ott e változó a paraméterhelyettesítéssel kapott állománynevet futtatja le. Általában helyettesít˝o nevek és függvények definiálására használják. Az fc parancs alatt használandó szövegszerkeszto˝ t definiálja. A shell szóbetördelésére használt elválasztókaraktereket tartalmazza (szóköz, tabulátor, új sor). A végrehajtott parancsokat tároló állomány neve. Értéke adja meg, hogy az utolsó végrehajtott parancsok közül hányat tárol el a shell. A cd parancs argumentum nélkül ebbe a könyvtárba ugrik. A bejelentkezési eljárás a bejelentkezési könyvtárra állítja az értékét. Ha több gépen dolgozunk, célszer˝u programjainkat úgy megírni, hogy ne a teljes file-nevekkel, hanem ennek a változónak az értékével hivatkozzunk az állományokra, mivel ezáltal programjaink áttehet˝ok egyik gépr˝ol a másikra. A select használja a rendelkezésre álló sorok meghatározására. A select a listát a LINES értékének kétharmadáig írja ki. Az új leveleket tartalmazó állomány neve. Ha a MAILPATH változó nincs beállítva, akkor a shell az állomány megváltozását új levél érkezéseként jelzi. Értéke meghatározza, hogy a shell milyen gyakran ellen o˝ rizze le a MAILPATH vagy MAIL változókban megadott állományokat. Alapértéke 600 másodperc. A benne felsorolt, kett˝osponttal elválasztott állományneveket elleno˝ rzi a shell új levél érkezése céljából. Minden állománynév után közvetlenül a kérd˝ojel után megadhatjuk az üzenetet, amit a shell kiír, ha változás történt az állományban. Az üzenetben a shell elvégzi a paraméter helyettesítést. A
104
PATH
PS1
PS2 PS3 SHELL TMOUT
VISUAL
FEJEZET 9. A KORN SHELL megváltozott állomány nevét a $_ változóban tárolja. Az üzenet alapbeállítása: YOU HAVE MAIL IN $_. A parancsok keresési útvonala. Egymástól ketto˝ sponttal elválasztott könyvtárneveket tartalmaz, melyeknek megadási sorrendjében keresi a shell a kiadott parancsnak megfelel˝o állománynevet. A nulla könyvtárnév az aktuális könyvtárat jelöli. Az els˝odleges rendszer promptot tartalmazza. Értéke a prompt kiiratása el˝ott átmegy a paraméter helyettesítésen. Ha felkiáltójelet adunk meg benne, az a parancs sorszámára helyettesít˝odik. Alapértéke a dollár és egy szóköz. A másodlagos rendszer prompt. Alapértéke a nagyobbjel és egy szóköz. A select parancsban a prompt értéke. Alapértéke a #? és egy szóköz. A shell elérési útvonala. (Sok program ezt használja, ha ki akarunk lépni bel˝ole a shellbe). Ha a PS1 prompt kiadása után a TMOUT-ban megadott számú percig nem adunk ki parancsot, a shell befejezi futását. Akkor célszer˝u használni, ha el szoktuk felejteni a kijelentkezést. 0 értéke esetén nem lép ki a shell. Ha ennek értéke emacs, gmacs, vagy vi-ra végzo˝ dik, akkor a megfelel˝o parancsszerkesztési mód lép m˝uködésbe.
A shell a PATH, PS1, PS2, MAILCHECK, TMOUT, IFS változóknak ad értéket, míg a HOME, SHELL, ENV, MAIL változókat nem állítja be (a HOME értékét a login parancs állítja be). A környezeti változók beállítására következzen egy mintaként használható ✎ .profile állomány:
# @(#).profile 5.1 ULTRIX 4/23/91 umask 22 export PATH=$PATH:/u/local:/usr/local/bin:/usr/bin/X11:. \ \ PS1=’$LOGNAME’@ hostname ’ $ ’ VISUAL=vi FCEDIT=vi export TERM=vt100 export VISUAL FCEDIT export PS1 if [ -z "$DISPLAY" ] then \ export DISPLAY= who am i || awk ’{l=length($6); print substr($6,2,l-2) ":0.0"} else if [ "$DISPLAY" = ":0.0" ]
9.17. PARAMÉTER HELYETTESÍTÉS
105
then export DISPLAY=":0.0" else \ \ export DISPLAY= who am i || awk ’{l=length($6); print substr($6,2,l-2) ":0.0"}’ fi fi alias ls=’ls -g ’ alias archie=’telnet 131.130.1.23’
Az állományban el˝oször beállítjuk az ún. umask értékét (azaz a 755-ös alap védelmi kódot), majd a PATH, PS1, VISUAL, FCEDIT és TERM környezeti változókat (figyeljük meg, hogy a PS1 értéke egy shell parancsot is tartalmaz!) Ezután egy dupla if feltételvizsgálattal megállapítjuk, hogy honnan jelentkeztünk be (helyi gépr˝ol vagy a hálózaton keresztül), és ennek megfelelo˝ en beállítjuk az X11 Window által használt DISPLAY változó értékét (ez adja meg az X11 ablakokat megjelenít˝o grafikus terminál nevét). Az állományt néhány alias definícióval zárjuk: az ls parancs a csoportot is fel fogja tüntetni a hosszabb file listákban, az archie parancs pedig egy bécsi archie-szerver gépre jelentkezik be (ott felhasználói ☞ archie azonosítóként szintén az archie-t használjuk!). parancs A Korn-shell parancsainak használatára vegyük a következ o˝ parancsállományt, leírása a 217. oldalon amely helyi hirdet˝otáblaként m˝uködtethet˝o: ✎ #!/usr/bin/ksh PS3="Enter your choice> " \ select ans in "exit" ls -d /u/local/info/*/* \ \ || sed "s/\/u\/local\/info\/\(.*\)\.news/\1/" do if [[ $ans = exit ]] then exit fi more /u/local/info/$ans.news echo "Hit enter to continue ... " done
Az állomány els˝o sorában a #! megjegyzés után következik a parancsot futtató shell neve. Esetünkben — tekintve, hogy a select parancs nincs a Bourneshellben — ez a Korn-shell. A második sorban beállítjuk a select parancs által használt PS3 prompt értékét. A hirdet˝otábla a /u/local/info könyvtár alkönyv-
106
☞
sed
leírása a 110. oldalon
FEJEZET 9. A KORN SHELL
táraiban elhelyezked˝o .info végz˝odés˝u állományokból áll: egy-egy tétel címe megegyezik az állomány nevével. A select parancs argumentumában az ls és sed parancsok automatikusan felépítik a pillanatnyi listát (figyeljük meg a folytatósorok használatát a sorvégi \ karakterrel), amibo˝ l aztán a felhasználó a kívánt sorszám beütésével választhat. Az ans változó a kiválasztott tétellel tér vissza, amit aztán a do ciklusban elhelyezked˝o more utasítás jelenít meg. A ciklus az ans változó exit értékéig ismétl˝odik. ✎ A for ciklus használatára példa a következo˝ parancsállomány: #!/usr/bin/ksh for File in ls *.c do cp -i $File $File.old echo $File done
A parancssorozat az adott könyvtárban található minden .c végz o˝ dés˝u állományból másolatot készít, aminek neve az eredeti név .old-dal kiegészítve.
10. fejezet Állományok feldolgozása A UNIX operációs rendszerben sok parancs az állományok feldolgozását: kifejezések megkeresését, gyors szerkesztését (pipe-ot használva), rendezését, ismétl˝odések kisz˝urését teszi lehet˝ové. A továbbiakban ezeknek a parancsoknak a részletes ismertetésével foglalkozunk. A UNIX operációs rendszerben a grep parancs szolgál arra, hogy állományokban megadott karaktersorozatokat keressünk. A sed parancs a kimenet sz˝ur o˝ szint˝u szerkesztésére ex– ill. vi–szer˝u utasításokkal ad leheto˝ séget. A uniq parancs kisz˝uri az egy állományban található ismétlo˝ d˝o sorokat. A UNIX általános célú állomány feldolgozó programja az awk, amely megadott mintájú sorokon utasításokat hajt végre. Az állományok bizonyos szempont szerinti sorrendbe tételére a sort parancs szolgál.
10.1. A grep parancs ismertetése A grep parancs szolgál arra a UNIX operációs rendszerben, hogy állományokban ☞ grep leírása megadott karaktersorozatokat keressünk. A grep családjába tartozik még az egrep rövid a 33. oldalon és a fgrep parancs is. A karaktersorozat tartalmazhat általános helyettesít o˝ karaktereket is (l. ed, vi, sed parancsok). A parancsnak a kapcsolókon kívül két argumentuma van: az els˝o a keresett minta, a második a állományok listája, amiben keressük. Az utóbbi hiányában a standard bemenetro˝ l olvassa be az állományt (sz˝ur˝oként is alkalmazhatjuk). Ha csak egy állományt adunk meg, akkor csak a mintát tartalmazó sorokat írja ki, különben eléjük rakja annak az állománynak nevét is, amiben a keresett minta el˝ofordul. 107
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
108
A keresend˝o minta megadásánál vigyázni kell arra, hogy a shell által speciálisan kezelt karaktereket ($, *, [, ||, ^, (, ), \ ) levédjük. Ha a minta nem egy összefügg˝o karaktersorozat, akkor azt aposztrófok (vagy macskakörmök) közé kell tenni. A f˝obb helyettesít˝o karakterek a $, mely a sor végét, a ^, mely a sor elejét, a ., mely egy tetsz˝oleges karaktert, a *, mely az utolsónak megadott karakter tetsz˝oleges számú megjelenését jelöli és a [] pár, mely azt határozza meg, hogy a karakternek a zárójelek közti értékek valamelyikét kell felvennie. Itt megengedett pl. az [a-z] használatával egy egész tartomány kijelölése is. A zárójelben egy kifejezés el˝otti ^ azt jelzi, hogy azt az értéket nem veheti fel a helyettesítend˝o karakter. A -e kapcsoló használatával leheto˝ ség van több minta megadására is (l. a 34. oldalon található leírást is!). A grep parancs használatakor a következ˝o korlátozásokat célszer˝u szem el˝ott tartani: a sorok maximálisan 2048 karakter hosszúak lehetnek, a hosszabb sorokat a grep betördeli. A paragrafusok (l. -p kapcsoló) maximális hossza 5000 karakter. A parancsot ne futassuk speciális állományokban a rendszergazda és saját békénk érdekében. A bemen˝o állomány nem tartalmazhat NULL karaktert, és új sor karakterre kell végz˝odnie. A grep parancs kapcsolói: -c
Azt írja ki, hogy hány sort talált, mely tartalmazta a mintát. -E
Kiterjesztett reguláris kifejezésként értelmezi mindegyik mintát1 . A semmi minta (NULL) minden sorral egyezik. -e Minta
Egy vagy több keresend˝o mintát lehet megadni. Igen hasznos, ha a Minta a - (mínusz) jellel kezd˝odik. A mintákat egymástól újsor karakterrel kell elválasztani. A mintákat a grep a -E és -F kapcsolók hiányában egyszer˝u reguláris kifejezésként értelmezi. Több megadott minta esetén minden olyan sort kiír, amelyik legalább az egyik mintát tartalmazza. A -e kapcsoló el is hagyható, de ilyenkor a Mintának a grep parancs elso˝ argumentumának kell lennie. A kapcsoló többször is kiadható, és ekkor a mintákat nem kell az újsor karakterrel elválasztani. -F
Mindegyik megadott mintát szó szerint, és nem reguláris kifejezésként ér1
Ha a kapcsoló egy adott rendszerben nem létezik, akkor a grep helyett az egrep parancsot használva ugyanezt a funkciót megkapjuk.
10.1. A GREP PARANCS ISMERTETÉSE
109
telmezi, ezért sokkal gyorsabban lefut2 . -f Állomány
Megadja a keresési mintákat tartalmazó állomány nevét. Az Állományban minden mintának új sorban kell állnia. -h
Hatására több állomány esetén sem írja ki az állományneveket. -i
Az összehasonlítás során nem tesz különbséget a kis- és nagybet˝uk között. -l
Csak azon állományok nevét sorolja fel, amelyekben a megadott kifejezés megtalálható. -n
Minden sor elé kiírja, hogy az állomány hányadik sorában található a megadott minta. -p[Elválasztókarakter]
A mintát tartalmazó teljes paragrafust kiírja. A paragrafusokat egymástól az üres sorok választják el. Amennyiben megadjuk az Elválasztókaraktert, a grep annak megfelelo˝ en értelmezi a paragrafust. -q
Nem ír ki semmit a kimenetre, pusztán nulla visszatérési értéket ad, ha a megadott minta létezik. -s
Nem írja ki a nem létez˝o, vagy nem olvasható állományokra vonatkozó hibaüzeneteket. -v
A megadott mintát nem tartalmazó sorokat írja ki. -w
Egész szavakat keres. -x
Azokat a sorokat írja ki, melyeknél a megadott minta a teljes sorral egyezik. Példák (l. még a 33. és a 36. oldalon található példákat is): ☞ további A proba állományban keressük meg azokat a sorokat, melyek bet˝uvel kezd o˝ d- grep példák a 33. és a 36. nek: oldalon
2
Ha a kapcsoló egy adott rendszerben nem létezik, akkor a grep helyett az fgrep parancsot használva ugyanezt a funkciót megkapjuk.
✎
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
110 $ grep ’^[a-zA-Z]’ proba
Enter
A mintában szerepl˝o ^ (sor eleje) jel mögötti kifejezés kiválaszt minden bet˝ut, mely ABC sorrendben a és z illetve A és Z közé esik – azaz minden kis és nagy bet˝ut. A proba állományból írjunk ki minden olyan sort, mely vagy az abc vagy a ✎ xyz karaktereket tartalmazza: $ grep -e ’abc’ -e ’xyz’ proba
Enter
vagy $ grep ’abc > xyz’ proba
Enter Enter
vagy $ grep -E ’abc||xyz’ proba
Enter
Ez utóbbi esetben kiterjesztett reguláris kifejezést használtunk, melyben a sz˝ur o˝ jel grep VAGY m˝uveletet jelent.
10.2. A sed pipe szerkeszt˝o A sed parancs szolgál a kimenet sz˝ur˝oszint˝u szerkesztésére. Argumentumként megadható egy vagy több állománynév: ilyenkor ezeknek az állományoknak a tartalmát szerkeszti át a standard kimenetre. Állománynév hiányában a sed a standard bemenetet dolgozza fel. A szerkesztés során lehet˝oség van kiválasztani azokat a sorokat, melyekre a szerkesztést el akarjuk végezni, és csak azokat módosítani. A sed nagyon hasonlít az ed szerkeszt˝o családra (l. vi), és ennek megfelel˝oen a parancsok általános alakjában meg lehet adni a tartományt (sorok), melyekre a parancs vonatkozik, egy parancsot, illetve az azt módosító kapcsolókat. A sed beolvassa a megadott állományokból (standard bementr˝ol) a sorokat a minta munkaterületre, végrehajtja azon a megadott parancsokat sorjában, és végül kiírja a standard kimenetre. Ezek után letörli a minta munkaterületet, és ugyanezt elvégzi a következ o˝ sorral. Néhány parancs egy másik munkaterületre (tároló) el tudja menteni a minta munkaterületet vagy annak egy részét, hogy a késo˝ bbiekben azt újra felhasználhassa. Ha a sed parancs nem tartalmaz címtartományt, akkor minden sorra vonatkozik, különben csak a kijelölt sorokra. A cím lehet a sor száma, a $ jel (a bemenet utolsó sorát jelöli), vagy egy reguláris kifejezés, mely kijelöli azt a sort, amellyel a mintája illeszkedik. A szokásos reguláris kifejezésekto˝ l (l. vi) a sed megenged
10.2. A SED PIPE SZERKESZTO˝
111
néhány eltérést. A mintákat nem kötelez˝o a / törtjellel elválasztani, bármely általunk kiválasztott (nem a szóköz vagy újsor) karakter lehet, de az elso˝ el˝ofordulásakor fordított törtjellel kell beírni. Például \RmintaR esetén az R
bet˝u az elválasztó karakter. Ha maradunk a törtjelnél, akkor nem kell az els˝o fordított törtjelet kiírni. A \n a nem a sor végét jelöl˝o újsor karaktert fejezi ki. A pont minden karaktert helyettesít, még a nem sorvégi újsor karaktert is, eltéro˝ en az ed (vi) szerkeszt˝ot˝ol. A címtartomány állhat nulla, egy vagy két címbo˝ l. Ha nincs megadva cím, a parancs minden sorra vonatkozik. Amennyiben egy szám (illetve a $ jel), vagy egy reguláris kifejezés van megadva, az utána jövo˝ parancs a megadott számú sorra, illetve a reguláris kifejezéssel megegyez˝o sorra vonatkozik. Ha két számot adunk meg vessz˝ovel elválasztva, akkor a két sorszám között minden sorra vonatkozik a parancs. Amennyiben a második szám kisebb vagy egyenl o˝ az els˝onél, akkor csak az els˝o számmal megegyez˝o sorszámú soron végzi el a parancsot. A sed a megadott parancsokat vagy a standard bementro˝ l veszi (els˝o argumentum, vagy -e kapcsoló), vagy egy állományból (-f kapcsoló). Egyszerre összesen 99 parancsot lehet megadni. A sed kapcsolói a következ˝ok: -e Utasítás
A megadott Utasítás alapján dolgozza fel a szöveget. Amennyiben nem használjuk a -f kapcsolót, és csak egy utasítást adunk meg, nem kell kitenni a kapcsolót. -f Állomány
Az utasításokat tartalmazó Állomány nevét adja meg. -n
Nem írja ki a standard kimenetre a szerkesztés eredményét (csak az Utasításban szerepl˝o külön parancs esetén). Ezzel lehet elérni, hogy a sed ne írjon ki olyan sorokat, melyeket nem szerkesztünk.
10.2.1. A sed parancsai A parancsok sokszor valamilyen szöveget tartalmaznak. Az a c vagy i parancsok esetén egy sornál hosszabb szöveget is beírhatunk, ha az utolsó sor kivételével mindegyik egy fordított törtjelre végz˝odik. Mivel a parancsállományban a sed
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
112
figyelmen kívül hagyja a sor elején álló szóköz és tabulátor karaktereket, azokat a megadott szövegben a fordított törtjellel kell levédeni. A parancsok el˝ott zárójelben szerepel, hogy hány címet fogad el az adott parancs: Szöveg A következ˝o sor beolvasása el˝ott a Szöveget kiírja a kimenetre. Az a parancs után fordított törtjelet kell tenni, és a Szöveget új sorba írni.
(1) a
(2)b[Cimke]
A :Cimkével kezd˝od˝o sorra ugrik a parancsállományban. Ha nem adunk meg Cimkét, a parancsállomány végére ugrik. (2)c Szöveg Letörli a minta munkaterületet, és kiírja a Szöveget a kimenetre. Címtartomány megadása esetén csak a tartomány végén írja ki a Szöveget. Az a parancshoz hasonlóan itt is a c parancs után fordított törtjelet kell tenni, és a Szöveget új sorba írni. (2)d
Letörli a minta munkaterületet. (2)D
A minta munkaterület elejér˝ol az els˝o új sor karakterig töröl. (2)g
A minta munkaterületet letörli, és a tároló munkaterületet tölti át. (2)G
A tároló munkaterület tartalmát a minta munkaterület végére illeszti. (2)h
A tároló munkaterületre bemásolja a minta munkaterület tartalmát. (2)H
A minta munkaterület tartalmát a tároló munkaterület végére illeszti. (1)i Szöveg A Szöveget a kimenetre teszi, miel˝ott a minta munkaterület tartalmát kiírná. Az a parancshoz hasonlóan itt is az i parancs után fordított törtjelet kell tenni, és a Szöveget új sorba írni. (2)l
A minta munkaterületet kiírja a standard kimentre úgy, hogy a nem nyomtatható karaktereket 4 számjegy˝u hexadecimális formában írja ki. A hosszú sorokat betördeli (folytatósor esetén az el˝oz˝o sor végére egy fordított törtjelet tesz). Igen hasznos, ha olyan állományunk van, melyben hosszú (pél-
10.2. A SED PIPE SZERKESZTO˝
113
dául 2048 karakternél hosszabb) sorok vannak, mivel azokat nem minden szövegszerkeszt˝o képes kezelni. (2)n
A minta munkaterületet a standard kimenetre írja, és annak helyére beolvassa a következ˝o sort. (2)N
A feldolgozandó állomány következ˝o sorát a minta munkaterülethez f˝uzi egy újsor karakterrel elválasztva, és megváltoztatja az aktuális sorszámot. Olyan minták keresésekor célszer˝u alkalmazni, melyek két (vagy több) egymás utáni sorban lehetnek. (2)p
A minta munkaterületet a standard kimenetre írja. (2)P
A minta munkaterület elejét az els˝o újsor karakterig a standard kimenetre írja. (1)q
A parancsállomány végére ugrik, de nem indít el új ciklust, hanem kilép. (2)r Állomány
Beolvassa az Állomány tartalmát, és a standard kimenetre teszi a következ o˝ sor beolvasása el˝ott. Az Állománynak a parancssor végén kell állnia, és pontosan egy elválasztó karakter (szóköz vagy tabulátor) lehet el o˝ tte. (2)s/Minta/Helyettesítés/Kapcsolók
A munkaterületen lev˝o, a megadott Mintával egyez˝o karaktersorozatot a Helyettesítés karaktersorozatra írja át. Ha nem adjuk meg a g kapcsolót, csak az els˝o el˝oforduló legnagyobb mintát cseréli le. A helyettesítés szintaxisa megegyezik az ed és vi szerkeszt˝oknél leírtakkal. A következ˝o kapcsolókat adhatjuk meg (egyszerre többet is): Az összes el˝oforduló, a megadott mintának megfelelo˝ karaktersorozatot lecseréli. n Csak a mintának megfelel˝o n. karaktersorozatot cseréli le. p Kiírja a minta munkaterületet, ha sor került a helyettesítésre.
g
w Állomány
A minta munkaterületet az Állományba írja, ha sor került a helyettesítésre. A munkaterületet az Állomány végéhez f˝uzi hozzá (vagy ha az nem létezik, akkor létrehozza). (2)tCimke
A :Cimke sorra ugrik a parancsállományban, amennyiben a helyettesít o˝
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
114
parancs hatására változtatás történt a munkaterületen. Ha nem adunk meg Cimkét, a parancsállomány végére ugrik. (2)w Állomány
A munkaterületet az Állomány végére f˝uzi. Az Állomány a parancssor végén kell, hogy álljon, és pontosan egy elválasztókarakter elo˝ zi meg. (2)x
Kicseréli a minta és a tároló munkaterület tartalmát. (2)y/Minta1/Minta2/
A Minta1-ben felsorolt karaktereket lecseréli a Minta2-ben felsoroltakkal. A két mintában a karakterek számának meg kell egyezni, az újsor karaktert a \n jelöli. (2)!sed-parancs A megadott sed
parancsot azokra a sorokra alkalmazza, melyeket a címkiválasztás nem jelölt ki.
(0):Cimke A b és t
parancsok számára egy cimkét ad meg a parancsállományban. A Cimke legfeljebb 8 karakterb˝ol állhat.
(1)=
Kiírja az aktuális sor számát a standard kimentre. (2){Parancs1 Parancs2 ... } A sed utasításokat csoportosítja.
állnia.
Mindegyik Parancsnak külön sorban kell
Az üres parancssorokkal a sed nem tör˝odik. Megjegyzéseket a sor elején álló # jellel tehetünk a parancsállományban. Amennyiben az els o˝ sorban a # után közvetlenül egy n bet˝u áll, az ugyanazt jelenti mintha kiadtuk volna a -n kapcsolót. Példák: Teljes csere végrehajtása: átírunk minden alma stringet eper-re a ✎ BemenoAllomany állományban. A kimenetet az UjAllomanyba írjuk:
✎
$ sed "s/alma/eper/g" BemenoAllomany >UjAllomany A pr parancs által el˝oállított lap sorszámokat zárójelbe szeretnénk tenni, és úgy kinyomtatni a BemenoAllomanyt: $ pr BemenoAllomany || sed "s/Page *\([0-9]*\)$/(\1)/" | lpr Ez az utasítás a Page szót tartalmazó, és számra végzo˝ d˝o sorokat cseréli le, úgy hogy a számot írja csak ki zárójelben (az \1 jelöli az elso˝ , \( - \) párral kijelölt
résszel egyez˝o mintát).
10.3. A UNIQ UTASÍTÁS
115
Ha csak a keresem szót tartalmazó sorokat szeretnénk megjeleníteni a BemenoAllomanyban, akkor a
✎
$ sed -n "/keresem/p" BemenoAllomany
A -n kapcsoló miatt nem íródik ki semmi olyan a kimenetre, amire nem szólítottuk fel a sedet. Jelen esetben ez a p parancs (az utasítás helyett a grep parancsot is használhattuk volna). A parancsállomány használatára vegyük a következo˝ példát: azt akarjuk, hogy ✎ a sed a legels˝o sor elé a Kezdet szót írja ki, az utolsó sor után pedig azt, hogy: Veg. Az összes fordított törtjelre végz˝od˝o sorokat f˝uzze össze az utánuk jöv˝ovel a fordított törtjel nélkül. A parancs.sed állományunk például ilyen lehet: 1i\ Kezdet :fuzes /\\$/{N s/\\\n// b fuzes } $a\ Veg Az N parancs f˝uzi össze a sorokat, az s parancs kisz˝uri az újsor karaktert, és a b parancs ismételteti meg az eljárást (enélkül csak két sort f˝uzne össze a sed). Fontos, hogy az N parancs leállítja a sed parancsot, ha állomány vége jelet
talál, és nem másolja át ekkor a minta munkaterületet a kimenetre. Ezáltal, ha egy állomány fordított törtjelre végz˝odik, akkor a fenti parancsállomány nem írja ki az utolsó sort. A parancsokat a BemenoAllomanyra a következo˝ utasítás alkalmazza: $ sed -f parancs.sed BemenoAllomany
10.3. A uniq utasítás A uniq parancs kisz˝uri az egy állományban található egymás után ismétl o˝ d˝o sorokat, és csak egyszer írja ki az ismétl˝od˝o sort (célszer˝u lehet ezért az állományt el˝oször a sort utasítással rendezni). A parancsot olyankor használjuk, amikor például egy listában ki akarjuk sz˝urni az ismétléseket. A parancsnak a kapcsolókon kívül két argumentuma lehet, a bemeneti és a kimeneti állomány. Ezek hiányában a standard kimenetre illetve bemenetr˝ol dolgozik. A parancs alapértelmezésben teljes sorokat hasonlít össze. Lehet o˝ ség van
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
116
arra is, hogy az összehasonlítás során ne vegyen figyelembe megadott mez o˝ ket (a mez˝o egy olyan karaktersorozat, melyet egy vagy több elválasztókarakter — általában szóköz vagy tabulátor — választ el egy másik karaktersorozattól). Az uniq parancs kapcsolói a következ˝ok:
-c
A kimeneten megjelen˝o sorok elé beírja, hogy az adott sor hányszor fordult el˝o a bemen˝o állományban.
-d
Csak az ismétl˝od˝o sorokat írja ki.
-u
Csak az egyszer el˝oforduló sorokat írja ki. Az összehasonlítás során a Számnak megfelelo˝ számú mez˝ot figyelmen kívül hagy. A kapcsolót -Szám alakban is használhatjuk.
-f Szám
Az összehasonlítás során a Számnak megfelelo˝ számú karaktert hagy figyelmen kívül. Ha a -f kapcsolóval együtt használjuk, akkor a megadott számú mez˝ot hagyja el˝oször figyelmen kívül, majd az els˝o, az összehasonlításnál használandó mez˝ob˝ol hagy figyelmen kívül Szám darab karaktert. A kapcsolót +Szám alakban is használhatjuk.
-s Szám
Vegyük például a tagok nev˝u állományt, amely a következo˝ neveket tartalmazza:
joska pista joska lajos pista joska
✎
A $ uniq tagok osszes
parancs létrehozza az osszes nev˝u állományban a joska pista lajos
sorokat.
10.4. AZ AWK PROGRAMNYELV
117
10.4. Az awk programnyelv A UNIX általános célú állomány feldolgozó programja az awk. M˝uködésének alapja, hogy megadott mintájú sorokat keres, és azokon az általunk megadott utasításokat hajta végre. Az awk nyelv a legels˝o változat kialakulása óta b˝ovült: némely UNIX rendszerben az újabb verziót nawk-nak (new awk) nevezik. Mi csak a program újabb változatával foglalkozunk, ezért — amennyiben az adott rendszerben létezik a nawk parancs — a példákban mindenhol azt kell használni az awk utasítás helyett. A parancs els˝o argumentuma az awknak szóló utasításokat tartalmazza, majd ezután következik az az állomány, amit az awk feldolgoz. Ha nem adunk meg állományt, akkor a standard bemenetr˝ol vár adatot. Több állomány esetén az awk úgy dolgozza fel o˝ ket, mintha a megadott sorrendben egymás után f˝uztük volna o˝ ket. Mivel általában hosszasabb utasítássorozatot adunk meg, ezért lehet o˝ ség van az utasításokat tartalmazó állományt (parancsállomány) megadni az awknak a -f Parancsállomány alakban. A feldolgozott adatokat az awk alapértelmezésben a standard kimenetre írja. A feldolgozás során az utasításokban megadott kiterjesztett reguláris kifejezések szerint elemzi az adatállomány aktuális sorát, és egyezés esetén végrehajtja a mintához tartozó parancsot. Az awk a parancsállomány összes sorát végignézi további egyezéseket keresve, és csak utána tér rá az adatállomány következ o˝ sorára. Az awk megengedi változók, számokkal vagy karakterekkel operáló függvények és logikai kifejezések használatát. Az awk interpreter szinten m˝uködik, azaz a parancsállományt nem kell lefordítani (mint általában a programozási nyelvek forráskódját), emiatt azonban lassabban futnak le az utasítások. Az awk kapcsolói a következ˝ok: -f Állomány Az awk parancs
az Állomány parancsállományból veszi az utasításokat. A kapcsoló ismételhet˝o, és ilyenkor a megjelenés sorrendjében összef˝uzött állományt használja parancsállománynak az awk.
-F KRK
A KRK-t (kiterjesztett reguláris kifejezés, l. 10.4.3 fejezet a 118. oldalon) használja mez˝o elválasztó karakternek. -v Hozzárendelés
Értéket ad egy változónak. A Hozzárendelés Név = Érték alakú. A hoz-
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
118
zárendelést az awk még a BEGIN rész lefuttatása el˝ott elvégzi.
10.4.1. Az adatállomány feldolgozása Az awk programnyelvben a BEGIN speciális parancs definiálja azokat az utasításokat, melyeket az adatállomány feldolgozása elo˝ tt kell végrehajtani (például számlálók nullázása, stb.) Ennek végrehajtása után az awk beolvas egy rekordot az állományból. A rekord az ún. rekord elválasztójellel szeparált adattömeg. Ez az elválasztójel alapesetben az újsor karakter, de az RS változó értékének változtatásával átállítható (pl. a BEGIN utasításnál). A következ˝o lépésben az awk a beolvasott rekordot összehasonlítja a parancsállományban lév˝o mintákkal azok megjelenési sorrendjében, és egyezés esetén végrehajta a hozzájuk tartozó parancsokat. A parancsban a rekordokban lév o˝ mez˝okkel is operálhatunk (alapesetben a szóközzel vagy tabulátorral elválasztott karaktersorozatok). A mez˝o elválasztókaraktert vagy az awk -F kapcsolójával, vagy az FS változó értékével lehet beállítani. A mezo˝ k értékeire a $1, $2 ... kifejezésekkel hivatkozhatunk, melyek rendre az elso˝ , második, stb. mez˝ot jelentik. A $0 az egész rekordot jelenti. Miután az awk a rekordot az összes mintával összehasonlította és végrehajtotta az el˝oírt parancsokat, beolvassa az adatállomány következo˝ rekordját. Ez egészen addig folytatódik, amíg van bemenet. Az utolsó állomány utolsó sorának feldolgozása után az awk végrehajta az END speciális parancsban megadott utasításokat.
10.4.2. Az awk programnyelv Az awk parancs általános szerkezete a következo˝ : Minta { Utasítás } Ha a Minta megegyezik a rekorddal, akkor az Utasítás végrehajtódik. Ha nem adunk meg Utasítást, akkor a teljes rekord változtatás nélkül a standard kimenetre kerül. A Minta nélküli Utasítás minden rekordra végrehajtódik. A Minta vagy egy kiterjesztett reguláris kifejezést, vagy egy összehasonlítást tartalmaz, de lehet ezek kombinációja, esetleg a BEGIN vagy END speciális szavak egyike is.
10.4.3. A kiterjesztett reguláris kifejezés A kiterjesztett reguláris kifejezés a reguláris kifejezésekre (RK) épül (l. az ed és vi parancsokat). A keresett mintát törtjelek közé tesszük. A kiterjesztett RK a
10.4. AZ AWK PROGRAMNYELV
119
következ˝o speciális karaktereket használja: +
Az el˝otte lev˝o karakter egy vagy több el˝ofordulását helyettesíti. Hasonlít a *-hoz, mely nulla, vagy több el˝ofordulást helyettesít. ?
Az el˝otte álló karakter nulla vagy egy el˝ofordulását helyettesíti. .
A pont az újsor karakter kivételével mindent karakterrel egyezik. A /a..at/ helyettesíti az allat kifejezést. *
Az el˝otte álló karakter nulla vagy több el˝ofordulását helyettesíti. ˜, ˜!
Az el˝otte megadott változóra vizsgálja meg, hogy az utána megadott RKval egyezik-e. A $1~/n/ kifejezés minden olyan sorral egyezik, melyben az els˝o mez˝o tartalmazza az n bet˝ut. ^
A mez˝o vagy a rekord elejére hivatkozik. A $2~/^h/ kifejezés a második mez˝o elején álló h bet˝u esetén ad egyezést. $
A mez˝o vagy a rekord végére hivatkozik. ||
A sz˝ur˝o jel két oldalán lev˝o kifejezés bármelyikének egyezése esetén egyezést ír el˝o. Például a /kutya||macska/minden olyan sort kiválaszt, melyben vagy a kutya vagy a macska szó el˝ofordul.
( )
Csoportosítja egy RK-n belül a karaktersorozatokat. A + vagy a ? kapcsolóval együtt szokás használni. Például a /(zi)?(zi)?/ kifejezés az üres sorral (nulla el˝ofordulása mindkét kifejezésnek), a zi és a zizi szavakkal egyezik meg. {m}
Az el˝otte lev˝o karakter pontosan m darab egymás utáni elo˝ fordulását helyettesíti. A /l{2}/ kifejezés például az allat szó esetén igaz. {m, n}
Az el˝otte lev˝o karakternek m és n közötti számszor kell egymás után elo˝ fordulnia (m < n).
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
120
[Karaktersorozat] A Karaktersorozatban
el˝oforduló bármelyik karakternek kell a vizsgált rekordban el˝ofordulnia. Egész tartományok is megadhatók, például a /ll[a-e]/ az allat és az ellet szavakkal is egyezik (a kifejezést a /ll[abcde]/ alakban is megadhattuk volna). A kapcsos zárójelen belüli els o˝ helyen a ^ karakter azt jelenti, hogy az utána megadott karaktereknek nem szabad el o˝ fordulniuk. A /ll[^b-e]/ kifejezés az allattal egyezik, de az ellettel már nem.
Ha a speciális karakterek valamelyikét szeretnénk expliciten megjelentetni a kifejezésekben, azokat a fordított törtjellel kell levédeni. Például törtjelet a ✎ szövegben a következ˝o kifejezéssel lehet keresni: /szoveg\/blabla/ A minta az összes szoveg/blabla kifejezést tartalmazó
rekorddal megyezik. Az awk ismeri a C nyelvben használatos speciális szekvenciákat is, így a \ddd kifejezés megadásával tetsz˝oleges karakter ASCII kódját is megadhatjuk a ddd oktális formában. A fordított törtjellel levédett speciális kifejezések közül az awk ismeri a macskaköröm, törtjel, a fordított törtjel (önmaga levédése), a b (karakter vissza), a n (újsor), a r (kocsi-vissza), t (tabulátor) és az a (csengo˝ ), f (lapdobás) és a v (vertikális tabulátor) vezérl˝o karaktereket.
10.4.4. Az összehasonlítások Az összehasonlítás során két kifejezést mérünk össze a <, >, <=, >=, == és != jelekkel (sorrendben: kisebb, nagyobb, kisebb egyenl o˝ , nagyobb egyenl˝o, egyenl˝o, ✎ nem egyenl˝o). A $1 < $4
minden olyan rekorddal egyezik, melyben a negyedik mez o˝ nagyobb az els˝onél (vagy mint szám, vagy karakterek esetén az ABC sorrend alapján). Hasonló mó✎ don megadhatjuk, hogy az els˝o mez˝o ne legyen q bet˝u: $1 != "q".
10.4.5. A minták kombinációja Ha két mintát vessz˝ovel választunk el, akkor az awk több rekordot is kiválaszt a megfelel˝o utasításra: kiválasztja az adott tartományban azt a sort, amelyik az els˝o mintával egyezik, majd utána keresi azt a sort, amelyik a második mintával
10.4. AZ AWK PROGRAMNYELV
121
egyezik, és rájuk, valamint minden közöttük lévo˝ rekordra is végrehajtja a parancsot. Alkalmazhatunk logikai m˝uveleteket a minták között a következ o˝ kifejezésekkel: a || (és), && (vagy), ! (nem). A ✎ $1 == "igen" && $2 == "42"
minden olyan sort kiválaszt, melyben az elso˝ mez˝o az igen, a második pedig 42. A mintákat zárójelekkel is csoportosíthatjuk.
10.4.6. A BEGIN és END kifejezések A BEGIN-nel felsorolt parancsok az els˝o rekord beolvasása el˝ott, az END-del felsoroltak az utolsó rekord feldolgozása után hajtódnak végre. Ha a parancsállomány csak egy BEGIN-b˝ol áll, akkor az hajtódik végre, és nem olvassa be a rekordokat. Ha csak egy END-b˝ol, akkor beolvassa az összes rekordot, mielo˝ tt végrehajtaná az END parancsokat.
10.4.7. Változók Az awkban használhatunk skalár, mez˝o, tömb és speciális változókat. A változók neve nem kezd˝odhet számjeggyel. A használt változókat nem kell elo˝ re definiálni. Ha nem adunk kezd˝oértéket egy változónak, akkor numerikus változó esetén 0 lesz az értéke (akár skalár, akár tömb), karakterlánc esetén pedig a nulla karakterlánc. A változók a szövegkörnyezet alapján automatikusan numerikus, vagy string értéket kapnak. A stringek esetén az értéket macskakörmök közé kell tenni. Például az ✎ x = "4" + "8"
kifejezésben két stringet adunk össze, de mivel az awk ezt számként tudja értelmezni, és így az x változóhoz 12-t rendel. Ha egyszer˝uen azt akarjuk, hogy egymás után kerüljön a 4 és a 8 számjegy (48-at mutatva), akkor nem kell a plusz jel. Amennyiben a változó stringet tartalmaz, akkor numerikus kifejezésekben értéke 0 lesz. Tömbökre a változó után írt szögletes zárójelekkel hivatkozhatunk, ahol a zárójelek között a tömb indexe áll. A tömbök méretét az awk automatikusan változtatja. A tömb indexe lehet szám is, de string is! (Ez utóbbi esetben persze kicsit nehézkes végigmenni a tömb elemein, de erre való az awk saját for Index ˝ fordulását a bein Tömb ciklusa.) Például a bolha, elefánt és csiga szavak elo men˝o állományban a következ˝o parancsokkal számolhatjuk meg (mivel stringeket keresünk, ezért pl. a csigabiga kifejezés is a csiga csoportjába tartozik): ✎
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
122
/bolha/ { x["bolha"]++ } /elefant/ { x["elefant"]++ } /csiga/ { x["csiga"]++} END {print "bolha ", x["bolha"]; print "elefant ", x["elefant"]; print "csiga ", x["csiga"];}
Egy tömbnek több indexe is lehet, ezeket a szögletes zárójelen belül vessz o˝ vel kell elválasztani. A speciális változók az awk m˝uködését befolyásolják. Itt csak a legfontosabbakat soroljuk fel, b˝ovebbet a $ man awk
paranccsal tudhatunk meg. FILENAME
Az aktuális feldolgozás alatt álló állomány teljes neve. FNR
Az éppen feldolgozás alatt lév˝o rekordnak az aktuális állománybeli sorszáma. FS
A beolvasott rekordokra vonatkozó mezo˝ elválasztókarakter, alapesetben a szóköz (ilyenkor a mez˝oket tetsz˝oleges számú szóköz választhatja el). Az FS értéke lehet KRK (kiterjesztett reguláris kifejezés) is. NF
Az aktuális rekordban lev˝o mez˝ok száma, ami legfeljebb 99 lehet. NR
Az éppen feldolgozás alatt álló rekord sorszáma. Egy adatállomány esetén megegyezik az FNR változóval, de ez utóbbi minden új állomány esetén nullázódik. OFS
A kiírás során a mez˝oket elválasztó karakter. Alapértéke a szóköz. Például a
✎
$ awk ’{OFS=":"; print $1,$2}’ gyakorlas a gyakorlas állomány minden sorának
ki.
els˝o két szavát :-al elválasztva írja
ORS
✎
A kiírás során a rekordokat elválasztó karakter. Alapértéke az újsor. Például a
10.4. AZ AWK PROGRAMNYELV $ awk ’{ORS="+"; print $0}’ gyakorlas a gyakorlas állomány sorait egyben, csak
123
egy + jellel elválasztva írja ki.
RS
A bemeneti rekordokat elválasztó karakter. Alapértéke az újsor. Ha nullára állítjuk értékét, akkor a rekordokat egy vagy több üres sor választja el egymástól, és az újsor mindig mez˝o elválasztó karakter lesz, függetlenül az FS értékét˝ol.
10.4.8. Az awk utasításai Az awknak rengeteg utasítása van. Itt csak a legfontosabbakat soroljuk fel. Az utasítások kapcsos zárójelek között állnak. Több utasítást is fel lehet sorolni, egymástól pontosvessz˝ovel elválasztva. Megjegyezzük, hogy a felhasználó maga is írhat saját függvényeket. A következ˝o matematikai operátorokat használhatjuk a kifejezésekben: +, -, /, ^, * % (összeadás, kivonás, osztás, hatványozás, szorzás, és modulo). Például a ✎ $2=$1^$3
a második mez˝ohöz az els˝o mez˝o harmadik mez˝obeli hatványát rendeli. A ++ és a C nyelvbeli inkrementálást és dekrementálást jelöli (állhat mind a változó el o˝ tt, mind utána). Ugyanígy m˝uködnek a C-ben megszokott rövidítések is: +=, -=, /=, *=. Karakterláncokat a legegyszer˝ubben úgy f˝uzünk össze, hogy egymás után írjuk o˝ ket. Például: ✎ $3 = $1 $2. Az awk függvényei A beépített függvények között található a cos(x), sin(x), atan2(y,x), exp(x), log(x), sqrt(x), int(x), rand(x) (cosinus, sinus, arcus tangens y/x – radiánban –, e alapú hatványozás, természetes alapú logaritmus, négyzetgyök, egészrész, és egy 0 és 1 közötti véletlenszám). A karakterláncokkal a következo˝ függvények operálnak: sub(KRK,Hely,[Változó])
A KRK-ban definiált, a Változóban el˝oforduló els˝o egyez˝o karakterláncot a Helyben definiált módon lecseréli. Ha nem adunk meg Változót, akkor az egész rekordot veszi. A függvény visszatérési értéke a helyettesítések
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
124
száma. Az & jel a Hely kifejezésben a Változó azon karakterláncát veszi fel, amelyikre a KRK minta illett. gsub(KRK,Hely,[Változó]) Ugyanaz, mint a sub függvény, de a Kiterjesztett Reguláris Kifejezés (KRK)
minden el˝ofordulását cseréli. index( String1,String2 )
Megmondja azt a pozíciót (1-el kezdve), ahol a String2 kifejezés a String1ben kezd˝odik. Ha a String2 nem fordul el˝o a String1-ben, nullát ad. length[(String)]
A String1 karakterlánc hosszát adja meg. substr( String,M,[N ] )
A Stringben megadott karakterláncból kivág az M. poziciótól N darab karaktert (ha N nincs megadva, akkor a String végéig). tolower(String)
Kisbet˝ukké konvertálja a String értékét, és azzal tér vissza. toupper(String)
Nagybet˝ukké konvertálja a String értékét. sprintf(Formátum, Kifejezés1, Kifejezés2, ...
)
A C nyelv szabályai szerint a megadott Formátumban kiírja a felsorolt Kifejezéseket, és az így létrejött karakterlánccal tér vissza. Az aritmetikai és karakterfüggvényeken kívül van még néhány általános függvény is. Az egyik leghasznosabb a system(Parancs), mely egy shell Parancsot hajt végre, és annak visszatérési értékével tér vissza. Feltételek A legtöbb awk feltételes kifejezés szintén a C nyelv alapján épül fel. A feltételeket a { } zárójelek segítségével csoportosíthatjuk. A feltétel és az annak teljesülése esetén végrehajtandó parancs külön sorban is lehet, de egy sorba is írható. Ha egy feltétel esetén több utasítást is kiadunk, azokat kapcsos zárójelek közé, pontosvessz˝ovel elválasztva egy sorban vagy külön sorban kell beírni. A C nyelv feltételes utasításai közül az awk a következo˝ ket ismeri: if (Kifejezés) { Utasítás } [ else Utasítás ]
Feltételes utasításvégrehajtás a Kifejezés értékéto˝ l függ˝oen.
while (Kifejezés) { Utasítás }
Ciklus végrehajtása a Kifejezés értékét˝ol függ˝oen.
10.4. AZ AWK PROGRAMNYELV
125
for (Kifejezés1; Kifejezés2; Kifejezés3) { Utasítás }
Ciklus végrehajtása a Kifejezésekben megadott értékétartományra. break
A while vagy for cikluson belül a ciklusból való kilépést jelenti. continue A while
jelenti.
vagy for cikluson belül a ciklus következo˝ tagjára való ugrást
A C nyelvt˝ol eltér˝o feltételek a következ˝ok: for(Változó in Tömb )
Utasítás
A Változó értékét a Tömb egymás utáni indexeinek felelteti meg, és végrehajtja az Utasítást. delete Tömb[Kifejezés]
Kitörli a Tömb Kifejezéssel megadott index˝u elemét. Ha g egy tömb, akkor a ✎ for (i in g) delete g[i]; kitörli a g tömb összes
elemét.
next
Befejezi az aktuális rekord feldolgozását, és a következo˝ rekord feldolgozását kezdi el az utasítássorozat elejér˝ol. exit [Kifejezés]
Végrehajtja az össze END által definiált parancsot, majd befejezi az awk futását, és a Kifejezésben megadott értékkel tér vissza. Az END parancssorozaton belül kiadva nem hajtja végre a további END parancsokat, hanem kilép a programból. #
Megjegyzést írhatunk mögé. Bárhol kezdo˝ dhet a sorban, és az újsor karakterig tart. Kiíratás Az awkban két parancs szolgál a kiíratásra, a print és a printf. A print a mögötte felsorolt kifejezések értékeit írja ki a standard kimenetre. A kiírás során a szóközzel vagy tabulátorran elválasztott kifejezéseket közvetlenül egymás után írja. A vessz˝ovel elválasztott kifejezéseket az OFS speciális változó
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
126
értéke választja el egymástól (ez alapesetben a szóköz), a sor végén pedig az ORS változó értékét (alapesetben újsor) írja ki a print. A kimenetet átirányíthatjuk a parancs végére írt >, > >, || szokásos átirányító jelekkel, és utána megadjuk az állomány nevét (ha magát az állománynevet adjuk meg, tegyük idéz o˝ jelbe, hogy a ˝ esetén a parancs print karakterláncnak, és ne változónak gondolja), vagy a sz˝ur o nevét. A printf parancs nagyon hasonlít a printre, de a kifejezések elo˝ tt egy, a kiírás formátumát el˝oíró kifejezést vár. Ennek formátuma a C nyelvbeli szabályokkal adható meg. A formátum után állhatnak a kiirandó kifejezések és esetleges átirányítások.
10.4.9. Példák ✎ A prog.f állomány hetedik sorát a következ˝o módon írathatjuk ki: $ awk ’NR == 7 { print }’ prog.f
A gyakorlas állományból az összes Eb mintát a második mezo˝ ben tartalmazó ✎ sort a következ˝o paranccsal írathatjuk ki a sorszámmal együtt: $ awk ’$2
/Eb/ { print NR, $0 }’ gyakorlas
A 72 karakternél hosszabb sorokat (FORTRAN programozók, figyelem!) a ✎ következ˝o módon sz˝urhetjük ki a prog.f állományból: $ awk ’length($0) >72’ prog.f
Az utasítás minden 72 karakternél hosszabb sort kiválaszt, és — mivel nincs utasítás mellékelve — kiírja a standard kimenetre. A következ˝o példa minden sort kiír a minta.txt állományból a start és stop ✎ szavakat tartalmazó sorok között: $ awk ’/start/,/stop/’ minta.txt Tegyük fel, hogy a berszam.fejtés
adatállományban a második oszlop a bruttó, az ötödik pedig a nettó bért tartalmazza. A következo˝ paranccsal össze✎ gezhetünk a második és az ötödik oszlopban: $ awk -f ossz.awk berszam.fejtes Itt az ossz.awk parancsállomány például { sum2 += $2 sum5 += $5 } END {
a következo˝ ket tartalmazhatja:
10.5. ÁLLOMÁNYOK SORRENDBE RENDEZÉSE: A SORT UTASÍTÁS 127 print "Brutto ber: ", sum2, "Netto ber: ", sum5; printf "Brutto atlag %f, netto atlag %f\n:", sum2/NR, sum5/NR; }
A programállományban két változót használunk, és mivel nem adtunk nekik kezd˝oértéket, ezért azok nulláról indulnak. Nincs megadva sorkiválasztás, így a program minden sorra a sum2 változóhoz a második, a sum5 változóhoz az ötödik oszlop értékét adja hozzá. A legvégén (l. END parancs) az awk kiírja a második és ötödik oszlop összegeit, valamint az átlagértékeket is (az NR változó a beolvasott rekordok (sorok) számát tartalmazza). A következ˝o awk program az egymástól tetsz˝oleges (de legalább egy) számú vessz˝ovel, szóközzel vagy tabulátorral elválasztott mezo˝ k esetén fordított sorrendben kiírja az els˝o két mez˝ot, majd az eredeti els˝o mez˝oben összegez. Legvégül kiírja az összeget és az átlagot: ✎ BEGIN
END
{FS = "[, \t]"} {print $2, $1} {s += $1} {print "az osszeg ",s,", atlaga ", s/NR }
Ha a következ˝o sort betesszük a $HOME/.profile állományunkba, akkor az itt létrehozott REMOTE változó értéke megadja annak a gépnek a nevét, ahonnan bejelentkeztünk: ✎ \
export REMOTE= who am i || awk ’{gsub("[()]","",$6); print $6}’
\
10.5. Állományok sorrendbe rendezése: a sort utasítás Az állományok bizonyos szempont szerinti sorrendbe tételére, illetve a már ren- ☞ sort leírása dezett állományok helyes sorrendben való összef˝uzésére szolgál a sort parancs. rövid a 33. oldalon A parancs az argumentumában megadott állománynevet (ennek hiányában a standard inputot) rendezi, és az eredményt a standard kimenetre írja (kivéve ha a -o kapcsolóval megadjuk a kimeneti állomány nevét). Több bemeneti állománynevet is megadhatunk, ilyenkor a sort parancs összef˝uzi o˝ ket, és az így kapott állományra végzi el a rendezést. Az alapértelmezésbeli rendezés az (angol) ABC sorrend szerint történik. A rendezés mez˝ok és oszlopok kijelölésével történhet. A mezo˝ az elválasztókarakterek (ez általában a szóköz és a tabulátor) közötti karaktersorozat. Az elválasztókaraktert a -t kapcsolóval adhatjuk meg. Az oszlop a mez o˝ n belüli karakterpozicíó. A mez˝o és/vagy az oszlop számát rendezési kulcsnak hívjuk.
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
128
A sort parancs a rendezést a megadott kulcsok sorrendjében végzi, azaz el˝oször az els˝o kulcs szerint rendez, és a kulcson belül megegyezo˝ sorokat a második megadott kulcs alapján rendezi tovább (stb.). A sort parancs kapcsolói közül ha a -b, -d, -f, -i, -n és a -r kapcsolók egy rendezési kulcs el˝ott állnak, akkor módosítják annak hatását. Ezek a kapcsolók nem állhatnak magukban a -k kapcsoló után. Ha ezek a kapcsolók a (-k-nál szerepl˝o) ún. KulcsDefinícióhoz vannak rendelve, úgy csak az adott rendezési kulcsra vonatkoznak. Amennyiben ezen kapcsolók egyike a +MSzám.OSzám vagy ˝ , csak arra a kulcsra fejti ki -MSzám.OSzám kulcsok valamelyike után fordul elo hatását. -A
Az ASCII szekvencia szerint végzi el a rendezést (az alapértelemzést a helyi nyelvre is át lehet állítani). -b
Figyelmen kívül hagyja a sor elején álló szóközöket vagy tabulátorokat az oszlopok kiszámolásánál. -c
Lellen˝orzi, hogy a megadott állomány a megadott szabályok szerint sorba van-e rendezve. Ha igen, nulla értékkel tér vissza. -d
ABC sorrend szerint végzi a rendezést. Csak a bet˝uk, számok és a szóközök számítanak. -f
Rendezés el˝ott az összes kisbet˝ut nagyra cseréli. -i
Figyelmen kívül hagyja az összes nem nyomtatható karaktert az összehasonlítás során. -kKulcsDefiníció
✎
Egy keresési kulcsot definiál, a következo˝ formátumban: [Kezd˝oMez˝o][.Kezd˝oOszlop][Módosító][,[VégMez˝o][.VégOszlop][Módosító]] A szögletes zárójelek azt jelzik, hogy nem kötelezo˝ megadni a bennük lev˝o számokat. A rendezés a Kezd˝oMez˝o Kezd˝oOszlopa és a VégMez˝o Végoszlopa közötti karakterek szerint történik. A Módosító a b,d,f,i,n és r értékek valamelyike lehet. Hatásuk megfelel az azonos bet˝uvel jelölt kapcsolókénak. A fenti mennyiségek alapértékei: a Kezd˝oMez˝o a sor eleje, a Kezd˝oOszlop az els˝o oszlop a mez˝oben, a VégMez˝o az utolsó mez˝o, és a VégOszlop a mez˝o utolsó oszlopa. A
10.5. ÁLLOMÁNYOK SORRENDBE RENDEZÉSE: A SORT UTASÍTÁS 129 -k 3.2,3r
kapcsoló olyan rendezést jelent, melyben a 3. mezo˝ 2. pozíciójától a 3. mez˝o végéig (nincs kitéve a VégOszlop) folyik a rendezés, fordított sorrendben (l. -r kapcsoló). A fenti definíció megadható a -k kapcsoló használata nélkül is, ha pl. a Kezd˝oMez˝o elé plusz, a VégMez˝o elé mínusz jelet írunk. Ilyenkor a + kapcsoló jelzi az átugrandó mezo˝ k számát, míg a - kapcsolóval adjuk meg azt a legutolsó mez˝ot, amelyik még számít. Az el˝oz˝o példa ezzel a módszerrel ezért ilyen: ✎ +2.1 -3r -m
Több, már rendezett állományt f˝uz össze egy rendezett állományba. -n
A számokat tartalmazó mez˝oket a számértékük szerint rendezi. Mivel az ASCII sorrend szerint pl. a 10 el˝obb van, mint a 2 (a 2-es számjegyet megel˝ozi az 1), a numerikus kifejezéseket csak így lehet sorbarendezni. A numerikus mez˝o tetsz˝oleges számú szóközzel és tabulátorral kezdo˝ dhet, tartalmazhat el˝ojelet, tizedes értékeket, az ezreseket elválasztó jelet. Minden más jel a felhasználó számára is érdekes eredményt szolgáltat. -o Állomány
A rendezés eredményét a megadott Állományba irányítja. Megadhatjuk itt ugyanazt az Állománynevet is, amelyiket éppen rendezünk. -r
Megfordítja a rendezés sorrendjét. -tKarakter
A megadott Karaktert tekinti a sort a mez˝oket elválasztó karakternek. -u
Ha a rendezés során több sort egyenérték˝unek talál a sort, akkor a -u kapcsoló hatására csak egyet ír ki. -T Könyvtár
Az összes, a rendezés során használatos átmeneti állományt a megadott Könyvtárba helyezi. Akkor célszer˝u használni, ha nagy állományt rendezünk, és a mi könyvtárunkban (file rendszer) kevés a hely. Például rendezzük a következ˝o minta.txt állományt különböz˝o szempontok szerint: ✎ +Kalmanka 16 lajoska 4 Peterke 28
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
130 Jozsika lajoska peterke Sanyika
✎
12 34 28 111
A legegyszer˝ubb sorbatétel a következo˝ : $ sort minta.txt +Kalmanka 16 Jozsika 12 Peterke 28 Sanyika 111 lajoska 34 lajoska 4 peterke 28
A rendezés el˝oször a jeleket, aztán a nagybet˝uket, utána a kisbet˝uket veszi ABC sorrendben. Ha lexikográfiai rendezést hajtunk végre a -d kapcsolóval, akkor az figyelmen kívül hagyja a jeleket, így +Kalmanka a Jozsika és Sanyika közé kerül. ASCII rendezés (-A kapcsoló) esetén a jelek a kis és nagybet˝uk közé kerülnek, és +Kalmanka Sanyika és lajoska közé kerül. A következ˝o parancs lexikografikus sorrendbe teszi az állományt úgy, hogy nem tesz különbséget kis- és nagybet˝u között (l. -f kapcsoló), és az ismétl o˝ d˝o ✎ sorokat csak egyszer írja ki (l. -u kapcsoló): $ sort -d -f -u minta.txt Jozsika 12 +Kalmanka 16 lajoska 34 lajoska 4 peterke 28 Sanyika 111
Most nem teszünk különbséget kis- és nagybet˝u között, ezért hiányzik a Peterke is. Rendezzük most az állományt a második mezo˝ (számok) szerint. A következ˝o parancs ABC sorrend szerint rendez, azaz minden 1-gyel kezd o˝ d˝o megel˝ozi a 2✎ vel kezd˝od˝oket: 28 sor
$ sort +1 minta.txt Sanyika 111 Jozsika 12 +Kalmanka 16 Peterke 28
10.5. ÁLLOMÁNYOK SORRENDBE RENDEZÉSE: A SORT UTASÍTÁS 131 peterke lajoska lajoska
28 34 4
A következ˝o parancs a számsorrend szerinti rendezéshez szolgál:
✎
$ sort +1 -n minta.txt lajoska 4 Jozsika 12 +Kalmanka 16 peterke 28 Peterke 28 lajoska 34 Sanyika 111
Amikor a mez˝oket egymástól nem szóközök, hanem például ketto˝ spontok választják el, mint pl. a /etc/passwd állományban, akkor meg kell adni az elválasztókaraktert. A rendszer összes felhasználójáról a ✎ $ sort -t: +4 /etc/passwd
paranccsal kapunk a nevek szerinti ABC sorrendben listát (ha a rendszergazda nem volt lusta, és beírta a neveket).
132
FEJEZET 10. ÁLLOMÁNYOK FELDOLGOZÁSA
11. fejezet Archiválás és archív állományok használata A UNIX használata során el˝obb-utóbb szükségünk lesz nem csak egy file, hanem egész könyvtárak ill. könyvtárrendszerek archiválására (elmentésére). Erre — több más, hasonló parancs mellett (pl. cpio, backup/restore) — a tar parancs biztosít kényelmes lehet˝oséget. Gyakran az állományok — különösen az archív állományok — sok, ismétl˝od˝o részt tartalmaznak, s ezért jól tömöríthet˝ok: erre a ˝ az állományok pack vagy a compress utasítást használva kb. felére csökkenthet o mérete. Ezek az utasítások minden UNIX rendszerben ugyanúgy m˝uködnek, ezért jól használhatók különböz˝o típusú rendszerek közötti adatcserére is: pl. az egyik gépen létrehozott tar állományt egy másik típusú gép is szét tud csomagolni. A programok mellett több, els˝osorban DOS-os környezetb˝ol származó public domain archíváló program is megjelent a UNIX világban (pl. arc, zoo, zip stb.). Ezek használata azonban csak a DOS felé történo˝ adatátvitelnél és csak el˝ozetes kipróbálás után ajánlott: az ilyen programokkal szinte mindig verzióbeli (inkompatibilitási) problémák lépnek fel, gyakran a DOS-ban írt tömörített állományt a UNIX nem tudja olvasni és viszont. Jó megoldás lehet viszont a tar és a compress IBM PC-n való használata. A különböz˝o bináris állományokat (amik lehetnek pl. archív állományok vagy fordítóprogrammal és linkerrel létrehozott programok) elektronikus levélben csak ASCII formátumba való átalakítás után tudjuk átvinni. A két leggyakoribb ilyen kódolási eljárást a tradicionális uuencode/uudecode, illetve a hatékonyabb atob/btoa parancspárral használhatjuk. A nagy állományokat az E-levélben történo˝ továbbításhoz célszer˝u feldarabolni. Erre a split parancsot használjuk. 133
134 FEJEZET 11. ARCHIVÁLÁS ÉS ARCHÍV ÁLLOMÁNYOK HASZNÁLATA
11.1. Könyvtárak archiválása 11.1.1. A tar parancs A tar parancs könyvtárak ill. könyvtárrendszerek archiválására szolgál. Az utasítás archív állományként nemcsak a filerendszer egyik állományát tudja kezelni, hanem közvetlenül is írhatja/olvashatja pl. a külso˝ szalagos eszközt (tape). A tar parancs általános alakja a kövekez˝o: $ tar [ Opciók ] -f ArchívÁllomány Állomány(ok)
A tar parancsban az Állomány(ok) nevének mérete nem haladhatja meg a 100 karaktert. Leggyakoribb opcióként a következo˝ kapcsolók használatosak1 :
Egy új ArchívÁllományt hoz létre a -f kapcsolóval megadott néven, majd beleírja a megadott Állomány(ok)at. A megadott ArchívÁllomány végéhez írja az Állomány(ok)at. Ez az opció a szalagos egységnél nem használható. A megadott ArchívÁllomány végéhez írja az Állomány(ok)at, amennyiben azok nem szerepelnek az ArchívÁllományban, vagy az archiválás óta megváltoztak. Az opció a szalagos egységnél nem használható. Kilistázza az ArchívÁllomány tartalmát. Kiírja az egyes állományok nevét, ahogy azokra sor kerül a feldolgozás során. Kiolvassa az ArchívÁllományból a megadott állományokat. Ha az Állomány(ok)at nem adjuk meg, akkor az összes állományt kiolvassa az archív állományból. Ha a megadott állomány ugyanazon a néven többszöt is szerepel, akkor csak a legutolsó változatot olvassa el (l. a -u és -r kapcsolókat). Vigyázat! A helyettesít˝o karakterek nem a megszokott módon m˝uködnek (a 139. oldalon egy jól m˝uködo˝ változat látható).
-c -r -u
-t -v -x
-f ArchívÁllomány
Megadja a használandó ArchívÁllomány nevét. Amennyiben ennek a (mínusz jel) értéket adjuk, a tar a standard inputról olvas, ill. a standard outputra ír. 1
Megjegyzend˝o, hogy a kapcsolókat egyben szoktuk megadni, azaz -xvf és nem -x -v -f. Erra azért van szükség, mivel bizonyos UNIX rendszerek másképpen nem tudják helyesen értelmezni.
11.1. KÖNYVTÁRAK ARCHIVÁLÁSA
135
-b Blokkméret
-B
-h
-p -C
-d
A rekordok mértetét adja meg 512 byte méret˝u blokkokban. A Blokkméret alapértelmezésben 20, ami egyben a maximum is egyes UNIX rendszerekben. Ez az érték megfelel hálózaton keresztüli mentésre is, mivel a rekordok ilyenkor még nem nagyon szegmentálódnak a TCP/IP átvitelben. Ha nagyobb Blokkméretet választunk, az adathordozó több adatot tud tárolni. Amennyiben nem a 20-as értéket használjuk, ero˝ sen ajánlott ezt az adathordozón feltüntetni a kés˝obbi frusztrációk elkerülésére. Hálózati mentés vagy visszaállítás során használni kell ezt a kapcsolót. Hatására a tar addig vár, amíg a kommunikációs csatornában nem gy˝ulik össze egy rekordnyi adat. Követi a szimbolikus linkeket, azaz a linkekkel megadott állományokat és könyvtárakat is elmenti. A tar alapértelmezésben csak a szimbolikus link információt írja be az archív állományba. A kiolvasott állományokat az eredeti, az archív állományban tárolt védelmi kódokkal, felhasználói és csoport azonosítókkal látja el. ˝ tt a -C Könyvtár kifejezés Könyvtár Amennyiben a felsorolt állományok elo van, a tar egy cd utasítást hajt végre a Könyvtárban. A paranccsal csak abszolút könyvtárneveket adhatunk meg, és az elmentend o˝ állományokat is egyenként kell felsorolnunk. A tar a kapcsoló hatására a különleges (üres könyvtár, hardver file, FIFO, stb.) állományokat is helyesen kezeli el. Ezt az opciót a tar nem minden UNIX rendszerben ismeri.
Példákat a tar parancs használatáról a 11.1.4 fejezetben, a 138. oldalon talál- ☞ tar példák a 138. hatunk. oldalon
11.1.2. A dd adatkonvertáló utasítás A dd parancs adatok formátumának átalakítására használatos a dd [Opció=Érték]
alakban. Méret megadásakor használhatjuk az érték után a b jelzést, ami 512 byte-os egységet, és a k jelzést, ami 1024 byte-os egységet jelöl. A leggyakrabban használt Opciók a következ˝ok: if=Állománynév
A bemeneti file neve. Alapértelmezésben ez a standard input.
136 FEJEZET 11. ARCHIVÁLÁS ÉS ARCHÍV ÁLLOMÁNYOK HASZNÁLATA of=Állománynév
A kimeneti file neve. Alapértelmezésben ez a standard output. bs=Méret
A blokkok mérete byte-ban. Mérete alapesetben gépfüggo˝ , általában 512 byte, de van, amikor 1024 byte. Felülbírálja az ibs és obs kapcsolókat. ibs=Méret
A bemeneti blokkok mérete byte-ban. Amennyiben a Méret után egy b-t írunk, akkor a tar-nál megismert 512 byte méret˝u egységeket használ (pl. ibs=20b). obs=Méret
A kimeneti blokkok mérete byte-ban. Amennyiben a Méret után egy b-t írunk, akkor a tar-nál megismert 512 byte méret˝u egységeket használ (pl. obs=20b). skip=Szám
A másolás megkezdése el˝ott a dd átugorja Számmal megadott blokkot. conv=ascii
Az EBCDIC-r˝ol ASCII-ra alakít. conv=ebcdic
Az ASCII-ról EBCDIC-re alakít. conv=block
A változó hosszúságú rekordokat fix hosszúságúvá alakítja. conv=unblock
A fix hosszúságú rekordokat változó hosszúságúvá alakítja. conv=lcase
A bet˝uket kisbet˝uvé alakítja. conv=ucase
A bet˝uket nagybet˝uvé alakítja. cbs=Méret
A konverziós blokkok méretét adja meg byte-ban. Csak a conv opcióval együtt használjuk. A Mérettel megadott számú karakter kerül egyszerre konverzióra. Az ascii és az unblock konverziónál a vezeto˝ szóközöket a dd így levágja, és egy újsor karakter kerül a sor végére. Az ebcdic, ibm és block átalakításnál a Mérettel megadott számú karakter kerül a bufferebe, majd a dd üres karakterekkel tölti fel a kimeneti blokkméretre a blokkot. Például egy gyakorlas ASCII állományt a következo˝ paranccsal konvertál✎ hatunk át az ejnye EBCDIC állományba:
11.1. KÖNYVTÁRAK ARCHIVÁLÁSA
137
$ dd if=gyakorlas of=ejnye conv=ebcdic
Egy, a /dev/rmt0h eszközben lév˝o EBCDIC szalagot, amely tíz 80 byte méret˝u virtuális EBCDIC lyukkártyát tartalmaz rekordonként, a ejnye ASCII állományba a ✎ $ dd if=/dev/rmt0h of=ejnye ibs=800 cbs=80 conv=ascii,lcase
parancs alakít. A dd parancs használatáról további példákat a 11.1.4 fejezetben, a 138. oldalon ☞ dd példák a 138. találhatunk. oldalon
11.1.3. Mágnesszalagos egységek A szalagos egységeket az mt parancson keresztül vezérelhetjük: mt [-f Eszköz] Parancs [Szám]
Az Eszközre a /dev könyvtárban található speciális állomány(ok)on keresztül hivatkozhatunk, melyek neve gépenként más és más lehet. Emellett a szalagos egység különböz˝o üzemmódjaihoz (íráss˝ur˝uség, stb.) is különbözo˝ állományok tartoznak. Az éppen használható eszközökro˝ l a rendszergazda adhat felvilágosítást: ennek hiányában SUN rendszereknél a /dev/rst0, IBM AIX rendszereknél a /dev/rmt0, míg DEC Ultrix rendszereknél a /dev/rmt0h eszközöket próbálhatjuk meg használni. A felsorolt eszközök írás vagy olvasás után azonnal viszszatekerik a szalagot, s ezért általában létezik ún. nem visszacsévél o˝ (no rewind) változat is: ehhez az egység neve elé egy n bet˝ut kell illeszteni. Például ha a /dev/rmt0h eszköz helyett a /dev/nrmt0h eszközre hivatkozunk, akkor a szalagos egység nem fog automatikusan visszacsévélni. Amennyiben nem adunk meg eszközt a -f kapcsolóval, akkor az mt megpróbálja a TAPE környezeti váltózóban definiált eszközt használni. A leggyakrabban használatos Parancsok a következo˝ k (a Szám alapértelmezésben egy):
bsf
A megadott Számú file vége (EOF, End of File) karaktert lép vissza a szalagon. A szalag az EOF jel szalagkezdeti oldalára áll rá. bsr
A megadott Számú rekordot lép vissza.
138 FEJEZET 11. ARCHIVÁLÁS ÉS ARCHÍV ÁLLOMÁNYOK HASZNÁLATA fsf
A megadott Számú állományt lép el˝ore a szalagon. fsr
A megadott Számú rekordot lép el˝ore. rewind
Visszacsévéli a szalagot. retension
Teljesen el˝oretekeri a szalagot, majd visszacsévéli. Hatására a szalag feszültségmentes lesz. status
Kijelzi a szalagos egység állapotát. eof
Az adott szalagpozícióra állományvég (EOF, End of File) karaktert ír. erase
Letörli a szalagot. ✎
A következ˝o példákban a /dev/nrmt0h mágnesszalagos eszközt kezeljük: Kérdezzük le a szalagos egység állapotát: $ mt -f /dev/nrmt0h status
✎
A következ˝o parancs visszatekeri a szalagot: $ mt -f /dev/nrmt0h rewind
✎
Három file-t a következ˝o paranccsal léphetünk vissza: $ mt -f /dev/nrmt0h bsf 3
✎
Két EOF karatert a $ mt -f /dev/nrmt0h eof 2
utasítás ír a szalagra.
11.1.4. Példák archiválásra A példákban a /dev/nrmt0h mágnesszalagos eszközt használjuk. Az aktuális könyvtárról és annak alkönyvtárairól a következ o˝ utasítással ké✎ szíthetünk tar mentést: $ tar -cvf /dev/rmt0
11.1. KÖNYVTÁRAK ARCHIVÁLÁSA
139
Az allomany1 és allomany2 állományokat a következo˝ utasítással írhatjuk szalagra: ✎ $ tar -cvf /dev/rmt0 allomany1 allomany2
Az összes állományt a szalagról a
✎
$ tar -xvf /dev/rmt0
parancs állítja vissza. A visszaállítás a szalagon megadott névre történik, azaz pl. a /tmp/test.1 nev˝u állományt a /tmp/test.1 állományba, míg a tmp/test.1 nev˝u állományt az aktuális könyvtár alatti ./tmp/test.1 állományba írja. A /usr/local/doc könyvtárat a ✎ $ tar -cvf /dev/rmt0 -C /usr/local doc
utasításssal menthetjük el. Ennek hatására a szalagon keletkez o˝ állományok nevei a /usr/local/doc/ helyett csak a doc/ részt fogják tartalmazni. Az összes állományt a szalagon a ✎ $ tar -tvf /dev/rmt0
parancs listázza ki. Az innen könyvtárat a következ˝o parancs másolja át az oda könyvtárba az alkönyvtárakkal együtt ✎ $ cd innen; tar -cvf - . || (cd oda; tar -xBpf -)
A compress utasítással (l. a 11.2.1 fejezetet a 140. oldalon) tömörített test.tar.Z állományt a ✎ $ zcat test.tar.Z || tar -tvf -
vagy az ezzel egyenérték˝u $ cat test.tar.Z || uncompress | tar -tvf -
parancs listázza ki. Mivel a kifejezéseket a tar nem a megszokott formában kezeli, ezért pl. az összes, a gon mintát tartalmazó nev˝u állományt a ✎ \
$ tar -xvf... /dev/rmt0 tar -tf /dev/rmt0 || grep ’gon’
\
utasítással állíthatunk vissza. Megjegyezzük, hogy a parancs futása meglehet o˝ sen lassú, valamint elég könnyen túlléphetjük a parancssor maximális hosszát (ami általában néhány ezer karakter). Az allomany1 és allomany2 állományokat a következo˝ utasítással írhatjuk szalagra 20 blokkos méretben a dd parancs használatával: ✎ $ tar -cvf - allomany1 allomany2 || dd of=/dev/rmt0 obs=20b
Tegyük fel, hogy a szalagon egymás után két archívum van rögzítve. Az ✎ elolvasáshoz el˝oször tekerjük vissza a szalagot (figyeljük meg, hogy itt már min-
140 FEJEZET 11. ARCHIVÁLÁS ÉS ARCHÍV ÁLLOMÁNYOK HASZNÁLATA denhol a vissza nem csévél˝o /dev/nrmt0 állományt használjuk): $ mt -f /dev/nrmt0 rewind
Ezután olvassuk ki az els˝o állományt: $ tar -xvf /dev/nrmt0
A szalag az olvasás végén nem a következo˝ állományon áll, hanem az EOF (állomány vége) jelen. Ez lépjük át: $ mt -f /dev/nrmt0 fsf 1
Ezután kiolvashatjuk az következ˝o állományt: $ tar -xvf /dev/nrmt0
A hálózaton keresztül is használhatjuk a más gépen elhelyezett szalagos egységeket: ehhez a célgépre rsh utasítással be kell tudnunk lépni (ennek beállítását l. a rlogin és rsh parancsokat a 216. oldalon). Például az anglia távoli gépre a ✎ következ˝o utasítás készít archív állományt: $ tar -b 20 -cvf - * || rsh anglia dd of=/dev/rmt0 obs=20b
✎
A távoli gépen elhelyezett archív állományt a $ rsh -n anglia dd if=/dev/rmt0 bs=20b || tar -xvBb 20 -f -
paranccsal szedhetjük szét.
11.2. Tömörít˝o programok 11.2.1. A compress eljárás A compress parancs az ún. Lempel-Ziv eljárással tömöríti az állományt. Az eljárás az ismétl˝od˝o részeket rövidebb kifejezésekkel helyettesíti, s így tipikusan kb. felére csökkenti egy állomány méretét. Az eljárás dinamikusan m˝uködik, nincs szükség a teljes állomány ismeretére, ezért pipe-ban is használható. A tömörített állomány a .Z végz˝odést kapja meg. A tömörített állományokat az uncompress parancs segítségével állíthatjuk viszsza. Sikeres visszaállítás után az uncompress kitörli a tömörített file-t. A zcat parancs a standard outputra írja ki az eredeti file tartalmát. ✎ Például a gyakorlas.o állományt a következ˝o paranccsal tömöríthetjük össze: $ compress gyakorlas.o
✎
A gyakorlas.o állomány visszaállítása a következo˝ paranccsal történik: $ uncompress gyakorlas.o.Z
11.3. KÓDOLÁSI ELJÁRÁSOK
141
Egy tar mentést a következ˝o utasítással tömöríthetünk és írhatunk szalagra : ✎ $ tar -cvf - allomany1 allomany2 || compress | dd of=/dev/rmt0 obs=20b
Az elmentett archívumot a $ dd if=/dev/rmt0 ibs=20b || uncompress | tar -xvBf -
parancs állítja vissza.
11.2.2. A pack eljárás A pack parancs az ún. Huffmann eljárással tömöríti az állományt. Az eljárás a karaktereket gyakoriságuk alapján rövidebb bitmintákkal helyettesíti, s így kb. kétharmadára (esetleg felére) csökkenti egy állomány méretét. Az eljáráshoz a teljes állomány ismerete szükséges, azaz nem m˝uködik dinamikusan ezért pipeban nem használható. Az eljárás lassú, és csak ritka, különleges esetekben tömörít jobban a compressnél. A tömörített állomány a .z végzo˝ dést kapja meg. A tömörített állományokat az unpack parancs segítségével állíthatjuk vissza. A sikeres visszaállítás után a tömörített file kitörl˝odik. A pcat parancs a standard outputra írja ki az eredeti file tartalmát.
11.3. Kódolási eljárások 11.3.1. Az uuencode/uudecode parancs Az uuencode parancs segítségével egy bináris állományt (pl. tar archívum, futtatható file, magyar ékezetes állomány) az ASCII karaktertartományba kódolhatunk át. Erre pl. levél küldésénél van szükségünk: a UNIX elektronikus leveleket továbbító programja csak 7 bitet (azaz az ASCII tartományt) viszi át (l. a 213. oldalt), s ezért bináris állományok közvetlen küldésére nem alkalmas. A kódolási eljárás 3 byte-ot 4 ASCII karakterré (+ a kontroll információ) alakít, azaz kb. 35%-kal megn˝o a file mérete. Ennek ellenére lassú vonalakon érdemes egy szöveges állományt el˝oször tömöríteni (tipikusan 50%-ra), majd ezt az állományt uuencode-olni: a file mérete így kb. 30%-kal csökken. A parancs általános alakja a következ˝o: uuencode [Állomány] TávoliÁllomány
Az utasítás a megadott TávoliÁllomány néven kódolja a bemeneti Állományt, ill.
✎
142 FEJEZET 11. ARCHIVÁLÁS ÉS ARCHÍV ÁLLOMÁNYOK HASZNÁLATA annak hiányában a standard inputot. A végeredmény a standard outputon jelenik meg. ✎ Például a gyakorlas.tar állományt a $ uuencode gyakorlas.tar gyakorlas.tar >gyakorlas.uue
utasítással kódolhatjuk. A kódolt állományból a uudecode parancs állítja vissza az eredeti file-t a uuencodeban megadott TávoliÁllomány néven. ✎ Az el˝oz˝o gyakorlas.uue állományból az eredetit a $ uudecode gyakorlas.uue
utasítás bontja ki.
11.3.2. A btoa/atob eljárás A btoa sz˝ur˝outasítás bináris állományt olvas be a standard inputon, majd ezt ASCII karakterekkel kódolva kiírja a standard outputon. A kódból a szintén sz˝ur˝oként m˝uködó atob utasítás állítja vissza az eredeti állományt. A btoa eljárás egy kompakt, 85-ös számrendszer˝u eljárást használ, így 4 byteból 5 byte lesz. Az eljárás gazdaságosabb a tradicionális uuencode módszernél, de nem minden UNIX rendszer része.
11.3.3. Állományok szétdarabolása Néhány elektronikus hálózat (pl. a BITNET) a nagyon nagy (kb. 100 kbyte feletti) elektronikus leveleket nem képes továbbítani. Az Interneten ugyan nincs ilyen korlát, mégis érdemes a nagyon nagy (2-300 kbyte feletti) állományokat feldarabolni, ha azokat valamilyen okból levélben akarjuk elküldeni. Egy nagyobb állományt több kisebb file-ra szövegszerkeszto˝ vel is feldarabolhatunk, ett˝ol a fáradságos (mi több, könnyen elhibázható) m˝uveletto˝ l a split parancs kímél meg minket. A parancs alakja a következo˝ : split [-Szám] [Állomány [Prefix] ]
Az utasítás a megadott Állományt (alapesetben a standard inputot) Számnyi (alapesetben 1000) sorral rendelkez˝o állományokra bontja. Az állományok neve a Prefix-szel (alapesetben ez x) kezd˝odik, és végz˝odésük el˝oször az aa, majd az ab stb. értékeket veszi fel, a legutolsó a zz lesz. Ilymódon legfeljebb 676 állományra bonthatjuk a bemeneti Állományt. A split soronként képes darabolni az állományokat. Bináris állományok szétbontásához használhatjuk a hasonló bsplit parancsot, amely — tekintve,
11.3. KÓDOLÁSI ELJÁRÁSOK
143
hogy közprogram — nem található meg minden UNIX rendszeren. Például a hosszufile állományt a következ˝o utasítással bonthatjuk fel rovid kezdet˝u, 100 sort tartalmazó darabokra: ✎ $ split -100 hosszufile rovid
Az utasítás létrehozza a rovidaa, rovidab, stb. állományokat. Tegyük fel, hogy nincsen más rovid kezdet˝u állomány a könyvtárban. Ekkkor a $ cat rovid* > ujhosszufile parancs visszaállítja a hosszufile-t ujhosszufile néven.
144 FEJEZET 11. ARCHIVÁLÁS ÉS ARCHÍV ÁLLOMÁNYOK HASZNÁLATA
12. fejezet Programok fordítása és futtatása A UNIX operációs rendszerben lehet˝oség van arra, hogy ne csak a UNIX el˝ore definiált parancsait és parancsállományokat (script) futtassunk, hanem más magas szint˝u programnyelvben írt progamokat is. A UNIX, más nagygépes rendszerekhez hasonlóan a forráskódból els o˝ lépésben egy ún. object állományt hoz létre. Az object állományból az ún. linkelés során jön létre a futtatható állomány, amely már a CPU-nak szóló gépi kódú utasításokat tartalmazza. A fordítás ilyen módon történo˝ két lépésre bontásával lehet˝ové válik, hogy több nyelvb˝ol származó forráskódot is egy futtatható állományba egyesítsünk, mivel az object állományok formátuma mindig azonos. A szétválasztás másik következménye, hogy a különböz o˝ program-könyvtárakban tárolt rendszer és felhasználói függvények hozzáf˝uzése (linkelés) is elválik a forrásnyelvi fordítástól. A UNIX rendszerben lehet˝oség van saját könyvtár létrehozására is az object állományokból. A UNIX rendszer lehet˝oséget nyújt a futtatható állományoknál a hibakeresésre és nyomkövetésre (debug). A debugnak különbözo˝ szintjei léteznek a gépi kódtól egészen a forrásnyelvben való visszakeresésig. A UNIX alapértelmezésben betesz bizonyos alapvet˝o debug információkat a futtaható állományokba. Amennyiben biztosak vagyunk, hogy a futtatható állományban levo˝ debug információkra nincs szükségünk, akkor helytakarékosság és sebességnövelés céljából a strip parancscsal azokat kitörölhetjük. Általában minden UNIX alapértelmezésben tartalmazza a C fordítót, linkert és a loadert, valamint kiegészítésként beszerezheto˝ k C++, FORTRAN, Pascal, COBOL, Ada és más magasszint˝u programnyelvek fordítói is. Megjegyzend o˝ , hogy a GNU project keretében elérhet˝o a teljes GNU fordítócsalád (C, C++, FOR145
146
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
TRAN, Pascal, Ada, debugger, stb.). Ezek a jó mino˝ ség˝u programok reális alternatívái a „gyári” fordítóknak, ráadásul térítésmentesen beszerezhet o˝ k.
12.1. A UNIX C Fordító (cc) A UNIX operációs rendszer standard C fordítója acc. Használata: $ cc [ Opció | Állomány ] A különböz˝o UNIX rendszerek rendelkezhetnek még más C fordítóval is (pl. az IBM RS/6000 alap C fordítója az xlc), de a cc parancsot szinte mindegyik ismeri. A parancsok feldolgozzák az assembler és az object állományokat is. Hacsak a -c opciót nem állítjuk be, a parancsok behívják a linkelo˝ programot is. Az állománynevek kiterjesztésére a következo˝ konvenció használatos:
.c .i .o .a .s
C forráskód preprocesszált C forráskód object állomány (az ld parancs dolgozza fel) object könyvtár (az ld parancs dolgozza fel) assembler forráskód
A parancsok opciójaként a következ˝ok állhatnak: Egy kapcsolós opciók:
-#
Részletes információt közöl a fordítás menetéro˝ l, de maga nem hív be semmilyen programot. -c
Csak fordítást végez, a linkel˝o programot nem hívja be. -DNév [= Definíció]
A Név szót úgy tekinti, mintha #define-ban szerepelne. Ha a Definíciót nem adjuk meg, az 1 értéket veszi fel. -E
Csak preprocesszálást végez el, fordítást nem. A kimenet a standard kimenet. -g
Debug információkat is belefordít.
12.1. A UNIX C FORDÍTÓ (CC)
147
-IKönyvtár
A nem teljes könyvtárnévvel megadott include állományokat a Könyvtárban keresi. -lObjectKönyvtár
A libObjectKönyvtár.a fordítási könyvtárállományt keresi. -LKönyvtár A -l opcióval megadott fordítási könytárállományok helyét
adja meg.
-oNév
A fordítás eredményeként létrejöv˝o (általában végrehajtható) állomány neve. Alapesetben a Név a.out, ha futtatható állomány a cél, az object állomány pedig a .o kiterjesztést veszi fel a .c helyett. -O
Optimalizációt hajt végre. -p
Egyszer˝u profile-t (futtatás közbeni információk gy˝ujtését leheto˝ vé tev˝o kódot) generál a forráskódhoz. -pg
Részletesebb profile-t generál a forráskódhoz. -P
Csak preprocesszálást végez, fordítást nem. A kimenet egy .i kiterjesztés˝u állomány. (A kapcsolót bizonyos UNIX rendszerek nem ismerik). -UNév
Megszünteti a név definícióját úgy, mintha az #undef direktívát adtuk volna meg a programban. -v
Részletes információt közöl a fordítás menetéro˝ l. -w
Nem ír ki információs és figyelmeztet˝o üzeneteket. -yKulcs
A lebeg˝opontos kifejezések futás közbeni kerekítését határozza meg. A Kulcs a következ˝ok valamelyike lehet: n m p z
: : : :
a legközelebbi értékre kerekít mínusz végtelen felé kerekít plusz végtelen felé kerekít a nulla felé kerekít
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
148
Az egyéb opciókat a következ˝o módon adjuk meg: -qOpció
ahol az Opció ki/be kapcsolóként van megadva. Például a -qOpció bekapcsolja az Opció opciót, míg a -qnoOpció kikapcsolja azt (pl. ha Opció=source, akkor a -qsource kapcsoló forráskódú listát készít, míg a -qnosource megakadályozza ilyen lista készítését). A következ˝okben felsorolt opciók felülbírálják az eredeti fordítási beállítást: attr extchk list listopt source stat xref
A hivatkozott neveket felsorolja attribútumaikkal. Ellen˝orzi az eljárásoknak átadott értékek konzekvens használatát. Object listát generál. A listába beírja az összes opció beállított értékét. Forráskódú listát generál. Id˝o- és mérettáblázatot is generál a forráskódú listába. Kereszt-referencia listát készít a hivatkozott nevekro˝ l.
12.2. A UNIX FORTRAN fordító (f77) A UNIX operációs rendszerben a standard Fortran fordító azf77: $ f77 [ Opció ] [ Állomány ]
A különböz˝o UNIX rendszerek rendelkezhetnek még más FORTRAN fordítóval is (pl. az IBM RS/6000 alap FORTRAN fordítója az xlf). Az f77 parancs a FORTRAN forráskódú állományokat fordítja le. FORTRAN programokon kívül assembler gépi kódú, valamit object állományokat is feldolgoz. Amennyiben nem adtuk meg a -c opciót, az f77 parancs behívja a linkel o˝ programot is, mely a kész futtatható állományt állítja elo˝ . A parancs bemen˝o állománya(i) a következ˝o típusú(ak) lehet(nek): kiterjesztés˝u FORTRAN forráskód .o kiterjesztés˝u object file az ld parancs számára .s kiterjesztés˝u gépi kódú forrásprogram .f
A leggyakrabban használt opciók nagy része (# c g I l L o O v w y) megegyezik a C fordítóéval. A különbségek: -1
A DO ciklust legalább egyszer lefutattja.
12.3. A PASCAL FORDÍTÓ
149
-C
Futás közben ellen˝orzi a tömbökre alkalmazott indexeket (nem léptük-e túl a tömb definiált méretét), illetve a karakterláncokat.
-D
Azokat a sorokat is lefordítja a FORTRAN forráskódú programból, melyek els˝o sorában D bet˝u áll.
A -q utáni opciók jó része is (extchk, list, listopt, source, stat, xref) megegyezik a C fordítónál leírtakkal. Az eltérések: dpc
A lebeg˝opontos állandókat dupla pontosan kezeli.
extchk
Ellen˝orzi az eljárásoknak átadott értékek, valamint a common blokkok konzekvens használatát.
extname
Minden external neve elé egy aláhúzás karakert tesz (kivéve a MAIN programok neve). Ez olyankor hasznos, amikor különbözo˝ nyelveken írt1 programokat keverünk.
noobj
Nem hozza létre az object állományt.
recur
Lehet˝ové teszi rekurzív alprogramok írását.
12.3. A Pascal fordító A UNIX operációs rendszerben a Pascal fordítónak nincsen általános neve (lehetséges pl. pc, pascal). Például az IBM RS6000 rendszereken a Pascal fordító formátuma: xlp [Opció] [ Állomány ]
Általában hasonló a többi gépen is a parancs kiadása. A fordító pontos nevét a $ apropos pascal
vagy a $ man -k pascal
paranccsal nézhetjük meg (esetleg a rendszergazdát is megkérdezhetjük). A használható opciók nagyrészt megegyeznek a C és FORTRAN részben felsorolt opciókkal. 1
C és FORTRAN programokat használók figyelmébe ajánljuk a cfortran programcsomagot, amely a két nyelv egyszerre való használatát jelento˝ sen egyszer˝usíti. A programcsomag pl. az ftp.elte.hu gépen anonymous ftp-vel (l. 217. oldal) található meg.
150
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
12.4. A UNIX fordítói könyvtárkezelése (ar,
)
ranlib
A UNIXban a fordítási (object) könyvtárak kezelésére az ar parancs szolgál: $ ar [ -Kapcsoló(k) [ File ] ArchívÁllomány Állomány(ok)
Az ar parancs egy vagy több Állományt ír vagy töröl az ArchívÁllományba speciális formátumban. Az ún. headereket könnyen áthelyezhet o˝ módon tárolja, object könyvtár létrehozásakor, illetve felülírásakor mindig újraépíti a szimbólum-táblát. Az ld(linkel˝o) program ezeket az archív állományokat használja fel a végrehajtható program készítésére. Az archív állomány formátumát a /usr/include/ar.h állomány írja le. Az archív állományon belül névismétlés is elo˝ fordulhat, és ilyenkor számít a sorrend. Egyes gépeken figyelni kell, hogy az egymásra hivatkozó állományok az object könyvtáron belül megfelelo˝ sorrendben legyenek. Az IBM AIX nem követeli meg az object könyvtárállomány ilyen szigorú felépítését. A parancs kapcsolói is változhatnak gépro˝ l gépre. Itt a IBM RS6000 AIX f˝obb kapcsolóit ismertetjük: a File b File c d l o
p
q
A File-lal megjelölt állomány után helyezi be a megnevezett állományokat. A File-lal megjelölt állomány elé helyezi be a megnevezett állományokat. Nem írja ki az object könyvtár létrehozásakor szokásos üzenetet. Kitörli a megadott állományokat az object könyvtárból. Az átmeneti állományokat az aktuális könyvtárba helyezi, és nem a /tmp könyvtárba. (Akkor célszer˝u használni, ha a /tmp-ben kevés a hely). Egymás után rendezi az állományokat, és kompresszálja az archív állományt. Az archív állományban tárolt UNIX állományok nem szükségszer˝uen vannak egymás után elhelyezve. Például, ha törlünk vagy átmozgatunk egy állományt, fel nem használt szabad hely keletkezhet az archív állományon belül. Ez az opció újraépíti az archív állományt úgy, hogy az állományokat egymás mögé helyezi, és az összes szabad helyet megszünteti. Kiírja a standard kimenetre a megnevezett állomány, vagy az összes (ha nem adunk meg állománynevet), az ArchívÁllományban található állomány tartalmát. A megadott állománynevet az object könyvtár végéhez csatolja. A pozíciókapcsolók hatását megsz˝unteti. Ez az opció NEM elleno˝ rzi le, hogy az adott állománynév alatt van-e már valami a object könyvtárban, így ha kétszer adunk meg egy állománynevet, az kétszer íródik be az object könyvtárba.
12.4. A UNIX FORDÍTÓI KÖNYVTÁRKEZELÉSE (AR, RANLIB) r
s
t u v
w x
151
A megadott állományt (ha létezik az object könyvtárban) az újjal helyettesíti. Mivel az állomány helye adott, ezért a pozíciókapcsolóknak nincs semmi hatása. Ha az u(update) kapcsolóval használjuk, az r csak azokat az állományokat helyettesíti az object könyvtárban, melyek az utolsó beírás óta megváltoztak. Új szimbólum-tábla felépítésére készteti az ar programot, még az esetben is, ha nem változott közben az object könyvtár tartalma. A kapcsolót a strip parancs után használjuk a szimbólum-tábla újraépítésére. Az object könyvtár tartalomjegyzékét írja ki a standard kimenetre. Amenynyiben megadunk állományneveket, csak azok jelennek meg. Csak azokat az állományokat másolja be, melyek a legutóbbi másolás óta változtak. (lásd az r kapcsolót). Részletes, állományokra lebontott információt ad az új object könyvtár felépítésér˝ol. A t kapcsolóval együtt használva az ls -l parancshoz hasonló listát ad. Az x kapcsolóval minden állomány elé kiírja a nevét, a h kapcsolóval pedig felsorolja az állományok nevét és módosítási idejét. Az archív állomány szimbólum-tábláját írja ki. Minden szimbólum annak az állománynak a nevével íródik ki, amelyben megjelenik. Kimásolja az object könyvtárból a megadott állományt az aktuális könyvtárba. Az új állományok az eredeti, az object könyvtárban maradt állomány nevét veszik fel. Ha nem adunk meg állománynevet, az x minden, az archívban lev˝o állományt kimásol.
Amennyiben a megadott ÁllományNév nincs az object könyvtárban, az ar hozzáadja azt az object könyvtárhoz. Ez esetben a pozíciókapcsolókkal megadhatjuk az állomány helyét az object könyvtárban. Amennyiben nem intézkedünk a helyr˝ol, az új állomány automatikusan az object könyvtár végére kerül. Ha ugyanazt az állománynevet kétszer adjuk meg, az állomány kétszeresen kerülhet be az object könyvtárba. Példák: A libem.a állomány létrehozása a basic.o buffer.o char.o object modu- ✎ lokból: $ ar vq libem.a basic.o buffer.o char.o ar: creating archive file libem.a q - basic.o q - buffer.o q - char.o
152
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
Amennyiben a libem.a object könyvtár nem létezik, akkor az ar létrehozza, és elhelyezi benne a basic.o, buffer.o és char.o állományokat. Amennyiben a libem.a létezik, akkor ellen˝orzés nélkül hozzáadja a végéhez a két állományt. Ezért a duplázások elkerülésére célszer˝u letörölni a régi object könyvtárat, ha teljesen újjáépítjük. A v kapcsoló hatására a folyamatról részletes tájékoztatást kapunk. ✎ A libem.a állomány tartalmát a következ˝oképpen listázhatjuk ki: $ ar vt libem.a rw-r--r-rw-r--r-rw-r--r--
100/100 8860 Sep 11 18:33 1991 100/100 9871 Sep 11 18:34 1991 100/100 3568 Sep 11 18:34 1991
basic.o buffer.o char.o
Az ls -l-hez hasonló, ’hosszú’ listát kapunk. Az egyszer˝u felsoroláshoz hagyjuk el a v kapcsolót. A libem.a object könyvtárhoz adjuk hozzá a crypt.o állományt úgy, hogy a ✎ már a könyvtárban lev˝o buffer.o elé pozicionáljuk: $ ar vrb buffer.o libem.a crypt.o a - crypt.o $ ar vt libem.a rw-r--r-100/100 rw-r--r-100/100 rw-r--r-100/100 rw-r--r-100/100
8860 2362 9871 3568
Sep Sep Sep Sep
11 11 11 11
18:33 18:35 18:34 18:34
1991 1991 1991 1991
basic.o crypt.o buffer.o char.o
Általában a UNIX rendszerekben az ar nem végzi el a szimbólum-tábla legyártását (az IBM RS6000 AIX rendszeren az s kapcsoló ezt elvégzi). Ilyenkor a ranlib parancs végzi el az archív object könyvtár "random" object könyvtárrá alakítását, így az el˝oz˝o példában a $ ranlib libem.a
utasítással építhetjük újra a szimbólum-táblát.
12.5. A futtatható program összeszerkesztése: az ld parancs A különböz˝o object állományokat, object könyvtárakat és külso˝ változókat az ld parancs ötvözi egy betölthet˝o és végrehajtható állományba, miközben kiértékeli a
12.5. A FUTTATHATÓ PROGRAM ÖSSZESZERKESZTÉSE: AZ LD PARANCS153 különböz˝o hivatkozásokat. Az alapértelmezésbeli kimenet vagy az a.out végrehajtható állomány, vagy az ld parancs egy másik hívásakor felhasználandó, már el˝okészített állományt generál (pl. ha nincs még feloldva az összes hivatkozás). Az ld parancs formátuma a következ˝o: $ ld [ Kapcsolók ] Állomány(ok)
A felsorolt Állományokat (object, object könyvtár, import lista) az ld a felsorolás sorrendjében szerkeszti össze. (Némely UNIX rendszerben az object könyvtárakat értékeli ki legutoljára az ld). A fordítási könyvtárak .a-ra végz˝od˝o nev˝u archív állományok (l. az ar parancsot a 150. oldalon). A fordítási könyvtárakat megadhatjuk abszolút vagy relatív ☞ ar útvonallal is, pl. a -lxzy kapcsoló a libxyz.a fordítási könyvtárállományt speci- részletes leírása a 150. fikálja, mely vagy a -L kapcsolóval megadott könyvtárakban, vagy a standard oldalon könyvtárakban (/lib és /usr/lib könyvtárak) helyezkedik el. Az ld parancs pontos m˝uködése, kapcsolói eltérhetnek a különböz o˝ UNIX rendszerekben, de használatuk általában elkerülheto˝ a cc paranccsal (l. a 155. ☞ cc oldalon). Ha mindenáron használni akarjuk a parancsot, el o˝ tte feltétlenül olvassuk részletes leírása a 155. oldalon el a manuált (man ld). Az ld parancs kapcsolói A kapcsolók sorrendje általában nem befolyásolja az ld parancs m˝uködését, kivéve a -f és -L, melyek az ld számára el˝okészített állományokat jelölik meg. A -f kapcsolók a parancssorban való megjelenés sorrendjében értékel o˝ dnek ki. A -l kapcsolókkal jelölt állományokat szintén a megjelenés sorrendjében dolgozza fel az ld, de csak az összes object állomány kiértékelése után. Ha egymásnak ellentmondó kapcsolókat használunk, az ld az utolsó kapcsolót veszi figyelembe, az annak ellentmondó megel˝oz˝oeket figyelmen kívül hagyja. A leggyakrabban használt kapcsolók a következo˝ k: A .o és .a végz˝odés˝u állományok neveit az File állományból veszi. A bemen˝o object állományokat, valamint a -f kapcsolóval kijelölt object állományokat az ld a parancssorban való megjelenés sorrendjében dolgozza fel. A kapcsoló ismételhet˝o. -lKönytár A -L kapcsolóval megadott, vagy a standard object könyvtárak valamelyikében lev˝o libKönyvtár.a fordítási könyvtárat is belef˝uzi a kimenetbe. A kapcsoló utáni állományokat az összes a bemeneten lév o˝ , valamint a -f kapcsolóval megadott állomány feldolgozása után értékeli ki. A kap-
-f File
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
154
csoló ismételhet˝o, a megadott fordítási könyvtárakat a megjelenés sorrendjében keresi meg az ld. Az IBM RS6000 AIX alatt az ld parancs az összes objectet és object könyvtárállományt azonos módon kezeli. El˝oször beolvassa a szimbólum-táblát, és kiszedi a már definiált szimbólumokat, így nem szükséges a fordítási könyvtárállományok speciális rendezése, melyet némely szerkeszt o˝ program igényel. Viszont ezáltal a szimbólum els˝o el˝ofordulása a mérvadó, ami akár meg is el˝ozheti az illet˝o szimbólum definícióját. -LKönyvtár A -l kapcsolóval
megadott fordítási könyvtárállományoknak a file-rendszerben elfoglalt helyét (path) adja meg. A kapcsoló ismételhet o˝ . A megadott Könyvtárakat az ld a kimeneti állományba is bejegyzi az esetleges dinamikus betöltés használatához.
-o Név
A kimeneti állományt a Név nev˝u állományba helyezi és nem az a.out-ba. -r
Lehet˝ové teszi, hogy a ld létrehozza a kimeneti állományt még akkor is, ha abban nem definiált hivatkozások vannak. Általában az így létrehozott állományt az ld parancs egy kés˝obbi hívásakor használjuk állományparaméterként. -s
Kiszedi a szimbólum-táblát, a sorszám és pozícióinformációkat a kimeneti állományból. Ezzel helyet lehet megtakarítani, de lehetetlenné teszi a debugger használatát. A m˝uvelet utólag is elvégezheto˝ a kimeneti állományon a strip paranccsal. -v
Részletes információt ad a szerkesztés menetéro˝ l. ✎
Példák: Több object állomány összeszerkesztése a.out végrehajtható programmá: $ ld -T512 /lib/crt0.o pgm.o subs1.o subs2.o -lc
Az ld használatakor nekünk kell megmondani, hogyan helyezkedjenek el az egyes szegmensek. Az IBM RS6000 AIX rendszerben a -T512 egy általánosan m˝uköd o˝ paraméter. Utána következik az object file-ok felsorolása: a /lib/crt0.o a UNIX rendszer része. A felhasználói object file-ok után a -lc kapcsoló a C nyelv object könyvtárát linkeli még a programhoz. Azaz itt a felhasználónak kell gondoskodnia az összes olyan object könyvtár, object modul felsorolásáról, melyet egy fordítóprogram automatikusan megcsinál.
12.6. PROGRAMOK FUTTATÁSA
155
A parancs kiadásának egyszer˝ubb módja a cc parancs használata, mely a szükséges kapcsolókat automatikusan beállítja: $ cc pgm.o subs1.o subs2.o
Példa fordítási könyvtárállomány használatra: $ cc -o pgm pgm.o subs1.o subs2.o mylib.a -ltools A pgm.o, subs1.o, subs2.o object állományokat, a mylib.a object könyvtár rutinjait, és a -ltools-szal specifikált fordítási könyvtárbeli (ami a /lib/libtools.a vagy /usr/lib/libtools.a file lehet) rutinokat szerkeszti össze pgm nev˝u vég-
rehajtható állománnyá.
12.6. Programok futtatása A kész, végrehajtható programokat a UNIX operációs rendszerben a nevükre hivatkozva futtatjuk. A program könyvtárának vagy benn kell lennie a PATH környezetváltozóban, vagy teljes névvel kell rá hivatkozni. Az így indított program standard bemenet és kimenete a terminál, így azt másra a program futásának ideje alatt nem használhatjuk. A ki- és bemenet a shellnél ismertetett módon átirányítható. A program futtatásának el˝obbi módját az el˝otérben való (vagy interaktív) futtatásnak nevezzük. Lehet˝oség van arra, hogy a programot a háttérben futtassuk; ilyenkor annak futása alatt a terminál használható másra is. A programokat tetszés szerint rakhatjuk át az el˝otérb˝ol a háttérbe és viszont. Az éppen futó interaktív programot a Ctrl és Z billenty˝uk egyidej˝u lenyomásával állíthajuk meg. A prompt megjelenése után végrehajthatunk egyszer˝u parancsokat, majd az eredeti program futtatását folytathatjuk az el˝otérben, vagy a háttérben. A háttérfuttatáshoz a program neve, és az összes átirányítás, kapcsoló és argumentum után egy & jelet kell tenni (l. a 60. oldalon). A rendszer kiírja az eljáráshoz tartozó azonosító számot (PID), mely alapján késo˝ bb hivatkozhatunk az eljárásra. Bourne shell esetén az így indított eljárások befejezik futásukat, ha a szül˝o processz megsz˝unik (pl. kilépünk a rendszerbo˝ l). Ezt megakadályozza a parancssor elején álló nohup utasítás. A nohup használata szabályozható a Cés Korn-shellekben is, általában nélküle sem állnak le a háttérben indított eljárások.2 A rendszerbe való újbóli belépés után a nohuppal elindított eljárásokat a ps paranccsal kereshetjük meg. 2
Az eltér˝o beállítások miatt sok UNIX rendszerben szükséges a nohup használata Korn-shell esetén.
✎
156
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
A programot a háttérbe a bg, az el˝otérbe az fg paranccsal tehetjük. Lehet˝oség van a parancsok prioritásának megváltoztatására, egy parancs egy adott id o˝ ben történ˝o indítására illetve egy parancs rendszeres futtatására, valamint a rendszer egyenletes terhelése érdekében a parancsok egymás utáni futtatására. A program, hacsak nem fordítás és linkelés eredményeként létrejött linkelt program (pl. az a.out állomány), egy külön ún. alshellben (subshell) indul el. Ha egy script programot az adott shellben akarunk lefuttatni, akkor használjuk az . ScriptÁllomány parancsot. A program prioritásának állítása: a nice parancs. A nice paranccsal egy Parancsot az alapbeállításnál alacsonyabb prioritással futtathatunk: $ nice [-Szám] Parancs
A Szám 1 és 19 közti érték, és a növekvo˝ értékek csökken˝o prioritásra utalnak. Az alapérték a 10. A root jogokkal rendelkez˝o felhasználók ezzel a paranccsal növelhetik egy processz prioritását, úgy, hogy negatív értéket adnak a Számnak. A C shellben van a nice parancson kívül beépített nice is, melyek bizonyos esetekben másképpen viselkednek. A nice magától nem futtat a háttérben. Így a $ nice Program a Program nev˝u
állományt futtatja le 10-es prioritással az elo˝ térben, azaz a terminál másra nem használható, míg a $ nice Program &
a háttérben fut le alacsonyabb prioritással. Programok id˝ozítése: az at parancs. Egy utasítás kés˝obbi id˝opontban való végrehajtására szolgál az at parancs. Formátuma: $ at [Kapcsolók] Id˝o [Dátum] [Növekmény ]
Az at parancs beolvassa a standard bemenetro˝ l a kés˝obbi id˝opontban végrehajtandó parancsokat. A betáblázott parancsok standard kimenetre és hibaeszközre érkez˝o üzeneteit postázza, kivéve, ha átirányítottuk a kimenetet (pl. a mail utasítással levélbe). A standard hibaeszközre kiírja az adott eljárás számát és az indítási id˝ot.
12.6. PROGRAMOK FUTTATÁSA
157
Az at parancs az aktuális eljárás környezetét veszi át (kivéve a prioritást). A rendszergazda szabályozhatja, hogy melyik felhasználónak legyen joga használni az at parancsot. Az id˝ozített parancsokat kilistázhatjuk a $ at -l
paranccsal. Az at használatakor minden feladat kap egy azonosítót (ez bet˝ukb o˝ l és számokból áll, pl: ctw.635677200.a). Ezt is kiírja a lista. Az elküldött feladatot, még miel˝ott elkezdene végrehajtódni, törölhetjük a $ at -r Feladat
paranccsal, ahol a Feladat jelöli az azonosítót. Az id˝ot a következ˝oképpen adhatjuk meg: • Szám, melyet opcionálisan valamely kiegészítés követ. Az egy és kétjegy˝u számokat az at órának értelmezi, a négyjegy˝ueket óra-percnek. Például 0852 8 óra 52 percet jelent. • A noon, midnight, now speciális szavakat szintén id˝onek értelmezi az at. • A dátumot megadhatjuk a hónap (angol) nevével és a nap számával (esetleg vessz˝ovel utána az évet), vagy a hét napjával. Két különleges napot is megadhatunk: a today-t és a tomorrow-t. Az opcionális Növekmény az id˝o kifejezésében a következ˝o lehet: • + jellel ellátott szám, melyet a következ˝o szavak valamelyike követ: minute[s], hour[s], day[s], week[s], month[s], year[s]. • a next speciális szó, melyet az el˝obb felsorolt szavak követhetnek. Így a next day a megadott id˝opontot másnapra értelmezi. A már ismertetett l és d kapcsolón kívül használható még a: A csh paranccsal futtatja az eljárást. -k A ksh paranccsal futtatja az eljárást. -s A bsh paranccsal futtatja le az eljárást. -m Postázza a felhasználónak a parancs sikeres végrehajtását.
-c
Példa: Az (aktuális könyvtárban lév˝o) uuclean parancs futtatása péntek délután 5 ✎ órakor: $ at 5 pm Friday uuclean
158
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
vagy $ at 5 pm Friday uuclean Ctrl-D
✎
A jöv˝o héten ugyanebben az id˝oben történ˝o futtatás: $ at now next week uuclean
✎
Két nap múlva ugyanebben az id˝oben: $ at now +2 days uuclean
Január 24-én délután 3 órakkor: $ at 3:00 pm Jan 24 uuclean
Egy betáblázott feladat betáblázhatja magát újra a következo˝ napra, úgy hogy futása végén ismételten meghívja az at utasítást. Ilyen rendszeres futtatásokra szolgál a UNIX crontab (l. 12.6.2. fejezet) parancsa. A crontab használata rendszeres futtatásokra el˝onyösebb, mivel egy esetleges hiba esetén is újraindul (az at futtatása ilyenkor megszakad).
12.6.1. A batch parancs A batch paranccsal indíthatjuk el a programot úgy, hogy az akkor kezdjen el futni, ha a rendszer nincs túlságosan leterhelve. A batch parancs az általa elindított program standard kimenetét és hibakimenetét postázza, hacsak azok nincsenek átirányítva. Kiírja a feladat számát és betáblázási idejét. A program az aktuális ✎ környezetb˝ol és könyvtárból indul: $ batch <<"vege" nagyfeladat 2>&1 >kimenet ||@ mail $LOGNAME vege
Az így elküldött nagyfeladat program standard kimenete az aktuális könyvtár kimenet nev˝u állománya lesz, a hibaüzeneteket pedig postázza a felhasználónak.
12.6.2. Feladatok rendszeres futtatása: a crontab parancs Feladatok rendszeres futtatásokra a crontab parancs szolgál: $ crontab [ -l | -r | -v ] [ Állomány ]
12.6. PROGRAMOK FUTTATÁSA
159
A crontab parancs bemásolja a megadott Állományt, vagy annak hiányában a standard bemenetet a crontab állományait tartalmazó könyvtárba. Az állandóan futó cron daemon ezen állományok utasításai szerint jár el. A megadott parancsok standard kimenetét illetve hibakimenetét a crontab postázza, hacsak nincs átirányítás. A crontab írásakor az összes el˝oz˝o beírásunk törl˝odik. A crontab parancs használatát a rendszergazda szabályozhatja (engedélyezheti, illetve letilthatja). A crontab bejegyzések 6 mez˝ob˝ol állnak. A mez˝oket szóköz vagy tabulátor választja el. A mez˝ok tartalma sorrendben: • • • • • •
Perc (0 és 59 közötti szám) Óra (0 és 23 közötti szám) A hónap napja (1 és 31 közötti szám) Az év hónapja (1 és 12 közötti szám) A hét napja (0 és 6 közötti szám: vasárnaptól szombatig) A futtatandó shell parancs
Az id˝opontra vonatkozó mez˝ok tartalmazhatnak: • Egy, az adott határok közötti számot. • Köt˝ojellel (-) elválasztott két számot, melyek egy tartományt határoznak meg. • Vessz˝ovel elválasztott számokat. • A * az összes megengedett értéket jelenti.
A napot két helyen is meghatározhatjuk. Így például a 0 0 1,15 * 1 parancs
bejegyzés minden hónap els˝o és 15. napján fut le, valamint minden hétfo˝ n. A cron daemon a hatodik mez˝oben megadott parancsot futtatja le az adott id˝oben. A hatodik mez˝oben esetlegesen megjelen˝o % jel utáni részt a cron a megadott parancs standard bemenetére teszi (kivéve a \% vagy "%" használatakor). A hatodik mez˝oben megjelen˝o nem védett felkiáltójel újsor karakternek számít. A shell csak a parancsmez˝o els˝o sorát futtatja le. Az összes többi az adott parancs standard bemenetére kerül. A cron daemon a HOME könyvtárunkból indítja a subshellt. Nem futtatja le automatikusan a .profile állományt, így ha szükségünk van a benne foglaltakra, a felhasználónak kell err˝ol a crontab bejegyzésben gondoskodnia. A cron daemon a következ˝o környezetváltozókat adja át a subshellnek: HOME, LOGNAME, SHELL (alapesetben ez a /bin/sh), PATH (alapesetben ez a :/bin:/usr/bin). Kapcsolói a következ˝ok:
160
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
Kilistázza a crontab állományt. -r Törli a crontab állományt a crontab könyvtárból. -v Részletesen kilistázza a crontab állományokat. -l
Példák: ✎ Minden hétköznap du. 5-kor írjon ki nekünk egy üzenetet: 0 17 * * 1-5 echo "Itt az ideje hazamenni!" | write $LOGNAME
✎
Minden Karácsony el˝ott (dec 20 és 31 között 12 és 17 óra között óránként) köszöntsön minden, a gépen dolgozó embert: 0 12-17 20-31 12 5 /etc/wall%Kellemes Unnepeket!
12.7. Hibakeresés és ellen˝orzött futtatás (dbx) A dbx egy szimbolikus debugger program. Alkalmazható C, Pascal, FORTRAN és COBOL programok elemzésére a következo˝ módokon: • Kiértékeli az object illetve a (programok váratlan leállásakor keletkez o˝ ) ún. core állományokat. • A program futtatásához egy felhasználó által elleno˝ rizhet˝o környezetet teremt. • Leállási pontok definiálhatók, vagy soronként futtatható a program. • A szimbolikus változók értékeit név szerint elleno˝ rizhetjük. Használata: dbx [-a ProcessID] [-c ParancsFile] [-d KövetésiMélység] [-I Könyvtár] [Kapcsolók] [ObjectFile[CoreFile]]
Az ObjectÁllomány a fordító által generált (végrehajtható) állomány. A dbx program használatához a fordításnál használjuk a -g kapcsolót (szimbólum-tábla generálása). Amennyiben ezt nem tesszük, vagy a szimbólumtáblát a strip paranccsal megszüntettük, a dbx szimbolikus leheto˝ ségei er˝osen lecsökkennek. Induláskor a dbx a kezdeti parancsokat az aktuális könyvtár .dbxinit állományából, ennek hiányában a HOME könyvtár ilyen nev˝u állományából próbálja beolvasni. Ha a program futása valamilyen hiba miatt megállt, az összes szükséges információt a rendszer a core nev˝u állományban tárolja. Amennyiben az adott könyvtárban van ilyen állomány, vagy a dbx hívásakor megadtuk a CoreFilet, akkor a dbx segítségével elemezhet˝o a program állapota a hiba idején.
˝ 12.7. HIBAKERESÉS ÉS ELLENORZÖTT FUTTATÁS (DBX)
161
A dbx kifejezései A dbx kifejezéseket C vagy Pascal (Modula-2) szabvány szerint kell megadni. A * el˝otag vagy ^ utótag indirekt címzést jelent. Egy tömb részét megadhatjuk, ha az els˝o és utolsó elemét két ponttal (..) választjuk el (pl. a(4..7) ). A tömbök elemeire szögletes vagy kerek zárójelben megadott index szerint hivatkozhatunk. A pointerek és rekordok mez˝oire a ponttal (.) hivatkozunk, így a C nyelv -> operátorát nem szükséges használni (bár lehet). A következ˝o m˝uveletek megengedettek: Algebrai: + , -, *, / (lebeg˝opontos), div (egész), mod, exp Bitmuvelet: ˝ -, |, bitand, xor, ~, <{}<, >{}> Logikai: or, and, not, ||, && Összehasonlítás: < , >, <=, >=, !=, = vagy == Egyéb: sizeof, :: (C++ scope m˝uvelet) A dbx kapcsolói -a ProcessID
A debug programot az éppen futó ProcessID azonosítójú eljáráshoz rendeli. A debug program aktív lesz, mihelyt az eljárás beindul. -c Állomány
Lefuttatja az Állománybeli dbx parancsokat, mielo˝ tt a standard bemenetr˝ol várna parancsot. -d KövetésiMélység
Beállítja a program blokkjainak követési mélységét. Az alapérték 25. -f
’Gyors’ módban indítja el a dbx parancsot. Csak a szükséges szimbólumtáblát olvassa be induláskor, így sokkal gyorsabban indul be a dbx, valamint kevesebb memóriát használ. -I Könyvtár
A keresési útvonalhoz hozzáadja a Könyvtárat. Az alapkeresés az aktuális könyvtár, valamint a végrehajtható állomány könyvtára. A debugon belül a use paranccsal állíthatjuk be a keresési útvonalat. -r
Azonnal elindítja a végrehajtható állományt. Ha sikeresen ér véget, a dbx program is befejezi futását. Ellenkez˝o esetben a dbx program elindul, és közli a hiba okát.
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
162
A -r kapcsoló használatának kivételével a dbx felhasználói utasításra vár, és nem indítja el automatikusan a végrehajtható állományt. A dbx parancsai A dbx elindulás után interaktív módon futtatható. A leggyakrabban használt utasítások a következ˝ok (a parancsok pontos szintaxisáról a help parancs ad felvilágosítást): / ? alias assign call clear cont delete detach dump edit file goto help list move next print prompt quit rerun return run set sh
Keresés a forráskódban el˝ore. Keresés a forráskódban hátrafelé. Helyettesít˝o név definiálása a dbx parancsokra. Változók értékének beállítása. Lefuttatja a program megnevezett eljárását. Az adott forráskódú sorra beállított stop utasítást törli. Folytatja a program futtatását az utolsó leállási ponttól. Nyomkövetéseket és leállási pontokat töröl. Kilép a debuggerb˝ol, és folytatja a program futását. Kiírja az adott eljárásbeli neveket és értékeiket. Az aktuális állományra behívja a szövegszerkeszto˝ t. Az alapbeállítás a vi, de az EDITOR környezetváltozóval beállítható. Az aktuális forráskódot cseréli ki. A program futtatását a jelzett sorra teszi át. Információt ad a dbx parancsok használatáról. Kilistázza az aktuális forráskód sorait. A forráskódú listában a jelzett sorra ugrik. A jelzett sorig futtatja a programot. Kiírja a kifejezés értékét, vagy eljárás esetén lefuttatja azt, és a visszatérési értéket adja meg. Beállítja a dbx promptját. Befejezi a dbx futását. Elindítja a program futását az el˝oz˝o argumentumokkal. Folytatja a program futását, amíg az vissza nem tér a jelzett eljárásba. Elindítja a program futását. A dbx programváltozóinak ad értéket. Lefuttat egy parancsot a shellben.
˝ 12.7. HIBAKERESÉS ÉS ELLENORZÖTT FUTTATÁS (DBX) skip source status step stop trace unalias unset use whatis where whereis which
163
Folytatja a program futását az aktuális leállási ponttól és az esetlegesen megadott számú leállási pontot figyelmen kívül hagyja. A jelzett állományból beolvassa a dbx parancsokat. Megjeleníti az aktív nyomkövetéseket. Egy forráskódú sort futtat le. Leállítja a program futását adott feltételek mellett (forráskód). Nyomkövetési információt ír ki az adott eljárásra, sorra, kifejezésre, változóra a jelzett feltételek mellett. Megszünteti az alias-szal megadott helyettesíto˝ nevet. Törli egy dbx változó értékét. A forráskódú állományok keresési könyvtárát állítja be. A programbeli változók, függvények, eljárások deklarációját mutatja meg. Az aktív eljárásokat és függvényeket listázza ki. A megadott mintának megfelel˝o szimbólumok teljes leírását adja meg. Az adott azonosító teljes leírását adja.
A következ˝okben egy egyszer˝u példán bemutatjuk a dbx szimbolikus debugger programjának használatát. Hozzuk létre a következ˝o test.c állományt: ✎ #include <stdlib.h> #include <stdio.h> main(argc,argv) int argc; char *argv[]; { int a, b, c;
}
a=1; b=2; putchar(65); for(c=0; c<10; c++) { a=a*c+b; b=b*2; printf("a: %d }
b: %d
c: %d", a, b, c);
A fordítást és linkelést a cc paranccsal végezhetjük el, a -g opciót használva (ekkor a fordítás és linkelés során a debug információk is bekerülnek a végrehajtható állományba): $ cc -g test.c
164
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
Ezek után a létrejött a.out állományt indítsuk el a dbx debuggerrel: $ dbx a.out dbx version 3.1 for AIX. Type ’help’ for help. reading symbolic information ... (dbx) list Kilistázzuk a forráskódot. 1 #include <stdlib.h> 2 #include <stdio.h> 3 4 main(argc,argv) 5 6 int argc; 7 char *argv[]; 8 { 9 10 int a, b, c; (dbx) list Kilistázzuk a 11
következ˝o 10 sort.
12 a=1; 13 b=2; 14 putchar(65); 15 for(c=0; c<10; c++) 16 { 17 a=a*c+b; 18 b=b*2; 19 printf("a: %d b: %d c: %d", a, b, c); 20 } (dbx) stop at 13 Beállítunk egy töréspontot a 13. sorban. [1] stop at 13 (dbx) run Elindítjuk a programot. [1] stopped in main at line 13 A program a 13. sorban leáll. 13 b=2; (dbx) step El˝ore lépünk egy utasítást. stopped in main at line 14 14 putchar(65); (dbx) step 3 El˝ore lépünk 3 utasítást. stopped in main at line 18
˝ 12.7. HIBAKERESÉS ÉS ELLENORZÖTT FUTTATÁS (DBX)
165
18 b=b*2; (dbx) print a, b, c Kiíratjuk az a, b és c változók értékét. 2 2 0 (dbx) trace b at 18 Beállítjuk a nyomkövetést a b változóra a 18. sorban. [3] trace b at 18 (dbx) step El˝ore lépünk egy utasítást. stopped in main at line 19 19 printf("a: %d b: %d c: %d", a, b, c); (dbx) step El˝ore lépünk egy utasítást. stopped in main at line 17 17 a=a*c+b; (dbx) step El˝ore lépünk egy utasítást. at line 18: b = 4 A nyomkövetés megtörtént. [3] stopped in main at line 18 18 b=b*2; (dbx) step 3 El˝ore lépünk 3 utasítást. stopped in main at line 19 at line 18: b = 8 [3] stopped in main at line 18 18 b=b*2; (dbx) step 2 El˝ore lépünk 2 utasítást. stopped in main at line 17 17 a=a*c+b; (dbx) print a Kiíratjuk az a változó értékét. 20 (dbx) assign a=1 Megváltoztatjuk az a változó értékét 1-re. (dbx) print a Ellen˝orzésképpen kiíratjuk újra az a értékét. 1 (dbx) step El˝ore lépünk egy utasítást. at line 18: b = 16 [3] stopped in main at line 18 18 b=b*2; (dbx) skip 1 Az [1]-es számú töréspontot átugorva futtatjuk a at at at at
line line line line
18: 18: 18: 18:
b b b b
programot. = = = =
64 128 256 512
166
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
at line 18: b = 1024 execution completed (exit code 10) (dbx) quit Kilépünk a dbxb˝ol.
12.8. Programok újrafordítása: a make parancs A make a sok fileból felépül˝o végrehajtható állomány el˝oállítását segíti el˝o: $ make [ Kapcsolók ] [ -f MakeÁllomány] [ CélÁllomány] A make egy leíróállományt használ, mely tartalmazza,
hogy egy állomány megváltoztatása milyen más állományokat érint, és hogyan kell egymásból el o˝ állítani o˝ ket. Azt, hogy egy állomány megváltozott, abból veszi észre a make, hogy az utolsó módosítási dátuma kés˝obbi, mint azoké az állományoké, amelyek to˝ le függnek. ✎ Nézzük azt a példát, amikor van egy pelda.c programunk, melyet pelda végrehajtható programmá a cc utasítással fordítunk le. A pelda.c file #include-dal behív egy pelda.h állományt is. A make leíró állományában (ez a makefile vagy ˝ bejegyzés szerepel: Makefile alapértelmezésben) ekkor a következo pelda: pelda.c pelda.h cc -o pelda pelda.c
A make parancs hatására a rendszer újrafordítja a pelda.c programot, ha az utolsó fordítás óta megváltoztattuk a pelda.c vagy a pelda.h állományokat, különben nem csinál semmit. Amennyiben egy állomány hiányzik (például a ˝ állítja. Ha a leíró állomány pelda), akkor azt mindennél régebbinek tekinti, így el o neve nem makefile vagy Makefile, akkor a -fÁllomány kapcsolóval vehetjük rá a make parancsot, hogy az Állományból értékelje ki a feladatokat. A make parancssorában az összes kapcsoló feltüntetése után megadhatunk makródefiníciókat is MakróNév=Karakterlánc alakban (l. 168. oldalon). A parancssorban az összes, a kapcsolókat követo˝ szó, mely nem tartalmaz egyenl˝oségjelet CélÁllománynév, azaz azt mondja meg, hogy melyik állományokat óhajtjuk el˝oállítani a leíró file-ból. A CélÁllománynév a ketto˝ spontok el˝otti bejegyzés, azaz példánkban a pelda. A leíró állomány felsorolhat több program el o˝ állításához szükséges információt is, de ha megadjuk a CélÁllomány neveket, akkor csak a felsorolt állományokat gyártja le. A bejegyzések általános alakja a következo˝ : cél [cél] :[:]
[Állomány] [
\
shell parancs
\
] [;Parancs] [Parancs]
12.8. PROGRAMOK ÚJRAFORDÍTÁSA: A MAKE PARANCS
167
A bejegyzés els˝o sora tartalmazza a célállományok jegyzékét. Ezt egy kett˝osponttal zárja, és opcionálisan követheti azon állományok neve, melyekt o˝ l ezek függnek. Megadható shell parancs is fordított aposztrófok között, melynek értéke \ \ adja meg az állományok nevét (pl. ls *.c ). Amennyiben az állományok el˝oállításához szükséges shell parancsokat teszünk ebbe a sorba, azokat pontosvessz o˝ vel kell bevezetni. Minden kett˝osponttal, vagy új sorban tabulátorral kezdo˝ d˝o parancs tartalmazza azokat a shell utasításokat, melyekkel a célállomány felépíthet˝o. Megadhatunk több parancssorozatot is a CélÁllományra vonatkozóan. Ilyenkor több bejegyzést kell írni, melyeknél a CélÁllományt két ketto˝ spont követi. Utána ugyanúgy kell felsorolni az állományok nevét, melyt o˝ l a CélÁllomány függ, valamint a szükséges parancsokat. A # után a sor végéig következ˝o minden karakter megjegyzésnek számít. Megjegyzések bárhol elhelyezhet˝ok a leíró állományban. Az üres sorokat a make figyelmen kívül hagyja, viszont egy listán belül nem szabad üres sort hagyni. A nem # karakterrel vagy tabulátorral kezdo˝ d˝o új sor új bejegyzést vagy makródefiníciót jelent. A parancssorokat egyenként, külön subshellben futtatja le a make, így néhány shell parancs (pl. a cd) hatása nem érvényesül, ha közben új sort kezdtünk. Viszont használható a \ folytatósor jelölésére.
12.8.1. Kiterjesztések A make parancs a szabványos állományok felépítésére nézve rendelkezik bizonyos alapszabályokkal. Ezeket a szabványos állománykiterjesztések alapján alkalmazza. A szabályok definiálják a kiindulási és a kész állomány típusát. így például egy .o állomány esetén feltételezi, hogy létezik egy hozzá tartozó .c állomány, és tudja, hogy azt a cc -c paranccsal kell lefordítani. A csak egy kiterjesztést tartalmazó (azaz .c:) szabály azt írja elo˝ , hogy a programot az összes forráskód alapján kell felépíteni. Szabályokat a leíró állományban is definiálhatjuk. A make parancs minden ponttal (.) kezd o˝ d˝o, és / jelet nem tartalmazó Célt szabálynak tekint. A make parancs futtatása során több szinten is befolyásolhatjuk annak m˝uködését. A parancs (emelked˝o) sorrendben a következ˝o hierarchia szerint dolgozza fel a kapcsolókat és makrókat: 1. a make saját alapszabályai 2. a környezetváltozók (MAKEFLAGS és MFLAGS)
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
168
3. a leíró állomány 4. a parancssor
12.8.2. Makrók A Karakterlánc1 = Karakterlánc2 típusú bejegyzések a leíró állományban makrónak számítanak. A Karakterlánc2-t a sor végéig, illetve az elso˝ # megjelenéséig értelmezi. Lehet folytatósort használni. A definíció után a make a leíró állományban a $(Karakterlánc1) minden el˝ofordulását Karakterlánc2-re cseréli. Az eljárás rekurzívan is alakalmazható, a $($(Karakterlánc1)) vagy ($($(Karakterlánc1))) belülr˝ol kifelé helyettesít˝odik. Legfeljebb 10 szint mélységig használható az eljárás. A makró nevét nem kell zárójelbe tenni, ha az csak egy karakterb o˝ l áll. Mivel a ˝ leg állománynevekben make a $-t használja makróhelyettesítésre, ezért ezt leheto és a leíró állománybeli parancsokban ne használjuk. Öt elo˝ re definiált makró áll a rendelkezésünkre: A forrásállomány neve (kiterjesztés nélkül). $@@ Az aktuális célállomány teljes neve. $< A nem id˝oszer˝u modul forrásállománya. A $*
.c.o:
cc -c $<
bejegyzésben a $< bármely nem id˝oszer˝u .o állomány esetén a hozzá tartozó .c állományra utal. $? A nem id˝oszer˝u állományok listája. A make akkor értékeli ki, amikor a MakeÁllományból megkeresi a konkrét szabályokat. $% Az archív állomány tagjának neve. Csak a lib(Állomány.o) formájú célállomány esetén értékeli ki a make. Ebben az esetben a $@@ magára az archív állományra, a $% pedig az Állomány.o tagra mutat. A D az állománynév útvonalára, az F a név részére utal az összes bels o˝ makróban a $?-t leszámítva. így a $(@@D) a $@@ állomány könyvtárára utal. A $ jelet $$ módon adhatjuk meg a leíró állományban. Ha a célállomány neve zárójelet tartalmaz, a make fordítási könyvtárállományként kezeli azt. A zárójelek közti rész a könyvtárállomány megfelel o˝ tagja. Ez lehet például library(Állomány.o) alakú, de ha pl. definiáltunk egy LIB makrót, akkor $(LIB)(Állomány.o) alakú is lehet. A céllállományokat mindig az archív állomány nevével kell megadni. A $(LIB) + (tag1.o tag2.o) kifejezést a make NEM tudja értelmezni.
12.8. PROGRAMOK ÚJRAFORDÍTÁSA: A MAKE PARANCS
169
Az archív könyvtárakra vonalkozó szabályok .x.a formájúak, ahol a .x azon állomány kiterjesztése, melyet a könyvtárhoz akarunk adni. Így a .c.a szabály azt jelzi, hogy C forráskódú állományból hogyan kell felépíteni a könyvtártagot. Például a ✎ lib: lib(tag1.o) lib(tag2.o) lib(tag3.o) @echo A lib keszen van leíró állománybeli bejegyzéshez tartozó make alapszabály a .c.a: $(CC) -c $(CFLAGS) $< ar rv $@@ $*.o rm -f $*.o (a CC makró az alap C fordítót tartalmazza, a CFLAGS makró pedig a fordítás során használandó kapcsolókat. A CC definiálva van a UNIX rendszerekben, és átírható
más fordítóra is).
12.8.3. A make kapcsolói Debug mód: részletes információt közöl, hogy a make mely állományokat mennyi ideig dolgozta fel. -e A környezetváltozók használatára kényszeríti a make-et, mégha a leíró állományban újra is lenne definiálva. -fMakeÁllomány Beolvassa a MakeÁllományt, mely tartalmazza a célállomány felépítésének módját. Ha csak - (mínusz) jelet adunk meg MakeÁllománynak, akkor azt a standard bemenetr˝ol veszi. Ha nem használjuk a -f kapcsolót, akkor az aktuális könyvtárban sorban végigkeresi a makefile, Makefile, ˝ , így s.makefile és s.Makefile állományokat. A kapcsoló ismételheto egyszerre több leíró állomány is megadható. -i Figyelmen kívül hagyja a parancsok által visszaadott hibakódokat. Normális esetben hiba esetén a make befejezi futását. ˝ le -k Befejezi az aktuális célállomány feldolgozását hiba esetén, de folytatja a t o nem függ˝o egyéb állományok feldolgozását. ˝ ket. -n Kijelzi, hogy mely parancsokat hajtaná végre a make, de nem futtatja le o A @@-cal kezd˝od˝o sorokat kiírja. Amennyiben a leíró állomány tartalmazza a $(MAKE) szimbólumot, meghívja újra a make parancsot. Ezzel a kapcsolóval ellen˝orizhetjük le a leíró állományt. -p A parancsok lefuttatása el˝ott kiírja az összes makródefiníciót, és cél leírást. -q Nulla értékkel tér vissza, ha a célállományt nem kell újrafordítani, nem nullával, ha szükséges. -d
170
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
Nem jeleníti meg a végrehajtandó parancsokat. -t A felsorolt parancsok lefuttatása helyett pusztán átírja az állományok keletkezési idejét. Akkor használjuk, ha a forráskódban csak lényegtelen változtatást hajtottunk végre. A parancs az összes a leíró állományban, illetve a parancssorban megjelen˝o célállomány idejét átírja. -s
✎ Példa : # A prog nevu allomany legyartasa 3 object allomanybol prog: x.o y.o z.o # A prog-ot a cc paranccsal kell cc x.o y.o z.o -o prog # Az x.o-t ket masik allomanybol x.o: x.c defs # Az x.o-t a cc-vel allitjuk elo cc -c x.c # Az y.o-t ket masik allomanybol y.o: y.c defs # Az y.o-t a cc-vel allitjuk elo cc -c y.c # Az z.o-t ket masik allomanybol z.o: z.c defs # Az z.o-t a cc-vel allitjuk elo cc -c z.c
leforditani (x.c es defs) kell legyartani
kell legyartani
kell legyartani
A beépített szabályok felhasználásával egyszer˝usíthetünk ezen a leíró állományon: # A prog nevu allomany legyartasa 3 object allomanybol prog: x.o y.o z.o # A prog-ot a cc paranccsal kell leforditani cc x.o y.o z.o -o prog # Az objecteket a forraskodbol es a defs allomanybol allitjuk elo x.o y.o z.o: defs
A make ismeri a következ˝o kiterjesztéseket: .a (archív állomány), .c (C forrásnyelv), .f (FORTRAN forrásnyelv), .h (C header állomány), .l (Lex állomány), .o (object állomány), .s (assembler forrásnyelv) forráskód, .sh (shell parancsállomány), .y (Yacc állomány). Ismeri az SCCS állományokat is, ezekre az el o˝ z˝o kiterjesztés utáni ~-vel kell hivatkozni. ✎ Példa: a /usr/include-beli állományok felfrissítése az aktuális könyvtárban lev o˝ k
12.8. PROGRAMOK ÚJRAFORDÍTÁSA: A MAKE PARANCS alapján: # Az INCDIR konyvtarnev definialasa # (ha mas konyvtarbol inditjuk a make-t) INCDIR = /usr/include # A konyvtarbeli allomanyok egy csoportjanak definialasa # INCLUDES makronev alatt INCLUDES = \ $(INCDIR)/stdio.h \ $(INCDIR)/pwd.h \ $(INCDIR)/dir.h \ $(INCDIR)/a.out.h \ # Mindegyik felsorolt allomany a hasonnevu aktualis # konyvtarbeli allomanytol fugg. $(INCLUDES): (@F) # Masolja at az ujabb aktualis konyvtarbeli allomanyt # a /usr/include konyvtarba cp $? $@@ # Allitsuk be csak olvashatora a statuszt chmod 0444 $@
171
172
FEJEZET 12. PROGRAMOK FORDÍTÁSA ÉS FUTTATÁSA
13. fejezet A vi editor használata A vi képes több állományt is szerkeszteni, ha egymás után megadjuk az ál- ☞ vi rövid leírása lományok nevét: a 45. oldalon
$ vi Állomány1 Állomány2 ...
A vi szerkeszt˝o a UNIX operációs rendszer ex editorára épül, ezért az ex parancsok használhatók a vi-on belül. Az exnek megfelelo˝ szokásos vi korlátok a következ˝ok: -
2048 karakter soronként 256 karakter globális parancsonként 128 karakter az el˝oz˝oleg beszúrt és törölt szöveg esetén 128 karakter shell parancsonként 128 karakter stringenként 30 karakter az ún. tag név maximális hossza 1 048 560 sor soronként 2048 karakterrel számolva 128 makró 2048 össz karakterszámmal
13.1. Üzemmódok a vi-ban A vi háromféle üzemmódot használ: a parancs, a szövegírás és az ún. utolsó sor üzemmódot. A parancs üzemmódba a belépés után kerülünk be. Ekkor különböz o˝ kurzormozgató, keres˝o, törl˝o, állománykezel˝o (írás/olvasás), stb. parancsokat adhatunk a ˝t vi-nak. Parancs üzemmódban használjuk pl. a Ctrl-L parancsot, ami a képerny o 173
174
FEJEZET 13. A VI EDITOR HASZNÁLATA
írja újra. A vi mindig a parancsmódba tér vissza, amikor az alparancsok és más üzemmódok befejez˝odnek. Egy adott alparancs megszakításához az Esc , vagy a Ctrl-C gombot1 használhatjuk. A szövegírás módban közvetlenül változtathatunk a szövegen. A parancs módból a szövegírás módba a szövegírás parancsok egyikével (a, A, i, I, o, O, c, C, s, S és R parancsok) léphetünk be. Az üzemmódból az Esc gombbal térhetünk vissza a parancs módba, ill. az Ctrl-C gombot is használhatjuk az üzemmód megszakításához. Az ún. utolsó sor üzemmódban a vi a képernyo˝ legalján olvassa be a parancsot. Ilyenek a :, /, ? és !! parancsok. A parancssor lefuttatásához azt Enterrel (vagy Esc -el) kell zárnunk, míg megszakítani a Ctrl-C gombbal tudjuk. A parancsoknál a következ˝oképpen hivatkozhatunk a file soraira: % ^ $ . /Minta/ ?Minta? mBet˝ u ’ Bet˝ u \
Bet˝ u
minden sor els˝o sor utolsó sor az aktuális sor a Mintát tartalmazó sor az aktuális sor alatt a Mintát tartalmazó sor az aktuális sor el˝ott az adott pozíciót megjelöli egy Bet˝u jellel. A Bet˝u bármilyen ASCII kisbet˝u karakter lehet az adott Bet˝u jellel jelölt sorra hivatkozik az adott Bet˝u jellel jelölt karakterre hivatkozik
13.2. A vi editor különböz˝o beállításai Leggyakrabban a vi-t különböz˝o (küls˝o ill. bels˝o) paraméterekkel hívjuk meg. A parancssorban a következ˝o kapcsolókat használhatjuk: LISP üzemmód. A vi ekkor a LISP nyelv˝u programok írására használható kényelmesen, és megváltoztatja a különbözo˝ zárójeleket a LISP parancsok írásának megkönnyítésére.
-l
1
A vezérl˝o (Ctrl) karakterek kiadásához nyomva kell tartanunk a Ctrl (esetleg Cntrl ) gombot, és eközben kell a megadott gombot lenyomni.
13.2. A VI EDITOR KÜLÖNBÖZO˝ BEÁLLÍTÁSAI
175
egy el˝oz˝o szerkesztés véletlen megszakadása után visszanyeri az elo˝ z˝o állapotot. Az esetleges állomány megadása nélkül csak kilistázza a visszakapható file-okat. -R csak olvashatóra nyitja meg az állományt. -tTagnév Ha létezik a (ctag paranccsal létrehozott) ún. tag lista, ami pl. egy programot tartalazó file esetén a függvénynevek és azok pozíciója lehet, akkor a file szerkesztésekor a Tagnévvel jelzett pozícióra (függvényre) ugrik. -wSzám az ablak méretét Szám sornyira állítja. -ySzám a maximális sorok számát a Számra állítja. +ex-parancs a szerkesztés elkezdése el˝ott végrehajtja az ex-parancsot. -r
A vi bels˝o változóit ideiglenesen a :set Változó=Érték
utasítással állíthatjuk be. Az alapértelmezést˝ol való rendszeres eltérés esetén érdemes a változók értékét permanensen átállítani. A vi elindulásakor végrehajtja a .profile file-ban az EXINIT környezeti változóval megadott beállításokat, vagy ha ez nincs megadva, a HOME könyvtárban található .exrc állományban leírt parancsokat. Ezek után a vi végrehajtja az aktuális könyvtárban lév o˝ ./.exrc állományban található parancsokat (feltéve, hogy létezik ilyen állomány). Mivel ez az itt lév˝o parancsokat küls˝o ellen˝orzés (meger˝osítés) nélkül lefuttatja, biztonsági problémának tekinthet˝o, és az újabb rendszerekben ezt a set exrc utasítással külön engedélyezni kell. Az .exrc állományban soronként fel kell sorolni az értékadásokat, pl.: set cp=3.,; set number set noedcompatible.
A leggyakrabban használt, settel beállítható változók a következ o˝ k (a zárójelben a használható rövidítések szerepelnek): A szövegzáró elválaszási jeleket sorolja fel. A vi ezeknél a jeleknél nem darabolja fel a szöveget. Ha egyszerre több ilyen karaktert akarunk megadni, el˝oször a számukat kell megadni (pl. a cp=3.,; a három írásjelet állítja be). Ez az opció nem m˝uködik minden UNIX rendszeren. directory (dir=) Az editálás során használt ideiglenes bufferhez tartozó könyvtárat definiálja. Értéke általában a /tmp. ˝ höz teszi edcompatible (ed) a g, c és r parancsok m˝uködését az ed szerkeszt o hasonlatossá. Általában a noedcompatible beállítást használjuk. closepunct (cp=)
FEJEZET 13. A VI EDITOR HASZNÁLATA
176
a keresés során nem különbözteti meg a kis- és nagybet˝uket. Alapértelmezésben noic. magic beállítja a reguláris kifejezések használatát a keresésnél. Kikapcsolva csak a ^( ) $ jeleknek van speciális jelentése. Alapértelmezése magic. modelines ha a szerkesztend˝o file els˝o vagy utolsó 5 sora ignorecase (ic)
ex:
parancs...
:
parancs...
:
vagy vi:
formátumban szerkeszt˝o parancsokat tartalmaz, lefuttatja azokat. Alapértelmezésben nomodelines az értéke, mivel ez a parancsokat külso˝ ellen˝orzés (meger˝osítés) nélkül lefuttatja, s így biztonsági problémának tekintheto˝ . number (nu) A sorok el˝ott kijelzi azok sorszámát. readonly (ro) bekapcsolja a csak olvasás üzemmódot. scroll (scr=) az ablak felfelé/lefelé mozgatásánál megadja a sorok számát. shell (sh=) a ! parancsnál használt shell típusát tartalmazza. showmatch (sm) kijelzi az egymáshoz tartozó ([{ és }]) zárójeleket. showmode (smd) kijelzi az editor szövegírás (input) módját. term (term=) a használt terminál típusát adja meg. Alapértelmezésben ez a TERM változó értéke. window (wi=) a kijelzéskor használt lapméretet definiálja. wrapmargin (wm=) beállítja az automatikus betördelést, azaz a megadott margó utáni szavak elé automatikusan egy újsor karaktert illeszt. Alapértelmezésben wm=0, ami kikapcsolja ezt a funkciót.
13.3. A vi parancsai A vi parancsmódjában használható utasítások általános formátuma a következ o˝ : [Buffer-Név] [Operátor] [Szám] Cél ahol a Buffer-Név egy adott ideiglenes szövegtároló területet jelöl; az Operátor egy érvényes vi parancs lehet; a Szám egy egész szám, ami akár sorszámot, akár más értéket adhat meg; a Cél pedig egy szövegrész ill. pozíció lehet (pl. egy bekezdés, szó, stb.). Például a "2p
parancs a 2. számú törlési bufferb˝ol az aktuális pozícióhoz beszúrja annak tartalmát (a vi a kitörölt szövegrészeket 1 és 9 között számozott tárolókba helyezi, a legutolsó törölt rész az 1., az az el˝otti a 2., stb. tárolóban található).
13.3. A VI PARANCSAI
177
A parancsok elé sokszor egy számot tehetünk, amit a vi ismétlésként vagy paraméterként értelmezhet. Például a 10Ctrl-U
parancs 10 sorral feljebb lép, míg a 4dw
parancs 4 szót töröl. A 137G
parancs a 137. sorra ugrik, míg a 25|
parancs a 25. oszlopra lép.
13.3.1. Mozgás az állományban A vi-ban a kurzor egyszer˝u mozgatásához parancsmódban a h-j-k-l gombokat használhatjuk. Néha a billenty˝uzeten található nyilak is m˝uködhetnek, érdemes ezért azokat kipróbálni. A soron belüli mozgásnál a 0 (nulla) parancs a sor elejére, a $ a sor végére ugrik. Az fBet˝ u parancs a következ˝o Bet˝ u karakterre, az FBet˝ u a legutolsó Bet˝ u karakterre ugrik. A tBet˝ u és TBet˝ u hasonlóan a Bet˝ u karakter elé ugrik. A ; parancs a legutolsó f, F, t és T parancsok egyikét ismétli meg, a , parancs pedig fordított irányba mozogva ismétel. Az oszlop parancs a |, amely a megadott oszlopra mozogatja a kurzort. A vi lehet˝oséget ad a szavankénti mozgásra is. A w elo˝ re, a b visszafelé ugrik egy szót. Az e parancs a következ˝o szó végére viszi a kurzort. A W, B és E parancsok hasonlóan m˝uködnek, de nem veszik figyelembe az elválasztó karaktereket. A sorok közötti mozgásra a következ˝o parancsokat használhatjuk: a H parancs a képerny˝o tetejére, az M a közepére, az L pedig az aljára ugrik. A +(és a -) parancs a következ˝o (el˝oz˝o) sor els˝o nem-szóköz karakterére lép. Egy adott sorra a sorszámG paranccsal ugorhatunk (természetesen ilyenkor is használhatjuk pl. a ’Bet˝uG parancsot, ami a Bet˝ uvel jelölt sorra ugrik). Hasznos még a ’’ parancs, amely felcseréli az aktuális és az el˝oz˝oleg megjelölt kurzorpozíciót. Ha gyorsabban akarunk mozogni, akkor a használhatjuk a képerny o˝ nyivel mozgató parancsokat is: a Ctrl-F egy teljes képernyo˝ vel el˝ore, míg a Ctrl-B egy képerny˝ovel visszafelé lapoz. A Ctrl-U és a Ctrl-D el˝ore/hátra mozog fél képerny˝onyit. A Ctrl-E felfelé, a Ctrl-Y lefelé tolja el a képernyo˝ t egy sorral. A lapozás után esetleg szükség lehet a képernyo˝ újraírására, amit a Ctrl-L parancs végez el. A z Enter parancs szintén újraírja a képernyo˝ t, de az aktuális sor ekkor a képerny˝o tetején, z- parancsnál az alján, a z. parancsnál pedig a
178
FEJEZET 13. A VI EDITOR HASZNÁLATA
✎ képerny˝o közepén lesz. Például a /Haho/z.
parancs megkeresi a Haho stringet a file-ban, és a képernyo˝ közepére helyezve kijelzi a sort.
13.3.2. String keresés Az adott kurzorpozíció után a /Minta parancs keresi meg a Minta elo˝ fordulását. Visszafelé a ?Minta paranccsal kereshetünk. Az n utasítás megismétli az utolsó keres˝o parancsot az azzal megegyez˝o, míg a N parancs a paraccsal ellentétes irányban. Ha éppen egy zárójel-karakteren helyezkedik el a kurzor, a % jel megkeresi a hozzá tartozó záró vagy nyitó zárójel-karaktert. A keresés során reguláris stringeket is használhatunk (de csak ha a magic változó be van állítva (alapértelmezés)).
13.3.3. A szövegírás üzemmód A parancs üzemmódból a szövegírás módba a következo˝ utasításokkal léphetünk át (vissza az Esc gombbal léphetünk): a A i I o O
Az aktuális kurzorpozíció után kezdi el beilleszteni a begépelt szöveget. Az aktuális sor végére ugrik, és átkapcsol szöveg beszúrásra. Az aktuális pozíció elé illeszti be a szöveget. Az aktuális sor elejére ugrik, majd a begépelt szöveget oda írja be. (kis o bet˝u) Az aktuális sor után új sort nyit, annak elejére lép, és ott kezdi el a szöveg beillesztését. (nagy O bet˝u) Az aktuális sor el˝ott nyit egy új sort, és ott kezdi el beszúrni a szöveget. A szövegírás üzemmódban a következo˝ speciális parancsokat használhatjuk:
Kitörli az utolsó karaktert. Ezt általában a Backspace vagy Delete gombokkal is megtehetjük. Ctrl-U Kitörli az utolsó beadott sort. Ctrl-W Kitörli az utolsó szót. Ctrl-V Az utána begépelt speciális karaktert beilleszti a szövegbe. Ctrl-H
13.3. A VI PARANCSAI
179
13.3.4. Szövegváltoztatás a parancs módban A parancs üzemmódban a következ˝o utasításokat is használhatjuk a file megváltoztatására (ezek egy részéb˝ol az Esc billenty˝uvel léphetünk ki, tekintve, hogy átkapcsolnak szövegírás módba): rBet˝ u R C cc cw
Az éppen aktuális karaktert a Bet˝uvel helyettesíti. Átkapcsol felülírás üzemmódba. Megváltoztatja a sor többi részét. Megváltoztatja az egész sort. Megváltoztatja a következ˝o szót.
Kitörli a kurzor helyén lév˝o karaktert. X vagy dh Kitörli a kurzor el˝otti karaktert. D Kitörli az aktuális pozíciótól a sor végéig es˝o részt. dd Kitörli az egész sort. x
dw d’Bet˝ u u << >> L >’Bet˝ u <’Bet˝ u J
˜
Kitörli a következ˝o szót. Az aktuális pozíciótól kitörli a Bet˝ uvel jelzett részig a szöveget. Visszaváltoztatja az el˝oz˝o változtatást. Egy tabulátor pozícióval balra tolja a sort. Egy tabulátor pozícióval jobbra tolja a sort. Egy tabulátor pozícióval balra tolja az összes sort az aktuális sortól kezdve a képerny˝o végéig. Egy tabulátor pozícióval jobbra tolja az összes sort az aktuális sortól kezdve a képerny˝o végéig. Az aktuális pozíciótól a Bet˝ uvel jelzett pontig jobbra tolja egy tabulátorral az összes sort. Az aktuális pozíciótól a Bet˝ uvel jelzett pontig balra tolja egy tabulátorral az összes sort. Összef˝uzi az aktuális sort a következ˝ovel. Megcseréli az aktuális bet˝ut a kis/nagybet˝us párjára.
A parancsok kiadásánál használhatunk szám paramétereket is, azaz pl. a 16x parancs kitörli a következ˝o 16 bet˝ut, a 3dd pedig 3 sort töröl.
180
FEJEZET 13. A VI EDITOR HASZNÁLATA
13.3.5. Másolás és mozgatás A vi editorban másolásra ill. mozgatásra buffereket (tárolókat) használunk. A vi automatikusan 1-t˝ol 9-ig számozva tárolja az utolsó 9 törölt értéket. Melletük a 26 ASCII kisbet˝uvel lehet felhasználói buffereket definiálni. A tárolókra a "Szám vagy "Bet˝u paranccsal hivatkozhatunk. Nagyobb szövegrészek másolására és mozgatására az állományon belül a következ˝o parancsokat használhatjuk (az esetleges elhibázott, befejezetlen parancsot az Esc gombbal lehet megszakítani): p P "Bufferp "BufferP y Szóköz yw yy Y "Bet˝ uyy y’Bet˝ u
A legutolsó törlési paranccsal kitörölt szöveget illeszti a kurzor után (azaz a "1 értékét szúrja be). A legutolsó törlési paranccsal kitörölt szöveget illeszti a kurzor elé. A Buffer tartalmát illeszti a kurzor után (azaz pl. p megegyezik a "1p paranccsal). A Buffer tartalmát illeszti a kurzor elé. Az aktuális karaktert bemásolja a törlési tárolóba ("1 tároló). A következ˝o szót bemásolja a törlési tárolóba. Az aktuális sort bemásolja a törlési tárolóba (pl. 12yy a következo˝ 12 sort másolja be, :12,40y a 12. és a 40. sor közötti szakaszt, stb.). Az aktuális sort másolja be a törlési tárolóba. Az aktuális sort a Bet˝u tárolóba teszi. ˝ részt a törlési Az aktuális pozíciótól kezdve bemásolja a Bet˝ u jelig terjed o tárolóba.
13.3.6. Visszaállítás és parancs-ismétlés A vi editor meg˝orzi az utolsó 9 törlés eredményét, ezért - ugyan csak korlátozott mértékben - de lehet˝oség van az esetleges hibás utasítások el˝otti állapot visszaállítására. Erre a következ˝o parancsok szolgálnak: Visszaállítja az utolsó változtatás el˝otti helyzetet. Visszaállítja az aktuális sort, ha nem léptünk közben más sorra a kurzorral. "Számp A Szám törlési buffer értékét szúrja be. (A Szám 1 és 9 között lehet). . Megismétli a legutolsó változtatást. Ha az a "Számp volt, eggyel megnöveli a Számot. u
U
13.4. ÁLLOMÁNYKEZELÉS
181
13.3.7. Szövegrész helyettesítés Egy adott szövegrész helyettesítését a : (utolsó sor) parancsmódból végezhetjük el. Például a régi-string soronkénti els˝o el˝ofordulását a következ˝o parancs helyettesíti át az egész állományban új-string-re: ✎ :1,$s/régi-string/új-string/ A : után meg kell adni a helyettesítési tartományt (azaz pl. itt az elso˝ sortól az utolsóig, amit a $ jelöl), majd az s parancs (substitute) után a két stringet. A régi-string reguláris kifejezés is lehet. Az új-string esetén az & jel a keresett kifejezést (itt a régi-stringet) jelöli, míg a % az el˝oz˝o helyettesít˝o stringre
hivatkozik. A parancs csak a soronkénti els˝o el˝ofordulást helyettesíti. Ha az összes el˝ofordulást ki szeretnénk cserélni, használhatjuk a ✎
:1,$s/régi-string/új-string/g (g mint global) parancsot. Lehet˝oség van a helyettesítés interaktív meger˝osítésére is, amit a g-hez hasonló c (confirm) kapcsolóval állíthatunk be.
Ha valamilyen okból nem szeretnénk a kereséskor különbséget tenni a kis- és nagybet˝u között, akkor érdemes beállítani az ignorecase változót ( :set ignorecase parancs).
13.4. Állománykezelés Egy adott állomány szerkesztése után azt a lemezre a :w
paranccsal írhatjuk ki. Új állományként való kiíráskor használjuk a :w FileNév
parancsot. Egy újabb file-t a :e FileNév
utasítással olvashatunk be. Mivel ilyenkor az elo˝ z˝o változtatások elvesznek, ha azokat nem mentettük el, az utasítás hibaüzenettel tér vissza. Ha nem szándékozunk elmenteni a változtatásokat, akkor a :e!
FileNév
utasítást kell használnuk. Speciálisan a :e!
utasítás újra beolvassa az éppen szerkesztett file-t a lemezro˝ l. A parancs után a szerkeszteni kívánt sor számát is megadhatjuk, pl. az
182
FEJEZET 13. A VI EDITOR HASZNÁLATA
:e +14 vi.doc a vi.doc file 14 sorára ugrik beolvasás után. A vi lehet˝oséget ad induláskor a shell parancssorban
több file megadására is. Amennyiben a sorban kövekez˝o file-ra szeretnénk lépni, akkor erre használhatjuk a :n
parancsot (ill. a :n! parancsot, ha nem akarjuk elmenteni a változtatásokat). Az :n parancs után egy esetleges új file-listát is megadhatunk. Egy másik file tartalmát az éppen aktuális bufferba (file-ba) a :r FileNév
paranccsal szúrhatjuk be az aktuális sor után. Az éppen használt file-t ill. a bufferhez tartozó információkat a Ctrl-G parancs használatával kérhetjük le. A vi editorból a ZZ
paranccsal léphetünk ki: ekkor elment˝odik az éppen szerkesztett file. Ha mentés nélkül szeretnénk kilépni, akkor erre a :q
parancs szolgál, amennyiben nem változtattuk meg a buffert. Változtatás esetén a :q!
parancs eldobja a változtatásokat és kilép a vi-ból. A UNIX rendszerben az állományoknak nincsenek — a VMS rendszerben használthoz hasonló — verziószámai, és nincs undelete típusú parancs sem. Ezért a szerkesztett állományok kiírása végleg letörli az elo˝ z˝o változatot!
13.5. A shell elérése a vi-ból A vi editorban lehet˝oség van a UNIX operációs rendszer shelljének többféle elérésére. A legegyszer˝ubben a :sh
paranccsal léphetünk ki a shellbe, ahonnan a Ctrl-D vagy exit utasítással viszszakerülünk az editorba. Érdemes a shellbe való kilépés elo˝ tt mindenképpen elmenteni a file-t. Egy Shell-parancsot a :!Shell-parancs
utasítás hajt végre, (pl. a :!ls
13.6. MAKRÓK ÉS PARANCSOK DEFINIÁLÁSA
183
kilistázza az aktuális könyvtár tartalmát). A legutolsó ilyen parancsot a :!!
utasítással ismételhetjük meg. Egy UNIX Shell-parancs végeredményét (a standard outputot) a :Számr!Shell-parancs utasítás írja be a Szám sortól
kezd˝od˝oen a file-ba. A Szám megadása nélkül az
aktuális sorra hivatkozunk.
13.6. Makrók és parancsok definiálása Gyakran szükség van bizonyos bonyolultabb parancsok többszöri végrahajtására. A UNIX operációs rendszer vi editora lehet˝oséget ad vi parancsok tárolására és végrehajtására. A legegyszer˝ubb ilyen módszer a makró létrehozása. Ekkor a vi parancsokat egy Bet˝ uvel jelzett bufferbe kell betölteni (pl. soronként), majd a parancsokat a @@Bet˝ u paranccsal végrehajthatjuk. Lehet˝oség van a legutolsó ilyen parancs megismétlésére is, amire a @@@szolgál. A Bet˝ u kis- és nagybet˝u egyaránt lehet, az a-z bufferek betöltik, míg az A-Z bufferek pedig hozzáf˝uzik a szöveget a bufferhez, így lehet˝oség van a makrók lépésenkénti fejlesztésére is. Például az ✎ o :1,$s/haho/haliho/g Esc "Add parancs-sorozat után a @@A parancs végrehajtja a helyettesítést. A munkaterületre írt parancsot az A bufferben helyeztük el. A példát parancs üzemmódból indulva,
karakterenként gépeljük be! A vi rendelkezik a makróknál hatékonyabb parancsismétlési eszközzel is, mégpedig az új parancsok (billenty˝u leütések) definiálásával. A :map Bet˝ u vi-Parancsok utasítás a Bet˝ u billenty˝u lenyomása
esetén (parancs üzemmódban) végrehajtja a felsorolt vi-Parancsokat. Amennyiben szöveg beszúrásakor is szeretnénk használni ez a definíciót, ezt a :map!
Bet˝ u vi-Parancsok
utasítással tehetjük meg. A map parancs paraméter nélkül kiírja az éppen használt definíciós listát. A map parancs hatását az unmap parancs szünteti meg. Például a :map q :q!
Ctrl-V Enter
Enter
parancs megváltoztatja az q gomb hatását, az q lenyomása után kilépünk a viból. Egy adott makrót vagy billenty˝u-definíciót a .exrc file-ban definiálva tehetünk permanenssé.
184
FEJEZET 13. A VI EDITOR HASZNÁLATA
Egy adott definíció esetén, ha az éppen használt karakterre akarunk hivatkozni, használjuk a Ctrl-V gombot a karakter el˝ott. Szintén ezt a karaktert kell használni, ha a terminál funkciógombjait szeretnénk definiálni. A map parancs mellett a :ab (abbreviation) parancsot is használhatjuk gyakran ✎ használt rövidítések esetén. Az :ab t type
parancs után szövegbeszúrás üzemmódban az összes Szóköz-t-Szóköz kifejezésb˝ol Szóköz-type-Szóköz kifejezés lesz. Nem helyettesít˝odik viszont a t sem egy szón belül, sem parancsmódban. Az :ab parancs paraméter nélkül kiírja az éppen használt rövidítéseket, a :unab pedig egy el˝oz˝o :ab hatását szünteti meg.
14. fejezet A MicroEMACS szövegszerkeszt˝o leírása Az uemacs szövegszerkeszt˝o egyszerre több állományt is tud kezelni és meg- ☞ jeleníteni a képerny˝on (ezt csak a rendelkezésre álló memória, ill. a képernyo˝ emacs rövid leírása a 46. oldalon mérete korlátozza). A MicroEMACS szerkeszt˝ot több állomány esetén a $ uemacs ÁllományNév1 ÁllományNév2 ...
parancs kiadásával hívjuk meg. Néhány gépen a uemacs parancs helyett az emacs parancsot kell használnunk. Lehet˝oség van el˝ore meghatározható parancssorozatok beállítására (ún. makrók). A kényelmesebb m˝uködtetés érdekében az egyes gépeken a felhasználó bejelentkezési könyvtárában a .emacsrc állomány tartalmaz egy makró-sorozatot, amelyet a szerkeszt˝obe való belépés el˝ott a MicroEMACS automatikusan végrehajt. A MicroEMACS magyar nyelv˝u tanító-állománnyal is rendelkezik (J. Tóth Gábor fordítása), ami „megtanítja” a szövegszerkeszto˝ alapszint˝u használatát. A program a $ tanits_emacs
utasítással hívható be az erre beállított gépeken.
14.1. A legfontosabb MicroEMACS parancsok A parancsok kiadásához általában a Control (vagy Ctrl ) és az Esc (vagy Escape ) billenty˝uket egy másik billenty˝uvel kombinációban használjuk. A parancsok jelölésére a következ˝o MicroEMACS jelöléseket használjuk: 185
FEJEZET 14. A MICROEMACS SZÖVEGSZERKESZTO˝ LEÍRÁSA
186
a Ctrl billenty˝ut lenyomva tartva a Billenty˝ u -t kell lenyomni. Azaz ^V jelentése: a Ctrl billenty˝ut lenyomva tartva a V billenty˝ut kell lenyomni. M-Billenty˝ u nyomjuk meg majd engedjük el az Escape (vagy Esc ) gombot, majd a Billenty˝ u -t (az Escape a MicroEMACS ún. metakaraktere). A kis- és nagybet˝uk között a program nem tesz különbséget. Néhány parancsnál (pl. M-^W) a Billenty˝ u lenyomása el˝ott a Ctrl billenty˝ut is le kell nyomni.
^Billenty˝ u
Bizonyos termináloknál nincs külön Esc gomb, ekkor vagy a ^[ kombinációt használhatjuk helyette, vagy átdefiniálhatjuk a meta karaktert a MicroEMACS-ban egy másik gombra. A MicroEMACS parancsait megszakítani a ^G utasítással lehet, amikor a program paramétereket (adatot) kérdez be. Ha nem tudjuk, hogy mi történik (vagy mit kérdez éppen a program), ezt a parancsot kell kiadnunk! Ne feledjük, hogy a programból változtatás nélkül a ^X ^C paranccsal léphetünk ki!
14.2. Mozgás az állományban A szerkeszt˝obe való belépés után megírhatjuk a kívánt szöveget, miközben a kurzor mozgatására a billenty˝uzeten található nyilakat használhatjuk. Ha a billenty˝uzet nyilai valamilyen ok miatt nem m˝uködnek rendesen, akkor a következ o˝ parancsokat is használhatjuk a képernyo˝ n való mozgásra: ^F egy bet˝u el˝ore ^N következ˝o sor ^B egy bet˝u vissza ^P el˝oz˝o sor A szövegben való gyorsabb (kényelmesebb) mozgást a következ o˝ parancsok teszik lehet˝ové: M-< a szöveg elejére ugrik ^A sor elejére ugrik M-> a szöveg végére ugrik ^E a sor végére ugrik ^V ^Z M-B M-N
egy képerny˝ovel el˝ore egy képerny˝ovel vissza
M-F M-B
a következ˝o szóra ugrik az el˝oz˝o szóra ugrik
a bekezdésre elejére ugrik a bekezdés végére ugrik
M-G
egy adott sorra ugrik
14.3. KERESÉS ÉS HELYETTESÍTÉS
187
14.2.1. Törlés és beszúrás A szöveg begépelésekor a kurzor el˝ott álló bet˝ut a Backspace gombbal lehet törölni (ezt a gombot néha Delete vagy ← felirat jelzi). Ha esetleg egyik gombot sem tudjuk megtalálni a billenty˝uzeten, akkor a ^H parancs szintén törli az el˝oz˝o bet˝ut. Ha a szövegben nagyobb részeket szeretnénk törölni, akkor hasznosak lehetnek a következ˝o utasítások: M-Backspace az el˝oz˝o szót törli M-D a következ˝o szót törli ^K Az adott kurzorpozíciótól a sor végéig töröl, második lenyomásra pedig kitörli
a sorvége karaktert. Kitörli az aktuális kurzorpozíció és az ún. „jel” közötti tartományt. A „jel”-et az aktuális kurzorpozícióban az M-Space (Szóköz) utasítással rögzíthetjük. M-W „Eltárolja” az aktuális kurzorpozíció és az ún. „jel” közötti tartományt. M-^W Az aktuális bekezdést törli ki. ^X ^O Kitörli az aktuális kurzorpozíció körüli üres sorokat. ^W
Ha az el˝oz˝o utasításokkal esetleg olyan részt töröltünk ki, amelyet nem kellett volna, NE ESSÜNK PÁNIKBA! A MicroEMACS a legutolsó törölt egységet egy tárolóba teszi, és onnan a ^Y utasítással bemásolhatjuk az aktuális kurzorpozícióba. Ezzel lehetséges szövegrészek mozgatása és – a ^Y többszöri lenyomásával – másolása is, amely a következ˝oképpen végezhet˝o: - bejelöljük az aktuális pozíciót az ún. „jel”-lel, az M-Szóköz utasítással; - a tartomány másik végére mozgunk, és kitöröljük (^W) vagy egyszer˝uen csak bemásoljuk (M-W) a tartományt a törlés tárolójába; - az új helyre vissszük a kurzort, és ott a ^Y paranccsal – akár többször is – el˝ohívhatjuk a törlési tárolóból az adatokat.
14.3. Keresés és helyettesítés A MicroEMACS képes egy szövegrész (string) megkeresésére, és esetleges helyettesítésére. Egy stringet az adott pozíció után a ^S utasítás1 segítségével találhatunk meg. A parancs kiadása után kéri a keresend˝o szöveget, amelyet a meta karakterrel 1
Bizonyos esetekben a ^S kombináció leállítja a képernyo˝ re való írást. Ekkor a ^Q paranccsal újra engedélyezni kell a képernyo˝ re való írást, és a ^S helyett a ^\-t kell használnunk
188
FEJEZET 14. A MICROEMACS SZÖVEGSZERKESZTO˝ LEÍRÁSA
( Esc gomb) kell lezárni. Ezután a kurzor a megtalált szövegrészre áll. Ha ezekután újra ugyanazt a stringet szeretnénk keresni, a ^S utasítás után már csak a meta karaktert ( Esc gomb) kell leütni. A ^R utasítás az adott kurzorpozíció el˝otti keresést teszi lehet˝ové, használata megegyezik a ^S paranccsal. Ha nemcsak keresni, de helyettesíteni is akarunk egy szövegrészt, akkor az M-R és az M-^R parancsokat kell használnunk. Az M-R parancs kiadása után után kéri a RégiSzöveget, majd az ÚjSzöveget. A szövegeket a meta karakterrel kell lezárni. Ezután az adott pozíciótól kezdve a RégiSzöveg minden el o˝ fordulását a ÚjSzövegre cseréli ki. Ha nem vagyunk biztosak, hogy mindenhol el kell-e végezni a cserét, akkor az interaktív M-^R parancsot kell használnunk. Ez hasonlóan m˝uködik az M-R parancshoz, de a RégiSzöveg minden el˝ofordulásánál megkérdezi, kicserélje-e, vagy sem. A válaszok a következ˝ok lehetnek: megszakítás megszakad, és visszaugrik a kezd˝oponthoz helyettesítés nem helyettesít az adott helyen, de folytatja a keresést feltétel nélkül helyettesíti az összes maradék elo˝ fordulást segítség
^G . Y N ! ?
A keresés során a szövegek egyezésénél a MicroEMACS alapértelmezésben nem különbözteti meg a kisbet˝uket és a nagybet˝uket. Ha erre mégis szükségünk lenne, akkor az EXACT üzemmóddal (amit a ^X-M exact parancs állít be, l. 190. oldal) ezt megtehetjük.
14.3.1. Állománykezelés Egy állományt a ^X ^F utasítás segítségével olvashatunk be. Az utasítás megkérdezi a keresett állomány nevét, amelyet a Return (vagy Enter ) gombbal kell lezárni. Ha ez az állomány nem létezik, a MicroEMACS létrehozza azt. A szerkesztett állományainkat a számítógép memóriájából ki kell írnunk a diszkre, ha nem akarjuk, hogy a változtatások elvesszenek a MicroEMACS-ból való kilépéssel. Ezt a ^X ^S paranccsal1 végezhetjük el munka közben. Ha a szerkesztést is be akarjuk fejezni, és ki akarunk lépni a programból a szöveg elmentésével, akkor az M-Z parancsot érdemes használnunk. Ha bármilyen okból
14.3. KERESÉS ÉS HELYETTESÍTÉS
189
NEM akarjuk meg˝orizni a változtatásokat, akkor a ^X ^C a módosítások elmentése nélkül kilép a programból (de el˝otte megkérdezi, hogy valóban el akarjuk-e dobni a változtatásokat). A program ismeri még a következ˝o állománykezel˝o utasításokat is: ^X ^R ^X ^I ^X ^V ^X ^W ^X N
egy új állományt olvas be az éppen aktuális bufferbe. A buffer el o˝ z˝o tartalmát törli (de figyelmeztet, ha már változtattunk valamit rajta). az adott kurzorpozícióhoz beszúr egy másik állományt. beolvas egy állományt VIEW üzemmódban (azaz nem tudunk rajta változtatni). kiírja a buffert egy másik állományba, aminek megkérdezi a nevét. az éppen aktuális bufferhez tartozó állomány nevét változtatja meg.
14.3.2. Buffer és ablak kezelés A MicroEMACS program nagy el˝onye, hogy egyszerre több állományt is képes használni, s˝ot a képerny˝on több állományt is szerkeszthetünk egyszerre. A program minden állományhoz egy tárolót (ún. buffert) rendel. A buffereket különkülön kezelhetjük. A buffereket a MicroEMACS a képerny˝on ablakokban jeleníti meg. Minden buffer alján egy állapotsor jelenik meg, amelyik tartalmazza a program nevét (pl. MicroEMACS 3.10), zárójelek között az éppen használt üzemmódokat, a buffer és a bufferhez tartozó állomány nevét. A sor legelején egy * jelzi, ha már végeztünk változtatásokat a bufferen, de még nem mentettük el az állományba. A következ˝o utasításokkal kezelhetjük az ablakokat a programban: ^X 2 ^X 1 ^X 0 ^X O ^X P M-^V M-^Z ^X Z ^X ^Z ^X ^N
félbevágja az éppen aktuális ablakot az éppen aktuális ablak kivételével minden más ablakot töröl a képerny o˝ r˝ol törli a képerny˝or˝ol az aktuális ablakot a következ˝o ablakra ugrik az el˝oz˝o ablakra ugrik egyet lapoz következ˝o ablakban el˝ore egyet lapoz következ˝o ablakban visszafelé egy sorral megnagyítja az ablak méretét egy sorral csökkenti az ablak méretét egy sorral eltolja az ablakot lefelé
190
FEJEZET 14. A MICROEMACS SZÖVEGSZERKESZTO˝ LEÍRÁSA
egy sorral eltolja az ablakot felfelé M-Szám ^X W az ablak mérete szám sor lesz ^L újra írja a képerny˝ot ^X ^P
A bufferek kezelésére a következ˝o parancsok szolgálnak: ^X X ^X B M-^N ^X K ^X ^B
a következ˝o bufferre ugrik egy másik bufferre ugrik megváltoztatja az aktuális buffer nevét kitöröl egy buffert (ez a buffer nem lehet kijelezve a képernyo˝ n) kijelzi az éppen használt bufferek listáját
14.4. Speciális utasítások A MicroEMACS-ban különleges szerepe van az aktuális kurzorpozíció és az ún. „jel” közötti tartománynak (pl. ezt a tartományt ki tudjuk törölni a ^W utasítással). A „jel”-et egy adott kurzorpozícióba az M-Space (Szóköz) utasítással rögzíthetjük. Az állományt a ^X < utasítással lesz˝ukíthetjük az adott tartományra (azaz akkor csak ezt a darabot látjuk és érhetjük el). A lesz˝ukített tartományból a ^X > utasítás állítja vissza a teljes állományt. Használhatjuk a „jel”-et egy adott pozíció megjelölésére is, mivel a ^X ^X utasítás felcseréli a kurzorpozíciót és a „jel” helyét. A MicroEMACS lehet˝oséget ad kisbet˝u-nagybet˝u cserére a következo˝ utasítások segítségével: M-U M-C M-L ^X ^U ^X ^L
nagybet˝ussé változtatja a szót nagy kezd˝obet˝ussé változtatja a szót kisbet˝ussé változtatja a szót nagybet˝ussé változtatja a kurzorpozíció és a „jel” közötti tartományt kisbet˝ussé változtatja a kurzorpozíció és a „jel” közötti tartományt
A MicroEMACS különböz˝o üzemmódokban m˝uködhet. Az üzemmód beállítását a ^X M, törlését a ^X ^M parancs végzi egy adott buffer esetében. Ha ezt az összes bufferre akarjuk kiadni, akkor az M-M (beállítás) ill. M-^M (törlés) parancsot kell használni2 . A jelenleg használt üzemmódok a következo˝ k: 2
Vigyázzunk, mert ez csak a parancs kiadása UTÁN beolvasott bufferekre hatásos!
14.4. SPECIÁLIS UTASÍTÁSOK OVER WRAP VIEW MAGIC EXACT CMODE
191
bekapcsolja a felülírást a beszúrás helyett a sor vége után (amit az M-szám ^X-F paranccsal lehet szám szélesre beállítani) automatikusan új sorba ugrik csak olvasás üzemmódot állít be (azaz nem tudunk változtatni a bufferen) speciális, a reguláris kifejezéseket használó keresési módot állít be a keresésnél és helyettesítésnél megkülönbözteti a kis- és nagybet˝uket a C programnyelvek írásakor használatos üzemmódot állít be (pl. ellen o˝ rzi a különböz˝o zárójelek egyezését, stb.)
Az M-Q utasítás segítségével betördelhetjük a bekezdést az M-Szám ^X-F paranccsal beállított Szám bet˝unyi szélességbe. A MicroEMACS lehet˝oséget nyújt az operációs rendszer elérésére. A ^X ! utasítással egy UNIX parancsot tudunk elindítani az operációs rendszerben, míg a ^X C egy új UNIX shellt indít el, ahonnan a szokásos exit utasítással léphetünk ki. A MicroEMACS az el˝oz˝o részekben felsorolt parancsokat bizonyos billenty˝uleütésekre hajtotta végre. A parancsok hozzárendelése a billenty˝ukhöz megváltoztatható, a felhasználó tetszés szerint definiálhatja újra az egész billenty˝uzetet. A program emellett lehet˝oséget ad újabb parancsok (makrók) létrehozására több MicroEMACS utasítás összef˝uzésével. Ezeket a makrókat elhelyezhetjük külön parancs file-ban és név szerint hívhatjuk meg, vagy közvetlenül egy billenty˝uhöz is rendelhetjük o˝ ket. A leggyakoribb makrókezel˝o utasítások a következ˝ok: ^X ? M-A ^X ( ^X ) ^X E M-^X
leír egy adott gombhoz tartozó makrót kilistázza a makrókat egy kulcs szerint elkezdi rögzíteni a billenty˝uzeten beadott utasításokat befejezi a billenty˝uzeten beadott utasítások rögzítését lefuttatja (az el˝oz˝o két paranccsal rögzített) billenty˝u-makrót végrehajt egy MicroEMACS utasítás sort (makrót).
A MicroEMACS az itt említetteken kívül még sok más leheto˝ séggel rendelkezik (pl. makró program írása, feltételes elágazások használata, lépésenkénti makró végrehajtás (debug) stb.), amit egyrészt az online helpben (M-? parancs), másrészt általában a /usr/local/doc/emacs/emacs.txt állományban találhatnak meg az érdekl˝od˝ok.
192
FEJEZET 14. A MICROEMACS SZÖVEGSZERKESZTO˝ LEÍRÁSA
15. fejezet A mail program muködése ˝ 15.1. A mail felépítése A mail parancs kétfajta levelesládát kezel, a rendszer és a felhasználó saját levél- ☞ mail leírása állományát. Minden, a UNIX operációs rendszeren létezo˝ felhasználó számára rövid a 65. oldalon létezik egy rendszer-levélszekrény, általában a /usr/spool/mail/FelhasználóiAzonosító
állományként. A rendszer ebben tárolja azokat a leveleket, amelyeket a felhasználó kapott, de még nem olvasott, törölt vagy mentett el saját állományába. Alapértelmezésben, ha a felhasználó olvasta, törölte vagy elmentette az összes rendszermailbox üzenetet, a levélszekrény kitörlo˝ dik. Ha valamilyen okból mégis meg szeretnénk tartani ezt az állományt, akkor a rendszergazda ezt beállíthatja a chmod 755 RendszerLevélszekrényKönyvtár
paranccsal. A rendszer levélszekrénye mellett minden felhasználónak személyi levelesládája van. Alapértelmezésben ez a $HOME/mbox állomány (ami pl. lancelot felhasználó esetén /u/lancelot/mbox), de ez az MBOX shell változóval átállítható. A mail program az új levelek elolvasásakor azokat a rendszer levelesládájából ebbe az állományba mozgatja át (hacsak másként nem rendelkezünk). A levelez˝o program képes ún. folder („rendez˝o”) állományok használatára. Ezeket a levelek csoportosítására használhatjuk, a mail program segítségével a leveleket az egyes folderek között mozgathatjuk, stb.. A foldereket célszer˝u külön alkönyvtárban elhelyezni. Az esetleges új leveleket a UNIX mail rendszere a MAIL, MAILCHECK és a ˝ rzi le. A MAIL változó hatáMAILMSG környezeti változók felhasználásával elleno 193
˝ FEJEZET 15. A MAIL PROGRAM MUKÖDÉSE
194
rozza meg a rendszer levélszekrényének helyét. Interaktív bejelentkezés esetén a ˝ rizze az esetleges új levél MAILCHECK változó mondja meg, milyen gyakran elleno érkezését az operációs rendszer (alapértelmezésben ez 600 másodperc). Új levél érkezésekor a MAILMSG környezeti változók tartalmát dírja ki (ez általában "YOU HAVE NEW MAIL"). A mail program elindításakor el˝oször végrehajtja a /usr/lib/Mail.rc állományban található mailbox parancsokat, majd a MAILRC változó által definiált felhasználói állományt, amennyiben létezik (alapértelmezésben ez a $HOME/.mailrc). A UNIX operációs rendszer lehet˝oséget ad a levelek automatikus továbbítására, amennyiben a felhasználó HOME könyvtárában létezik a .forward file. Az állománynak egyszer˝uen tartalmaznia kell a címzettet (vagy a címzettek listáját vessz˝ovel elválasztva). A levelek továbbítása ilyenkor automatikus, ehhez nem kell belépni a mail rendszerbe. A mail parancs kiadásakor különböz˝o kapcsolókat használhatunk. A leggyakrabban használtak ezek közül a következo˝ k: -e
-f [ File ] -f +Folder
-i -n -N -H -s Tárgy -v
✎
Leellen˝orzi, hogy van-e új levél. Ez a kapcsoló különösen script file-okban használható jól, mivel az új levelet a parancs visszatérési értékében (státuszában) jelzi. A mail a rendszer levelesláda helyett az $HOME/mbox (ill. a megadott File) állományt használja. A rendszer levelesláda helyett a megadott folder alkönyvtárban a Folder folder állományt használja. A folder alkönyvtárat pl. az $HOME/.mailrc állományban adhatjuk meg. Letiltja az INTERRUPT jelet (ez különösöen zajos vonalak, pl. modem estén hasznos). Letiltja az /usr/lib/Mail.rc állomány beolvasását induláskor. Nem nyomtatja ki a kezdeti fejléceket. Csak a kezdeti fejléceket nyomtatja ki. Az elküldend˝o levél tárgya (Subject) a Tárgy lesz. Bekapcsolja a részletes (verbose) üzemmódot.
Példák: Ha a személyes levelesládánk tartalmát szeretnénk megnézni, akkor ezt a $ mail -f
paranccsal tehetjuk meg. ✎ Amennyiben leveleinket folderekbe osztottuk szét, akkor pl. a gral folder
15.2. PARANCSOK LEVÉL KÜLDÉSE KÖZBEN
195
tartalmát a $ mail -f +gral
utasítással nézhetjük meg.
15.2. Parancsok levél küldése közben Miközben levelet küldünk, a mail képes speciális, ún. tilde parancsok feldolgozására is. A parancsokat egy sorelejei tilde (~) katakter elo˝ zi meg. A leggyakrabban használt ilyen parancsok a következo˝ k: ~!
[ShellParancs]
Kilép a shellbe (és esetleg végrehajta a ShellParancsot). ~.
A levél végét jelzi (helyettesíti a Ctrl-D-t). ~?
Kilistázza a tilde parancsokat. ~:
MailParancs
Végrehajta a MailParancsot. Csak akkor használható, ha elo˝ tte levélolvasásra indítottuk el a mail programot. ~a
A $HOME/.mailrc állományban megadható ún. aláírás stringet f˝uzi a levélhez. ~b Felhasználó
A Felhasználót hozzáadja az ún. vakmásolat (Bcc, blind carbon copy) listához. A Felhasználó ekkor megkapja a levél másolatát, de a levél fejlécében NEM jelenik meg, hogy o˝ is kapott másolatot. ~c Felhasználó
A Felhasználót hozzáadja a másolat (Cc, carbon copy) listához, és a levél fejlécében megjelenik, hogy o˝ is kapott másolatot. ~t Felhasználó
A Felhasználót hozzáadja a címzett (To) listához. A levél fejlécében megjelenik, hogy o˝ is a címzettek között van. ~h
megkérdezi a Subject:, To:, Cc: és Bcc: mez˝ok tartalmát. Az esetleges el˝oz˝o beállításokat felül lehet írni.
˝ FEJEZET 15. A MAIL PROGRAM MUKÖDÉSE
196 ~e
az EDITOR változóval (alapesetben ed) megadott szerkeszto˝ t hívja be a levél elkészítéséhez. ~v
a VISUAL változóval (alapesetben vi) megadott szerkeszto˝ t hívja be a levél elkészítéséhez. ~f [ÜzenetLista] Felhasználó
továbbküldi az ÜzenetListát (vagy az aktuális levelet), de csak ha levél olvasása közben vagyunk. A leveleket változtatás nélkül küldi el. ~m [ÜzenetLista]
Beszúrja az ÜzenetLista levelek tartalmát (vagy az aktuális levelet) a levélbe, de csak ha levél olvasása közben vagyunk. A beszúrt szöveget egy TAB karakterrel jobbra tolja. ~r Állomány
beolvassa a levélbe az Állományt. Használható még a ~< Állomány parancs is. ~w Állomány
a levelet beleírja az Állományba, de a fejlécek nélkül. ~q
kilép a levél elküldése nélkül. A nem üres, részben kész levelet a dead.letter állományba írja. ~x
kilép a levél elküldése nélkül, de a részben kész levelet nem menti el a
dead.letter állományba.
15.3. A mailbox alparancsok A levelesláda ill. a folderek olvasásakor a mail sokféle paranccsal segít a felhasználónak. A parancsok megadásakor az egyes levelekre számokkal ill. listával hivatkozhatunk. A lista lehet a számok felsorolása szóközzel elválasztva (pl. 1 2 4 9), de lehet egy tartomány is (pl. 1-137). A . az éppen aktuális levélre vonatkozik (amit a > jelöl), míg a ^ az els˝o, a $ pedig az utolsó levélre vonatkozik. Az összes levélre a * jellel hivatkozhatunk. A Felhasználó kifejezés az összes, az adott Felhasználótól érkez˝o levélre vonatkozik. A /Szöveg minden levelet kiválaszt, aminek Subject sorában a Szöveg elo˝ fordul (kis- és nagybet˝ut nem különböztet meg itt a rendszer). Ha a :Állapot parancsot adjuk ki, akkor minden
15.3. A MAILBOX ALPARANCSOK
197
adott Állapotú levélre hivatkozhatunk (az Állapot lehet d (deleted, törölt), n (new, új), o (old, régi), r (read, olvasott), u (unread, nem olvasott, de kilistázott)). Leggyakrabban a következ˝o parancsokat szokták használni (zárójelben a parancs esetleges rövidítését adjuk meg):
!
ShellParancs
Végrehajta a ShellParancsot. shell (sh)
Meghívja a shell programot. ?
Röviden kilistázza a parancsokat. list (l)
Röviden kilistázza a mailbox utasításokat. chdir Könyvtár (cd)
Az aktuális könyvtár a Könyvtár lesz. from [ÜzenetLista] (f)
Kiírja az ÜzenetLista fejléceinek tartalmát. z [-]
Kilistázza az éppen aktuális levél körüli 20 levelet. Argumentum nélkül a következ˝o 20 levélre ugrik, míg - argumentummal visszafelé mozog 20 levélnyit. top [ ÜzenetLista]
Kiírja az ÜzenetListaban található levelek els˝o 5 sorát. size [ÜzenetLista]
Kiírja az ÜzenetListaban található levelek méretét. next [Üzenet] (n)
A következ˝o levelet olvassa be, és írja ki a képerny˝ore. print [ÜzenetLista] (p)
Kiírja az ÜzenetLista tartalmát a képerny˝ore. Print [ÜzenetLista] (p)
Kiírja az ÜzenetLista tartalmát a képerny˝ore, az összes fejléc-mez˝o tartalmával együtt. more [ÜzenetLista] (mo)
Kiírja az ÜzenetListan található leveleket a képernyo˝ re laponként az el˝ore definiált lapozó program (alapeseteben a more) segítségével.
˝ FEJEZET 15. A MAIL PROGRAM MUKÖDÉSE
198
edit [ÜzenetLista] (e) Az EDITOR változóval jelzett editort (alapesetben ed) használva szerkesztésre
átadja a leveleket.
visual [ÜzenetLista] (v) A VISUAL változóval jelzett editort (alapesetben ed) használva szerkesztésre
átadja a leveleket.
copy [ÜzenetLista] Állomány (c, co)
Az ÜzenetLista minden levelét hozzáf˝uzi az Állományhoz, de nem jelzi ezt a leveleken. save [ÜzenetLista] Állomány (s)
Az ÜzenetLista minden levelét hozzáf˝uzi az Állományhoz, és kitörli azokat. Állomány megadása nélkül az mbox file-ra hivatkozik. delete [ÜzenetLista] (d)
Az ÜzenetLista leveleit kijelöli törlésre. A mail parancsból való kilépés el˝ott még használhatjuk az undelete parancsot a levelek visszaszerzésére. undelete [ÜzenetLista] (u)
Az ÜzenetLista leveleinek törlési jelölését megszünteti. Lista megadása nélkül az utolsó kitörölt levelet hozza vissza. exit (ex vagy x) Kilép a mail programból, és a levelesláda állapotát az eredeti tartalomra állítja vissza (pl. nem törli a delete paranccsal kijelölt leveleket). quit (q)
Kilép a mail programból, és a levelesláda állapotát az új, módosított értékekre (tartalomra) állítja be. Törli a delete paranccsal kijelölt leveleket, módosítja a rendszer levelesládát és az mbox állományt. folder [ÁllományNév] (fo)
Átkapcsol az ÁllományNév folderre, miután tárolta az éppen aktuálisat. Argumentum nélkül kiírja az aktuális folder értékét. Az állománynév megadásánál hivatkozhatunk az el˝oz˝o Állományra a #, a rendszer levelesládára a % ( ez a /usr/spool/mail/FelhasználóiAzonosító file), a személyi levelesládára az & (ez a $HOME/mbox file), és a folder könyvtár egy tagjára a +Folder rövidítésekkel. folders
Kilistázza a folder könyvtár tartalmát. touch [ÜzenetLista]
A rendszer levelesládából átmozgatja a személyi levelesládába az ÜzenetListát.
15.3. A MAILBOX ALPARANCSOK
199
mail CímzettLista (m)
Elindítja a levélküld˝o programot a CímzettListán szerepl˝o felhasználóknak címezve. alias (a)
Argumentum nélkül kiírja az éppen felismert összefoglaló neveket. Az & alias kerekasztal lancelot artur@@camelot galahad sirrobin parancs kiadása után a kerekasztal címzés minden
nak elküldi a levelet.
✎
felsorolt felhasználó-
reply [Üzenet] (r)
Válaszolhatunk az Üzenetet küld˝o felhasználónak. Reply [Üzenet]
Válaszolhatunk az Üzenetet küld˝o felhasználónak. Az Üzenet minden eredeti címzettje szintén megkapja a válaszlevelet. source Állomány (so)
Beolvassa és végrehajtja az Állományban található mailbox parancsokat. ignore Kulcsszó
A levél fejrészében megjelen˝o Kulcsszóval megadott sorokat nem jelzi ki. set [Opció [=Érték]] (se)
Argumentum nélkül kiírja az összes beállított opciót. Egy adott Opció megadásakor annak értékét állítja be. Egy kétállapotú, a settel beállított opciót az unset paranccsal törölhetünk. A leggyakrabban használt változók: append
Az új leveleket az mbox végéhez illeszti az alapértelmezésbeli kezdet helyett. askcc , askbcc , asksub
Beállítása esetén a program megkérdezi a megfelelo˝ fejléc-mez˝ot. folder=Könyvtár A mail alapkönyvtárának helyét definiálja. A parancs kiadása után az összes +Állomány típusú kifejezést a mail a Könyvtár/Állomány
alakra fordítja.
ignore
Letiltja az Interruptot (megszakítást). Zajos vonal használatakor hasznos. indentprefix=String A ~m parancs által ez a TAB.
használatos stringet állítja be. Alapértelmezésben
˝ FEJEZET 15. A MAIL PROGRAM MUKÖDÉSE
200 outfolder
A kimen˝o levelekr˝ol készül˝o másolat állományokat a folder könyvtárba helyezi. record=ÁllományNév
Az összes kimen˝o levélr˝ol másolatot készít az ÁllományNév állományba. showto
A fejléc kiírása esetén, ha a levél t˝olünk ered, a címzett nevét írja ki a feladó neve helyett. sign=Aláírás Az aláírás string értékét állítja be, amit aztán a ~a parancscsal hívhatunk be. Példák: Ha nem akarjuk látni a levelek listázásakor a Received mezo˝ t, adjuk a követ✎ kez˝o sort a $HOME/.mailrc állományhoz: ignore received
A $HOME/levelek folder könyvtár beállítását pl. a következo˝ utasítással vé✎ gezhetjük el a $HOME/.mailrc állományban: set folder=$HOME/levelek
✎
A 2. számú levelet a gral folderbe a & s 2 +gral
paranccsal menthetjük el.
✎
A kimen˝o levelekr˝ol automatikusan másolatot a $HOME/kimeno folderbe a & set record=$HOME/kimeno .mailrc parancssorokkal kaphatunk.
✎
A kimeno folder tartalmát a $ mail -f +kimeno
shell parancssorral olvashatjuk el.
✎
A /usr/lib/Mail.rc állományban beállított
15.3. A MAILBOX ALPARANCSOK
201
set askcc
parancs hatását (alapértelmezés) egy unset askcc
paranccsal küszöbölhetjük ki a .mailrc állományban. Nagyobb csoportokat az alias paranccsal a következo˝ képpen definiálhatunk a .mailrc állományban: ✎ & alias kerekasztal lancelot artur@@camelot galahad sirrobin & alias wizard @mordor.UUCP:gandalf@hobbit & alias wizards merlin@camelot oz wizard
Ha ezek után a $ mail wizards
paranccsal küldünk el egy level állományt, azt a mail a merlin@@camelot, az oz és a @mordor.UUCP:gandalf@hobbit felhasználóknak küldi el.
202
˝ FEJEZET 15. A MAIL PROGRAM MUKÖDÉSE
16. fejezet Az elm részletes használata Az elm mailer nem a UNIX operációs rendszer része, viszont a beépített lev- ☞ elm leírása elez˝orendszernél kényelmesebb felületet nyújt a felhasználó számára. Tekintve, rövid a 68. oldalon hogy a program nem része az operációs rendszernek, csak azokon gépeken elérhet o˝ , ahol azt a rendszergazda installálta. Az elm alapszint˝u használatát a 8.2.2 fejezetben ismertettük. Az elm a $HOME/.elm/elmrc állományon keresztül programozható. A program m˝uködik ezen állomány nélkül is, de célszer˝u a rendszergazdától kérni egy mintát, és azt kitölteni igényeink szerint. Az elm els˝o használatakor létre akarja hozni a .elm könyvtárat, és a következ o˝ ✎ felirat jelenik meg1 : Notice: This version of elm requires the use of a .elm directory in your home directory to store elmrc and alias files. Shall I create the directory .elm for you and set it up (y/n)? y
Nyomjuk le a Enter gombot, mire a Great! I’ll do it now Notice: elm require the use of folders directory to store your mail folders in. Shall I create the directory $HOME/Mail for you (y/n)? y
szöveg jelenik meg. Nyomjuk le ismételten az Enter gombot, és ezzel bejutunk a fo˝ menübe. Ezt az eljárást csak egyszer kell megcsinálni, a program késo˝ bbi használata során 1
is.
Az elm újabb verzióiban a szöveg kissé megváltozhat! Ez igaz az itt felsorolt összes példára
203
204
FEJEZET 16. AZ ELM RÉSZLETES HASZNÁLATA
egyb˝ol a f˝omenübe jutunk. FIGYELEM! Amennyiben a fenti kérdéseknél not válaszoltunk, akkor az elm nem végzi el a file-struktúra kialakítását a kés o˝ bbi használata során sem! Ilyenkor err˝ol a felhasználónak kell gondoskodnia.
16.1. Az elm alaputasításai Az elmbe belépve a képerny˝o alján rövid segítséget ad a program a legfo˝ bb, az adott menüben használható utasításokról. Hogy itt pontosan mi jelenik meg, az az elm verziószámán kívül függ attól is, hogy a már említett elmrc konfigurációs file-ban kezd˝o, középszint˝u, vagy haladó felhasználónak mino˝ sítettük magunkat. Minden, az aktuális postaládában lev˝o levélr˝ol egy egysoros bejegyzést láthatunk a képerny˝on. Ha sok levelünk van, nem látjuk egyszerre az összeset, de a kurzor mozgatásával minden levelet elérhetünk. A bejegyzés els o˝ bet˝uje a következ˝ot jelenti: E N O D U
lejárt (bizonyos id˝onél régebbi) levél új levél régi, olvasatlan levél törölt levél sürg˝os levél
Ezt követi a levél sorszáma, amivel hivatkozhatunk rá, a levél beérkezésének dátuma (hónap, nap), a feladó neve vagy E-mail címe, a levél hossza sorokban, és a levél tárgya. A képerny˝on lev˝o levelek között egy mindig az aktuális levél. Ezt vagy az különbözteti meg a többit˝ol, hogy inverzben látszik, vagy van elo˝ tte egy nyíl: --> (beállítás kérdése). A levelek között a j gomb segítségével lefelé, a k gomb segítségével felfelé mozoghatunk (lehet, hogy a billenty˝uzeten lev o˝ nyilak is m˝uködnek). Hivatkozthatunk egy levélre a sorszámával is, amennyiben számot kezdünk el beütni, az elm egyb˝ol azt gondolja, hogy egy sorszámot akarunk megadni, és a Command:
New Current Message
Set current message to: és Enter -rel az elm a megadott
választ jeleníti meg. Gépeljük be a számot, számú levélre ugrik. Ismételt Enter -re a levél tartalmát megjeleníti a képerny˝on. Gyors mozgásra szolgál az = az els˝o levélre és a * az utolsó levélre ugrás parancsa. Levelet kiválaszthatunk valamilyen minta alapján is. A fo˝ menüb˝ol kiadott / parancs hatására az elm egy mintát vár. Gépeljük be a keresett szöveget, és az
16.1. AZ ELM ALAPUTASÍTÁSAI
205
lenyomására az els˝o olyan levélre áll rá a rendszer, melynek a feladó vagy a tárgy mez˝ojében szerepel a megadott minta. A // parancs hatására a keresés a teljes levélben megtörténik, így például ha gyorsan meg akarjuk találni azt a levelet, amiben a fizetésemelésünkr˝ol értesítettek minket, a //fizetes parancs rááll a keresett levélre. Enter
A már ismertett m (mail) f˝omenübeli levélküldési parancson túl az elm képes válaszolni is egy levélre, és azt továbbítani. Ha elolvastunk egy levelet, akkor az r (reply) paranccsal válaszolhatunk rá: az elm automatikusan létrehozza az aktuális levél alapján a (To:) címet, és a tárgy mez˝obe a Re:
AktuálisLevélTárgya
kerül, amit átírhatunk. Ezután az eredeti levelet beolvassa a szövegszerkeszt o˝ be, és minden sor elé nagyobb jelet tesz (ezt meg lehet változtatni). A levél elé beír egy általunk megadott szöveget (ez Reply to FeladóCíme alapértelmezésben ). Ha az f˝omenüben az f (forward) parancsot adjuk ki, akkor a rendszer az m (mail)-hez hasonlóan megkérdezi, hogy kinek szeretnénk a levelet elküldeni, és az aktuális levél tárgya alapján automatikusan felajánlja a továbbított levél tárgyát (alapértelmezésben ez: EredetiTárgy (fwd) ), majd megkérdezi, hogy meg szeretnénk-e szerkeszteni az erdeti levelet: Do you want to edit the message (y/n) y Ha y-t válaszolunk, akkor az aktuális levelet beolvassa a szövegszerkeszt o˝ be, és minden sor elé > jelet tesz. A továbbított levél feladója azonban már mi leszünk, tehát ha az, akinek továbbítottuk a levelet r (reply)-jal válaszol, a választ mi kapjuk. A b (bounce) paranccsal továbbíthatunk úgy leveleket, hogy annak feladó
mez˝oje ne változzon.
A f˝omenüben a d (delete) paranccsal törölhetjük az aktuális levelet. Valójában ilyenkor csak kijelöltük törlésre a levelet, fizikailag csak akkor törl o˝ dik, amikor kilépünk vagy foldert váltunk. A törlésre kijelölt levél elo˝ tt egy D bet˝u jelenik meg, és amikor fel- vagy lefelé mozgunk a levelek között, az elm átugorja ezeket a leveleket. Ha mégis egy törlésre kijelölt levélre akarunk lépni, akkor sorszám szerint tehetjük meg. Ilyenkor az u (undelete) paranccsal visszavonhatjuk törlési szándékunkat. Az elm sokféle más parancsáról angol nyelv˝u segítséget kaphatunk a ? parancs segítségével.
206
FEJEZET 16. AZ ELM RÉSZLETES HASZNÁLATA
16.2. A postaládák A levelek csoportosítására a postaládák (folderek) szolgálnak. Az elmben három postaláda generálódik automatikusan: az új levelek ládája, melyre a !-jel, a régi levelek (received) ládája, melyre a >-bal, és az elküldött levelek (send) ládája, melyre a <-bel hivatkozhatunk. Ezenkívül mi is megadhatunk postaládákat. A postaláda egy egyszer˝u file, melyben egymás után sorakoznak a levelek, és minden levél a From:Feladó sorral kezd˝odik. Ha egy levelet a f˝omenüb˝ol az s (save) paranccsal mentünk ki, akkor az elm megkérdezi a file (folder) nevét, ahova a levelet betegye, és a mentés végén a levelet automatikusan törlésre jelöli ki (abból a postaládából csak, ahol éppen vagyunk). Ha a megadott név alatt már létezett file, akkor ahhoz hozzáírja az új levelet, ha nem létezett, akkor létrehozza az állományt. Ezáltal tulajdonképpen a folder és a file fogalma azonosnak tekinthet o˝ . A postaládának adott név az aktuális könyvtárban hoz létre egy ilyen nev˝u file-t; ha a megadott név legels˝o karaktere az =, akkor a $HOME/Mail könyvtárban (ez az a könyvtár, amit az elm az els˝o használatakor létrehoz) jön létre a file, ami gy˝ujti a leveleket. Az elm automatikusan ilyen =-vel ellátott nevet ajánl fel, pl.: =laca, ha a feladóra beállítottuk a laca becenevet. A postaládák használatával csoportosíthatjuk az olvasott leveleket. Az új levél elolvasása után, ha azt nem tettük át egy másik postaládába, kilépéskor az elm automatikusan felajánlja, hogy az olvasott leveleket a régi levelek postaládába teszi át (ez a $HOME/Mail/received állomány). A levelez˝orendszeren belül a f˝omenüben a c (change) paranccsal válthatunk postaládát. A ládára a nevével kell hivatkozni (a három fo˝ ládára a !, >, < jellel). Az elm beállításától függ˝oen elképzelhet˝o, hogy az elm nem generál automatikusan másolatot a kimen˝o leveinkr˝ol, és így a kimen˝o postaláda mindig üres. Az elmrc állomány programozásával rávehetjük az elm levelez o˝ rendszert, hogy tegyen másodpéldányt a kimeno˝ postaládába. Amennyiben levelezési címünk megváltozna, a leveleket automatikusan továbbküldhetjük az új címre ugyanúgy, mintha a UNIX beépített levelez o˝ rendszerét, a mailt használnánk: a $HOME/.forward állományba be kell írni az új címünket. Az elm és a mail csak két különböz˝o, az operációs rendszer alap levelez˝oszolgáltatását használó program, így ugyanonnan veszik az új leveleket. Ezáltal elképzelhet˝o, hogy valaki felváltva használja o˝ ket. A különbség abban van, hogy hol tárolják a régi leveleket. Ha a UNIX mailb˝ol átállunk az elmre, akkor a régi leveleket a $HOME/mbox postaládából kell el˝ovenni.
16.3. ALIASOK
207
16.3. Aliasok A hosszú és bonyolult címek használata helyett hozzájuk rendelhetünk rövid, és kifejez˝o "beceneveket" (alias), melyeket könnyen megjegyzünk, és a levelek küldésénél a To: (címzett) mez˝oben ezeket is használhatjuk. Mindenki írhat magának felhasználói beceneveket (user alias). A rendszergazda ezen kívül definiálhat még mindenki számára elérhet˝o, rendszerszint˝u neveket (system alias). Az f˝omenüb˝ol az a paranccsal léphetünk az alias menübe: a)lias current message, d)elete an alias, check a p)erson or s)ystem, l)ist existing aliases, m)ake new alias or r)eturn Alias:
Becenevet az m (make) paranccsal hozhatunk létre. Az alias rendszer el o˝ ször a becenevet kéri (alias, ennek egyedinek kell lennie, nem adhatunk új értéket már létez˝o becenévnek, ahhoz azt el˝obb ki kell törölni), majd a felhasználó nevét, és végül levelezési címét. Ezáltal egy definíció a következo˝ alakú: becenév = (Teljes) Név = cím(ek)
Címként akár több címet, vagy már el˝oz˝oleg definiált becenevet is megadhatunk2: ✎ ami = Clinton = [email protected] rus = Boris Jelcin = [email protected] elnokok = Fejesek = ami, rus, [email protected]
A levél küldésénél is felsorolhatunk több, vesszo˝ vel elválasztott címet. Ha gyakran írunk több embernek, érdemes belo˝ lük az elnokok-höz hasonló csoportot kialakítani, es egy névvel lehet mindenkinek levelet küldeni. Egy becenév több csoporthoz is tartozhat. A becenevek mego˝ rz˝odnek, tehát ha legközelebb bejelentkezünk, használhatjuk o˝ ket. A már definiált beceneveket az l (list) paranccsal írathatjuk ki. A felesleges, vagy módosításra szoruló neveket a d (delete) paranccsal törölhetjük a becenév alapján. Igen hasznos parancs az a (alias), mely leheto˝ vé teszi, hogy az aktuális levél Feladójának címéhez rendeljünk becenevet anélkül, hogy meg kellene jegyezni a címét. A rendszer ilyenkor a levél alapján automatikusan betölti a címet, és csak a hozzá tartozó becenevet kérdezi meg. Az alias menüb˝ol az r (return) paranccsal léphetünk vissza a fo˝ menübe. 2
A legels˝o cím valóban m˝uködik!
208
FEJEZET 16. AZ ELM RÉSZLETES HASZNÁLATA
16.4. A konfigurációs file (elmrc) Az elm levelez˝orendszer konfigurációs állománya a $HOME/.elm/elmrc. Ezen keresztül minden felhasználó "testre szabhatja" magának a rendszert. Az állomány egyszer˝u, olvasható file, melyben különbözo˝ változók értékeit állíthatjuk a Változó= Érték bejegyzéssel. Itt csak a legfontosabbak szerepét ismertetjük. A fileban a # utáni rész megjegyzés, azt a rendszer nem veszi figyelembe: editor
a használt szövegszerkeszt˝ot állítja be. Amennyiben pl az EMACS-ot akarjuk használni az editor=TeljesÚtvonal/emacs sort kell beírni. A none vagy builtin
fullname maildir pager
prefix print signature arrow askcc autocopy copy
értékek a mailhez hasonló "szerkeszt˝ot" nyújtanak. Amennyiben nem adunk meg semmit, akkor az EDITOR környezeti változó értékét, annak hiányában a vi editort használja. A teljes felhasználói nevünk. Ha nem adjuk meg a /etc/passwd file-ban lev˝o információt használja. A postaládákat tartalmazó könyvtár. Ennek az alapértéke a $HOME/Mail. A levél olvasásakor alkalmazott lapozóprogram. Ha nem adjuk meg, a PAGER környezeti változó értékét használja, annak hiányában a beépített builtin+ lapozót. A levélre való válaszoláskor vagy továbbításkor az eredeti levél minden sora elé kerül˝o karakter (alapérték: "> ") A levél kinyomtatását szabályozó parancs. A levelet tartalmazó állományra a %s-sel hivatkozhatunk. Alapértéke: lpr %s. Az elküldött levelekben a levél végéhez automatikusan hozzáírandó "aláírást" tartalmazó állomány nevét adja meg. Ha értéke ON, akkor az aktuális levelet a --> nyíl jelöli, ha nem adjuk meg az értékét, vagy az OFF, akkor inverzben jelenik meg az aktuális sor. ˝ t. Alapértéke ON. OFF esetén nem kérdezi meg a Cc: (Carbon Copy) mezo ON esetén automatikusan bemásolja az r (reply)-jal megválaszolt levelek esetén a szövegszerkeszt˝obe az eredeti levelet. Alapértéke OFF. ˝ levélr˝ol. AlapérON esetén automatikusan másolatot csinál minden kimen o téke OFF.
A többi változó az elmhez adott minta-konfigurációs állományban angol nyelv˝u magyarázatokkal megtalálható.
17. fejezet Hálózati alapismeretek és egyéb programok 17.1. TCP/IP alapok A TCP/IP a UNIX rendszerek által leggyakrabban használt kommunikációs protokoll, melynek segítségével a számítógépek ero˝ forrásaikat megoszthatják egymással hálózaton keresztül. A leggyakrabban a következ˝o TCP/IP szolgáltatásokat használják a számítógépek között: • File átvitel, amire a File Transfer Protocol (ftp) szolgál. • Távoli bejelentkezés, amit a Network Terminal Protocol (telnet) tesz lehet o˝ vé. • Elektronikus levelezés, ami lehet˝ové teszi üzenetek küldését más számítógépekre is. • Network file rendszerek (NFS,RFS,AFS), amelyek leheto˝ vé teszik egész file rendszerek elérését más gépek számára. A file rendszert a távoli gépek saját operációs rendszerükbe beillesztve használhatják. • Távoli nyomtatás, ami lehet˝ové teszi más gépekhez kötött nyomtatók használatát. Segítségével egy adott felhasználói csoport relatíve kevés nyomtatóval is kiszolgálható. • Távoli programfuttatás (RPC). Segítségével leheto˝ vé válik programok futtatása a távoli gépen. Akkor hasznos, ha csak egy programot akarunk más gépen futtatni, vagy ha a másik géphez kötött eszközöket szeretnénk közvetlenül a gépünkr˝ol elérni (pl. backup készítéséhez). 209
210 FEJEZET 17. HÁLÓZATI ALAPISMERETEK ÉS EGYÉB PROGRAMOK • Name szerverek, amelyek az egyedi gépek neveit és címeit tartalmazzák egy intézményen belül. Segítségével nem szükséges minden host címét a helyi gépen tárolni, az a központi szerverr˝ol elérhet˝o. • Terminál szerverek, amelyek speciális célszámítógépek, ahonnan távoli gépekre jelentkezhetünk be. A terminálok ezekhez az (általában Ethernet) hálózatra kötött eszközökhöz tartoznak, így nem szükséges egy hosthoz bejelentkezni csak azért, hogy egy másik gépet telnettel elérjünk. • Network-alapú window rendszerek, mint pl. az X11 rendszer.
17.1.1. A TCP/IP protokollok általános felépítése A TCP/IP protokollt több egymásra épül˝o protokoll alkotja. Áltában egy TCP/IP alkalmazás 4 f˝o rétegb˝ol áll: • Applikációs protokoll, mint pl. az ftp. • Egy olyan protokoll, mint pl. a TCP, amely az applikáció számára különböz˝o szolgáltatásokat biztosít. • Ip, amelyik az alapvet˝o szolgáltatás az ún. datagrammok átviteléhez. • A fizikai hordozót kezel˝o felület, amelyik pl. az Ethernetet vagy a soros vonalat hajtja meg. A TCP/IP az ún. catenet modellt használja. Ez feltételezi, hogy sok egymástól független hálózat van összekötve egymással gateway-ekkel. A csomagok ekkor több különböz˝o hálózaton is keresztülmehetnek, miel˝ott célhoz érnének. Ez a folyamat a routing, ami a felhasználó számára teljesen láthatatlan. A csomag a célgép Internet címével van ellátva, ami egyértelm˝uen megadja a végcélt. Az Internet cím egy 32-bites szám, amit gyakran 4 decimális számmal jelölnek, mint pl. a 146.113.42.42 . A felhasználók általában nem a címet, hanem a hozzárendelt szimbolikus címet (pl. vogon.shi.edu) használják. Az egyes gépeken futó eljárások külön-külön is kiépíthetnek TCP/IP kapcsolatot, ezeket egy Internet címen belül az ún. portszámmal különböztetjük meg. Az Internet cím és a portszám együtt egyedi kombinációt alkot. Például: Internet cím TCP portok 1. kapcsolat 128.6.4.194 128.6.4.7 1234 21 2. kapcsolat 128.6.4.194 128.6.4.7 1235 21 A TCP/IP az ún. "összeköttetésmentes" technológián alapul, amelyben az információ ún. datagramban terjed. A datagram (csomag) az egy üzenetben elküldött adatok összessége. Minden datagram a hálózaton egyedi módon terjed:
17.1. TCP/IP ALAPOK
211
a hálózati összeköttetés függvényében a futási ido˝ k különböz˝ok lehetnek, azaz egy kés˝obb elküldött datagram megel˝ozheti egy korábban elküldöttet. Ugyanígy lehetséges, hogy valamilyen hiba folytán egy datagram elveszik, amit újra kell küldeni.
17.1.2. A TCP szint A TCP/IP csomagok továbbítására két protokoll, a TCP és az IP szolgál. A TCP (Transmission Control Protocol) végzi el az üzenetek feldarabolását csomagokra az egyik oldalon, míg a másik oldalon a beérkezo˝ datagramokból összerakja az eredeti üzenetet. Ez a szint kezeli a esetlegesen elveszo˝ csomagok újrakérését és a sorrendváltozást. Az IP (Internet Protocol) az egyedi datagramok továbbításáért felel o˝ s. Ugyan úgy t˝unhet, hogy a TCP végzi el a feladat nagy részét, de ez csak kis hálózatok esetén van így. Az Internet egy nagy hálózat, és a datagramok célhoz juttatása nagyon bonyolult lehet, amennyiben több hálózaton kell azt keresztülküldeni. Az összes kapcsolat és a különböz˝o vonalak (esetlegesen különböz˝o fizikai hordozókon) kezelése komplex feladat, amit az IP szintnek kell elvégeznie. Példa: Egy ftp processz a következ˝o adatfolyamot kívánja a távoli gépen futó eljárásnak átküldeni (ez lehet pl. egy 1 Mbyte-os file): ......................................................
A TCP ezt az adatsort kezelhet˝o darabokra szaggatja (ez illeszkedik a hálózat és a szemközti program által kezelhet˝o maximális méret˝u csomaghoz): ....
....
....
....
....
....
....
....
A TCP minden datagram elejére egy header részt illeszt, ami tartalmazza a forrás- és célprocessz port címét és az ún. sorozatszámot. A szemközti TCP program ezek ismeretében állítja vissza az adatfolyamot, a sorozatszám alapján eldönti, hogy veszett-e el csomag, stb. A sorozatszám nem a csomagokat, hanem a csomagokban lév˝o oktetteket számozza. A TCP ezek mellé még egy ún. checksumot adva hozza létre a TCP headert (T). Az adatok tehát már így néznek ki: T....
T....
T....
T....
T....
T....
T....
212 FEJEZET 17. HÁLÓZATI ALAPISMERETEK ÉS EGYÉB PROGRAMOK A TCP az IP szintnek adja át az adatokat a cél Internet címével együtt. Az IP ebb˝ol és a helyi Internet címb˝ol (I) képez egy csomagot, amit egy újabb checksummal ellátva ad tovább. Az adatok ekkor már így néznek ki: IT....
IT....
IT....
IT....
IT....
IT....
ahol az I jelenti az IP headert. A fizikai szint különbözo˝ lehet, lehet soros vonal, X25, de a leggyakoribb az Ethernet. Az Ethernet saját 6 byte-os címekkel rendelkez˝o fizikai eszköz, amely több protokollt is képes (akár egyszerre is) használni (pl. TCP/IP, DECnet, Novell, stb.). Az Ethernet saját E headerjét (benne a két Ethernet címmel) és C trailerjét (checksummal) illeszti az elo˝ z˝o IP csomagokhoz: EIT....C
EIT....C
EIT....C
EIT....C
EIT....C
Természetesen a fogadó oldal ezeket a konverziókat visszafelé végzi el. Az Ethernet interface levágja az Ethernet headert és a checksumot. Amennyiben a csomag IP típusú, akkor az Ethernet interface azt az IP-nek adja tovább, ami a protokoll mez˝ot figyeli. Ha protokoll mez˝o TCP típusú, akkor az IP az IP headert kitörölve átadja a TCP-nek, ami a sorozatszám alapján visszaállítja az eredeti adatfolyamot. Az Ethernet hálózat a csomagokat egy közös (általában koax) hordozóra helyezi. Mivel ez busz rendszer, el˝ofordulhat csomagok ütközése, amikoris a rendszer bizonyos véletlenszer˝uen megadott ido˝ múlva újra megkísérli a csomag elküldését. Az id˝ozítések miatt a rendszer nagyon érzékeny a maximális futási id o˝ re. A hasznos sávszélesség ugyan csak egy része a teljes fizikai sávszélességnek, de az egyszer˝uség és flexibilitás kompenzálja ezt a hátrányt.
17.1.3. Socketek és applikációk A felhasználói applikációk a TCP szint felett futnak. Ezek a programok a TCP/IPt mint összeköttetési felületet használják, és - a felhasználókhoz hasonlóan - nem kell tudniuk a mélyebben fekv˝o rétegekr˝ol (IP, Ethernet). Az egyes programok egységes használata érdekében ún. socket számokat használnak a különböz˝o gépek az Internet hálózaton. Ezt azt jelenti, hogy míg a hívó gép (amely pl. egy ftp programot akar futtatni egy távoli gépen) a saját ftp client programjához egy véletlen, de egyedi portszámot rendel, a szemközti gépen a 21-es portot (az ftp socketjét) adja meg célként. A kapcsolat így egyértelm˝uen
17.1. TCP/IP ALAPOK
213
meghatározott (két különböz˝o kapcsolatnál a két Internet és a két portszámból legalább egy különböz˝o). Az egyes applikációk a hibamentes TCP/IP csatornán további saját protokollokat használhatnak, mint pl. az SMTP levelezés: RED TOPAZ RED TOPAZ RED TOPAZ RED TOPAZ RED TOPAZ TOPAZ TOPAZ TOPAZ TOPAZ TOPAZ TOPAZ TOPAZ RED TOPAZ RED
220 RED.VOGON.EDU SMTP Service at 29 Jun 92 05:17:18 EDT HELO topaz.vogon.edu 250 RED.VOGON.EDU - Hello, TOPAZ.VOGON.EDU mail From: 250 mail accepted RCPT To: 250 Recipient accepted DATA 354 Start mail input; end with . Date: Sat, 27 Jun 92 13:26:31 EDT From: [email protected] To: [email protected] Subject: meeting Talalkozo holnap 1-kor a Vilag Vegen. Egy Pangalaktikus gegepukkasztot mar rendeltem... . 250 OK QUIT 221 RED.VOGON.EDU Service closing transmission channel
Figyeljük meg, hogy a parancsok csak "normális" szöveget tartalmaznak, ami tipikus az Internet szabványokban (ezek az ún. RFC ajánlások, amik de facto szabványok). A parancsokat általában egy szám jelenti, ami után a szöveg csak az esetleges debuggolást segíti. A számokat a különbözo˝ Internet szabványok rögzítik, általában a 2-vel kezd˝od˝oek sikeres lefutást jeleznek, a 3 további adatot kér, a 4 és 5 pedig "ideiglenes" ill. végzetes hibát jelent.
17.1.4. Egyéb protokollok: UDP, ICMP és ARP Bizonyos alkalmazások esetén nem szükséges a TCP szintet használni, mivel az üzenet belefér egy datagramba. Ilyen lehet pl. a név szerinti Internet cím keresés. Ilyen típusú célokra az UDP ("User Datagram Protocol") használatos. Az UDP a TCP-hez hasonlóan saját port címekkel rendelkezik, és a saját headerjével ellátott csomagot adja át az IP-nek továbbításra. Az IP a távoli gépen nem a TCP, hanem az UDP protokoll kezel˝o programnak továbbítja a csomagot. Egy másik protokoll az ICMP ("Internet Control Message Protocol"), amit maga a TCP/IP software használ hiba- és egyéb saját üzenetek továbbítására. Az ICMP még egyszer˝ubb, mint az UDP, mivel nincsenek saját portcímei.
214 FEJEZET 17. HÁLÓZATI ALAPISMERETEK ÉS EGYÉB PROGRAMOK A harmadik említésre méltó protokoll az Ethernet által használt ARP ("Address Resolution Protocol"), amely szigorúan véve nem IP protokoll. A kapcsolat kiépítésekor feltétlenül szükség van az Internet cím alapján a távoli gép Ethernet címére (ez kell a kapcsolat kiépítéséhez). Amennyiben a helyi ARP táblában ez az információ nincs meg, akkor ez lesz az, amit az ARP elvégez: egy speciális csomagban szétküldi az Internet címet a hálózaton. Minden gép figyeli az ARP csomagokat, és ha látja, hogy o˝ t szólították meg, válaszol. Például az ARP 128.6.4.7 kérésre az 128.6.4.7 Internet cím˝u gép visszaküldi saját Ethernet címét (pl. 8:0:20:1:56:34). Ez az információ a helyi gép ARP cache tárolójába kerül, elkerülend˝o a gyakori ARP kéréseket. Az ARP kérések ún. broadcast kérések, amiket az ff:ff:ff:ff:ff:ff Ethernet címre küld az ARP.
17.1.5. Repeaterek, bridge-ek és routerek Az Ethernet hálózat fizikai mérete három ok miatt maximált: a jel csillapodása és a futási id˝ok limitálják a maximális távolságot, a véletlenszer˝u csomagküldés pedig a forgalom növekedése miatt a maximálisan üzemeltetheto˝ berendezések számát limitálja. A jel csillapításán ún. repeaterek használatával segíthetünk, amelyek egyszer˝u jeler˝osít˝ok. Nagyobb távolságoknál a futási ido˝ k túlságosan nagyok lesznek, ezért ilyenkor a csomagok ütközését tárolás/továbbítás módszerrel kell elkerülni két távoli szegmens között. Erre a célra szolgálnak az ún. bridge-ek, amelyek ezen túlmen˝oen csak a két szegmens közötti forgalmat engedik át, s így a helyi forgalom nem zavar más szegmenseket. Az IP szint feladata a megadott datagram eljuttatása a cél címre. Ezt a feladatot routingnak hívjuk. A routing teljes egészében az Internet címen alapul. Éppen ezért a helyes routing megkönnyítése érdekében egy speciális struktúrát, az ún. domain struktrúrát alakították ki az Interneten. A domain struktúra az jelenti, hogy különbözo˝ Internet címtartományokhoz különböz˝o maximális címtartomány kapcsolódik. Az A osztályú címek az els o˝ byte-ban a 1-127-es számot tartalmazzák, és 256 × 256 × 256 gépre kiterjed o˝ hálózatot tennének lehet˝ové. Általában a B osztályú címeket használják a nagyobb intézmények, ahol 256 × 256 gépet lehet így hálózatba kötni. A B osztálynak a 128.1 - 191.254-es Internet prefix tartomány felel meg. Kisebb hálózatok esetén elegend˝o a 256 címmel ellátott C osztályú Internet címtartomány a 192.1.1 ˝ , hogy az oktettekben a 0 és 255 - 223.254.254-es tartományban. Megjegyzendo értéket nem használják. A 0 és a 255 különleges jelentést hordoz: a 0 azoknak a gépeknek a címét jelenti, amelyek nem tudják saját Internet címüket. A 255-as értéket ún. broad-
17.2. AZ RLOGIN ÉS RSH UTASÍTÁSOK
215
cast célokra használják, amikoris a (helyi) hálózaton minden gép figyeli az így megcímzett üzenetet. Pl. a 128.6.4 hálózaton a 128.6.4.255 értéket kell broadcast célokra használni. Általában lehet a 255.255.255.255 értéket is használni, a gateway feladata a broadcast helyi szinten tartása. A broadcastot a netmask megadásával is helyi szinten tarthatjuk. Egy adott osztály esetén a netmask értékét egyszer˝uen a fix Internet címtartomány 1-esre, míg a változó címtartomány 0-ra állításával kaphatjuk meg. Pl. a 194.43.42 hálózaton 255.255.255.0 lesz a netmask. A legalacsonyabb szint a helyi hálózat: amennyiben az IP látja, hogy a datagramot a helyi hálózat egyik gépének címezték, akkor közvetlenül kiküldi. Amennyiben a cím nem érhet˝o el közvetlenül, akkor egy, a helyi hálózathoz kapcsolt ún. gateway gépnek küldi el a datagramot. Általában a helyi hálózatokhoz csak egy router van illesztve, de a routerek képesek - a cím ismeretében - egymás között továbbítani a datagramot.
17.2. Az rlogin és rsh utasítások Néha a telnet parancs használatával átjelentkezni egy távoli gépre nem elég kényelmes: például ha több gépen is van felhasználói azonosítónk, és gyakran átlépünk az egyikr˝ol a másikra (pl. segédprogramok futtatására), akkor célszer˝u lehet megadni a célgépen az ún. „megbízható” gépek listáját. Ezekr o˝ l a gépekr˝ol ilyenkor kulcsszó használata nélkül is átléphetünk az adott gépre. A megbízható gépek listáját kétféleképpen lehet megadni: • A rendszergazda felsorolhatja a /etc/hosts.equiv állományban azokat a gépeket, amelyekr˝ol a felhaszálók automatikusan használhatják az rlogin és rsh parancsokat. Ekkor a felhasználói azonosítónak meg kell egyeznie a két gépen. • Saját címeket is hozzáadhatunk a listához, ha a $HOME/.rhosts állományba soronként beírjuk az engedélyezendo˝ gép nevét és a távoli felhasználói azonosítót (szóközzel elválasztva). Ezt az állományt csak a felhasználó írhatja, máskülönben a rendszer biztonsági okokból nem fogja használni. Vigyázat! Ha egy felhasználói azonosítónk kulcsszavát valaki megtudja, akkor minden, a fenti módszerrel megadott gépünkhöz is hozzáfér! Megjegyezzük, hogy a NIS (Network Information System, a néhai Yellow Pages) rendszerrel kényelmesebben engedélyeztetheto˝ az ilyen típusú hozzáférés
216 FEJEZET 17. HÁLÓZATI ALAPISMERETEK ÉS EGYÉB PROGRAMOK sok (kb. >5 ) gép esetén. A NIS-t els˝osorban SUN operációs rendszerek használják, de több BSD alapú rendszerbe is beépítették.
17.2.1. Az rlogin utasítás ✎ Interaktív átjelentkezésre az rlogin utasítás szolgál. A legegyszer˝ubben a $ rlogin rs1
utasítással léphetünk át az rs1 nev˝u gépbe. Természetesen az rs1 gépben a kiindulási gép és felhasználó azonosítójának szerepelnie kell a fent említett módon. Amennyiben a két gépen nem egyezik meg az azonosítónk (pl. zaphod az rs1 gépen), akkor az rs1-en a $HOME/.rhosts állományt kell használnunk, valamint ✎ a kiindulási gépen az $ rlogin rs1 -l zaphod
utasítást kell használni. A parancs kiadása után a helyi gép megpróbálja a távoli gépet elérni. Sikeres kapcsolatfelvétel esetén megjelenik a távoli gép promptja, mintha terminálról jelentkeznénk be.
17.2.2. Az rsh utasítás Nem mindig van szükségünk interaktív használatra, so˝ t pl. távoli eszközök használatánál célszer˝ubb egy parancs távoli futtatása. Erre a célra az rsh utasítás ✎ szolgál. Pl. a df parancsot az rs1 nev˝u gépen a $ rsh rs1 df
utasítással futathatjuk le. Természetesen az rs1 gépben a kiindulási gép és felhasználói azonosítójának szerepelnie kell a bevezeto˝ ben említett módon. Ha a két gépen nem egyezik meg az azonosítónk (pl. zaphod az rs1 gépen), akkor — az rs1-en a $HOME/.rhosts állományt használva) — a kiindulási gépen ✎ az $ rsh rs1 -l zaphod df
utasítást kell használni. A parancs kiadása után a helyi gépünk megpróbálja a távoli gépet elérni, majd a távoli gépen az utasítást lefuttatni. Az utasítás különleges értéke, hogy a távoli ✎ gépen futó utasítás standard be- és kimenete a helyi gépen van. Így például a $ rsh rs1 cat gyakorlas > > helyiproba utasítás az rs1 gépen található gyakorlas állományt a helyi gépen található helyiproba
állományhoz f˝uzi.
17.3. ANONYMOUS FTP HASZNÁLATA
217
Ha az rs1 gépen található gyakorlas állományt az rs1 gépen található tavoliproba állományhoz akarjuk f˝uzni, akkor a shell metakaraktereit macskakörmökkel le kell védenünk: ✎ $ rsh rs1 cat gyakorlas "> >" tavoliproba
Megjegyezzük, hogy C-shell (csh) használatakor az rsh utasítás néha hibaüzenettel tér vissza.
17.3. Anonymous ftp használata A UNIX terjedésével egyre több és több olyan programot írnak, melyeket forráskóddal együtt, díjmentesen terjesztenek. Ezeket az ún. public domain programokat ugyan nem lehet árulni, de bárki szabadon használhatja o˝ ket. Ilyenek többek között pl. a GNU fejlesztés, amely egy teljes, néha a „professzionális” fejleszt˝orendszereknél is jobb programokat (C, C++, Fortran-C fordító, debugger, UNIX segédprogramok, grafikus programok, stb.) tartalmazó szoftverrendszer. Az Internet ragyogó lehet˝oséget biztosít az ilyen típusú programterjesztésre az ún. anonymous ftp segítségével. Példaként vegyük a gnuplot programcsomagot: ennek megszerzéséhez el o˝ ször ✎ meg kell tudnunk azoknak a gépeknek a nevét, amelyek szerverként tárolják ezt a programcsomagot (a programcsomagok általában compress-el tömörített tar állományok, így az archívállomány neve .tar.Z végzo˝ dik). A szervergépek nevét az ún. archie szolgáltatáson keresztül kérdezhetjük le: pl. a bécsi egyetemen egy jól használható archie-szerver m˝uködik. Eléréséhez a $ telnet 131.130.1.23
parancs kiadása után az archie felhasználói azonosítóval léphetünk be. Ezek után már magába az archie programba kerülünk be. A teljes parancskészlet nem egységes, az aktuális gépen ezt általában a help utasítással kérdezhetjük le. A fenti példát folytatva el˝oször válasszuk ki az els˝o 50 találatot (ez id˝ot takarít meg): archie> set maxhits 50 majd keressünk rá a gnuplot szóra: archie> prog gnuplot
A program ezek után végigkeresi az adatbázist, és kiírja azoknak a gépeknek az Internet címét, amelyek a gnuplot programcsomagot tárolják. A címek mellett a teljes elérési útvonalak is megjelennek.
218 FEJEZET 17. HÁLÓZATI ALAPISMERETEK ÉS EGYÉB PROGRAMOK Egy adott cím kiválasztása után a quit (esetleg az exit) utasítással léphetünk ki az archie-ból. Ezek után az ftp segítségével lépjünk be a kiválasztott gépre: felhasználói azonosítóként anononymous-t, kulcsszóként saját E-levél címünket használjuk. Ezek után lépjünk be az archie által megadott könyvtárba (ez általában a /pub könyvtárból nyílik), és az ftp parancsait használva (l. 71. oldal) hozzuk át a programcsomagot. Vigyázzunk, az általában .tar, .Z, .gz végzo˝ dés˝u állományok bináris átvitelt (azaz el˝oször a binary utasítást) igényelnek! Az átvitel után a szokásos quit ftp utasítással zárhatjuk a kapcsolatot. Az áthozott programcsomagot a 11. fejezetben, a 133. oldalon leírt módokon csomagolhatjuk ki. Ezek után követnünk kell a programcsomag dokumentációjában leírt utasításokat. Megjegyezzük, hogy az ELTE az ftp.elte.hu gépen üzemeltet anonymous ftp szolgáltatást.
18. fejezet A tin elektronikus újság részletes leírása Az UseNet az 1970-es évek végén jött létre. Kezdetben — az akkori UNIX ☞ a tin leírása lehet˝oségeknek megfelel˝oen — UUCP kapcsolatot (általában modemet) használt rövid a 75. oldalon a viszonylag kevés újságrovat terjesztéséhez. A ’80-as évek közepén a UseNet egyre nagyobb és nagyobb lett, mind többen kezdték el használni. Ennek megfelel˝oen újabb terjesztési módok is megjelentek: a közvetlen TCP/IP kapcsolat, a gyors E-levelezés és a különböz˝o, a felesleges átvitelt elkerül˝o protokollok (pl. IHAVE/SENDME) ma már lehet˝oséget biztosítanak a háromezret meghaladó rovat terjesztéséhez. A UNIX mellett már más operációs rendszerek (VAX/VMS, IBM VM/CMS, stb.) is képesek futtatni a news programot. Az egyes rovatok — a sok cikk miatt — megleheto˝ sen sok lemezterületet igényelnek, amely nem mindig áll rendelkezésre. TCP/IP hálózat használata esetén lehet˝oség van egy központi ún. „news server” gép megadására 1 . Általában csak ez a szerver tárolja a leveleket, míg a többi gépro˝ l az újságolvasó programok a hálózaton keresztül, közvetlenül érik el a leveleket, az ún. NNTP protokollt használva. A központi szerver általában mindenkinek, bármely gépr o˝ l lehet˝ové teszi az olvasást, de csak a külön engedélyezett gépekr o˝ l lehet új cikkeket elküldeni. A tin program egy egyszer˝uen kezelheto˝ , mégis sok feladatot ellátni képes program. A UNIX világban e mellett több más program is használatos: ilyenek a pl. a vnews, xrn (X11 Window alapú), gnus és gnews (a GNU emacson alapuló), nn, rn és a trn újságolvasó programok. A VAX/VMS rendszeren a teljes UseNet 1
Pl. az ELTE-n a ludens.elte.hu tölti be a news server szerepét.
219
220
FEJEZET 18. A TIN ELEKTRONIKUS ÚJSÁG RÉSZLETES LEÍRÁSA
news rendszert az ANU NEWS program valósítja meg.
18.1. A rovatok kiválasztása ✎ A tin els˝o használatakor kiírja az adott gépen található összes rovatot. Például: KILL ON u u u u u u u u u u u u u u u
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Group Selection (1986) alt.abortion.inequity alt.abuse-recovery alt.abuse.offender.recovery alt.abuse.recovery alt.activism alt.activism.d alt.adoption alt.aeffle.und.pferdle alt.agriculture.fruit alt.agriculture.misc alt.aldus.freehand alt.aldus.misc alt.aldus.pagemaker alt.alien.vampire.flonk.flonk.flonk alt.alien.visitors
Type ’h’ for help -
A tin a rovatok mindegyikét u (unsubscribed) jellel látja el: ez azt jelenti, hogy az a rovatot nem „fizettük” el˝o. A sorszámmal vagy a j és k gombok segítségével (esetleg a fel- és lefelé nyilakkal) kiválasztott aktuális rovatot az s (subscribe) utasítással vehetünk fel saját listánkra. A kés˝obbiek során is lemondhatunk egy rovatot az u (unsubscribe) utasítással (ezek a parancsok természetesen csak rovatlista szinten m˝uködnek). Egy egész rovatcsoportot (pl. alt) az S utasítással vehetetünk fel a listára, és az U paranccsal mondatunk le, ha kiterjesztett reguláris kifejezést használva megadjuk a csoport ✎ nevét. Például a sci.* kifejezés az összes sci-vel kezdo˝ d˝o csoportot kiválasztja, míg a .*comp.* kifejezéssel minden olyan csoportra hivatkozunk, melynek nevében szerepel a comp string. A rovatok listáját, a már olvasott cikkek számával együtt a felhasználó HOME könyvtárában található .newsrc állomány sorolja fel. Ebben a rovatok neve után ✎ megtalálható a már olvasott cikkek száma, pl.: .. . comp.lang.idl-pvwave: 32-123 comp.laser-printers!
.. .
18.2. CIKKEK ELKÜLDÉSE
221
Itt a comp.lang.idl-pvwave rovat 32-t˝ol 123-ig terjed˝o sorszámú cikkeit olvastuk, míg a comp.laser-printers rovatra nem fizettünk elo˝ (ezt jelzi a !). A rovatokat az állománybeli sorrendben írja ki a tin a képernyo˝ re. Amennyiben a !-et :-ra cseréljük, a program ezt úgy tekinti, mintha elo˝ fizettünk volna az adott rovatra. Ha a .newsrc állományt kézzel átszerkesztjük, a tin az újabb elindításkor a változtatásokat figyelembe fogja venni.
18.2. Cikkek elküldése A tin lehet˝oséget ad új cikkek elküldésére is. Ezt a w (write) utasítás segítségével tehetjük meg. Ekkor egy editor (alapértelmezésben a vi) segítségével megszerkeszthetjük a cikket, a cikk címét (tárgy, Subject ) és a rovat (vagy esetleg rovatok) nevét, ahova küldeni szeretnénk (alapértelmezésben ez az aktuális rovat). Egy cikk olvasásakor nemcsak új levelet küldhetünk, hanem lehet o˝ ség van egy éppen olvasott cikkre válaszolni. Erre az F (followup) parancs szolgál, amely ilyenkor az írásra használt szerkeszt˝obe betölti az eredeti cikket (így kényelmesen tudunk az egyes részekre hivatkozni). A cikkek elküldésekor lehet˝oség van a terjesztési kör (pl. ELTE, Magyarország, Föld, az egész világ stb.) megadására is. A cikkek írásakor ezért ne feledjük, hogy írásunkat az egész egyetemen, s˝ot akár az egész világon is olvashatják! Ügyeljünk arra, hogy szokásostól eltér˝o terjesztési kör esetén azt pontosan, szándékunknak megfelel˝oen adjuk meg (ellenkez˝o esetben sok, a helyes használatra figyelmezteto˝ levelet kaphatunk a morcos olvasóktól). Általában célszer˝u, ha megpróbálunk alkalmazkodni az adott rovatban megjeleno˝ cikkek stílusához, valamint tanulmányozzuk a cikkek írásakor követend˝o, általánosan elfogadott szabályokat (ezek rendszeresen megjelennek a news.announce.newusers rovatban). Bizonyos rovatokba csak szerkeszt˝okön keresztül lehet írni (így pl. elkerülheto˝ a sok hasonló válasz-cikk egy kérdésre, ki lehet sz˝urni az esetlegesen nem oda tartozó kérdéseket, stb.). A küld˝onek nem kell különbséget tenni a különbözo˝ rovatok között, a tin automatikusan postázza az esetleges rovatszerkeszt o˝ nek a megírt cikket. A cikkek írásakor a tin a megírt cikk végéhez illeszti — amennyiben a felhasználó létrehozta — a $HOME/.signature aláírás állomány tartalmát. Egy aktuális cikket – ha az saját írásunk – a C (cancel) parancs segítségével törölhetünk ki a cikklista szinten. A törlés elég sokáig tarthat, mivel a cikkek a hálózaton keresztül hamar szétterjednek a különbözo˝ gépekre.
222
FEJEZET 18. A TIN ELEKTRONIKUS ÚJSÁG RÉSZLETES LEÍRÁSA
18.3. A tin környezete A tin program több állományban tárolja az újságolvasó m˝uködésével kapcsolatos információkat. Mindenki egy id˝o után kiválasztja azokat rovatokat, amelyeket többé-kevesbé rendszeresen olvas, ezért a program a $HOME/.newsrc állományban rözíti a „el˝ofizetett” rovatok listáját a már olvasott cikkek számának feltüntetésével. Az elektronikus újság lehet˝ové teszi, hogy a már korábban olvasott cikkek a következ˝o belépéskor már ne zavarjanak. Ennek megfelelo˝ en egy rovatba történ˝o belépés után minden cikk olvasott cikknek számít, és ez szintén rögzül kilépéskor a $HOME/.newsrc állományban. Lehet˝oség van a cikkek bizonyos csoportosítására is rovatlista szinten a t (tag) parancs segítségével további feldolgozás (nyomtatás, E-levél és pipe) számára. A tin az állományban használt sorrendben jeleníti meg a rovatokat a képerny˝on. A tin m˝uködésével kapcsolatos állományok zömét a $HOME/.tin könyvtár tartalmazza. A $HOME/.tin/tinrc konfigurációs file közvetlenül is szerkeszthet˝o, de a tin programban is el˝ohívható az M utasítással: Options Menu 1. 3. 5. 7. 9. 10 11 12 13
Auto save Mark saved read Show Author Print header Process type Sort article by Save directory Mail directory Printer
: : : : : : : : :
ON 2. Save ON 4. Kill ON 6. Draw OFF 8. Goto None Date: field (ascending) /u/galahad/News /u/galahad/Mail /usr/ucb/lpr
separate articles arrow 1st unread
: : : :
ON OFF OFF ON
Select option by entering number before text. Any other key to save.
Az opciószám megadása után változtathatunk az adott ponton, míg pl. az adott beállítást. Az Auto save opció beállításakor a cikk Archive-name sorát használja fel a tin az esetleges elmentéskor, míg a Save separate opcióval kiválasztható, hogy ezek a cikkek külön-külön állományba kerüljenek-e. A Mark saved read pont az elolvasott cikkek automatikus bejegyezését teszi leheto˝ vé a $HOME/.newsrc állományba. A Kill articles engedélyezi a cikkek kizárását a $HOME/.tin/kill állomány használatával a From: és Subject: sorok alapján: ez különösen hasznos Enter gombbal elmenthetjük az
18.4. A TIN PARANCSAI
223
lehet bizonyos szerz˝okt˝ol származó cikkek kizárására. A kill menübe a rovatlista és cikklista szintr˝ol a Ctrl-K utasítással léphetünk be. A Show Author pontban be- és kikapcsolhatjuk a szerzo˝ kiírását, míg a Draw arrow pontban az inverz és a --> mutató között választhatunk. A Print header a teljes és a sz˝uk (csak a Subject és From: mez˝oket tartalmazó) fejléc között választ. A Goto 1st unread kapcsoló beállítása esetén a rovatlistába belépve a gép a a mutatót az els˝o, még nem olvasott cikkeket tartalmazó rovatra állítja automatikusan. A tin képes a leveleket különböz˝o software terjesztési módoknak megfelel˝oen dekódolni. A Process type dekódolási típus lehet shell script(azaz egy önszétcsomagoló program), uuencode (bináris file ASCII átvitele), uuencode + zoo (zoo bináris tömörített archívum ASCII átvitele) és patch (program javító file). A Sort article by pontban a cikkek sorrendjének kritériumait adhatjuk meg (ez lehet üres, vagy a cikkek Subject:, From: vagy Date: mezo˝ je). A Save directory az elmentett cikkekhez tartózó könyvtárat állítja, míg a Mail directory és a Printer a tin program által használt mailer és a nyomtató elérését adja meg. A konfigurációs állományok beállítását a környezeti változók módosíthatják. A két legfontosabb egyike az NNTPSERVER, amelyik a news server Internet címét adja meg. A másik az EDITOR változó, amely a cikk küldésekor használt szövegszerkeszt˝o elérését tartalmazza.
18.4. A tin parancsai Általában a rovat- és cikklistán történ˝o mozgáshoz nemcsak a j-k gombokat (esetleg nyilakat) használhatjuk, hanem a Ctrl-U (vagy b) és a Ctrl-D (vagy Szóköz) parancsokkal léphetünk egy képernyo˝ nyit felfelé ill. lefelé. Ha egy adott sorszámú rovatra ill. cikkre akarunk hivatkozni, akkor a sorszámának begépelése rögtön odavisz minket. A $ utasítás a lista végére ugrik. Egy adott szinten lehet˝oség van megadott kifejezés keresésére: erre a vi programnál használatos / (el˝ore keresés) és ? (visszafele keresés) utasításokat használhatjuk. A Ctrl-L parancs újraírja a képerny˝ot. A tin sok hasznos paranccsal rendelkezik, melyeket vagy az adott szinthez tartozó h (help) paranccsal, a struktúráltabb H (help) paranccsal, vagy a program man leírásában (man tin) találhatnak meg az érdekl˝od˝ok. A leggyakrabban használt, az el˝oz˝oekben nem szerepelt utasítások a következo˝ k:
224
FEJEZET 18. A TIN ELEKTRONIKUS ÚJSÁG RÉSZLETES LEÍRÁSA
• általános és rovatlista szinten használható utasítások: Alkalmazza a kill sz˝ur˝oket az adott szintre (a kill sz˝ur˝ot a 222. oldalon leírt módon állíthatjuk be). Ki- és bekapcsolja a minimenüt. Új rovatot választhatunk ki segítségével a rovat- és cikklista szintekr o˝ l. Az adott rovatot áthelyezi a rovatlistában a megadott sorszámú helyre. A $ a legutolsó pozícióra vonatkozik. „El˝ofizet” a megadott rovatra (csak rovatlista szinten). „El˝ofizet” egy megadott mintával egyez˝o rovat(ok)ra (csak rovatlista szinten). Törli az „el˝ofizetést” az aktuális rovatra (csak rovatlista szinten). Törli az „el˝ofizetést” a megadott mintával egyez˝o rovat(ok)ra (csak rovatlista szinten). Felfrissíti a $HOME/.newsrc állományt az operációs rendszer központi rovatlistájából (csak rovatlista szinten). Az adott rovatban minden cikket olvasottnak állít be. Az adott rovatban minden cikket olvasatlannak állít be (csak rovatlista szinten). Az adott cikket olvasatlannak állítja be (csak cikklista és cikkolvasó szinten).
Ctrl-K H g m s S u U y c z z
• cikklista és cikkolvasó szinten használható utasítások: a A t
U m o | s
El˝ore keresi az adott szerz˝ot. Hátrafelé keresi az adott szerz˝ot. A tag parancs segítségével további feldolgozás számára jelölhetünk ki cikk(ek)et, ami lehet nyomtatás (o), E-levél (m), elmentés (s) és pipe (|) (csak cikklista szinten). A tag parancs hatását szünteti meg (csak cikklista szinten). Az aktuális cikke(ke)t (vagy a megjelölt listát, esetleg egy adott mintával kiválasztot cikkeket) elküldi E-levélként valakinek. Az aktuális cikke(ke)t (vagy a megjelölt listát, esetleg egy adott mintával kiválasztot cikkeket) kinyomtatja. Az aktuális cikke(ke)t (vagy a megjelölt listát, esetleg egy adott mintával kiválasztot cikkeket) egy adott parancsnak megadja bemenetként. Elmenti az aktuális cikke(ke)t (vagy a megjelölt listát, esetleg egy adott mintával kiválasztot cikkeket). Amennyiben egy elm levélszekrénybe akarunk menteni, használjuk a file nevének megadásakor az =FileNév
18.4. A TIN PARANCSAI
225
megjelölést. A +FileNév egy RovatNév/FileNév típusú állományt ad meg a felhasználó $HOME/News könyvtárában. d A cikket az ún. rot13 eljárással dekódolja. Az ilyen típusú cikkek esetleg felháborítóak, gusztustalanok, stb. lehetnek az olvasók számára (ez a parancs csak a cikkolvasó szinten m˝uködik).
Tárgymutató kimenet, 53, 54 példák, 56 írási jog, 42 a.out, 152 alias, 99 alkönyvtár, 37 anonymous ftp, 217 ar, 149 példák, 151 archie, 217 archiválás, 133, 134 archiválási példák, 138 argumentum, 22 ARP, 214 at, 156 awk, 117 BEGIN, 121 ciklus, 124 END, 121 függvények, 123 feltételek, 120, 124 kapcsolók, 117 kiírás, 125 kifejezések, 118 m˝uködése, 118 példák, 126 parancsok, 118 utasítások, 123 változók, 121
., 39 .., 39 .forward, 194, 206 .netrc, 71 .newsrc, 220 .profile, 104 .rhosts, 215 .tinrc, 222 /dev/rmt0, 137 /dev/rmt0h, 137 /dev/rst0, 137 /usr/lib/Mail.rc, 194 <, 54, 55 >, 53 >>, 54 állományok, 23 átnevezése, 32 kírása, 27 keresése, 41 létrehozása, 24 listázása, 25 másolása, 31, 40 mozgatása, 40 nyomtatása, 49 törlése, 32 típusai, 24 védelme, 42 védelmi kódja, 42 átirányítás, 53 bemenet, 54 226
TÁRGYMUTATÓ batch, 158 bg, 59 bridge, 214 bsplit, 142 btoa, 142 C fordító, 146 cat, 28 cc, 146 cd, 39 chmod, 42 chsh, 18 compress, 140 cp, 31 cron, 158 crontab, 158 cs˝o, 56 dbx, 160 kapcsolók, 161 kifejezések, 160 példa, 163 parancsok, 162 dd, 135 példák, 136, 138 domain, 214 E-levelezés, 68 EBCDIC, 136 EBCDIC átalakítás, 136 echo, 19 ed, 173 egrep, 107 elérési út, 37 elérési útvonal, 39 abszolút, 39 relatív, 39 elektronikus újság, 75 .newsrc, 220 cikk küldés, 221
227 cikk kizárása, 222 cikklista, 76 el˝ofizetés, 220 els˝o indítása, 75 környezeti változók, 223 olvasás, 77 parancsok, 223 rot13, 225 rovatlista, 76 elektronikus levél automatikus továbbítása, 194, 206 elektronikus levelezés levélszekrény, 193 elm, 68, 203 .elm, 203 alaputasítások, 204 alias, 207 automatikus továbbítás, 206 becenév, 207 elmrc, 203 els˝o használata, 203 f˝omenü, 68, 204 folder, 68, 206 küldés, 69 keresés, 204 kilépés, 69 konfigurációs állomány, 203, 208 mozgás, 69, 204 olvasás, 69 rövid leírás, 68 részletes leírás, 203 törlés, 205 továbbküldés, 205 válaszolás, 205 elmrc, 208 Ethernet, 212 f77, 148
228 felhasználói név, 16 fg, 59 fgrep, 107 find, 41 finger, 74 folder, 68 fordítási könyvtár, 149 fordított aposztróf, 56 Fortran fordító, 148 ftp, 71 anonymous, 217 elindítása, 71 kilépés, 72 példa, 73 utasítások, 72 futtatási jog, 42 gopher, 78 mozgás, 79 olvasójelek, 80 grep, 33, 107 kapcsolók, 108 minta, 108 példák, 33, 36, 109 rövid leírás, 33 részletes leírása, 107 héj, 19 head, 29 helyettesít˝o karakterek, 34 ICMP, 213 IP, 211 jelszó, 16 megváltoztatása, 17 jobs, 59 jog írási, 42 futtatási, 42 olvasási, 42
TÁRGYMUTATÓ könyvtár, 37 aktuális, 37 al-, 37 gyökér, 37 HOME, 37 létrehozása, 41 lekérdezése, 37 mozgás, 39 szül˝o, 37 törlése, 41 kapcsoló, 20 kijelentkezés, 18 kill, 60 Korn shell, 83 ksh, 83 állománynév helyettesítés, 98 alias, 99 beépített parancsok, 87, 91 bemenete, 98 függvények, 89 feltételek, 89 környezeti változók, 84 kapcsolók, 94 kimenete, 98 metakarakterek, 85 paraméter, 100 parancsfeldolgozás, 84 parancsszerkesztés, 86 kulcsszó, 16 ld, 152 link, 40 hard, 40 létrehozása, 40 szimbolikus, 40 login, 16 lpq, 50, 51 lpr, 49
TÁRGYMUTATÓ ls, 21, 25 mágnesszalagos egységek, 137 MAIL, 193 mail, 65 .mailrc, 194 automatikus továbbítás, 194 környezeti változók, 193 kapcsolók, 194 kilépés, 68 levél elküldése, 66 levél fogadása, 67 levelesláda, 193 példák, 68, 200 parancsok, 196 rövid leírás, 65 részletes leírás, 193 tilde parancsok, 195 UCB, 65 változók, 199 MAILCHECK, 194 MAILRC, 194 mailrc, 194 make, 166 kapcsolók, 169 kiterjesztések, 167 makró, 167 példák, 169 példa, 168 man, 22 mesg, 65 meta karakter, 186 MicroEMACS, 46, 185 .emacsrc, 185 üzemmódok, 190 állomány kezelés, 188 ablakok, 189 beszúrás, 187
229 buffer, 189 helyettesítés, 188 keresés, 187 kilépés, 46 makrók, 191 meta karakter, 186 mozgás, 47, 186 mozgatás, 190 parancsok, 185 rövid leírása, 46 részletes leírása, 185 shell elérése, 191 törlés, 46, 187 more, 30 mt, 137 példák, 138 multitasking, 15 mv, 32 news server, 219 nice, 61, 156 nohup, 60 nyomtatás, 49 lekérdezése, 50 megszakítása, 51 nyomtató, 49 object könyvtár, 149 olvasási jog, 42 pack, 141 paraméter, 22 parancs megszakítása, 19 parancsállományok, 57 Pascal fordító, 149 passwd, 17 password, 16 path, 37 pcat, 141
230 pg, 29 PID, 60 pipe, 53, 56 prioritás, 60 beállítása, 61 program futtatása, 59 háttérben futtatása, 59 leállítása, 59, 60 megszakítása, 59 programok összekapcsolása, 56 programok parancsok argumentumaként, 56 ps, 60 pwd, 39 queue, 49 állapota, 50 megszakítása, 51 nyomtatás, 49 renice, 61 rlogin, 216 rm, 32 rot13, 225 routing, 214 rsh, 216 rtin, 75 script, 57 sed, 110 kapcsolók, 111 példák, 114 parancsok, 111 shell, 19, 53 sort, 33, 127 kapcsolók, 127 példák, 34, 129 rövid leírása, 33 részletes leírás, 127
TÁRGYMUTATÓ split, 142 standard input, 54 standard output, 53 szimbolikus debugger, 160 tail, 29 talk, 64 letiltása, 65 tar, 134 példák, 138 TCP/IP, 209 datagram, 210 portszám, 210 rétegek, 210 socket, 212 telnet, 70 tin, 75 els˝o indítása, 220 konfigurációja, 222 UCB mail, 65 UDP, 213 umask, 105 uncompress, 140 uniq, 115 unpack, 141 UseNet, 219 user ID, 16 uudecode, 142 uuencode, 141 várakozó lista, 49 állapota, 50 megszakítása, 51 nyomtatás, 49 vi, 45 üzemmódok, 173 állományok beolvasása, 181 állományok kiírása, 181 beírás, 45, 178
TÁRGYMUTATÓ behívása, 45 helyettesítés, 181 kapcsolók, 174 keresés, 178 kilépés, 45, 182 másolás, 180 makró, 183 mozgás, 46, 177 mozgatás, 180 parancsok, 176 rövid leírás, 45 részletes leírás, 173 set, 175 shell elérése, 182 sorok jelölése, 174 törlés, 46 változók, 175 visszaállítás, 180 who, 22 write, 63 letiltása, 64 zcat, 140
231