You are on page 1of 351

Bartk Nagy Jnos

Laufer Judit

UNIX felhasznli ismeretek


Bartk Nagy Jnos
Laufer Judit




UNIX
FELHASZNLI
ISMERETEK













Openinfo Kiad
Az MTA SZTAKI UNIX Oktatkzpont tanfolyamanyagainak felhasznlsval rta:
Bartk Nagy Jnos s Laufer Judit

Lektorlta:
Dr. Demetrovics Katalin
Ivanyos Gbor
Singer Pter

Az Openinfo Knyvek sorozatszerkesztje:
Dr. Hutter Ott

PDF formtumra tkonvertlta:
Veres Mikls


ISBN 963 85139 0 X
ISSN 1217-8608



A UNIX Szmtgpes Kultra Elterjesztsrt Alaptvny tmogatsval kszlt.


A szmtgpes szvegszerkeszts a Scriptum Kft. munkja.
A nyomst s a ktst az Akadmiai Kiad s Nyomda Vllalat ksztette.


Forgalmazk:














Scriptum Kft.
6771 Szeged
Mlyva u. 34.
Tel.: (62) 406-133
Fax: (62) 405-722


OpenInfo Kft.
1111 Budapest
Kende u. 13-17.
Tel.: 186-8760
Fax: 166-7503
5



TARTALOMJEGYZK
1. BEVEZETS 19
A UNIX kialakulsa 19
Mi is a UNIX? A rendszer felptse 23
UNIX dokumentcik 24
Kziknyvek 24
On-line help 28
2. ALAPFOGALMAK 30
Tbbfeladatos-tbbfelhasznls mkds 30
Bekapcsols-belps-kilps-kikapcsols 31
Bejelentkezsi nevek s kulcsszavak 32
Norml s privilgizlt felhasznlk 32
Terminlelrs: soros vonali s hlzati s rendszerterminlok 33
Folyamatkezels: eltr- s httrfolyamatok, dmonok s jobok 34
Programok s folyamatok 34
Httrfolyamatok s dmonok 35
A parancsrtelmez 36
A shell mint programozsi nyelv 37
A szerszmoslda s a deszkapados modell 37
Klnbz shellek 37
A fjlrendszer: Fjlok s katalgusok, nvkonvencik 38
Felhasznli- s csoportazonostk 39
Hozzfrsi jogok s vgrehajthat fjlok 40
3. ISMERKEDS AZ LLOMNYRENDSZERREL 41
Bejelentkezs 41
A fjlrendszert kezel parancsok 43
A fjlrendszer kitntetett pontjai 44
Hol vagyunk? A pwd parancs 44
Mit lthatunk? Az ls parancs 45
Hov jutunk? A cd parancs 46
Minek nevezzelek? Nvkonvencik 47
UNIX felhasznli ismeretek
6
Rejtett fjlok 48
Katalgusok ltrehozsa: a mkdir parancs 48
Katalgusok trlse: az rmdir parancs 49
Alapvet fjlkezel parancsok 49
Fjlok ltrehozsa 50
Fjlok megtekintse: a cat parancs 51
Fjlok tnevezse: a mv parancs 52
Fjlok msolsa: a cp parancs 53
Fjlok trlse: az rm parancs 53
Lncok ltrehozsa: az ln parancs 53
A szimbolikus lnc 53
Hozzfrsi jogosultsgok 57
Hozzfrsi jogosultsgok mdostsa: a chmod parancs 60
Tulajdonos- s csoportvlts: chown s chgrp 61
Msodlagos csoportok 63
Gyakorlati plda: a passwd program 63
Mi hol tallhat a UNIX-ban? llomnykonvencik 65
4. A PARANCSRTELMEZ (BOURNE SHELL) 67
Specilis karakterek 67
A vezrlkarakterekrl 67
Karaktertrls 68
Sortrls 68
Specilis jelents elnyomsa 68
Programfuts meglltsa 69
Httrben fut programok meglltsa 69
Fjlvge 69
Kpernylistzs 70
A parancssor feldolgozsa 70
Tbb parancs egy sorban 71
A standard perifrik s tirnytsuk 72
A csvezetk (pipe) 74
Programok csoportostsa zrjelezssel 76
A standard error 76
Csvek elgaztatsa: a tee parancs 77
Folyamatkezels 77
Httrfolyamatok s folyamatazonostk 77
Folyamatok lelvse: a kill parancs 78
Folyamatok kilistzsa: a ps parancs 78
Programfuttats kilps utn: a nohup parancs 79
Programok idztett vgrehajtsa: az at parancs 79
A fjlnevek behelyettestse a shell-ben 81
A DOS s UNIX metakarakterek 83
Metakarakterek semlegestse 83
Tartalomjegyzk
7
Megjegyzsek 84
Shell-scriptek 85
Programargumentumok, shell vltozk 86
A rendszer ltal lltott fontosabb shell-vltozk 88
Shell-vltozk exportja 89
Pozicionlis paramterek 90
Paramterbehelyettests 91
Parancsbehelyettests 92
Krnyezetalakts: a profile fjlok 92
5. REGULRIS KIFEJEZSEK 94
6. AZ ED EDITOR 97
A UNIX szvegszerkesztirl ltalban 97
Az ed 97
Mkdsi alapelvek 97
Az ed parancsainak alakja 98
Az ed szvegszerkeszt parancsai 100
Nhny plda az ed szvegszerkeszt hasznlatra 102

7. A SED EDITOR 105
A sed mkdsi elve 106
Cmzs a sed-ben 107
A sed fontosabb parancsai 108
Behelyettests 108
Trls 110
Hozzfzs, beszrs, vltoztats 110
Transzformci 110
Nyomtats 111
j sor beolvassa 111
Fjlok rsaolvassa 111
Tbb sor kezelse 113
Az ideiglenes troltr s parancsai 114
Elgazsok, feltteles parancsvgrehajts 114

8. A VI EDITOR 117
A vi mkdse, zemmdjai 118
Ismerkeds a tllkszlet 119
Pozicionl parancsok 121
UNIX felhasznli ismeretek
8
Szavak, mondatok s egyb szvegelemek 121
A vi parancsok felptse 122
Pozicionls karakterek alapjn 123
Pozicionls sorok alapjn 123
Pozicionls szavak alapjn 123
Pozicionls mondatok alapjn 123
Pozicionls bekezdsek alapjn 124
Pozicionls a kpernyn 124
Pozicionls az llomnyban grgets 124
Pozicionls sorszm alapjn 124
Pozicionls mintakeresssel 124
Szvegbeviteli parancsok 125
Szvegmdost (cserl) parancsok 125
Trl parancsok 126
Trls parancsmdban 126
Trls beviteli mdban 126
llomnyvlts s ments 126
Specilis parancsok 127
Jelzpontok (markerek) 128
Pufferkezels 128
Nvtelen s neveztett pufferek 128
Szvegmsols: p s y parancs 129
Vgs-ragaszts 130
Fjlmveletek s kls shell parancsok 130
Kls parancs vgrehajtsa vi all 130
Fjlok rsa-olvassa 131
Puffermveletek 131
Komplex keressek s behelyettestsek 132
Rvidtsek s makrk 133
A vi konfigurlsa 134
A :set parancs s a vi bels vltozi 134
A vi s ex konfigurcis fjljai 135
Az editorok sszehasonltsa 135
9. SEGDPROGRAMOK 136
Visszatrsi rtk 137
Szrk 137
llomnyok rendezse 137
Mintakeress llomnyokban 139
llomnyok sszehasonltsa 142
llomnylistz (dump) parancsok 145
Karakterkonverzi 146
llomnykeress 147
Adatbeviteli parancsok 148
Tartalomjegyzk
9
Aritmetikai kifejezseket kezel parancsok 149
Kommunikcis parancsok 151
Egyb hasznos UNIX utility-k 153
10. SHELL PROGRAMOZS 154
A shell komplex tirnytsi funkcii 154
Begyazott input (here documents) 154
Vezrlsi szerkezetek a shell-ben 156
Elgazsok 156
Az if elgazsi mechanizmus 156
A case elgazsi mechanizmus 157
Ciklusok 158
A for ciklus 158
A while s az until ciklus 158
Pldaprogramok 160
2, 3, 4, ...: tbbhasbos nyomtats 160
bell: adott szm terminl hangjelzs 161
exch: llomnyok cserje 162
same_nm: azonos nev llomnyok keresse 163
updt: frissen mdostott llomnyok listzsa 164
bundle: programcsomagok tmrtse s kibontsa 166
11. A C SHELL 170
A C shell indtsa 170
Kilps a C shellbl 170
A C shell konfigurcis fjljai 171
A .cshrc konfigurcis fjl 171
A .login konfigurcis fjl 172
A .logout konfigurcis fjl 172
Metakarakterek semlegestse 174
Szintaktikus metakarakterek 174
Automatikus fjlnv kiegszts 175
Parancsszerkesztsi lehetsgek a C shell-ben 175
Parancshistria megtekintse 176
Parancsok ismtelt vgrehajtsa 176
Hivatkozs az esemny sorszmval 176
Hivatkozs az esemny relatv elhelyezkedsvel 177
Hivatkozs az esemny szvegvel 177
Parancs argumentumok jra felhasznlsa 178
Elz esemnyek mdostsa 179
Az alias mechanizmus 181
Az alias behelyettests 182
UNIX felhasznli ismeretek
10
Alias trlse 183
tirnytsok 183
Shell-vltozk 186
rtkads s hivatkozs vltozkra 186
Numerikus shell-vltozk s kifejezsek 187
Vltozbehelyettests 188
Krnyezeti- s shell-vltozk a C shell-ben 189
A C shell bels vltozi 191
Parancsbehelyettests 193
Fjlnv behelyettests 194
Kifejezsek s opertorok 195
Aritmetikai opertorok 195
Logikai (relcis) opertorok 195
rtkadsi opertorok 196
Postfix opertorok 196
Fjl- s parancs-teszt opertorok 196
Vezrlsi szerkezetek 197
if-then-endif 197
switch 198
foreach 199
while 199
goto 199
A parancsvgrehajts folyamata 200
Jobkezels 201
A C shell beptett parancsai 202
12. A KORN SHELL 209
Indts s kilps a Korn shell-bl 209
Konfigurcis fjl- s shell-vltozk 210
A shell opciinak belltsa 211
A shell, mint parancsrtelmez tulajdonsgai 213
Ktirny cshlzat 213
llomnynv kiegsztsek 214
Tilde jel behelyettestse 215
Vltozk s a paramter helyettestsek 216
Utastsok behelyettestse 219
Alias-ok s fggvnyek 220
Egsz aritmetika 222
A job fogalma 223
Az utastssor editlsa, history hasznlata 223
13. AMI KIMARADT... 226
Terminlkezels 226
Az stty parancs 226
Tartalomjegyzk
11
Kontroll belltsok 228
Input belltsok 228
Output belltsok 229
Loklis belltsok 229
Vezrlkarakter belltsok 230
Kombinlt belltsok 231
Eltrs az SVR4 s BSD stty kztt 231
Terminlproblmk kezelse 232
A tput parancs 233
Nyomtats 234
SVR4 rendszerek 234
Az lp parancs 235
A cancel parancs 237
Az lpstat parancs 238
BSD rendszerek 239
Az lpr parancs 239
Az lpq parancs 240
Az lprm parancs 241
Archivls, ments 241
A cpio parancs 241
A tar parancs 243
A dd parancs 245
DOS alap fjlok s lemezek kezelse 246
DOS konverzis segdprogramok 247
FGGELKEK 248
Permutlt index 248
Mini manul 253
Hibakeress, tippek s trkkk 294
Feladatgyjtemny 306
TRGYMUTAT 347
15



ELSZ

Knyvnk az MTA SZTAKI Unix Oktatkzpontja tanfolyamainak anyagra tmaszkodva
kszlt. Megrsakor ktelyek merltek fel bennnk, vajon rdemes-e jabb UNIX knyvet
rni, amikor a knyvpiac tele van a Unixot trgyal knyvekkel, s ezek kzl a Kernighan-
Pike pros nlklzhetetlen alapmve, A UNIX opercis rendszer magyarul is
hozzfrhet. Mgis a megrs mellett dntttnk, egyrszrl mert a Kernighan-Pike knyv
elg rgen rdott, s azta a Unix is jelents fejldsen ment t, msfell szmos tmval e
knyvek nem foglalkoznak, illetve csak egyegy rszterletben mlyednek el, sajnlatosan
kevs hangslyt fektetve a mindennapi letben rendszeresen felmerl problmkra.
A fent lertak szellemben szerepel knyvnkben a vi s a sed editor ismertetse ppgy,
mint a C s a Korn shellek, amelyekrl ismereteink szerint egyltaln nincs hozzfrhet
magyar nyelv irodalom.
Igyekeztnk a mg tapasztalatlan felhasznl hnyattatsait enyhteni, ppen ezrt kln
fejezetben foglalkozunk a mindennapi munka sorn elkerl, gyakran a
rendszeradminisztrci hatrterleteinek minsthet komplex tevkenysgekkel (ments,
nyomtats, kommunikci stb).
Elssorban a kezd, s az angolban nem jratos felhasznl veheti nagy hasznt a magyar
nyelv parancs-referencia rsznek, s az ennek hasznlatt megknnyt permutlt indexnek.
A Hibakeress, tippek s trkkk cm fejezetben a leggyakoribb hibahelyzeteket, s ezek
kezelst foglaljuk ssze sajt tapasztalataink alapjn.
Knyvnk msik erssgnek szntuk a gazdag feladatgyjtemnyt, amely lehetsg szerint
minden fontosabb terletet rint. Az itt szerepl feladatok megoldsval az olvas remnynk
szerint kell ismereteket fog szerezni ahhoz, hogy biztonsggal s rt mdon dolgozhasson,
tetszleges Unix rendszer alatt.
Knyvnk megrsnl a lehetsg szerint maximlisan megprbltunk platform- s
verzisemlegesek maradni, ami egyltaln nem bizonyult knny feladatnak. A knyv
mondanivaljnak tbbsge egyetemlegesen igaz a klnbz Unix verzikra, az olyan
rszeknl, ahol jelents eltrsek mutatkoznak az egyes Unix verzik kztt, erre mindig
utalunk a szvegben.
Vgezetl szeretnnk ksznetet mondani mindazoknak, akik megjegyzseikkel s
tancsaikkal segtettk e knyv megszletst; a Kedves Olvast pedig arra krjk, a
knyvvel kapcsolatos megjegyzseit, javaslatait, netn msokkal megosztsra rdemes
tapasztalatait juttassa el a kiadnak, hogy az jabb kiadsok mindannyiunk javra
gazdagodhassanak.
UNIX felhasznli ismeretek
16
Budapest, 1994
A Szerzk
Tartalomjegyzk
17



ELSZ A MSODIK
KIADSHOZ

t utnnyoms utn, vgre tdolgozva adjuk az Olvas kezbe knyvnk msodik kiadst,
abban a remnyben, hogy a Unix opercis rendszerrel ismerkedoknek ezutn is sok hasznos
informcit fog nyjtani. Iparkodtunk az elso kiadsban fellelheto hibkat gykerestl
kiirtani, br nem ringatjuk magunkat abban a hi remnyben, hogy ez ne lett volna jabb
hibk meleggya... A nyilvnval sajthibkon s kisebb korrekcikon tlmenoleg teljesen
tdolgoztuk a sed s a vi editorokrl szl fejezetet, szndkunk szerint most
gyakorlatiasabb, ugyanakkor teljesebb lerst kap kezbe az olvas. Szintn teljesen
tdolgoztuk a trgymutatt, de ami a legfontosabb, knyvnk immr megprblja tkrzni az
elozo kiads ta bekvetkezett vltozsokat, s ahol csak lehetett, a Unix'95 szabvnyokhoz
igaztottuk anyagunkat.
Kln is szeretnnk ksznetet mondani mindazoknak, akik hozzjrultak knyvnk
megszletshez s nevk kimaradt az elso kiadsbl; ksznet illeti Zahemszky Gbort,
lelkiismeretes s mindenre kiterjedo megjegyzseirt, tovbb Zsemlye Tamst, akinek
oroszlnrsze volt feladatgyujtemnynk kidolgozsban.
A Kedves Olvast pedig tovbbra is arra krjk, szrevteleit, jobbt javaslatait juttassa el a
Kiadnak (akr egy e-mailben is), mert hisszk, hogy rtkll mu a mai gyorsan vltoz
vilgban csakis az olvasval egytt, annak ignyeire hallgatva szlethet s maradhat fenn...
Budapest, 1997 november
A Szerzk
19
1. FEJEZET


BEVEZETS
1. A UNIX kialakulsa
1969-et rtak, amikor az AT&T Bell Laboratriuma kiszllt abbl a projektbol, amelyet az
MIT-vel egytt folytatott a Multics opercis rendszer kifejlesztse cljbl. A Bell
Laboratrium munkatrsai gy knyelmes interaktv szmtgpes krnyezet nlkl maradtak.
Ken Thomson s Dennis Ritchie ekkor fejlesztette ki egy gazdtlan PDP-7 tpus gpre a
UNIX prototpust, mely a Multics nyomn kapta nevt. Ez a rendszer mr tartalmazta a
UNIX legalapvetobb jellemzoit, nevezetesen az llomny- s processzkezelo alrendszert,
valamint minimlis szm egyb segdprogramot.
1971-ben a UNIX-ot, mely ekkor mg teljes egszben assemblyben volt megrva, s nem volt
nagyobb 16 kilobyte-nl, PDP-11-re rtk t. Ekkoriban hozta ltre Ritchie a C programozsi
nyelvet, mely az addig ltezo assembly s magasszintu nyelvek kztti igen szerencss
tmenetnek bizonyult. A UNIX rendszer magjt, a kernelt (pontosabban annak legnagyobb
rszt) 1973-ban trtk C nyelvre, ami abban az idoben szokatlan tletnek tunt. A C nyelvu
kernel hordozhatsga kvetkeztben hamarosan mr 25 UNIX rendszer mukdtt a Bell
Laboratrium klnbzo rszlegeiben.
1974-ben jelent meg az elso nyilvnos publikci a UNIX-rl, s ekkortl kezdett el
rohamosan terjedni, klnsen az egyetemeken, ahol az AT&T a kezdeti idokben ingyenesen
terjesztette.
1979-re mr mintegy 500 klnbzo UNIX rendszer mukdtt az Egyeslt l-lamokban;
klnsen nagy npszerusgnek rvendett a telefontrsasgoknl, ahol mind program-
fejlesztsi, mind hlzati tranzakcis feladatokra kiterjedten alkalmaztk. Ebben az vben
kezdtk meg a kereskedelmi cl rtkestst is, s szintn ebben az vben trtnt meg az elso
tvitel egy nem PDP gpre.
Az elso idoszak szabad terjesztsi politikja a gyors elterjeds mellett htrnyokkal is jrt: a
szabadon terjesztett forrskdba brki belenylhatott, sajt kpre s hasonlatossgra
formlva a helyi UNIX rendszert. Az 1977-82 kzti idoszakban az AT&T megprblta
sszefogni a sajt UNIX varinsokat, s a Version 7 utn a System III nven ismert rendszerrel
jelent meg a piacon.
1983-ban (ekkor mr szzezer krl jrt a mukdo UNIX rendszerek szma), jelent meg a
System III tovbbfejlesztse, a System V, amelynek jelenlegi legfrissebb vltozata az 1997-
ben bejelentett System V Release 5 (V.5).
UNIX felhasznli ismeretek
20
A Berkeley UNIX
A kaliforniai Berkeley egyetemen mr 1977 ta hasznltk a UNIX-ot, s az idok folyamn
kialakult egy szles krben elterjedt sajt UNIX vltozatuk, mely tbb ponton erosen eltr az
AT&T verziitl. E csaldot a BSD (Berkeley Software Distribution) jelzssel lttk el,
legfrissebb vltozata a 4.4 BSD UNIX.
A Xenix
A Xenix volt az elso olyan UNIX rendszer, mely IBM PC gpekre kszlt. (Megrgztt Unix
hvoket tn nem ildomos erre emlkeztetni, de kifejlesztoje a Microsoft volt...)Elso vltozatai
csak i8088 processzoron futottak, s annak korltozott kpessgei miatt igazi tbbfelhasznls
mukdst nem is tettek lehetov. Az i386 alap PC-k megjelensvel a Xenix is biztostja a
hagyomnyos UNIX gpek funkciit. A Xenix elsosorban az MS-DOS rendszerrel
kapcsolatos plusz szolgltatsokban trt el a System V s BSD alap UNIX rendszerektol,
gy rtelemszeruen a Xenix alap gpek biztostottak eloszr lehetosget az egy gpen
prhuzamosan meglvo MS-DOS llomnyok UNIX alli kezelshez. Mra, a
nagyteljestmnyu PC-k megjelensvel, egyre tbb igazi UNIX rendszert knlnak PC-kre
is; a kereskedelmi (rtsd: fizetos) rendszerek kzl messze a legelterjedtebb az SCO UNIX,
de a szabadon hozzfrheto Linux s FreeBSD is rohamosan terjed.
Trendek s szabvnyok
gy tunik, a UNIX terjedsi teme az elkvetkezo vekben is megmarad, sot fokozdik. Pr
ve mg csak a miniszmtgpek terletn volt jelentos a rszesedse, azta viszont mind a
magasabb, mind az alacsonyabb teljestmnykategrikban is elokelo helyet harcolt ki
magnak. A szmtgpes rendszerek teljes piacn az 1981-es 2%-rl 1986-ra a UNIX
kereken meghromszorozta jelenltt, s 1991-es becslt piaci rszesedse elrte a 22%- ot,
ami tbb mint 30 millird dollros forgalmat jelentett.
E hatalmas piac megszerzshez egy nagy problmval kell mg megkzdeni a gyrtknak, s
ez paradox mdon pp a szabvnyok hinya. A UNIX ugyanis kzel sem olyan egysges s
hordozhat, mint azt eleinte hittk. A problmk gykere a kezdeti idokre nylik vissza,
amikor a UNIX forrskdjt szabadon terjesztette az AT&T. Az ennek kvetkeztben
ltrejtt varinsokat igen nehz egysgesteni, az AT&T-nek is tbb esztendobe kerlt, amg
hzon bell kialakult valamifle egysg a System III kpben.
Jelenleg vatos becslsek szerint is legalbb hetven fle, jelentosen eltro UNIX van
kereskedelmi forgalomban, a System V, a BSD, illetve a Xenix megjells mindssze a
kiindulsi alapot biztostja egy-egy UNIX rendszer megtlsnl. (Mindegyik vltozatnak
vannak befolysos tmogati, a System V a nagy eurpai szoftverhzak krben s az zleti
alkalmazsoknl npszeru, a BSD vltozatok a kutatsi intzmnyekben kedveltek.)
1. fejezet Bevezets
21
Ilyen krlmnyek kztt a szabvnyostsnak rendkvli a jelentosge, s a kilencvenes vek
elejre felerosdtek az erre irnyul trekvsek. A kezdo lpst az AT&T tette meg, amikor
nyilvnossgra hozta az SVID (System V Interface Definition) nven ismert ajnlst. Ez
lnyegben az AT&T ltal szabvnyosnak tekintett System V rendszerhvsainak s
szubrutinjainak egysges felhasznli fellett s definciit hatrozza meg. Egy UNIX
verzi akkor minosl SVID kompatibilisnak, ha tjut az AT&T gynevezett validcis teszt-
jein, mely a rendszerhvsok SVID-konform voltt vizsglja.
Az SVID ktlu fegyvernek bizonyult az AT&T szmra: noha minden nagy szoftvercg
elismerte az SVID jelentosgt, az riasztlag hatott rjuk, hogy az egysges UNIX jvoje egy
kzel sem prtatlan cg kizrlagos felgyelete alatt alakuljon. Mintegy ellenreakci is volt
teht, hogy a UNIX-ot forgalmaz szoftvercgek egy csoportja (a /usr/group nevu
felhasznli csoport munkjt folytatva) Posix nven (Portable Operating System Interface
(x)) nven egy szabvnytervezetet dolgozott ki az IEEE gisze alatt, melyet jelenleg mind az
ANSI, mind az ISO tmogat. A Posix az SVID-ben definilt rendszerhvsok mintegy hetven
szzalkt hasznlja, szmos terleten hozz is tesz azonban j vonsokat, elsosorban a
valsideju, hlzati s adatbzis alkalmazsok, valamint az Ada nyelvvel val kapcsolat
terletn.
Hogy a dolog mg tovbb bonyoldjon, a legnagyobb eurpai gyrtkat tmrto X/OPEN
csoport ugyan tmogatta a Posixot, valamint tbb-kevsb az SVID-t is, de sajt
ajnlsaiban tovbbi termszetesen eltro... bovtseket (szuktseket) is ajnl.
Ami ezek utn az egyes UNIX-ot elollt cgeket illeti, a mg kzel sem kiforrott
szabvnyok kzti lavrozsban egszen mostanig a mindennel (tbb-kevsb)
kompatibilisnek lenni elve knlta az egyetlen kiutat. gy az ltalnos gyakorlat szerint egy-
egy UNIX rendszer alapvetoen valamelyik elterjedt vltozatra (System V vagy BSD) pl, de
a rivlis rendszer s a kszlo szabvnyok szerinti egyb rendszerhvsokat is tartalmazza, ha
pedig azonos nevu rendszerhvsok mskpp mukdnnek az egyes vltozatokban, a
felhasznl vlaszthatja meg, melyik rtelmezs szerint mukdjn az adott rendszerhvs.
Egysges UNIX
Az elmlt ngy-t v sorn a nagy UNIX fejleszto cgek kztt elkeseredett harc indult a
UNIX egysgestsrt, pontosabban az ltaluk favorizlt UNIX rendszerek
szabvnyostsrt, s az gretesen nvekvo piac megszerzsrt. A szakmban csak The
UNIX War nven emlegetett hborskods 1987-ben vette kezdett, amikor az AT&T
bejelentette, hogy az addig a BSD rendszereket tmogat Sun kzremukdsvel egysges
UNIX-ot fejlesztenek ki, pontosabban, a System V kvetkezo vltozata, a System V Release 4
(SVR4) integrlni fogja az AT&T s a BSD rendszerek szolgltatsait. E cl megvalstsra
jtt ltre a UNIX International (UI) nevu tmrls, tmogati kztt tallhat tbbek kzt az
NCR, a Unisys s a Data General.
Az SVR4, amelyet az AT&T s a Sun mellett az Intel, a Microsoft s az INTERACTIVE
Systems kzremukdsvel fejlesztettek, egyesti magban a System V, a 4.3 BSD s a Xenix
szolgltatsait, valamint a Posix ajnlsainak is megfelel.
UNIX felhasznli ismeretek
22
Az SVR4 fo vetlytrsa az Open Systems Foundation (OSF) ltal tmogatott Unix verzi, az
OSF/1 volt. Ez szintn egyestette magban a fobb Unix varinsok funkciit, de nem a
hagyomnyos Unix kernelre tmaszkodott, hanem a Carnegie-Mellon egyetemen fejlesztett
Mach opercis rendszerre. A Mach rendszerhvsi szinten teljesen Unix kompatibilis ugyan,
de eleve tbbfonalas, n. multithreaded kernelre pl. Ennek rvn helybol tmogatja a Unix
tbbprocesszoros rendszereken val hasznlatt, s a fut feladatok tbb processzor kzti
sztosztst is. E tborba sorakozott fel az IBM, a DEC, a HP, a Bull s a Siemens-Nixdorf
is.
A kt "ellensges szekrtbor" kztt mindig is volt mozgs, de az egsz piac akkor bolydult
meg igazn, amikor a Novell megvsrolta a Unix System Laboratories-t (USL), azt a cget,
ami az AT&T jogutdjaknt gondozta az SVR4 Unix rendszerek forrskdjt. Az iparban
hatalmas vihart kavart e lps, mert ktsgess vlt, hogy a Unixszal soha nem foglalkozott
Novell teljes llekkel fogja-e a tovbbiakban tmogatni a Unix fejlesztst. Taln ppen e
flelmek miatt, egyre tbb cg vette meg a Unix forrskdjt a Novelltol, hogy bebiztostsa
magt az esetleges ksobbi "rugalmas elszakadsra".
A fenntartsok igazoldtak, a Novell nem igazn tudott mit kezdeni a Unixszal, mg vgl
1993-ban egy vratlan hzssal tadta az SVR4 Unix vdjegyet s az azzal kapcsolatos
minostsi jogokat a fggetlen X/Opennek. gy a Unix-megfelelosg elbrlsa vgre egy
gyrtfggetlen szervezethez kerlt, ami jelentos lkst adhat a tovbbi fejlesztsnek. Az
X/Open a Posix ajnlsokat tovbbfejlesztve s a legfontosabb gyrtkkal konzultlva
fejlesztette ki az n. Spec 1170 ajnlst, ami jelenleg a Unix minosts alapjt kpezi. (A nv
onnan ered, hogy a megkrdezett gyrtk kzmegegyezses alapon definiltk a szmukra
legfontosabb Unix rendszerhvsokat s segdprogramokat, mindazokat, amiket legfontosabb
programjaik hasznlnak - e kvnsglista sszefslse utn pedig nem tbb s nem kevesebb
mint 1170 parancs illetve rendszerhvs maradt a listn.) Az X/Open kt minostsi szintet
jellt meg a Unix vdjegyre plyzknak, a nem teljes Posix megfelelosget igazol Unix 93,
illetve az erosebb Unix 95 nevut. A Unix 95 cmkt elnyero Unix verzik szz szzalkosan
megfelelnek a Spec 1170 szabvnynak, s az aljuk rt programoknak (jrafordts utn
persze) futniuk kell brmelyik msik Unix 95 minostsu rendszeren.
Szintn rmteli fejlemnyknt rtkelheto, hogy a korszeru grafikus felhasznli felletek
tern is kialakult egy egysges szabvny. A CDE (Common Desktop Environment) az
X11/Motif grafikus ablakkezelo rendszerre pl, s ma mr gyakorlatilag minden gyrt
biztostja grafikus fellettel br gpein. E szabvny jelentosgt nem lehet elgg
tlrtkelni, hiszen gy a Unixos gpeken dolgoz felhasznlk a grafikus fellet szintjn is
egysges (s igen jl hasznlhat, szmos korszeru eszkzt tartalmaz) fellettel tallkoznak,
kikszblve a Unix rendszerekkel szemben eddig felhozott legfontosabb kifogsokat.
Knyvnk legutols kiadsnak zrsakor a kt legfrissebb fejlemny a 64 bites Unix API
specifikci fejlesztse, illetve az a bejelents, hogy az SCO megvette a Unix forrskdot a
Novelltol, s a tovbbiakban a Hewlett-Packarddal egytt hrmasban fejlesztik a
licensztads alapjul szolgl Unix kdot. Utbbi tny drmaian lecskkenti a piacon lvo
eltro Unix kdverzik szmt (mr eddig is egyre tbben gyakorlatilag vltoztats nlkl
vettk t az eredeti USL majd Novell kdot, s ahhoz rtak kiterjesztseket), s ez megint csak
a gyorsabb s hatkonyabb fejleszts irnyba hathat. Az egysges 64 bites Unix specifikci
1. fejezet Bevezets
23
szles kru elfogadsa pedig szintn ebbe az irnyba mutat, lehetov tve hogy a Unix
versenykpesen, egysges platformon megjulva lphessen t a huszonegyedik szzadba.
SVR 5
Unix 95
Unix 98


1. bra: A fobb UNIX vltozatok kialakulsa
Mi is a UNIX? A rendszer felptse
UNIX felhasznli ismeretek
24
A UNIX sz nem csak egy szuk rtelemben vett opercis rendszert jelent, hanem az ahhoz
kapcsold felhasznli felletet, programokat s segdprogramokat (utility-ket) is, amelyek
egytt egy tbbfelhasznls (multiuser), tbbfeladatos (multitasking) rendszert
eredmnyeznek. Tanulsgos lehet az MS-DOS, az OS-2 s a UNIX rendszert ebbol a
szempontbl sszehasonltani: az MS-DOS egyfelhasznls, egyfeladatos rendszer, azaz
egyszerre csak egy felhasznl s egy programot futtathat rajta. Az OS-2 mr tbbfeladatos
rendszer, ahol egy felhasznl tbb feladatot is futtathat egyidoben. A UNIX alatt viszont
egyszerre tbb felhasznl is dolgozhat, s mindegyikk tbb programot is futtathat
egyidejuleg.



2. bra: A UNIX felptse
A UNIX rteges felptsu, ezt szemllteti a 2. bra. A legbelso rsze a kernel, az opercis
rendszer magja, amely a rendszer eroforrsainak sztosztst, s a fut folyamatok
temezst vgzi. A kernel kr plnek a UNIX rendszer legklnflbb programjai (utility-
k), amelyek a felhasznl parancsainak vgrehajtstl kezdve a szvegfeldolgozson t a
kommunikciig, a rendszeradminisztrcitl a jtkokig minden tevkenysget lefednek.
Ezek kzl a programok kzl csak egy, br a felhasznlk szmra ktsgkvl a
legfontosabb a parancsrtelmezo (shell, hj, burok stb). Ez az a program, amelyik egy
felhasznl belpsekor elindul, kirja a promptot, beolvassa s rtelmezi a felhasznl ltal
begpelt parancsokat, meghvja az elindtand programokat, gondoskodik a be- s kimenet
kezelsrol, s egyttal egy igen eroteljes, ugyanakkor rugalmas programozsi nyelvet is nyjt
a felhasznlnak. Az tlag felhasznl szmra az a UNIX, amit az opercis rendszerbol a
shell-en keresztl lt, nem pedig a rendszerprogramoz ltal kiadhat lehetsges
rendszerhvsok gyujtemnye.
UNIX dokumentcik
1. fejezet Bevezets
25
Klnsen a kezdo felhasznl szmra lehet nyomaszt a UNIX ismeretlensge, de a DOS-
hoz szokott felhasznlkat is zavarba ejtheti a UNIX mrete, bonyolultsga, a rendelkezsre
ll parancsok nagy szma, s maga az a tny is, hogy tbbfelhasznls rendszerrel van dolga,
ahol mg a ki- s bekapcsols se olyan egyszeru, mint egy PC-n. A rendszer mretvel
radsul arnyos a dokumentcik s lersok terjedelme is. Mindezek miatt igen fontos
annak ismerete, hogy milyen informcit hol tallhatunk meg a klnfle lersokban. Az
albbiakban az ezzel kapcsolatos alapveto ismereteket foglaljuk ssze.
Kziknyvek
A UNIX-hoz szlltott kziknyvek rendszerint kt fo csoportra oszthatak, nevezetesen a
referencia kziknyvekre (Reference Manual), s az sszes egybre; ezek rendszerint a
megcmzett felhasznlk, illetve tmakrk szerint vannak csoportostva, pldul User's
Guide, vagy Programmer's Reference Manual, Administrator's Reference Manual, stb.
Mg a referencia kziknyvek nevknek megfeleloen az egyes parancsok, rendszerhvsok
stb. rszletekbe meno ismertetst nyjtjk, a tbbi ktet vagy valamilyen bevezeto szintu,
vagy haladbb ismereteket ad a rendszer hasznlatnak egyes vonatkozsairl, pldul a
hlzati szolgltatsokrl s parancsokrl (a felhasznlk szmra), a
hlzatadminisztrcirl (a rendszeradmi-
UNIX felhasznli ismeretek
26
nisztrtorok szmra), vagy ppen a hlzati fellet programozsrl (fejlesztok szmra).
Noha a dokumentci szervezse rendszerrol rendszerre vltozik, teljes dokumentcikszlet
esetn biztosak lehetnk abban, hogy tallunk benne valami Getting Started ... jellegu,
teljesen kezdoknek szl lerst, ami tsegthet bennnket a knyvtorony megpillantsa
kivltotta kezdeti sokkos llapoton. Hasonlkppen, a legfontosabb tevkenysgekrol
(szvegfeldolgozs, kommunikci, stb) rendszerint rszletekbe meno s j magyarzatokkal
elltott ktetek szlnak.
A mindennapi munkban viszont mg gyakorlott felhasznlk sem tudnak meglenni a
referencia kziknyvek gyakori lapozgatsa nlkl s a parancsok nagy szmt, s az opcik
vgtelen formagazdagsgt tekintve ez nem szgyen.
1
Az albbiakban teht a referencia
kziknyvek szerkezett ismertetjk.
A referencia ktetek anyaga hagyomnyosan nyolc fejezetre tagoldik, ezek a kvetkezok:

1 A shell-bol kiadhat, a felhasznl ltal meghvhat parancsok (segdprogramok,
utility-k).
2 Rendszerhvsok. A UNIX kernel szmra kiadhat rendszerhvsok gyujtemnye, C
nyelvi szintaxis szerint megadva, ahogyan egy C nyelvu programbl hvhatak.
3 Szubrutinok. A standard s opcionlis rendszerknyvtrak rutinjai, pldul
stringkezels, matematikai vagy kpernyovezrlo rutinok.
4 llomnyformtumok.
5 Vegyes szolgltatsok, llomny s adatformtumok.
6 Jtkprogramok.
7 Perifriallomnyok, a fizikai perifrikat reprezentl fjlok struktrja, s a
megfelelo eszkzmeghajt (device driver) vezrlo parancsok.
8 Rendszeradminisztrci s karbantarts.


1
A fenti eszmefuttats persze csak a konvencionlis, karakteres felhasznli felletet nyjt UNIX
rendszerekre igaz, a grafikus felhasznli felletek s az egr hasznlata, a UNIX alatt is gyakran mentesti a
felhasznlt a memoriter s a hosszas gpels all.
1. fejezet Bevezets
27
A fentieken bell gyakran alcsoportokat is megklnbztetnk, pldul egyes rendszerekben
1M al kerlnek az egybknt nyolcadik fejezetbe tartoz karbantart programok, 3M jelli a
matematikai szubrutinokat, 3N a hlzatiakat s gy tovbb. Az irodalomban az egyes
parancsokra val hivatkozsnl zrjelek kztt rendszerint megadjk, hogy a parancs a
referenciakziknyv melyik fejezetben tallhat, pldul ls(1). Ha a referencia kziknyv a
fen-
ti szempontok szerint tovbb tagolt, akkor vigyzzunk arra, hogy egyes fe-
jezetek mind a Programmer's Reference Manual-ban, mind a User's Reference Manual-
ban megtallhatak (pldul utility-k), mg msok
nem (pldul rendszerhvsok rtelemszeruen csak a Programmer's Reference Manual-ban
szerepelnek).
A referencia kziknyvek elejn gyakran tallhat egy gynevezett permutlt index, amely
klnsen akkor tehet j szolglatot, ha egy konkrt feladat megoldshoz keresnk egy
ltalunk ismeretlen programot. A permutlt indexben minden egyes UNIX parancs szerepel
egy egysoros lers erejig, de az index minden egyes parancsismerteto sor minden egyes
szava szerint rendezett, s gy trgymutatknt hasznlva pillanatok alatt megtallhatak azok
a parancsok, amelyek lersban az ltalunk keresett sz szerepel.
Pldul a cat parancs ismertetoje az albbi:

cat(1) concatenate, copy, and print files
Ennek az albbi sorok felelnek meg a permutlt indexben:

...
and print files. cat(1) concatenate, copy,
...
files. cat(1) - concatenate, copy, and print
...
cat(1) concatenate, copy, and print files.
...
copy, and print files. cat(1) concatenate,
...
concatenate, copy, and print files. cat(1)
...
Lthat, hogy a parancslersban szereplo minden lnyeges sz szerint rtallhatunk a
keresett parancsra.
UNIX felhasznli ismeretek
28
On-line help
Az on-line segtsg legkzenfekvobb vltozatt sajt hibink keltik letre: szmos UNIX
parancs, ha paramter nlkl, rossz paramterezssel, vagy a -? opcikkal hvjuk meg, kir a
kpernyore egy meglehetosen tmr, de gyakran elegendonek bizonyul zenetet az adott
parancs hasznlatrl. (A shell-programozsnl ltni fogjuk, hogy nagyon knnyen lehet ilyen
gynevezett "usage" stringeket bepteni programjainkba, s mivel ez mind magunk, mind a
tbbi felhasznl szmra megknnyti az letet, az erre val "rszokst" csak ajnlani tudjuk az
olvasnak - pr hnap utn az ember mr a sajt programjnl se felttlenl emlkszik, milyen
paramterekkel s hogyan hvhat...)
Pldul ha az mv parancsot hvjuk meg rosszul:

$ mv src.c
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
mv [-f] [-i] f1 ... fn d1
mv [-f] [-i] d1 d2
$
Lehetosget biztost a UNIX arra is, hogy on-line mdon hozzfrjnk a kziknyvekhez. A
man parancs hatsra (paramternek a referencia kziknyv valamelyik ttelnek nevt kell
megadni, pldul man cat, vagy man hosts), s a megnevezett UNIX parancs, rendszerhvs,
vagy szubrutinra vonatkoz manul oldalakat kilistzza a rendszer a kpernyore.
2

A permutlt index on-line megfeleloje is ltezik: a man -k
3
kulcssz parancs hatsra
(pldul man -k file) kilistzdik az sszes olyan parancs egysoros lersa, amelyekben
szerepel a megadott kulcssz (esetnkben a file):

2
E kpernys megjelents a hagyomnyos karakteres terminlokhoz igazodik, de pldul a SunOS rendszerben
az AnswerBook program hasznlatval a nyomtatott dokumentci pontos msa is megjelenthet egy
nagyfelbonts grafikus terminlon. S az se mellkes, szempont, hogy az egybknt msfl folymternyi
dokumentci kt CD lemezen elfr, s egyszerre tbben is hasznlhatjk...
3
Ha az ltalunk hasznlt gpen nem mkdik a man -k parancs, ennek legtbbszr az az oka, hogy
alaprtelmezs szerint nem fordtdik be a rendszerbe az ehhez szksges adatbzis. A rendszeradminisztrtor a
catman -w paranccsal ptolhatja e hinyossgot rdemes ...
1. fejezet Bevezets
29
...
vhe_list(4) - information file for the Virtual
Home Environment
vhe_u_mnt(1M) - perform Network File System (NFS)
mount to remote file system
vipw(1M) - edit the password file
vis, inv(1) - make unprintable characters in a
file visible or invisible
which(1) - locate a program file including
aliases and paths
x25init_smpl(4) - sample configuration file used to
initialize an X.25 interface.
x25upload(1M) - dump X.25/9000 interface card memory
into a file.
x29hosts(4) - PAD-related configuration file
x3config(4) - PAD-related X.3 configuration file
ypfiles(4) - Network Information Service database
and directory structure
...
A whereis parancs rvn (ez BSD alap parancs, gy nem minden rendszerben tallhat meg)
azt tudhatjuk meg, hogy az ltalunk keresett parancs vajon ltezik-e UNIX rendszernkben, s
ha igen, akkor hol tallhat a futtathat, illetve forrskd vltozata, illetve a rvonatkoz
esetleges kziknyv rsz:

$ whereis cat
cat: /bin/cat /usr/man/man1.Z/cat.1
$
Nem lehet elgg hangslyozni a kziknyvek (mind a nyomtatott, mind az on-line) vltozat
hasznlatnak fontossgt: a UNIX olyan hatalmas rendszer, annyi paranccsal s
parancsopcival, hogy ezek szmontartsa s memorizlsa hasztalan, s gy felesleges is. Az
on-line help szolgltats mindig hozzfrheto informcikat ad a keresett parancsrl. s
vgl mg egy dolgot rdemes megemlteni: az egyes eltro UNIX vltozatok miatt eltro g-
peken ugyanazok a parancsok eltroen mukdhetnek, illetve ugyanannak a parancsnak tbb
vltozata is jelen lehet gpnkn, ezrt mindig gondosan olvassuk el a kziknyv erre
vonatkoz utalsait. (Elrettento pldaknt ajnljuk az olvas szves figyelmbe az echo
parancsot, amelynek legalbb ngy vltozata ltezik, mind beptett shell funkci, mind
nll parancs formjban...)
30
2. FEJEZET


ALAPFOGALMAK

Ebben a fejezetben a UNIX-szal kapcsolatos alapveto fogalmakrl ejtnk szt, mindazokrl,
amelyek a ms opercis rendszerekhez szokott felhasznlnak jdonsgot jelenthetnek.
Szmos fogalom hasznlatra lpten-nyomon sor kerl majd a kvetkezo fejezetekben, msok
csak a megfelelo elmleti ismeretek biztostshoz kellenek.
Tbbfeladatos-tbbfelhasznls
mukds
Mint emltettk, a UNIX gynevezett tbbfelhasznls-tbbfeladatos (multiuser-
multitasking) rendszer. A tbbfelhasznls mukds fogalma azt jelenti, hogy egyszerre tbb
felhasznl is dolgozhat egy adott gpen, mg a tbbfeladatos mukds azt jelenti, hogy a gp
egyszerre legalbbis a felhasznl szempontjbl tbb programot tud futtatni.
(Termszetesen ez csak virtulisan jelent prhuzamos futtatst, legalbbis egyprocesszoros
rendszereken; a tbbprocesszoros rendszereknl mr tnylegesen lehetsges, hogy az egyes
processzorok kln-kln ms-ms feladattal foglalkozzanak.)
A UNIX fenti jellegnek szmos kvetkezmnye van, mind a rendszer mukdsre, mind a
felhasznlk munkjra nzve.
2. fejezet Alapfogalmak
31
Bekapcsols-belps-kilps-kikapcsols
A tbbfelhasznls mukds egyik legalapvetobb kvetkezmnye, hogy sztvlik a rendszer
bekapcsolsnak s a felhasznl belpsnek, illetve a felhasznl kilpsnek s a gp
kikapcsolsnak folyamata. A hagyomnyos nagygpes rendszereken ez persze mindig is gy
volt, a PC-hez szokott felhasznlk szmra azonban ez a tnyt nem lehet elgg
hangslyozni. Hogyan is zajlik teht egy UNIX rendszer lete?



3. bra: Egy UNIX rendszer letciklusa
A gp bekapcsolsakor eloszr az opercis rendszer tltodik be a gp memrijba,
elindulnak az alapveto rendszerfolyamatok (ez a folyamat alkalmasint igen hossz ido, tbb
perc is lehet), s csak ez utn ksz a rendszer az egyes felhasznlk fogadsra. Ezt a
terminlokon megjeleno belptetsi zenet, az gynevezett login prompt szokta jelezni. Az
egyes felhasznlk ekkor lphetnek csak be a rendszerbe, majd munkjuk vgeztvel
kilpnek, de ettol a rendszer mg fut llapotban marad, akkor is, ha ppen egyetlen
felhasznl sincs bejelentkezve. Ksobb ltni fogjuk, hogy mg ebben az resjrati
llapotban is szmos kiszolgl s felgyelo program fut a httrben, amelyek a rendszer
mukdst vezrlik.
A rendszer lekapcsolst ltalban a rendszergazda hajthatja vgre a rendszerterminlrl; a
kikapcsolsi parancs hatsra sorra lellnak a rendszer funkcii, biztonsgos llapotba
kerlnek a rendszer legfontosabb adatai, s csak ezek utn lehet fizikailag is kikapcsolni a
UNIX felhasznli ismeretek
32
gpet. Mskppen fogalmazva: UNIX-ot futtat gpet (PC-t sem!) NEM SZABAD a hlzati
kapcsolval egyszeruen kikapcsolni!! Ennek okaira a ksobbiekben mg visszatrnk.
Az elobbiek alapjn egy UNIX rendszer letciklust a 3. bra szemllteti.
Bejelentkezsi nevek s kulcsszavak
Az egyes felhasznlkat a UNIX a bejelentkezsi nevk (login name) alapjn klnbzteti
meg egymstl. A bejelentkezsi (vagy belpsi) nv egy ltalban 8 karakternl nem
hosszabb karaktersorozat, amit a rendszeradminisztrtor oszt ki az j felhasznlknak, s
ennek begpelsvel jelezzk a rendszernek belpsi szndkunkat.
Az albbi plda a guest belpsi nvvel trtno bejelentkezst mutatja. Attl fggoen, hogy
honnan s milyen gpre jelentkeznk be, a login sz elott bizonyos zenetek jelenhetnek meg
a kpernyon, amelyek a gpet s a terminlt azonostjk a felhasznl szmra.

HP-UX hp A.08.02 B 9000/817 (ttys1)

login: guest
password:
A belpsi nv megadsa utn a rendszer egy jelszt (password) kr tolnk. Mivel a UNIX
tbbfelhasznls rendszer, a kulcsszavas vdelemre mindenkppen szksg van, hogy az
egyes felhasznlk adatainak vdelmt s titkossgt biztostani lehessen a tbbi
felhasznlval szemben. j felhasznlk kulcsszavt ltalban a rendszeradminisztrtor
lltja be, de a felhasznl megvltoztathatja azt, a passwd parancs hasznlatval.
A kulcssz sikeres megadsa utn klnfle rendszerzenetek jelenhetnek meg a kpernyon
(pldul van-e az illetonek j levele, ltalnos rdeklodsre szmot tart
rendszeradminisztrtori kzlemnyek, stb), vgl megjelenik az gynevezett parancs prompt,
ami leggyakrabban egy $, %, vagy # karakter. E parancs prompt jelzi azt, hogy a belps
folyamata sikeresen lezajlott, s a rendszer kszen ll parancsaink fogadsra.
Norml s privilgizlt felhasznlk
A UNIX rendszerekre, mint ltalban a hagyomnyos nagygpes rendszerekre, is igaz az,
hogy a felhasznlk kzl egyesek specilis elojogokkal brnak. Ezek a privilgizlt
felhasznlk a rendszeradminisztrtorok s opertorok, akik az egsz rendszer mukdst
felgyelik. Szmos olyan tevkenysg van, amit csak a privilgizlt felhasznlk hajthatnak
vgre (pldul a rendszer kikapcsolsa, j felhasznlk adminisztrcija, programcsomagok
installlsa stb). A privilgizlt felhasznlk kztt is kiemelt szerepe van a
rendszergazdnak (superuser). A rendszergazda let s hall ura a rendszerben, o az, aki
mindent megtehet, mert mindenre van jogosultsga. Minden UNIX rendszerben kell hogy
2. fejezet Alapfogalmak
33
legyen egy rendszergazda, hogy egyb privilgizlt felhasznlk vannak-e, az a helyi
viszonyok fggvnye, kisebb rendszerekben ltalban csak a rendszergazdai hatskr ltezik,
nagyobb rendszereken ms-ms szemly lehet felelos a hlzatadminisztrcirt, az
installlsokrt, vagy mondjuk az archivlsokrt.
A rendszergazda bejelentkezsi neve hagyomnyosan root (az angol gykr szbl ered,
ennek nmileg npszerusto magyarzata az, hogy a rendszergaz-
da fennhatsga a fjlrendszer gykertol kezdve mindenre kiterjed). Az egyb szoksos
rendszeradminisztrtori nevek a bin, adm, admin, fsck, sys, daemon.
Terminlelrs: soros vonali s hlzati
s rendszerterminlok
A felhasznl szmos ton-mdon csatlakozhat egy UNIX rendszerre, most csak a
legalapvetobb hozzfrsi mdokat tekintjk t. Leggyakoribb szituci, fokppen a kzp-
s nagykategriba eso rendszereknl, hogy maga a UNIX-os gp kialaktsa olyan, hogy
szmos terminlt lehet r csatlakoztatni kzvetlenl, n. soros vonalon keresztl. (A mai
technikai szinten ez ltalban legalbbis tbb tucat soros vonali csatlakozst jelent, de a tbb
szz terminl kiszolglsra kpes architektrk se mennek ritkasgszmba.) Ez a megolds a
hagyomnyos nagyszmtgpes rendszerek kialaktsnak felel meg.
A gpre csatlakoz terminlok kztt mindig van egy, ami kitntetett jelentosggel br, ez az
gynevezett rendszerterminl (konzol, console). Ez rendszerint kzvetlenl a gp mellett
helyezkedik el, s ez a rendszergazda munkahelye. Pontosabban fogalmazva, szmos, a
rendszer szempontjbl kritikus akci csak a rendszerterminlrl indthat, elsosorban
biztonsgi megfontolsokbl. Munkallomsokon, illetve PC-n fut UNIX esetn rtelem-
szeruen a munkalloms, illetve a PC billentyuzete s kpernyoje a rendszerterminl.
A helyi hlzatok terjedsvel egyre gyakoribb eset az, hogy a felhasznlk hlzaton
keresztl rik el a UNIX-os rendszert, akr valamilyen Ethernet alap helyi hlzaton
keresztl (LAN), a sajt PC-jkrol bejelentkezve, vagy ppen nagytvolsg hlzaton
(WAN) keresztl, akr telefonvonalon, modem segtsgvel, de akr X.25 alap
csomagkapcsolt hlzaton keresztl is. Ilyen esetekben hlzati hozzfrsrol van sz, de a
felhasznl szmra elvileg! teljesen szrevehetetlen kell hogy legyen az a tny, hogy
nem kzvetlenl csatolt terminlon dolgozik. A 4. bra egy olyan UNIX-os rendszert mutat,
ahol mind soros vonali, mind helyi hlzati, mind modemen keresztl csatlakoz
nagytvolsg hlzati terminlok hasznljk a UNIX rendszert.

UNIX felhasznli ismeretek
34


4. bra: UNIX rendszer terminlkapcsolatai
Folyamatkezels: elotr- s
httrfolyamatok,
dmonok s jobok
2. fejezet Alapfogalmak
35
Programok s folyamatok
A UNIX, mint multitasking rendszer, kpes arra, hogy egyszerre tbb feladat futhasson a
gpen. Ennek kapcsn kt igen fontos fogalom merl fel, amelyek szorosan sszefggenek
ugyan, de egymssal nem helyettesthetoek be: a program s a folyamat (process). A program
egy futtathat (akr gpi kdot tartalmaz binris, akr a shell ltal rtelmezheto
parancsokbl ll) fjl; valahnyszor egy programot elindtunk, egy j folyamat jn ltre.
Nmileg leegyszerustve, a folyamat egy programnak egy fut pldnya, a sajt kln
adatterletvel. Lehetsges teht, hogy ugyanazt a programot egyszerre tbben is futtassk a
rendszerben ilyenkor ugyanabbl az egy programfjlbl annyi darab nll, egymstl
teljesen fggetlen folyamat jn ltre, ahnyan elindtottk a programot. (Csak zrjelben
jegyezzk most meg, egy elindtott folyamat tbb msik, n. gyermekfolyamatot is
elindthat.)
Httrfolyamatok s dmonok
A parancsok (pontosabban a parancsok elindtsval letre keltett folyamatok) vgrehajtsa
szekvencilisan trtnik; ez annyit jelent, hogy ha a felhasznl elindt egy parancsot, addig
nem kapja vissza a parancs promptot, s nem indthat el jabb parancsot, amg az ppen fut
be nem fejezodtt. Ha azonban a felhasznl egy httrfolyamatot (background process) indt
el, rgtn visszakapja a parancspromptot, s lehetosge van jabb parancs vgrehajtsra. E
mechanizmus hasznlata kivltkpp olyankor elonys, ha egy hosszan fut folyamat futtatsa
mellett ms tevkenysggel is szeretnnk foglalkozni.
UNIX felhasznli ismeretek
36
A httrfolyamatoknak egy specilis vlfaja a dmon (daemon) folyamat. Ez egy olyan
folyamat, amit rendszerint automatikusan indt el a rendszer, s valamilyen felgyeleti
szerepet elltva llandan fut a httrben. Dmon folyamatok gondoskodnak pldul a
nyomtatsi krelmek besorolsrl s vgrehajtsrl, a terminlvonalak figyelsrol, hogy
van-e jonnan belpo felhasznl, de dmonok felgyelik a memriahasznlatot ppgy, mint
a loklis hlzaton trtno belpseket. A rendszer resjratban, amikor ppen nincs
bejelentkezett felhasznl, ltalban tbb tucat ilyen dmonfolyamat fut, biztostva a rendszer
folyamatos mukdst.
A dmonoknak vgrehajtsra tadott nyomtatst s egyb krelmeket job-oknak
(feladatoknak) nevezik, ezeket a dmon srgossgi s egyb szempontok alapjn sorba
rendezi (queue), s egyenknt hajtja vgre oket.
A parancsrtelmezo (shell)
A UNIX alatt futtathat programok kztt van egy, ami a rendszer szempontjbl a tbbivel
teljesen egyenrang, a felhasznl szmra azonban kitntetett jelentosggel br: ez a
program a parancsrtelmezo (burok, hj, shell). A parancsrtelmezo az a program, ami egy
felhasznl belpsekor aktivizldik, s a felhasznl kilpsig o veszi magra a felhasznl
ltal begpelt parancsokat. A shell feladata ppen ez: a felhasznl ltal begpelt
karaktersorozatokat sztbontja, megprblja vgrehajthat parancsknt rtelmezni,
feldolgozza s kifejti a parancsnak tadand paramtereket, megkeresi az elindtand
programfjlt, s megprblja azt elindtani; a parancs vgrehajtsa utn pedig visszaadja a
vezrlst a felhasznlnak, s ksz az jabb begpelt parancsok vgrehajtsra.
A fentiekbol is lthat, hogy a shell alapveto fontossg a felhasznl letben, hiszen
gyakorlatilag csak azt ltja a UNIX-bl, amit a shell ltni enged.
2. fejezet Alapfogalmak
37
A shell mint programozsi nyelv
A shell azonban, az elobb elmondottakon tl, egy programozsi nyelv is: lehetosg van a
shell hasznlatakor vltozkat definilni, komplex vezrlsi szerkezeteket, ciklusokat s
elgazsi feltteleket definilni, gyakorlatilag a komoly programozsi nyelvekben
megszokott sszes mechanizmus rendelkezsre ll. S mivel ezek a nyelvi szolgltatsok
minden fordts nlkl, a parancssorba trtno begpelskor rgtn rendelkezsre llnak a
felhasznlnak (interpreter elv), villmgyors s knnyen korriglhat lehetosg van komplex
feladatok kiprblsra s megvalstsra anlkl, hogy az ember egy sort is lerna
brmilyen magasszintu programozsi nyelven.
A shell parancsok fjlba rsval (shellscript) pedig arra nylik lehetosgnk, hogy brmikor
jra futtathassunk egy adott shell parancsszekvencit.
A szerszmoslda s a deszkapad modell
A UNIX shell szmos mechanizmust biztost arra, hogy mr meglvo programok egymssal
val egyttmukdst koordinlja, lehetosget ad arra, hogy az egyik program kimenett a
msik program felhasznlhassa, stb. A shell-nek ppen ez a legnagyobb erossge, hiszen gy
mr meglvo, adott esetben csak egy-egy apr rszfeladatot ellt programocskkbl olyan
sszetett parancsszekvencikat pthetnk fel, amelyek mr nagybonyolultsg, meglepoen
komplex feladatokat oldanak meg ismt csak hangslyozva, anlkl, hogy az ember a
megszokott mdon, valami magasszintu nyelvben programozna. Ez a mentalits a UNIX-
ban oly gyakran emlegetett szerszmoslda-filozfia (toolbox philosophy): meglvo apr
elemeket ptsnk ssze nagyobbakk, ahelyett, hogy folyton jra fel kellene tallnunk a
kereket.
E mdszer egyenes alkalmazsa a mostanban oly divatos prototyping elve. Mit jelent ez?
Tegyk fel, hogy egy IGEN BONYOLULT, IGEN SOKRTU feladatot kell megoldanunk.
Az egyik lehetsges megolds az, hogy nekillunk, s egy kivlasztott magasszintu nyelven
beprogramozzuk az egszet, lefordtjuk, futtatjuk, hibt keresnk, s gy tovbb, amg a
tkletessg s hatkonysg megkvnt szintjt el nem rtk. Ms megolds? Elo a szersz-
mosldval: megprbljuk mr meglvo UNIX eszkzeinkkel s programjainkkal megoldani
a feladatot, egy shellscript-et rva, ami integrlja mr meglvo sajt- vagy
rendszerprogramjainkat. gy viszonylag hamar beloheto ez a deszkapados modell (ltalban
nagysgrenddel hamarabb, mint egy konvencionlis programozsi nyelvben), s a mr mukdo
modellt ezek utn optimlhatjuk: a leglassabban mukdo rszeket trhatjuk valami hatko-
nyabb programozsi nyelven a lnyeg az, hogy mindig csak a szksges rszeket s a
szksges mrtkben optimalizljuk.
Klnbzo shell-ek
UNIX felhasznli ismeretek
38
Mivel a parancsrtelmezo nem rsze a UNIX magjnak, hanem csak egy ugyanolyan
program, mint a tbbi sok szz rendszer- s segdprogram, tetszolegesen lecserlheto, s zls
szerint msra vlthat. Hrom ltalnosan elterjedt shell ltezik a UNIX alatt (a kevsb
elterjedteket mg felsorolni is fraszt lenne), ezek a kvetkezok: a Bourne shell, a C shell s
a Korn shell. A felhasznl, illetve a rendszeradminisztrtor dntsn mlik, hogy egy
felhasznl milyen shell-lel dolgozik a UNIX alatt, s lehetosg van arra is, hogy a felhasznl
menetkzben, ideiglenes jelleggel jabb s jabb parancsrtelmezot indtson el a meglvo
fl, ha az ppen fut valamilyen okbl nem felel meg neki. Mindez hihetetlen rugalmassgot
klcsnz a rendszernek.
A Bourne shell, mely nevt szerzojrol kapta, a szabvnyos UNIX parancsrtelmezo, ez
minden UNIX rendszerben kell hogy szerepeljen. Knyvnk tlnyom rszben ezzel
foglalkozunk mi is, ppen szabvnyos volta miatt.
A C shell, mely szintn rgta rsze a standard UNIX-nak, jval tbbet tud, mint a Bourne
shell, pldul lehetosg van az elozo parancsok elohvsra s tszerkesztsre, fejlett
jobkezelssel s mg szmos ms kellemes vonssal rendelkezik, nevt onnan kapta, hogy a
kiadhat parancsok s a vezrlsi szerkezetek a C nyelvre emlkeztetnek (nem vletlenl).
A Korn shell, mely szintn szerzojrol lett elnevezve, jabb, mint az elozoek, egszen
mostanig public domain szoftverknt, illetve ksobb mr kereskedelmi forgalomban is
megveheto programknt terjedt, az SVR4-nek viszont mr rszt kpezi, mi tbb, ez lett a
szabvnyos parancsrtelmezo. Ezt annak ksznheti, hogy rendelkezik a C shell funkciival,
ugyanakkor fellrol teljesen kompatibilis a Bourne shell-lel, teht a felhasznlnak nem kell
egy teljesen j szintaxist megtanulnia.
A knyvnkben szereplo shell programozsi pldk tbbsge Bourne shellscript-et hasznl,
de a C shell-rol s a Korn shell-rol szl fejezetek termszetesen a megfelelo nyelven rt
script-eket is tartalmaznak.
1

A fjlrendszer: Fjlok s katalgusok,
nvkonvencik
A fjlrendszerrol a kvetkezo fejezetben rszletesen lesz sz, most csak a legfontosabb
dolgokat tekintjk t vele kapcsolatban. A fjlrendszer a UNIX legalapvetobb rsze,
megrtse nlklzhetetlen a felhasznl szmra, de megismerse mr csak amiatt is
tanulsgos, mert kivlan illusztrlja azt, hogy egyetlen, alkalmasan megvlasztott, a
vgletekig leegyszerustett fogalom konzekvens implementlsval milyen robusztus s
megbzhat rendszer hozhat ltre.

1
A C shell-t klnbz okok miatt nem szoktk ajnlani shell scriptek rsra, elnyei inkbb intaraktv
krnyezetben, parancseditlskor domborodnak ki.
2. fejezet Alapfogalmak
39
A UNIX-ban minden fjl.
2
Erre az elso ltsra igencsak tlznak tekintheto lltsra pl az
egsz UNIX rendszer. J, de mi is akkor a fjl?
A fjl (llomny, file) az adatok trolsra szolgl alapveto (adat)objektum a UNIX alatt. A
fjl teljesen strukturlatlan, nincs sem rgztett, sem vltoz hosszsg mezokre vagy
rekordokra bontva, nincs megszabott hosszsga, semmi ilyen korltja nincs a fjl egsz
egyszeruen bjtok (karakterek) sorozata. Egy UNIX fjl vgt nem jelzik specilis
karakterek, mint pldul a DOS-ban a Ctrl-Z a fjlnak akkor van vge, amikor a megfelelo
olvas rutin semmit nem tud mr olvasni, s az ennek megfelelo hibajelzssel tr vissza.
Mi lehet egy fjlban? Minden. Egy fjl tartalmazhat adatokat (pldul elektronikus leveleket,
tozsdei jelentseket, szmoltbla-tblzatokat); tartalmazhat futtathat programokat (akr
gpi kdakat, akr gynevezett shellscript-eket), amelyeket a felhasznl elindthat;
tartalmazhat egy fjl a tbbi fjlokra s az egsz fjlrendszerre vonatkoz informcikat
(katalgusfjlok); mi tbb, a perifrik (terminlok, diszkek, hlzati egysgek stb) szintn
fjlknt szerepelnek a UNIX-ban, s ugyanazokkal a standard parancsokkal lehet hozzjuk
frni, mint brmely msik kznsges fjlhoz.
A UNIX a fjlokat a knnyebb kezelhetosg rdekben katalgusokba (jegyzk, knyvtr,
directory) csoportostja. A katalgusok egy faszerkezetre emlkezteto struktrba vannak
szervezve. E megoldsra a kvetkezo fejezetben bovebben visszatrnk, most csak egy nagy
elonyt emltjk meg: e fjlhierarchia rvn megoldhat az, hogy minden felhasznlnak
kln adatterlete legyen, esetenknt ugyanolyan nevu fjlokkal, mint msoknak, s az azonos
nevu fjlok ennek ellenre nem tveszthetoek ssze a tbbiekvel.
A katalgusok maguk is fjlokban helyezkednek el, ezek a fjlok a UNIX fjlrendszer
szmra ppolyan fjlok, mint azok, amelyekrol az informcit troljk; az egyetlen eltrs,
hogy a katalgusfjlok manipullsra kln parancsok szolglnak, ezeket a kvetkezo
fejezetben tekintjk t.
Felhasznli- s csoportazonostk
Lttuk mr, hogy a UNIX a belpo felhasznlkat a bejelentkezsi nv alapjn ismeri fel.
Ezen kvl mg kt azonostt is rendel a UNIX az egyes felhasznlkhoz, a felhasznli
azonostt (user id, uid) s a csoportazonostt (group id, gid). Mindkt azonost egy egsz
szm, a felhasznli azonost egy az egyben megfelel a bejelentkezsi nvnek, s a legtbb
programban e kt paramter egymssal felcserlheto.
A UNIX a csoportazonost alapjn csoportokba sorolja a felhasznlkat ennek akkor van
jelentosge, ha a felhasznl hozz akar frni egy fjlhoz, mert a rendszer a hozzfrsi
krelmeket aszerint brlja el, hogy a felhasznl tulajdonosa-e az adott fjlnak, vagy a
tulajdonossal azonos csoportban van-e. A csoportazonost hasznlata rvn gy lehetosg

2
A fenti kifejezst nmileg tomptva, de jval pontosabban gy fogalmazhatnnk meg, hogy a Unix a lehetsgek
szerint minden adatobjektumot azonos mdon, azonos parancsokkal prbl meg kezelni.
UNIX felhasznli ismeretek
40
van a felhasznlk anyagainak differencilt vdelmre, s egyttal a kzs munka megknny-
tsre. (Egy felhasznl tbb csoportba is tartozhat.) Az azonostk hasznlatra a kvetkezo
fejezetben ltunk majd pldkat.
Hozzfrsi jogok s vgrehajthat fjlok
A UNIX minden fjlhoz hozzfrsi jogokat rendel: ennek alapjn dnti
el, hogy egy adott fjlt egy adott felhasznl rhat, olvashat, vagy vgrehajthat-e.
Vgrehajthat fjlok, binris programok s shellscript-ek
A fjlok nagy tbbsge ltalban valamilyen adatfjl, amiket az arra hivatott programok
rvn rnak-olvasnak a felhasznlk. A fjlok msik csoportja viszont gynevezett
vgrehajthat fjl, ami egy vgrehajthat kdsorozatot tartalmaz. E tnyrol a UNIX gy
rtesl, hogy e fjlok vgrehajtsi engedllyel rendelkeznek. Ha egy ilyen fjl nevt adjuk
meg vgrehajtand parancsknt, az opercis rendszer megprblja elindtani oket. Egy
vgrehajthat fjl tartalmazhat gpi kd utastsokat, olyat, amit vgrehajtskor rgtn
megrt az opercis rendszer (az gynevezett rendszerprogramok tlnyom tbbsge ilyen),
ezek a binris vgrehajthat programok (binary executable). A vgrehajthat fjlok msik
csoportja olyan parancsokat tartalmaz, amelyeket nem az opercis rendszer, hanem a
parancsrtelmezo, a shell rtelmez s hajt vgre. Ezeket a fjlokat hvjk shellscript-eknek, s
a DOS-bl ismert batch fjlokhoz llnak legkzelebb.

41
3. FEJEZET


ISMERKEDS AZ
LLOMNYRENDSZERREL
Bejelentkezs
Az albbiakban felttelezzk, hogy az olvas mr egy UNIX opercis rendszert futtat
szmtgp terminlja elott l. E terminl lehet egy nagygpes rendszer valamelyik terminlja
a sok kzl, lehet egy munkalloms, vagy ppen egy PC, ami helyi hlzaton keresztl
csatlakozik a UNIX gazdagphez (host-hoz), egy UNIX terminlt emullva. Ennek
megfeleloen a bekapcsolsi eljrsok is gykeresen eltrhetnek egymstl, az elso esetben
valsznuleg csak a terminlt kellett bekapcsolni, a munkallomsnl a bekapcsols utn az
opercis rendszer betltodst kell megvrni, mg PC-s terminl esetben DOS vagy
Windows all kellett kiadni a megfelelo parancsot a kommunikcis- s terminlemultor
program betltshez.
Brmelyik mdon is indultunk, a kpernyon elobb-utbb az albbihoz hasonl szvegnek kell
megjelennie (az albbi konkrt plda egy loklis hlzaton keresztli, a telnet paranccsal
vgrehajtott belpst mutat, az elso hrom kirt sor ezzel kapcsolatos):

# telnet hp
Trying 197.99.99.99 ...
Connected to hp.
Escape character is '^]'.

HP-UX hp A.08.02 B 9000/817 (ttys1)

login:
A login: szveg utn kell megadnunk a bejelentkezsi nevnket (login name), ezt elozoleg a
rendszergazda ltre kellett hogy hozza. A bejelentkezsi nv megadsa utn ltalban jelszt
is kr a rendszer (amennyiben nem, az slyos biztonsgi hiba!):

login: demoRETURN
password:

A fenti pldnl a RETURN megadsval jelltk, hogy a UNIX-ban (is) a parancsbevitel
vgt a kocsivissza (RETURN, CR, ENTER stb jelzsu) billentyu lenyomsa jelenti a
tovbbiakban ezt sehol nem jelljk, kivve ha a szvegsszefggs kimondottan
megkveteli.
UNIX felhasznli ismeretek
42
A jelsz begpelsekor a rendszer nem adja vissza a kpernyon a begpelt karaktereket. Ha
rossz jelszt adtunk meg, az albbi szveg jelenik meg:

login incorrect
login:
Nhny prblkozs (rendszerint hrom vagy t) utn az adott terminlvonalat blokkolja egy
idore a rendszer, felttelezvn, hogy rosszindulat behatolsi ksrlet trtnt. Ilyenkor msik
terminlrl prblkozhatunk, vagy kivrjuk az idot, amikor jra aktivldik a vonal.
(Munkallomsok, s PC-ken fut UNIX esetben, ahol rendszerint egy helyrol van
hozzfrs a rendszerhez, a konzolrl, a fenti mdszer nem jrhat, ilyenkor nem clszeru az
egyetlen belpsi lehetosget korltozni
1
.
Sikeres jelszmegads utn nhny rendszerzenet jelenhet meg a kpernyonkn, rendszerint
kirja a gp, ha j levelnk rkezett, szintn bejelentkezskor szoktak megjelenni a mindenkit
rinto fontosabb kzlemnyek, s legvgl az utols sorban megjelenik a prompt, ami jelzi,
hogy a bejelentkezs sikeresen lezajlott, a rendszer (pontosabban a szmunkra kijellt pa-
rancsrtelmezo program) kszen ll a parancsok fogadsra s vgrehajtsra.


1
Szksg esetn azrt ezek a gpek is elrhetek tbb helyrl, vagy helyi hlzaton, vagy a soros portra
csatlakoztatott terminlokon keresztl.
3. fejezet Ismerkeds az llomnyrendszerrel
43
login: demo
password:

You have mail.

Mindenkinek!

Szerdn ngyt!l hatig rendszerkarbantarts miatt a
szerver nem m"kdik.

$
Esetnkben a promptjel a $ karakter, de brmi egyb is lehet, s a ksobbiekben bemutatott
mdon magunk is tllthatjuk. Ha parancsrtelmezonk a Bourne vagy a Korn shell, akkor
rendszerint a $ karakter a prompt, C shell hasznlata esetn pedig a % karakter hsznlata az
ltalnos. (C s Korn shell esetn lehetosg van arra, hogy a prompt a DOS alatt megszokott
mdon mutassa az aktulis munkakatalgust is, ezrt gyakran szoks ezt s/vagy a gpnevet
kiratni.)
Szintn ltalnos rvnyu konvenci, hogy ha privilgizlt felhasznlknt jelentkeznk be, a
prompt a # karakterre vlt, ezzel is emlkeztetve a felhasznlt arra, hogy most az tlagosnl
felelossgteljesebb tevkenysget folytat.
A fjlrendszert kezelo parancsok
Az 5. bra illusztrlja a UNIX fjlrendszernek felptst. Ltszik, hogy az egsz struktra
leginkbb egy fejjel lefele fordtott fra emlkeztet. A fa gykernek szerept betlto
katalgust root directory-nak, azaz gykrkatalgusnak nevezik, s ebbol gaznak el a tovbbi
katalgusok, azokon bell tovbbi alkatalgusok s gy tovbb. A fa leveleinek pedig a kata-
lgusokban tallhat fjlok felelnek meg, ezekbol nem gaznak tovbb katalgusok. Minden
UNIX fjlrendszer a fentieknek megfeleloen pl fel, eltrsek csak a katalgusnevekben s a
katalgusok tartalmban jelentkeznek.
UNIX felhasznli ismeretek
44

5. bra: A UNIX fjlrendszer felptse
A fjlrendszer kitntetett pontjai
A UNIX fjlrendszerben hrom kitntetett pont ltezik az egyes felhasznlk szmra: a
fjlrendszer kezdopontja, ahonnan az egsz llomnyrendszer felpl (gykrkatalgus, root
directory); az egyes felhasznlkhoz tartoz kiindulsi pont, ahonnan kezdve o helyezheti el
sajt llomnyait (kiindulsi katalgus, vagy alapkatalgus, home directory); vgl az a
pont, ahol a felhasznl ppen tartzkodik az llomnyrendszerben (aktulis katalgus vagy
msnven munkakatalgus, current directory).
Hol vagyunk? A pwd parancs
A fjlrendszerrel val ismerkedst a pwd (print working directory) nevu paranccsal kezdjk.
E parancsot meghvva az aktulis katalgus neve rdik ki a kpernyore.
3. fejezet Ismerkeds az llomnyrendszerrel
45
$ pwd
/users/demo
$
A fenti kirsban a UNIX llomnyrendszernek hierarchikus felptse tkrzodik, s a
kvetkezokppen kell rtelmezni: a gykrkatalgus alatt elhelyezkedo users katalgus demo
nevu alkatalgusban tartzkodunk. A pwd eredmnyben lthat / jel kettos szerepet tlt be:
egyfelol jelli az llomnyrendszer kezdopontjt, azaz a gykrkatalgust, msfelol az egyes
katalgusszintek elvlasztjeleknt is funkcionl. (A DOS-hoz szokott olvast fi-
gyelmeztetjk, hogy noha az llomnyrendszer koncepcija s a jellsmd eros
hasonlsgot mutat, itt nem a DOS alatt megszokott \ (backslash) karaktert kell hasznlni a
katalgusszintek elvlasztsra.)
Mit lthatunk? Az ls parancs
Ha mr tudjuk, hogy hol tartzkodunk az llomnyrendszerben, valsznuleg azt is szeretnnk
megtudni, milyen fjlok tallhatak az egyes katalgusokban. A katalgusok tartalmt az ls
(list) paranccsal listzhatjuk ki. Ha semmi mst nem mondunk, az aktulis katalgusban lvo
fjlok nevt listzza ki, bcsorrendben:
$ ls
FULL-INDEX text
$
Ha az ls parancsnak argumentumai is vannak, akkor kt eset lehetsges: ha az argumentum
egy kznsges fjl neve volt, akkor az adott fjlra vonatkoz informcikat rja ki az ls
parancs, ha viszont az argumentum egy katalgusfjl neve volt, akkor az ebben a
katalgusban szereplo sszes fjl adatait. Mivel az ls parancsnak is megadhatunk tbb
parancs argumentumot, ezek lehetnek vegyesen fjl s katalgusnevek, az ls mindegyiket a
neki megfelelo mdon fogja kezelni.
Ha a -l opcit is kiadjuk, rszletesebb informcit is kapunk a fjlokrl:
$ ls -l
total 354
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 19 Aug 23 20:23 text
$
Nemsokra rszletesebben is visszatrnk a fentebb lthat kirs rtelmezsre, most csak
dihjban: a legelso sor (total ...) azt adja meg, hogy a kilistzott katalgusban lvo fjlok
sszesen hny blokknyi helyet foglalnak el a lemezen (egy blokk ltalban 512 karakter, azaz
fl kilobjt).
A tbbi sorban az elso oszlop a hozzfrsi jogokat mutatja, azaz azt, hogy kinek milyen joga
van az adott fjllal kapcsolatban (rhatja, olvashatja, vgrehajthatja-e); a kvetkezo oszlopban
ll szm az gynevezett lncszm (link count): ez mutatja meg, hogy egy adott fjlra hny
klnbzo nven (link) lehet hivatkozni; aztn az llomny tulajdonosnak s csoportjnak
neve kvetkezik, majd a fjl mrete bjtokban, aztn az utols mdosts ideje, s legvgl a
fjl neve.
UNIX felhasznli ismeretek
46
Az ls szmos opcija kzl most csak a leggyakrabban hasznltakat emeljk ki. Ha a fjlokat
nem bcsorrendben, hanem idorendben (a legutols mdosts ideje szerint) szeretnnk
kilistzni, akkor a -t opcit kell megadni; ha fordtott sorrendu rendezst kvnunk, akkor a -r
opcit. A -R opci hatsra az ls parancs rekurzv mdon a megadott katalgusnv alatti
teljes fjlstruktrt kilistzza, nem csak a megnevezett katalgusban szereplo fjlokat. Az op-
cik persze kombinlhatak is, gy pldul ls -lrt fordtott idosorrendben hossz listzst ad,
a legrgebbi fjlokat sorolva fel elsoknt, a legfrissebbeket utoljra.
Hov jutunk? A cd parancs
Az llomnyrendszerben val mozgsra a cd (change directory) parancs szolgl.
Paramterknt a megclzott katalgus nevt kell megadni, ami trtnhet mind abszolt
(teljes) elrsi t (absolute pathname), mind relatv elrsi t (relative pathname)
megadsval.
Abszolt megads esetn a keresett katalgus teljes elrsi tvonalt meg kell adnunk, a
gykrkatalgustl kezdve, s minden alkatalgust fel kell sorolni, amelyeken keresztl a
clhoz jutunk. Ebben az esetben a cd parancs paramtere a / karakterrel kell hogy kezdodjn,
a cd parancs errol ismeri fel, hogy abszolt elrsi trl van sz.
Relatv cmzs esetn azt mondjuk csak meg, hogy pillanatnyi tartzkodsi helynkhz, teht
az aktulis katalgushoz kpest hol helyezkedik el a megclzott katalgus, ilyenkor a cd
parancs paramtere nem kezdodhet a / karakterrel. Nzznk egy pldt mindezekre! Tegyk
fel, hogy /usr/users/janos katalgusban vagyunk, amely alatt tallhat egy src nevu
alkatalgus. Hogy ide eljussunk, kiadhatjuk a cd /usr/users/janos/src parancsot, de ezzel
egyenrtku lenne a cd src parancs is.
Minden olyan esetben, amikor egy katalgust vagy fjlt meg kell nevezni, e ktfajta kijellsi
md egyformn hasznlhat.
Ha a cd parancsot argumentum nlkl hvjuk meg, akkor a kiindulsi katalgusunkba helyez
el minket. Ez igen hasznos lehet akkor, ha az llomnyrendszer egy tvoli, sok szinttel odbb
lvo pontjrl szeretnnk hazajutni.
A fjlrendszeren belli mozgshoz mg kt tovbbi jells is hasznlhat: a . (pont)
karakterrel az aktulis katalgusra hivatkozhatunk, mg a .. karakterekkel a szlo katalgusra.
Ezek a jellsek tetszolegesen kombinlhatak is. A fentiekre nzznk egy pldt:
$ pwd
/users/demo
$ cd ..
$ pwd
/users
$ cd ..
$ pwd
/
$ cd ..
$ pwd
/
3. fejezet Ismerkeds az llomnyrendszerrel
47
$ cd users
$ cd demo
$ pwd
/users/demo
$ cd /
$ cd /users/demo
$ pwd
/users/demo
$ cd /etc
$ pwd
/etc
$ cd
$ pwd
/users/demo
$
Minek nevezzelek? Nvkonvencik
A UNIX llomnyok s katalgusok nevre vonatkozlag viszonylag laza s ktetlen
szablyok vonatkoznak, legalbbis ha a DOS alatt megszokott szigor 8+3 karakteres
nvadsi megktsre gondolunk. A UNIX-ban a legfontosabb megkts az, hogy a fjlnv
hossza maximum 14 karakter lehet, de a legtbb korszeru UNIX fjlrendszernl ez az rtk
opcionlisan 255 karakterre is llthat. E hosszon bell a fjlnv tetszoleges tagols lehet;
akrcsak a DOS alatt, itt is a . (pont) karakter szolgl szepartorkarakterknt, de ellenttben a
DOS-sal, egy fjlnv tetszoleges szm, ponttal levlasztott uttagot tartalmazhat, s leglis
fjlnv az is, ami egyltaln nem tartalmaz elotagot, teht rgtn a pont karakterrel kezdodik.
Az albbiak teht mind rvnyes UNIX llomnynevek:

alma, alma.korte, alma.korte.gyumolcs, .alma, .alma.23
A fjlnevekben elvileg az ASCII kdkszlet als 128 karakterkszlete szabadon hasznlhat,
mindazonltal clszeru kerlni azokat a karaktereket, amelyek a shell szmra specilis
jelentst hordoznak, mert ezek bersa sok gondot okozhat. Tipikusan ezek kz a karakterek
kz tartozik: *?@#$!& s a nv elejn ll '-' jel.. Clszeru teht az angol bc
alfanumerikus karaktereire, valamint az alhzs s mnusz karakterre korltozni vlasztsun-
kat.
2

Nem szabad azonban megfeledkeznnk arrl, hogy a UNIX parancsrtelmezok
esetrzkenyek (case sensitive), azaz klnbsget tesznek a nagy- s kisbetuk kztt. UNIX
alatt teht igenis nem azonos a valami, Valami s a VALAMI fjl!

2
Az utbbi vekben megjelent SVR4 UNIX vltozatok mr rendszerint tmogatjk az gynevezett Latin-1
kdkszletet, ami az karakterek kivtelvel az sszes magyar kezetes bett is tartalmazza, grafikus fellet
(X11) esetn pedig sok Unix verzi mr a teljes magyar betkszletet tartalmaz Latin-2 kdkszletet is hasznlja.
A rgi, illetve ms kdkszleteket hasznl rendszerekkel val kompatibilits rdekben azonban az kezetes
karakterekhasznlatt fjlnevekben nem tancsoljuk.
UNIX felhasznli ismeretek
48
Rejtett fjlok
Azokat a fjlokat, amelyeknek a neve a pont karakterrel kezdodik, a UNIX kicsit mskppen
kezeli, mint a tbbit. E fjlok az gynevezett rejtett fjlok (hidden file), s a katalgusok
listzsnl ezek neve nem jelenik meg, csak explicit krsre. Ennek az az oka, hogy a rejtett
fjlok ltalban adminisztrcis s konfigurcis informcikat tartalmaznak, melyek egy-
egy felhasznl kiindulsi katalgusban kell hogy elhelyezkedjenek, ugyanakkor nem cl-
szeru, ha ezek a felhasznl sajt anyagaival keverednek. (Ilyen fjlok pldul a .login,
.cshrc, .profile, .logout, amelyek a felhasznl bejelentkezsi krnyezett lltjk be, vagy a
.mailrc, .exrc, stb, amelyek egy-egy program indulsi konfigurlst vgzik.) Az ls parancs
pldul alaprtelmezs szerint nem jelenti meg a pont karakterrel kezdodo nevu rejtett fj-
lokat
3
. Ha ezekre is kvncsiak vagyunk, az erre vonatkoz informcit a -a opcival csal-
hatjuk elo:

$ ls -al
total 370
drwxr-xr-x 2 demo users 1024 Aug 23 20:29 .
drwxr-xr-x 43 root sys 1024 Aug 17 09:40 ..
-rw-r--r-- 1 demo users 818 Aug 13 1992 .cshrc
-rw-r--r-- 1 demo users 347 Aug 13 1992 .exrc
-rw-r--r-- 1 demo users 377 Aug 13 1992 .login
-rw-r--r-- 1 demo users 382 Aug 13 1992 .profile
-rw------- 1 demo guest 1370 Aug 23 20:29 .sh_history
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 19 Aug 23 20:23 text
$
Katalgusok ltrehozsa: a mkdir parancs
j katalgusokat a mkdir (make directory) paranccsal hozhatunk ltre. Egyszerre tbb
katalgusnevet is megadhatunk, a rendszer mindegyiket ltrehozza. Ha a ltrehozand
katalgus egy olyan katalgus alatt helyezkedne el, amely maga sem ltezik, akkor a
katalgus ltrehozsa sikertelen lesz. Ebben az esetben a -p opcival rdemes kiadni a mkdir
parancsot; ennek hatsra a az sszes szksges szlo katalgust ltrehozza a rendszer.

$ mkdir newdir/new1dir
mkdir: cannot access newdir: No such file or directory
$ mkdir -p newdir/new1dir
$ ls -laR newdir
total 6
drwxrwxrwx 3 demo guest 1024 Aug 23 20:41 .
drwxr-xr-x 3 demo users 1024 Aug 23 20:41 ..
drwxrwxrwx 2 demo guest 24 Aug 23 20:41 new1dir

3
Egyes rendszerek gy vannak konfigurlva, hogy a superuser jogokkal br felhasznl listzskor a rejtett
fjlokat is ltja, kln opci megadsa nlkl.
3. fejezet Ismerkeds az llomnyrendszerrel
49
newdir/new1dir:
total 4
drwxrwxrwx 2 demo guest 24 Aug 23 20:41 .
drwxrwxrwx 3 demo guest 1024 Aug 23 20:41 ..
$
Katalgusok trlse: az rmdir parancs
Mr ltezo katalgust az rmdir (remove directory) paranccsal trlhetnk. (Most is
megadhatunk tbb paramtert.) Fontos megjegyezni, hogy e paranccsal csak res katalgust
trlhetnk, ha a katalgusban fjlok vannak, a UNIX nem hagyja a katalgus trlst, elobb
trlni kell a fjlokat. (Msik megolds az rm -r parancs hasznlata, lsd ksobb.)
Alapveto fjlkezelo parancsok
Ebben a pontban azokat az alapveto parancsokat tekintjk t, amelyekkel llomnyokat
tudunk ltrehozni, megtekinteni, msolni, s egyb muveleteket vgrehajtani rajtuk.
UNIX felhasznli ismeretek
50
Fjlok ltrehozsa
Egy llomny ltrehozsra sok kezdok szmra taln tlsgosan is sok megolds ltezik.
Ltrehozhatjuk egy szvegszerkeszovel (pldul ed, vi), ktsgkvl ez a leggyakoribb s
legkzenfekvobb megolds. Most viszont nhny "trkksebb" megoldssal kezdnk, melyek
egyben segtenek nhny alapveto Unix jellemvons megismertetsben is. Mindegyik
pldnkban a "Szp idonk van ma" szveget prbljuk meg egy llomnyba berni
4
.
Elso megoldsunk az echo parancsra pl. Az echo a DOS alatt megszokott mdon mukdik
(az eltrsekrol majd lesz sz): a parancssorban argumentumknt megadott karaktereket
tkrzi vissza, alaprtelmezs szerint a kpernyore. A fjlba rand szveget gy az echo
paranccsal a kpernyore mr kilistzhatjuk. Flsiker... A teljes sikerhez az tirnyts
mechanizmusa segthet minket. Lehetosg van ugyanis arra, hogy tetszoleges Unix parancs
bemenett vagy kimenett tirnytsuk mshova, pldul egy fjlba. Esetnkben a >newfile1
megadssal a kimenetet, a kpernyo helyett a newfile1 nevu fjlba. s me, kszen is
vagyunk:

$ echo Szep idonk van ma >newfile1RETURN
$
(Ne feledkezznk meg az egyes sorok vgn a kocsi-vissza karakter (RETURN vagy
ENTER) letsrol; a tovbbiakban ezt nem jelljk.)
Kvetkezo prblkozsunk a hamarosan rszletesebben is ismertetendo cat parancsot
hasznlja fel. A cat parancs egy vagy tbb, argumentumknt megnevezett fjl tartalmt
listzza ki a kpernyore (pldul cat prog1.c prog2.c). Elso rnzsre ez nem sokat segt
rajtunk, hiszen mi nem egy meglvo fjlt akarunk listzni, hanem pp ellenkezoleg, egy mg
nem ltezo fjlt akarunk rni - pestiesen szlva "a tbbi stimmel...".
Minden "jl nevelt" Unix programra igaz azonban, hogy ha nem neveznk meg llomnyt,
amit be kell olvasnia s fel kell dolgoznia, akkor alaprtelmezs szerint (szmtstechnikai
zsargonnal lve, default rtelmezs szerint) a billentyuzetrol (standard input) vrja a
feldolgozand adatokat. Hasonlkppen, explicit kimeneti llomnynv hinyban a
programok a kpernyore (standard output) rnak. Az e konvenci szerint viselkedo
programokat szemlletesen szuroknek (filter) nevezik, a ksobbiekben mg sok sz esik
rluk. Ha teht a cat parancsot bemeneti fjlnv nlkl hvjuk meg, akkor az ltalunk kvnt
mdon, a billentyuzetrol bevitt szveget listzza ki, a kimenetet pedig a mr ltott mdon
irnythatjuk t a kvnt fjlba:

$ cat > newfile2RETURN
Szep idonk van maRETURN
CTRL-D
$
(A RETURN karakter hasznlatn kvl most vigyzzunk arra is, hogy a kvnt szveg
begpelse utn a CTRL-D karaktert is lessk, hiszen ez jelzi a parancsrtelmezonek, hogy
nincs tbb bemeneti adat.)

4
Alkalmazkodva a mai Unixos valsghoz, kezet nlkli (ktelen...) formban rjuk be...
3. fejezet Ismerkeds az llomnyrendszerrel
51
A fenti kt trkk, a szursi konvencik ltezse s az tirnyts hihetetlenl rugalmass teszi
a Unixot.
Vgl utoljra egy szvegszerkesztovel is ltrehozunk egy fjlt:

$ ed newfile3
?newfile3
a
szep idonk van ma
.
w
18
q
$
Az ed editorrl kln fejezet szl a knyvben, mostani pldnk tnyleg csak egy rvid
szemllteto volt. Az ed-nek megadjuk a ltrehozand fjl nevt, a parancs begpelse (s az
itt mr kln nem jellt RETURN letse utn) elindul az editor, s gynevezett
parancsmdban vrja a parancsokat. (A krdojeles fjlnv azt jelzi, hogy ilyen nevu llomny
eddig nem ltezett mr ltezo fjl esetn a fjl mrett rja ki, karakterekben szmolva.) Az
ltalunk kiadott parancs az a (append), ennek hatsra az ed az gynevezett beviteli mdba
kerl, s az ebbol val kilpsig mindent, amit gpelnk, vltozatlan formban az llomnyba
rja. A beviteli mdbl gy lehet kilpni, hogy egy sor elejn egy nmagban ll . (pont)
karaktert runk be (ez utn is kocsi-visszt kell tni!). Ennek hatsra visszakerlnk
parancsmdba; ekkor kiadtuk a w (write) parancsot, ez lemezre rja, teht elmenti a fjl eddig
ideiglenes tartalmt (a kpernyore kirja az elmentett fjl aktulis hosszt), vgl a q (quit)
paranccsal kilpnk az editorbl.
Fjlok megtekintse: a cat parancs
A fjlok megtekintsre, pontosabban a kpernyon trtno megjelentsre a cat parancs
szolgl. (A nv onnan szrmazik, hogy ha tbb fjlnevet adunk meg, akkor ezeket a fjlokat
egymsutn folyamatosan (concatenated) jelenti meg... ennyit a parancsnevek
memorizlhat jelentsrol...)
A cat parancs a paramterknt megnevezett fjlokat, ennek hinyban pedig a standard
inputot, azaz a billentyuzetrol, pipe-bl (csobol) rkezo adatokat listzza ki, folyamatosan,
trdels nlkl. Ez azt jelenti, hogy ha a megjelentendo llomny nagyobb, mint egy
kpernyooldal, akkor a szveg kiszalad a kpernyorol, s csak a listzs-felfggeszto, illetve
jraindt gombbal lehet szablyozni a megjelentst. (E kt funkcinak rendszerint a CTRL-
S, illetve a CTRL-Q billentyu felel meg.) A cat parancs ezen hinyossgainak kikszb-
lsre szolgl a pg s a more, rluk rszletesebben a minimanulban esik sz. Szmunkra
jelenleg legfontosabb parancsuk pg esetben a RETURN, more esetben a szkz billentyu;
ezek hatsra egy kpernyooldalnyit lehet elorelapozni.
Fjlok tnevezse: a mv parancs
UNIX felhasznli ismeretek
52
Gyakran szksges egy fjlt mshova helyezni az llomnyrendszerben, erre a UNIX alatt a
mv (move) parancsot hasznlhatjuk
5
. A legegyszerubb esetben egyetlen fjlt helyeznk t,
pldul a mr ltezo newfile1 llomnyunkat file1 nven akarjuk a tovbbiakban elrni:

$ mv newfile1 file1
$ ls -l newfile file1
newfile not found
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
$
A fenti pldban a mv parancs kt paramtert fogad, s az elsonek megadott fjlt a
msodikknt megadott nvre nevezi t. Ha a cltrgy is kznsges fjl, akkor egyszeru
tnevezs trtnik, az eddig newfile nvre hallgat llomnyt ezentl file1 nven rhetjk el.
(Ha file1 elozoleg nem ltezett, akkor a mv parancs automatikusan ltrehozza, ha mr
ltezett, fellrja.)
Ha a cltrgy katalgus, akkor a mv parancs mskppen mukdik: az elso paramterben
megnevezett fjlt a rgi nven, a cltrgyknt megadott katalgus al helyezi. Ez esetben
lehetosg van arra is, hogy kettonl tbb paramtert adjunk meg a mv parancsnak: ilyenkor
az utols argumentumot tekinti a rendszer az tnevezs clkatalgusnak, s a tbbi
argumentumban megnevezett fjlokat oda helyezi t. Ha pldul kiadjuk a mv newfile2
newfile3 newdir parancsot (ne felejtsk el, hogy a newdir katalgust elozoleg mr
ltrehoztuk), akkor newfile2 s newfile3 egyarnt bekerl a newdir katalgusba, vltozatlan
nven:

$ mv newfile2 newfile3 newdir
$ ls -lR
total 362
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:44 newdir
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2
-rw-rw-rw- 1 demo guest 19 Aug 23 20:23 text

./newdir:
total 6
drwxrwxrwx 2 demo guest 24 Aug 23 20:41 new1dir
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfile2
-rw-rw-rw- 1 demo guest 18 Aug 23 20:44 newfile3
./newdir/new1dir:
total 0
$
Fjlok msolsa: a cp parancs

5
A pontossg kedvrt mr most jegyezzk meg, hogy tnylegesen az llomny nem mozog a fjlrendszerben,
pusztn a rvonatkoz katalgus bejegyzs cserldik.
3. fejezet Ismerkeds az llomnyrendszerrel
53
A fjlok msolsra a cp (copy) parancs szolgl. Fontos klnbsg a DOS-hoz szokott
felhasznl szmra, hogy itt mindenkpp legalbb kt argumentumot meg kell adni, azaz a
DOS alatt szoksos copy fjl megadsmd nem megy, a clfjlt vagy katalgust is meg kell
adni: az elozo DOS plda ekvivalense gy a cp fjl . parancs, ahol expliciten megneveztk az
aktulis katalgust, mint clkatalgust.
A cp parancs mukdse hasonl a mv parancshoz, azaz itt is fjlt fjlba msol, ha a cltrgy
fjl, illetve katalgusba helyez, ha a cltrgy katalgus.
Fjlok trlse: az rm parancs
Fjlokat az rm (remove) paranccsal trlhetnk, termszetesen most is megadhatunk tbb
fjlnevet a paramterlistn. Az rm parancs opcii kzl gyakran fontos lehet a -f: ennek
hatsra az egybknt rsvdett fjlokat is trli az rm. A -i (interactive) opci hatsra a
rendszer egyenknt visszaigazolst kr a fjlok trlse elott. (Szmos rendszerben ugyanez az
opci mukdik a mv s a cp parancsnl is.)
Vgl egy igen hatsos, de egyben igen veszlyes opcirl: a -r hatsra rekurzv mdon
trlodik mind a megnevezett katalgus a benne lvo fjlokkal, mind a fjlhierarchiban
belolk szrmaz sszes katalgus s llomny.
Ellenttben a DOS-sal, a UNIX-ban a fjlok trlse visszafordthatatlan folyamat
KITRLT FJLT SEMMILYEN MDON NEM LEHET HELYRELLTANI!!!
6
ppen
emiatt is, egyes parancsrtelmezokben lehetosg van olyan konfigurlsra, hogy trlst,
fellrst, s ms visszafordthatatlan muveleteket ne hajtson vgre a rendszer, hanem minden
esetben krjen visszaigazolst a gyans muveletekrol. E clt szolglja a fentiekben emltett
-i opci is.
Lncok ltrehozsa: az ln parancs
A UNIX fjlrendszernek egyik jellemzo sajtossga a lncols (linkels) fogalma, ami a
DOS s ms egyfelhasznls opercis rendszerek alatt nem tallhat meg. E mechanizmus
arra szolgl, hogy egy adott llomnyt tbb nven is el lehessen rni az llomnyrendszerben.
Ha pldul van egy llomnyunk text nven, akkor az ln parancs segtsgvel elrhetjk,
hogy mondjuk szoveg nven is hivatkozhassunk r.

$ ln text szoveg
$ ls -l
total 364
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:44 newdir

6
Kivtelek persze minden all vannak egyes UNIX platformokra ltezik mr a Norton Utilities a Quick
Unerase funkcival, s a korszer grafikus felhasznli felletek is inkbb csak szemtkosrba rakjk a trlt
fjlokat, ahonnan azok egy darabig elnyerhetek.
UNIX felhasznli ismeretek
54
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 szoveg
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
$
A lncols tnyrol az ls -l parancs kimenett vizsglva gyozodhetnk meg: a valamilyen ms
nven is lncolt llomnyok lncszma (link count) egynl nagyobb rtk.
Lthat, hogy text s szoveg minden paramtere azonos, ugyanakkor lncszmuk egynl
nagyobb, s ahogy egyre tbb lncolst hajtunk rajtuk vgre, egyre jobban no.
A lncols mibenltnek megrtshez rdemes egy kicsit rszletesebben megismerkedni a
UNIX fjlrendszernek belso szerkezetvel
7
. A 6. bra mutatja a UNIX fjlrendszer belso
felptst. Minden UNIX fjlrendszer elejn megtallhat az gynevezett szuperblokk,
amelyik a fjlrendszer legfontosabb adatait, a belso tblk s azonostk mrett, stb.
tartalmazza. Ezt kveti az gynevezett inode tbla, vgl a tnylegesen felhasznlhat
lemezterlet, ahol az llomnyok ltal lefoglalt s a mg szabad lemezblokkok vegyesen
helyezkednek el.
Az inode nv az index-node bevett rvidtse, s a fjlrendszer kialaktsnak fontos tnyre
utal, nevezetesen arra, hogy az llomnyok jellemzoit tartalmaz inode-okat indexknt
hasznljk a rendszerprogramok. Az inode tbla egy fix mretu tbla, fix hosszsg
rekordokkal, s minden egyes fjlhoz, lett lgyen az kznsges adatllomny, vagy katalgus,
egy s csakis egy inode bejegyzs tartozik. Az inode tartalmazza az adott fjlra vonatkoz
sszes lnyeges informcit, az llomny mrett, tpust, tulajdonost s csoportjt, a
hozzfrsi jogokat, s az llomnyt alkot lemezblokkok fizikai elhelyezkedst a lemezen.
Egy informci hinyzik csak az inodebl, mgpedig a szbanforg llomny neve: ezt az
informcit a katalgus(fjl) tartalmazza.
A katalgusfjlban minden egyes fjlhoz, ami az adott katalgusban szerepel, egy bejegyzs
tartozik. E rekord nem tartalmaz mst, mint az llomny inode szmt, s az llomny nevt.
Nzzk meg ezek utn, mi trtnik akkor, amikor mondjuk a /users/demo/text fjlt szeretnnk
kilistzni? (Segtsgkppen olyan formban (a -i [inode] opcival) listztuk ki a szban forg
fjlokat, hogy az inode rtke is szerepeljen az elso oszlopban.)
8


$ ls -ial /
total 4926
2 drwxr-xr-x 19 root root 3072 Aug 23 13:40 .
2 drwxr-xr-x 19 root root 3072 Aug 23 13:40 ..
14336 drwxrwxrwx 4 root sys 2048 May 14 21:23 bin
16384 drwxrwxrwx 13 root sys 4096 Aug 10 20:24 dev
10240 drwxr-xr-x 14 root other 5120 Aug 23 19:36 etc
17 -rwxr-xr-x 1 root sys 2351104 Sep 7 1992 hp-ux
12499 drwxrwxrwx 2 root other 24 Apr 22 1992 lost+found
2 drwxrwxrwx 3 root root 2048 Aug 23 22:17 tmp
8194 drwxr-xr-x 43 root sys 1024 Aug 17 09:40 users

7
A fjlrendszer felptst ersen leegyszerstve trgyaljuk, s az jabb fjlrendszerek sajtossgaira sem trnk
ki itt.
8
Terjedelmi okok miatt a kpernylistnak csak a szmunkra fontos rszletei szerepelnek.
3. fejezet Ismerkeds az llomnyrendszerrel
55
2 drwxr-xr-x 31 root sys 1024 Aug 10 16:59 usr
$ ls -ial /users
total 94
8194 drwxr-xr-x 43 root sys 1024 Aug 17 09:40 .
2 drwxr-xr-x 19 root root 3072 Aug 23 13:40 ..
6517 drwxr-xr-x 3 agi users 1024 Jun 29 09:56 agi
20699 drwxr-xr-x 3 demo users 1024 Aug 23 21:00 demo
20719 drwxr-xr-x 4 guest users 1024 Aug 10 19:17 guest
..
$ ls -ial /users/demo
total 378
20699 drwxr-xr-x 3 demo users 1024 Aug 23 21:00 .
8194 drwxr-xr-x 43 root sys 1024 Aug 17 09:40 ..
..
20818 -rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
..
20816 -rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
$
A rendszer eloszr megkeresi a gykr katalgus inode-jt, ez a msodik inode (#2). Az
inode rekordbl kikeresi, hogy a lemezen fizikailag hol helyezkedik el maga a / katalgusfjl,
ami a gykrkatalgusban lvo fjlok nevt adja meg. Megnyitja e katalgust, megkeresi
benne a users bejegyzst, megnzi az ahhoz tartoz inode szmot (#8194), ezt indexknt
hasznlva az inode tblban megkeresi a /users katalgusra vonatkoz bejegyzst is. Az
ebben az inode-ban trolt adatok alapjn megkeresi a lemezen a /users katalgusfjlt,
megnyitja, s megkeresi benne a demo bejegyzst, az ahhoz tartoz inode szm (#20699)
alapjn az inode tblban megkeresi a megfelelo bejegyzst, kiolvassa belole a /users/demo
katalgusfjl helyt, megnyitja a katalgust, megkeresi benne a text fjlra vonatkoz
bejegyzst, a hozztartoz inode szm (#20816) alapjn megkeresi az inode-ot, s annak
alapjn megnyitja a tnyleges fjlt.
Az egsz mdszernek az a lnyege, hogy hrom szintu az llomny nyilvntarts, az inode-
ok, a katalgusfjlok s a tnyleges fizikai llomnyok kztt oszlik meg az informci, s a
katalgusfjlok csak nv s inode informcit tartalmazzk, az inode-ok pedig minden
egyebet. Ennek alapjn rtheto meg igazn a lncols mechanizmusa: amikor egy fjlt
linkelnk, nem trtnik ms, mint hogy valamelyik katalgusban egy olyan bejegyzst ho-
zunk ltre, ami egy mr ltezo, s ms nven is hivatkozott inode-ra mutat. Maga a fjl
vltozatlan marad, a lncols tnyt kizrlag az j katalgus bejegyzs, s az inode-ban
megnvelt lncszm jelzi.
Felmerlhet a krds, mi van akkor, ha egy lncolt fjlt trlnk? A fentiek ismeretben
knnyu a vlasz: trlskor a rendszer mindig a lncszm vizsglatval kezd, ha annak rtke
egynl nagyobb, akkor csak a fjlnv bejegyzst trli az adott katalgusbl, s eggyel
cskkenti a lncszmot. Ha a lncszm egy, akkor tnylegesen is trli az llomnyt, azaz
nemcsak az (utols) katalgus bejegyzst sznteti meg, hanem az inode tblbl is trli a
fjlra vonatkoz bejegyzst.
Nem beszltnk mg arrl, hogy mire is j tulajdonkppen a lncols? Kt nagy elonye van,
az egyik a nvtkzsek feloldsa, a msik a helytakarkossg.
UNIX felhasznli ismeretek
56


6. bra: A UNIX fjlrendszer belso szerkezete
A nvtkzsek problmja onnan ered, hogy a UNIX verzik eltro fejlodse miatt
ugyanolyan nven kezdtek nevezni ms-ms parancsokat. Legismertebb plda erre az rsh
parancs, ami a System V alap rendszerekben a restricted shell-t jelenti (ez a szokvnyos
Bourne shell egy korltozott szolgltatsokkal br vltozata), a BSD alap UNIX
rendszerekben viszont a remote shell rvidtse, ami a tvoli gpeken trtno
parancsvgrehajtsra szolgl. Mivel a mai rendszerekben mind a kt parancs szerepel,
3. fejezet Ismerkeds az llomnyrendszerrel
57
ltalban csak a katalgusokban definilt keressi sorrend dnti el
9
, hogy az rsh parancs
kiadsakor melyik indul el a ketto kzl (mindig a msik, mint amelyiket akartuk, errol sajt
tapasztalatunk alapjn biztostjuk a Nyjas Olvast...). Ha viszont valamelyiket egy eltro
nvvel lncoljuk, akkor a nvtkzs problmjt feloldottuk. A restricted shell rendszerint a
/usr/bin knyvtrban tallhat, mg a remote shell a /usr/ucb alatt. Adjuk ki az albbi
parancsot (Ehhez superuser jogok kellenek!):

$ ln /usr/ucb/rsh /usr/bin/remsh
$
E parancs hatsra a tovbbiakban remsh nven hvhatjuk a remote shell-t, rsh nven a
msikat, s a mdszer a katalgusok keressi sorrendjtol fggetlenl mukdni fog.
A linkek mellett szl msik rv a helytakarkossg. Tegyk fel, hogy van kt C nyelvu
programunk, amelyek igen hasonl funkcikat ltnak el, lnyegtelen eltrsekkel.
Megtehetjk azt, hogy mindkettot kln-kln lefordtjuk, keletkezik kt ktelen nagy binris
programunk, klnbzo nven. Ennl sokkal jobb megolds, ha egy kzs, nmileg ugyan
nagyobb forrskdot fordtunk le egy pldnyban, a keletkezett binris vgrehajthat program
nevt pedig a msik programnvhez lncoljuk. (A program futs kzben el tudja dnteni,
hogy milyen nven hvtk, s az annek megfelelo vgrehajtsi gakra futhat.) Ltszik, hogy ez
esetben csak egy darab nagymretu program foglal helyet a lemezen, a linkels helyignye
elhanyagolhat (gyakorlatilag a msodik nv katalgus-bejegyzse, ami tipikusan 16 bjt.) A
legszebb plda minderre ppen a mv, cp s ln parancs esete. E hrom program, mint mr
lttuk, erosen hasonl funkcikat lt el, a paramterek kirtkelse, szmos opci, az inode-
okon s a katalgusokon vgrehajtand muveletek nagy rsze kzs, teht a hrom program
viszonylag jl integrlhat. A legtbb rendszerben ezrt egy kzs binris vgrehajthat
program vgzi mindhrom tevkenysget.

$ cd /bin
$ ls -il mv cp ln
12312 -r-xr-xr-x 3 bin bin 13880 Mar 27 15:07 cp
12312 -r-xr-xr-x 3 bin bin 13880 Mar 27 15:07 ln
12312 -r-xr-xr-x 3 bin bin 13880 Mar 27 15:07 mv
$
Mint a fenti pldn is lthat, krlbell 26 kbjt helyet nyertnk, hiszen csak egy
pldnyban ltezik a 13 kbjt mretu binris fjl, s ezen kvl csak a kt link 32 bjtja foglal
helyet.
Ez az eljrs egybknt nemcsak binris vgrehajthat fjloknl, de shellscript-eknl is
alkalmazhat.
A szimbolikus lnc

9
A keressi sorrend a PATH shell vltozval llthat be (lsd a 4. s 11.fejezetet).
UNIX felhasznli ismeretek
58
Mg egy dologrl emltst kell itt tennnk, s ez a szimbolikus lnc (symbolic link) fogalma. A
UNIX rendszer ktfle lncolsi eljrst ismer, a merev s a lgy lncolst (hard and soft
link). Az elobbiekben a merev lncolssal foglalkoztunk, ennek legfobb jellemzoje az, hogy a
lncolt fjl teljesen egyenrtku az eredetivel, hiszen egyazon inode-ra mutat kt egyenrtku
katalgus bejegyzs, amelyek kztt nem lehet klnbsget tenni.
A lgy lncols, vagyis a szimbolikus link viszonylag ksoi jts a UNIX-ban, a SunOS
opercis rendszerbol terjedt el az elmlt vekben, de mra mr szabvnyos eleme a UNIX-
nak. Lnyege, hogy a szimbolikus link katalgus bejegyzse nem a fjl inode-jra mutat,
hanem egy olyan klnleges fjlra, ami a lncolt fjl nevt tartalmazza. Szimbolikus linket
szintn az ln paranccsal hozunk ltre, de a -s opcit is meg kell adni:

$ ln -s /usr/lib/sendmail.cf sendmail.cf
$ ls -l
total 364
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2
lrwxrwxrwx 1 demo guest 20 Aug 23 23:14 sendmail.cf ->
/usr/lib/sendmail.cf
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
$
Lthat, hogy a lncszm ebben az esetben nem vltozott (az csak a hard link esetn no), a
fjltpusnl egy 'l' betu szerepel, jelezvn, hogy szimbolikus linkrol van sz, s a fjlnvnl a '-
>' karakterek jelzik, hogy melyik fjlhoz van lncolva az llomny.
Ha a pldnkban szereplo sendmail.cf fjlt meg akarja nyitni egy prog-
ram, akkor a kvetkezo trtnik: az elozoekben vzolt mdon eljut a /users/demo/sendmail.cf
fjl inode-jig; szreveszi, hogy szimbolikus link a fjl tpusa; megnyitja a fjlt; kiolvassa a
tartalmt, ami jelen esetben /usr/lib/sendmail.cf; a tovbbiakban ezt a fjlt keresi s nyitja
meg, a mr ismert mdon.
Mire j a szimbolikus link? Legfontosabb elonye az, hogy lehetov teszi klnbzo
fjlrendszerek kzti lncolst. Ennek megrtshez nhny szval meg kell emlteni a UNIX
fjlrendszer egy rdekes tulajdonsgt, mgpedig a mountolhatsg fogalmt. A UNIX
fjlrendszere, ahogy azt a felhasznl szerves egsznek ltja, nem felttlenl egysges fizikai
szinten is. Ha pldul tbb merevlemez van a gpben, ezeken kln-kln UNIX
fjlrendszerek vannak installlva, hasonlkppen, egy CD-n, vagy egy floppy diszken is.
Mountolsnak
10
hvjk azt a tevkenysget, amikor egy ilyen klnll fjlrendszert
becsatolunk egy mr meglvohz. A 7. brn egy olyan pldt mutatunk be, ahol egy floppyn
lvo UNIX-os fjlrendszert csatolunk be a gazdagp UNIX fjlrendszerbe, a /mnt katalgus
al. A tovbbiakban a floppyn lvo fjlrendszer gykrkatalgusa a /mnt hivatkozssal rheto
el, a floppyn lvo /src katalgus /mnt/src nven s gy tovbb. Magrl a mountolsrl tbb
szt nem ejtnk, mert a krds leginkbb a rendszeradminisztrtorokat rinti, a felhasznl

10
Nincs r igazn meggykeresedett magyar kifejezs, mi a tovbbiakban (be)csatolsknt fogjuk emlegetni.
3. fejezet Ismerkeds az llomnyrendszerrel
59
szempontjbl a becsatols szrevehetetlen kell hogy legyen. A fentiek annyiban rdekesek a
szmunkra, hogy merev lncolst nem lehet kt klnbzo mountolt fjlrendszer kztt
ltrehozni. A linkels mechanizmusa ugyanis arra pl, hogy az inode-ok egy
llomnyrendszeren bell egyrtelmuen azonostjk a fjlokat, azaz ugyanazon inode-ra
trtno hivatkozs ugyanazt a fjlt jelenti. Mivel azonban minden egyes nllan
becsatolhat fjlrendszerben fggetlen a szmozs (mindegyikben 2 a root inode stb), az
inode rtk nmagban nem nyjt elgsges informcit arra nzve, hogy a keresett fjl a
teljes llomnyrendszerben hol tallhat. Ezrt ha fjlrendszerek kzti lncolst prbltunk
meg, az albbi, vagy hasonl rtelmu hibazenetet kapunk:

$ ln /usr/users/janos/proba proba
ln: different file system
$
A fenti problmt kikerlhetjk a szimbolikus lncolssal, mert a szimbolikus linkben
szereplo nv akrhova, ms llomnyrendszerbe, nemltezo, vagy pillanatnyilag el nem
rheto helyre is mutathat.


7. bra: Fjlrendszerek mountolsa
A merev lncols msik htrnya, hogy csak egyedi fjlok linkelst teszi lehetov,
katalgusokt nem. Szimbolikus link alkalmazsval egsz katalgusokat lncolhatunk t egy
paranccsal egy msik fjlrendszerbe, ami gyakran hasznosnak bizonyulhat, ha pldul a jobb
terhelssztoszts miatt jra kell strukturlni a fjlrendszert, s egsz alkalmazscsomagokat
UNIX felhasznli ismeretek
60
helyeznk t ms fjlrendszerbe, ugyanakkor mindezt a felhasznl szmra szrevtlenl
akarjuk vgrehajtani.
Hozzfrsi jogosultsgok
E fejezetben a UNIX egyik meghatroz, s a felhasznl munkjt lpten-nyomon rinto
jellegzetessgvel foglalkozunk, nevezetesen a hozzfrsi jogosultsgokkal (permissions).
Tbbfelhasznls rendszerekben alapveto fontossg, hogy az egyes felhasznlk sajt
adatait a lehetosg szerint megvdjk a szndkos vagy szndkolatlan ronglstl, nem is
beszlve a magntitok vdelmrol s ms krdsekrol. E clok biztostsra a UNIX egy
tulajdonosi kategrik s tevkenysgek szerinti engedlyezsi rendszert hasznl, s ennek
alapjn dnt az llomnyokhoz val hozzfrs engedlyezsrol, illetve megtagadsrl.
Mint a 2. fejezetben mr lttuk, egy UNIX felhasznlt a felhasznli azonostja (uid)
azonost a rendszerben, ezenfell minden felhasznl valamilyen csoportba is tartozik, gy
van egy csoportazonostja (gid) is. Amikor valamilyen mdon hozz szeretnnk frni egy
fjlhoz vagy katalgushoz, a rendszer aszerint sorol be minket, hogy milyen tulajdonosi
viszonyban vagyunk az adott fjllal: lehetnk tulajdonosa (azonos uid), lehetnk
csoporttagok (azonos gid), vagy egyb.
A fjllal kapcsolatos tevkenysgek szempontjbl hrom fo csoport van: az llomny
olvassa, rsa, illetve vgrehajtsa (katalgus esetben keresse).
A fjlmuvelet elott a UNIX megnzi, hogy melyik tulajdonosi kategriba esnk, s utna azt,
hogy ebben a kategriban engedlyezett-e vagy sem a vgrehajtani kvnt muvelet.
A hozzfrsi jogosultsgok az ls -l lista alapjn szemlltethetoek a legknnyebben:

$ ls -l
total 364
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2
lrwxrwxrwx 1 demo guest 20 Aug 23 23:14sendmail.cf ->
/usr/lib/sendmail.cf
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
A megjelentett lista baloldali oszlopa tartalmazza a hozzfrsi jogosultsgokat. Az oszlop
legszlso mezoje a fjltpust kdolja, az albbiak szerint:

- kznsges fjl
d katalgus
p specilis cso (pipe)
l szimbolikus link
c karakteres kszlkmeghajt (device driver)
3. fejezet Ismerkeds az llomnyrendszerrel
61
b blokkos kszlkmeghajt
A kvetkezo kilenc karakter tartalmazza, hromszor hrmas bontsban, a hozzfrsi
jogosultsgokat. Ha egy muvelet engedlyezett, a neki megfelelo betu ltszik a listn, ha nem,
a '-' karakter jelzi a tiltst. Az 'r' az olvass (read), a 'w' az rs (write), az 'x' pedig a
vgrehajts (execute) jele (ms karakterek is szerepelhetnek itt, nhnyrl hamarosan lesz
sz). Az elso hrmas csoport a tulajdonos, a msodik a csoport, vgl a harmadik a tbbiek
jogosultsgait mutatja. Konkrt pldt vve, a fenti listn szereplo file1 egy kznsges fjl
('-' karakterrel kezdodik a lista), amit a tulajdonosa rhat s olvashat, de nem hajthat vgre
(rw-), s ugyanezen jogokkal brnak a csoporttagok s a tbbiek is (Nem tl gyakori bellts,
foleg biztonsgi megfontolsok miatt!) Msik plda: a newdir egy katalgusfjl ('d' betuvel
kezdodik a lista), amelyet tulajdonosa rhat, olvashat s 'vgrehajthat' (rwx), s ugyanezek a
jogai a csoporttagoknak, valamint brki msnak is.
Itt lljunk meg egy pillanatra; kznsges fjloknl elgg magtl rtetodo az olvass-rs-
vgrehajts fogalma, katalgusnl mr nem annyira. Egy kznsges fjl olvashat, ha
mondjuk a cat paranccsal ki tudjuk listzni, rhat, ha pldul az ed paranccsal
mdosthatjuk, s vgrehajthat, ha el tudjuk indtani, s a rendszer rtelmezi a benne lvo
informcikat.
Egy katalgus olvassa azt jelenti, hogy az erre a clra szolgl paranccsal (ls) olvashatjuk a
katalgusfjlt, azaz lthatjuk a benne lvo bejegyzseket. Egy katalgus akkor rhat, ha az
erre a clra szolgl parancsokkal (mkdir, rmdir, mv, cp, rm, ln) bejegyzseket tudunk
ltrehozni, mdostani, vagy trlni a katalgusfjlban, illetve trlhetjk/ltrehozhatjuk
magt a katalgusfjlt. A vgrehajtst pedig ez esetben keressnek kell rtelmezni egy
katalgusfjl keresheto, ha a shell egy vgrehajthat fjlt megkereshet s elindthat az adott
katalgusfjlbl. Ez a jog ltszlag hasonl az olvasshoz, de lnyeges klnbsg van kztk.
Legjobban taln egy pldn tudjuk szemlltetni: tegyk fel, hogy van egy prog nevu
vgrehajthat programunk, ami egy olyan katalgusban szerepel, amelyikre engedlyezett az
olvass, de nem engedlyezett a keress (r--). Ebben az esetben magt a katalgust ltjuk
ugyan a kilistzskor, de a benne lvo fjlokat nem. Ehelyett hibazeneteket kapunk,
akrcsak akkor, ha a vgrehajthat fjlt megprbljuk elindtani. (Hasonlkpp, ha cd
parancsot se tudjuk ilyenkor vgrehajtani). Ha a katalgus nem olvashat, de keresheto (--x),
akkor az ls paranccsal nem fogjuk ltni az llomnyt, de ha elindtjuk, vgre fog hajtdni.
Hozzfrsi jogosultsgok mdostsa: chmod parancs
A hozzfrsi jogok mdostsa egyrszrol a fenti csoportokra vonatkoz jogosultsgok
mdostst jelenti (pldul rsvdelem), msfelol ide tartozik az llomny tulajdonosnak,
illetve csoportjnak megvltoztatsa is.
A hozzfrsi jogosultsgok a chmod paranccsal llthatak. E parancsnak kt hasznlati
mdja van, az j jogosultsgokat mind oktlisan, mind szimbolikus mdon be lehet lltani.
Oktlis megads esetn a parancs valahogy gy nz ki:
UNIX felhasznli ismeretek
62
chmod [-R] perm-mode file ...
ahol perm-mode a belltand j hozzfrsi jogosultsg. Itt is tbb fjlnevet lehet megadni
szksg szerint. (A -R opcival rekurzv mdon, a megadott katalgus alatti teljes
llomnyrendszeren mdostja a jogosultsgokat.) A belltand jogokat oktlis szm
formjban kell megadni, az albbiak szerint: az olvass rtke 4, az rs 2, a vgrehajts 1,
ezeket az rtkeket ssze kell adni, s gy tulajdonosi kategrinknt kpzodik hrom oktlis
szmjegy, ezeket kell berni. Ha pldul azt akarjuk, hogy a file1 fjlunkat a tulajdonos tudja
olvasni, rni, vgrehajtani, a csoporttagok vgrehajtani s olvasni, a tbbiek pedig csak
olvasni, akkor a jogosultsgok kdolsa 4+2+1, 4+1, 4, azaz 754 lesz:

$ chmod 754 file1
$ ls -l file1
-rwxr-xr-- 1 demo guest 18 Aug 23 20:42 file1
$
A msik megadsi md a szimbolikus bellts, ennek a kvetkezo a szintaxisa (a szkz csak
a lthatsg miatt szerepel):

chmod [-R] who op perm file ...
ahol who a tulajdonosi kategrit adja meg, lehetsges rtkei 'u' (tulajdonos, user), 'g'
(csoport, group), 'o' (egyb, others), illetve 'a' (mindenki, all), ami az elozo hrmat magban
foglal alaprtelmezs.
perm a megfelelo muvelet, 'rwx' lehet a mr ltott mdon.
op rtke +-= lehet. '+' a megfelelo jog engedlyezst jelenti, '-' a jog letiltst, '=' pedig a
jog abszolt rtkre lltst. Nhny plda:

$ ls -l file1
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 file1
$ chmod 754 file1
$ ls -l file1
-rwxr-xr-- 1 demo guest 18 Aug 23 20:42 file1
$ chmod u-w file1 # tulajdonosnak rsvdett
$ ls -l file1
-r-xr-xr-- 1 demo guest 18 Aug 23 20:42 file1
$ chmod a+x file1 # mindenkinek vgrehajthat
$ ls -l file1
-r-xr-xr-x 1 demo guest 18 Aug 23 20:42 file1
$
Az albbi pldn az abszolt rtkre llts lthat. Normlisan, egy csoportban a '+', illetve a
'-' bellts csak a megnevezett tevkenysget engedlyezi, illetve tiltja, pldul +w bellts
engedlyezi az rst, de a tbbi jogot nem vltoztatja meg. Abszolt rtkes megads esetn a
chmod parancs az expliciten nem emltett jogokat lenullzza. Albbi pldnkban a tulajdonos
olvassi s rsi joga engedlyezodik, de a nem szablyzott vgrehajtsi jog letiltdik:

$ chmod u=rw file1
$ ls -l file1
-rw-r-xr-x 1 demo guest 18 Aug 23 20:42 file1
$
3. fejezet Ismerkeds az llomnyrendszerrel
63
A hozzfrsi jogosultsgok kezelse, mivel az inode rekordban trtnik, biztostja azt is, hogy
egy llomny hozzfrsi jogait csak a tulajdonos tudja lltani, mg abban az esetben is, ha
maga az llomny msok szmra is rhat.
Tulajdonos- s csoportvlts: chown, chgrp
Lehetosgnk van arra, hogy az ltalunk birtokolt llomny tulajdonost s csoportjt
megvltoztassuk. Ez a chown, illetve a chgrp paranccsal trtnik.

$ chgrp staff file1
$ ls -l file1
-rw-r-xr-x 1 demo staff 18 Aug 23 20:42 file1
$ chown janos file1
$ ls -l file1
-rw-r-xr-x 1 janos staff 18 Aug 23 20:42 file1
$
E kt parancs hasznlatakor egyet ne felejtsnk: ha egy llomny tulajdonosi jogait tadtuk,
akkor a tovbbiakban azt mi nem vehetjk vissza, csak az j tulajdonos dnthet gy.
Msodlagos csoportok
A UNIX jabb verzii lehetosget biztostanak arra is, hogy egy felhasznl tbb csoportba is
tartozhasson. E msodlagos csoportokat a rendszergazdnak kell bernia a megfelelo
konfigurcis fjlba (/etc/group). Amikor csoportot szeretnnk vltani, a newgrp
newgroupname parancsot kell kiadnunk. Ha newgroupname szmunkra engedlyezett
csoport, akkor a kvetkezo newgrp parancs kiadsig az j csoportban lesznk, az annak
megfelelo hozzfrsi jogokkal
11
, s az jonnan ltrehozott fjljaink is ebbe a csoportba
fognak tartozni. A paramter nlkl kiadott newgrp parancs visszahelyez minket az
elsodleges csoportunkba.
A msodlagos csoportok a csoportmunkk tmogatsnl elonysek. gy lehetosg nylik
arra, hogy valaki elsodlegesen a sajt csoportjba tartozzk, de minden egyes projekt,
amelyben rsztvesz, kln msodlagos csoportknt szerepeljen, s az e projekthez tartoz
fjlokhoz csak az e msodlagos csoporthoz tartozk frjenek hozz.
Gyakorlati plda: a passwd program
Az albbiakban egy igencsak letszag pldn mutatjuk be a hozzfrsi jogosultsgok
hasznlatt, mgpedig a jelszavak megvltoztatst vgzo passwd programon.

11
Eredeti tulajdonosi jogaink rvnyben maradnak.
UNIX felhasznli ismeretek
64
A passwd program szolgl arra, hogy a felhasznlk megvltoztathassk sajt belpsi
jelszavukat. (A parancs hasznlata igen egyszeru, a felhasznlnak csak a passwd szt kell
begpelni, a parancs kri a rgi jelszt, majd ktszer egyms utn be kell gpelni az jat, s a
legkzelebbi belpskor mr ezt kri a rendszer.)
A UNIX a jelszavakat szmos ms informcival egytt a /etc/passwd fjlban trolja
12
.
Mivel az ebben a fjlban trolt informcik biztonsga ltfontossg az egsz rendszer
biztonsga szempontjbl, ugyanakkor szmos olyan informcit is tartalmaz, amelyekre a
klnbzo programoknak szksgk van, e fjl tulajdonosa a root, s a hozzfrsi jogok
rendszerint rw-r--r-- belltsak, azaz a rendszergazda rni s olvasni tudja a fjlt, mindenki
ms csak olvasni. A krds ezek utn az, hogy ha a fjlt csak a rendszergazda tudja
mdostani, akkor hogyan oldhat meg az, hogy ha egy mezei felhasznl futtatja a passwd
programot, akkor meg tudja vltoztatni a sajt jelszavt, amihez nyilvnvalan a passwd fjl
mdostsa kell? E problmra a set-uid mechanizmus hasznlata nyjt megoldst.

$ ls -l /bin/passwd /etc/passwd
-r-sr-sr-x 1 root sys 22208 Mar 27 15:21 /bin/passwd
-rw-r--r-- 1 root sys 477 Aug 18 16:58 /etc/passwd
$
Ha megnzzk a /etc/passwd adatfjl, s a passwd program vgrehajtsi jogait, egy eddig
mg nem ltott hozzfrsi bellts szerepel a passwd programnl, mgpedig egy s betu a
tulajdonos s a csoport jogoknl. Ez az s a set-uid (set user-id) jog engedlyezst jelzi, ha a
tulajdonosi kategrinl szerepel, illetve a set-gid (set group-id) jogot, ha a csoport
kategriban. Ha e jog engedlyezett, akkor akrki is futtatja a szbanforg programot, a
futtats idejre olyan jogokkal fog rendelkezni, mint a program tulajdonosa (illetve mint a
programmal egy csoportban lvo brmely felhasznl).
Esetnkben ez azt jelenti, hogy ha mezei felhasznl kiadja a passwd parancsot, akkor a
parancs olyan jogokkal fut le, mintha a tulajdonosa, azaz a root futtatta volna le. Mivel
viszont a passwd fjlt a root mdosthatja, mezei felhasznl ki tudja cserlni jelszavt; a
passwd programbl val kilpsekor elveszti klnleges jogait, azok csak a passwd parancs
futsa alatt ltek.
A fenti mdszer kivlan alkalmas arra, hogy ellenorztt krlmnyek kztt privilgizlt
jogokat adjanak a felhasznlk kezbe, de ppen ezrt klnleges vatossggal is kell eljrni,
ha egy programot set-uid jogostvnyokkal akarunk elltni; rosszul mukdo, hibs program
katasztrfkat okozhat a rendszerben, ha mindenki nyakra-fore superuser jogostvnyokkal
hasznlja.
Mi hol tallhat a UNIX-ban?
llomnykonvencik

12
A legtbb UNIX verziban a kritikus password informcik mr egy kln fjlban, rendszerint a /etc/shadow
fjlban tallhatak, de ez most pldnk szempontjbl rdektelen.
3. fejezet Ismerkeds az llomnyrendszerrel
65
E pontban igen hldatlan dologra vllalkozunk, mgpedig annak ttekintsre, hogy mi s
hol tallhat a UNIX fjlrendszerben. E vllalkozs nem is a fjlrendszer mrete vagy
bonyolultsga miatt oly nehz, hanem azrt, mert gyakran igen fontos fjlok s katalgusok
elhelyezse is rendszerrol rendszerre, verzirl verzira vltozik; ami igaz mondjuk HP-UX
alatt, az nem igaz SunOS 4.x alatt, mg kevsb egy SVR4 fjlrendszerben, s gy tovbb.
Mivel biztathatjuk a felhasznlt? A vltozatossg gynyrkdtet monds cinikus
felidzsn tl csak azzal, hogy a rendszerfjlok elhelyezse alapvetoen azrt minden
rendszerben hasonl meggondolsok alapjn trtnik, msfelol azzal, hogy a lassan
egysgeslo UNIX-ban taln ezek a gondok is cskkenni fognak. Mindenesetre ez az
egyik olyan rsze knyvnknek, ami hangslyozottan nem a UNIX-rl, hanem a UNIX
verzikrl beszl. Igyekeztnk a jelenleg legletkpesebb de facto UNIX szabvnyt, az SVR4
verzit kvetni trgyalsunkban, de ahol lehet, megemltjk az egyb UNIX verzik eltro
megoldsait
13
. ppen a jelentos eltrsek miatt, a fjlokat s katalgusokat funkcionlis
csoportokban soroljuk fel, ez knnyebb teszi az eltrsek bemutatst. Igyekeztnk csak
azokra a fjlokra szortkozni, amivel a felhasznl is szembetallhatja magt napi munkja
sorn, illetve amelyek alapvetoek a rendszer mukdsnek megrtshez.
A katalgusokat a nv vgn szereplo / jellel azonostjuk, ennek hinyban fjlra gondolunk,
teht a /etc/ a /etc knyvtrat jelenti, /etc/hosts ennek egy fjljt. A lehetsges nvvaricikat
a * karakterrel jeleztk, teht a /user*/ jelenthet ehhez hasonl katalgusokat mint /user/,
/user1/, /users/, stb.

Kiindulsi katalgusok (home directory)
/home/ (/export/home/, /usr/user*/, /user*/ stb)

Kernel (a vgrehajthat UNIX program)
/kernel/unix (/unix, /hp-ux, /vmunix,/stand/unix stb)

Felhasznli krnyezetet konfigurl fjlok prototpusai
/etc/skel/ (/usr/lib/)

Kritikus rendszerprogramok
/sbin/ (/bin/)

Egyb binris rendszerprogramok
/usr/bin/


13
Helyesebb lett volna az ltalunk ismert vltozatok kifejezs.
UNIX felhasznli ismeretek
66
az opercis rendszer felllsnak vezrlofjljai
/etc/inittab, valamint /etc/init.d/ (a fjlok linkelve a /etc/rc*.d/ katalgusokba) (SunOS s
BSD alap rendszerekben a /etc/rc, s a /etc/rc.* fjlok tartalmazzk az ilyen jellegu
informcit)

adminisztrcis programok s adatfjlok
/etc/*/, /usr/sadm/ (az lland rszek), /var/adm/, /var/sadm/ (vltoz rszek, naplzs).
(Rgebben strukturlatlanul /etc/, valamint /usr/etc/, /usr/adm/ alatt)

Kszlkmeghajtk, perifriadriverek (fobb kszlkcsoportok szerinti bontsban, pldul
dsk/ s rdsk/ a merevlemez, fd/ a floppy, rmt/ a mgnesszalagos egysg stb)
/dev/

egyes fontosabb programok alapbelltsai
/etc/default/

terminldefincik
/usr/share/lib/terminfo/ (System V: /usr/lib/terminfo/; BSD s SunOS: /etc/termcap)

manulok
/usr/share/lib/man/ (/usr/man/)

ideiglenes trol (spool) katalgusok (nyomtats, levelezs, crontab stb)
/var/spool/ (/usr/spool/)

ideiglenes trolhely
/tmp/ (bootolskor trlodik); /var/tmp/ (/usr/tmp/)

programknyvtrak
/usr/lib/*/ (/lib/, /usr/lib/)

helyileg hasznlatos programok
/usr/local/ (/usr/lbin/, /lbin/ stb)

levelezs
/etc/mail/ (SunOS, System V: sztszrtan, /usr/lib/sendmail.cf, /usr/lib/aliases,
/usr/lib/Mail.rc stb)
67
4. FEJEZET


A PARANCSRTELMEZO
(BOURNE SHELL)

A parancsrtelmezo, a shell az, amely az ltalunk begpelt karaktereket rtelmezi s futtatha-
t parancsokk konvertlja. Az tlagos felhasznl szmra messze ez a legfontosabb prog-
ram a UNIX rendszerben, hiszen bejelentkezstol kilpsig ezen keresztl kommunikl a
rendszerrel, s szmra az a UNIX, amit a shell-en keresztl lt. E fejezetben a legelterjedteb-
ben hasznlt parancsrtelmezo, a Bourne shell legfontosabb tulajdonsgaival ismerkednk
meg, azokkal, amelyek nlklzhetetlenek a rendszer hatkony s otthonos on-line hasznla-
thoz. A 10. fejezetben mg mlyebb ismereteket szerezhetnk; az ott trgyalt tmk mr a
shell-programozs terlett rintik, azt, hogy hogyan tudunk komplex feladatok elltsra
shellscript-eket rni. A C shell hasznlatt a 11., a Korn shell-t pedig a 12. fejezetben
vesszk.
Mivel kln fejezetben, rszletesen s funkciik szerint csoportostva foglalkozunk a gyak-
rabban hasznlt UNIX parancsokkal s segdprogramokkal, ezrt e fejezetben csak a leheto
legkevesebb programot szerepeltetjk, a hangslyt tudatosan a shell mechanizmusaira fektet-
ve, s nem a programok gazdagsgra.
Specilis karakterek
Az albbiakban arrl a ltszlag trivilis problmval foglalkozunk, hogy hogyan kell beg-
pelni parancsokat a UNIX shell all, melyek azok a specilis karakterek, amiknek valamilyen
specilis jelentse van.
A legtbb billentyu, amelyet letnk, normlis, azaz nyomtathat s megjelentheto karak-
ter, nhnynak azonban specilis jelentse van. Ezek kzl a legfontosabb a RETURN billen-
tyu, mely a ms rendszerekben megszokott mdon egy begpelt sor vgt jelzi a rendszernek:
a kpernyon ez gy jelentkezik, hogy a kurzor a kvetkezo sor elejre ll.
A vezrlokarakterekrol
A return vagy jsor (newline) karakter, melyet a RETURN billentyuvel generltunk, az n.
vezrlokarakterek (control character) kz tartozik, amelyek a begpelt illetve a kpernyon
UNIX felhasznli ismeretek
68
megjelentendo adatok rtelmezst szolgljk a rendszer szmra. A return funkci minden
esetben rendelkezik sajt billentyuvel, a legtbb vezrlokarakter azonban a CONTROL (nha
CTRL) billentyu s egy msik billentyu egyideju lenyomsakor fejti ki hatst. A return
funkci elrheto pldul a CTRL-M billentyukombinci lenyomsval is. A fenti mdon ge-
nerlhat vezrlokarakter sorozatokat a tovbbiakban a CTRL-X rsmddal jelezzk.
A begpelt karaktereket a shell egy belso trolhelyen gyujti mindaddig, amg a RETURN
karakter lenyomsval nem jelezzk, hogy a parancssor begpelsvel vgeztnk, s tadtuk
feldolgozsra a shell-nek. Vannak azonban bizonyos karakterek, amelyeket specilis javt
funkcikhoz vannak rendelve, ezeket rgtn feldolgozza a rendszer, az jsor karakter berke-
zse elott is. A legfontosabb ilyen karakterek a (karakter)trls s a sortrls.
Karaktertrls
A trls (erase) funkcihoz rendelt karakter letsekor trlodik az a karakter, amelyiken a
kurzor llt. Az os UNIX-okban e funkcit a '#' karakter tlttte be, s mivel akkortjt csak
teletype jellegu terminlok lteztek, a kpernyon nem is trlodtt a szban forg karakter. Az
albbi plda egy ilyen esetet illusztrl:
$ pwc#d
/users/demo
$
A modern megjelentok kialakulsval persze termszetess vlt, hogy a trlo karakter let-
sekor a kpernyon is trlodik a karakter. A konvencik vltozsval a '#' karakter helyett a
DEL billentyu hasznlata lett ltalnos, de sokan kivlt a szemlyi szmtgpekrol t-
szokva a BS (backspace, <-) karaktert favorizljk. A vlaszts teljes mrtkben rajtunk
mlik a vezrlokarakterek is, mint oly sok minden ms, a UNIX alatt szabadon tkonfigu-
rlhatak.
Sortrls
A msik specilis karakter a sortrls (kill) funkcibillentyu: ennek hatsra a shell az addig
begpelt sszes karaktert eldobja, s a tovbbiakban begpelt karaktereket gy kezeli a rend-
szer, mintha azokkal kezdtk volna a bevitelt az jsor karakter utn. Megint csak terminltl
fgg, hogy e billentyu lenyomsakor trlodik-e a sor a kpernyon, vagy pedig a kvetkezo sor
elejre ll-e a kurzor. E funkcit hagyomnyosan az '@' (at) karakterhez szoktk rendelni,
ez azonban az elektronikus levelezsben okoz problmkat, ezrt manapsg inkbb a CTRL-
U karakter a hasznlatosabb.
Specilis jelents elnyomsa
4. fejezet A parancsrtelmez (Bourne shell)
69
Gyakran szksgnk lehet arra is, hogy a fenti funkcikhoz rendelt karakterek specilis jelen-
tst elnyomjuk, s igenis, egy backspace vagy CTRL-U karaktert akarunk lerni. Ilyenkor a
semlegestendo karakter elott egy '\' (backslash) karaktert kell letnnk
1
. A backslash ka-
rakter brmelyik, eddig mg nem trgyalt karakter specilis jelentst is elnyomja. Ha magt
a backslash karaktert kell valahol szerepeltetni, akkor duplzva kell berni. Elgg szerencst-
len s rtelemzavar mdon escape mechanizmusnak is szoktk nevezni ezt a funkcit; a
nv NEM az ESC karakterre utal!
Programfuts meglltsa
A megszakts (intr) funkcihoz rendszerint a CTRL-C, nha a DEL, nha a BREAK gombot
szoktk rendelni; ennek lenyomsra a fut program futsa megszakad.
Httrben fut programok meglltsa
Szmos UNIX rendszerben lehetosg van a httrfolyamatknt indtott programok futsnak
felfggesztsre. A CTRL-Z karakterhez rendelt susp funkcibillentyu hatsra a httrben
fut folyamatok futsa ideiglenesen felfggesztodik s lehetosg nylik vgleges lelvskre,
netn elotrben trtno tovbbfuttatsukra.
Fjlvge
A legfontosabb egyb funkcik egyike a fjlvge (eof), ami rendszerint a CTRL-D karakter-
hez van rendelve. E karakter azt jelzi a rendszernek, hogy nincs tbb adatbevitel (input). El-
lenttben az eddig szerepeltetettekkel, e karakter specilis jelentse csak akkor rvnyesl, ha
egy sor elejn, kzvetlenl egy jsor karakter utn szerepel.
A fjlvge karakterrel brmelyik, adatbevitelt vr programnak jelezhetjk a bevitel vgt, ez
programtl fggoen gyakran a programbl trtno kilpssel egyenrtku. Legkzenfekvobb
plda a UNIX alli kilps, a logout: hacsak mskppen nincs konfigurlva rendszernk, az
eof karakter lenyomsra kilptet minket a UNIX all. Ennek az a magyarzata, hogy beje-
lentkezsnkkor egy shell indul el, ami kilpsnkkor hal el, illetve fordtva is, a login shell
elhalsakor kikerlnk a rendszerbol. Mivel viszont egy shell-nek az a feladata, hogy a bil-
lentyuzetrol rkezo karaktereket feldolgozza s rtelmezze, a nincs tbb input rtelmu
CTRL-D hatsra login shell-nk elhal, s gy kilptet a rendszerbol.

1
Ugyanezt a hatst rhetjk el a semlegestend karakter, vagy karakterek szimpla vagy dupla aposztrofpr ('...',
...) kz zrsval.
UNIX felhasznli ismeretek
70
Kpernyolistzs
Ha akkora adathalmazt listzunk ki, ami tlszalad a kpernyon, a stop, illetve a start funkci-
billentyukkel lehet a listzst felfggeszteni, illetve jraindtani. Rendszerint a CTRL-S a
meglltshoz, s CTRL-Q az jraindtshoz rendelt karakter
2
.
A parancssor feldolgozsa
A parancszr RETURN karakter utn a shell megprblja vgrehajthat parancsokk bonta-
ni a berkezett karaktersorozatot. Elso lpsben a begpelt sort szavakra bontja. A shell sz-
nak tekinti mindazon karakterek egymst kveto sorozatt, amelyet fehr karakterek v-
lasztanak el egymstl. A fehr karakterek kz tartozik a szkz, a tabultor s maga az j-
sor karakter. Ha teht azt gpeljk be a shell promptnl, hogy

alma korte repa
akkor ezt a shell hrom szra fogja bontani, alma lesz az elso, korte a msodik, s repa a
harmadik.
Fontos megemlteni, mert tapasztalataink szerint a DOS felol rkezett felhasznlk gyakran
elfeledkeznek rla, hogy mindig kell legalbb egy fehr karaktert tni az egyes szavak kz,
mert klnben a shell nem az ltalunk szndkozott mdon fogja rtelmezni a parancsokat.
Egynl tbb szkz vagy tabultor az esetek tlnyom tbbsgben nem okoz problmt, hi-
nyuk viszont mindig, ezrt mr itt biztatjuk az olvast, hogy hasznlja nyugodtan a szkz
billentyut, s a CD\ jellegu DOS-os pongyolasgokrl felejtkezzen el, legalbbis amg
UNIX-os gp terminlja elott l...
A szavakra bontott parancssorbl az elso szt fogja a shell a vgrehajtand parancs nevnek
tekinteni, az sszes tbbit pedig argumentumnak, amelyeket (nmi feldolgozs utn) vgre-
hajtskor tad a parancsnak. Fenti pldnkban teht a vgrehajtand parancs az alma lesz, s
argumentumknt a korte s a repa sz addik t: hogy ezekkel a program mit kezd, az mr az
o dolga, a shell-t nem rinti.
Az argumentumok kt csoportra bonthatak, az opcikra s az egyb paramterekre. Az opci-
k rvn egy program viselkedst tudjuk megvltoztatni, pldul az ls parancsot a -l opci-
val rbrni arra, hogy hossz formtum listzst adjon. Az egyb paramterek rendszerint a
fjlnevek, illetve esetlegesen az opcikhoz tartoz rtkek.
A UNIX-ban a '-' karakter jelzi, hogy opcit adunk meg. Az opcik ltalban egy karakterbol
llnak, s ebben az esetben tbb is lerhat egyms utn, pldul az ls -l -t egyenrtku az ls -lt

2
Grafikus, ablakkezel rendszerrel elltott felhasznli fellet esetn rendszerint lehetsg van arra, hogy az ab-
lak tartalmban oda vissza lapozzunk a grgetsv (scrollbar) segtsgvel, ilyenkor a fenti mechanizmus hasznla-
ta szksgtelen.
4. fejezet A parancsrtelmez (Bourne shell)
71
paranccsal. Az opcik megadsnak mindazonltal nincs egyrtelmuen kialakult s rgzodtt
mdja, gy nha furcsasgokba tkzhet az ember: egyes programok pldul meglehetosen
idegesen reaglnak, ha a felhasznl csoportostva rja az opcikat, msok pp ellenkezoleg,
az egyenknt rtakat tekintik illeglisnak. Szerencsre mindez elg ritka, inkbb csak a vi-
szonylag rgi programok egy rsznl fordul elo.
Gyakran elofordul, hogy egy opci utn szmrtket vagy egy karakterstringet is meg kell ad-
ni, pldul az archivl programnl a blokkmretet, editornl a scriptfjl nevt, stb. Itt sem
egysges a gyakorlat, van olyan program, ahol az opcibetuvel egybe kell rni a szmrtket
vagy fjlnevet (pldul a pr parancsnl a 80 karakteres sorszlessg bellts pr -w80), ms-
hol viszont az opcihoz tartoz rtket kln szba kell rni (pldul a tar parancsnl a
blokkmretet a tar cb 20 formban lehet megadni). A kzmegegyezs abba az irnyba mutat,
hogy az utbbi megads a jobb, annl is inkbb, mert ebben az esetben a paramtereket vr
opcikat is lehet egy csoportos opciknt megadni, ilyenkor az opcibetuk utni elso param-
ter az elso olyan opcihoz tartozik, amelyik rtket ignyelt, a kvetkezo paramter a mso-
dikhoz, s gy tovbb. Egy plda: a

tar -cfvb /dev/rmt/0m 20 src
parancsban a -c opci nem ignyel paramtert; a -f opcihoz a /dev/rmt/0m fog tartozni, a -v
megint csak nem ignyel, a -b opcihoz pedig a 20 rtk tartozik; az utols paramter, src pe-
dig nem egy opcihoz tartoz rtk, hanem nmagban ll paramter (pldnkban ez az
archivland knyvtr neve).
Idonknt szksgnk lehet arra is, hogy a meghvott programnak egyrtelmuen jelezzk, vge az
opcimegadsnak, most mr kizrlag egyb paramterek kvetkeznek. Ilyen eset lehet pldul,
amikor ilyen-olyan okbl egy '-' karaktert szeretnnk paramterknt tadni; norml esetben a
meghvott program ezt mindenkppen opcikezdo karakterknt prblja rtelmezni, s elg
nehezen lehet csak e knyszerkpzetrol lebeszlni. jabb verzij parancsrtelmezokben a '--'
(mnusz-mnusz) karakterszekvencia jelzi a shellnek, hogy a tovbbi argumentumokra nem kell
opcifeldolgozst vgrehajtania. Egy plda: ha vletlenl ltrehoztunk egy -f nevu llomnyt, az
rm -f paranccsal hiba is prblkozunk kitrlni, mert rendszernk opcinak veszi a -f
argumentumot. Az rm -- -f megads mr egyrtelmuv s vgrehajthatv teszi kvnsgunkat.
Tbb parancs egy sorban
Az eddigiek sorn elg sz esett arrl, hogy a parancsok hatrol karaktere az jsor karakter, az-
az ennek letsvel jelezzk a shell-nek, hogy lezrtunk egy parancsot, s megkezdheti annak fel-
dolgozst. Az jsor karakteren kvl azonban hasznlhatjuk a pontosvesszo (;) karaktert is az
egyes parancsok elvlasztsra. Ha egyetlen parancsot gpelnk, ennek klnsebb rtelme nin-
csen, a shell addig gysem veszi be a parancsot, amg jsor karaktert nem tttnk:

$ date
Thu Mar 28 14:39:45 MET 1991
$ date;
UNIX felhasznli ismeretek
72
Thu Mar 28 14:39:50 MET 1991
$
A pontosvesszo hasznlatval azonban lehetosg van arra, hogy tbb parancsot adjunk meg
ugyanabban a parancssorban:

$ date; who
Thu Mar 28 14:40:04 MET 1991
root console Mar 28 12:56
tmp vt01 Mar 28 13:52
guest vt02 Mar 28 14:37
$
Fenti pldnkban kt j paranccsal is megismerkedtnk. A date parancs kirja az aktulis d-
tumot s idot a rendszerben (rendszeradminisztrtorok a belltst is vgrehajthatjk ugyanez-
zel a paranccsal.
A who paranccsal a rendszerbe bejelentkezett felhasznlk listjt kaphatjuk meg: az oszlo-
pos formtum kirsban az elso oszlop a felhasznl bejelentkezsi nevt adja meg, a mso-
dik annak a terminlnak a neve, vagy rvidtse, amelyiken az illeto bejelentkezett. Vgl a
harmadik oszlop a bejelentkezs idopontjt mutatja meg.
A standard perifrik s tirnytsuk
Lttuk, hogy a programok tlnyom tbbsge a billentyuzetrol vrja a bemeneti adatokat (in-
put), s a kpernyore kldi az eredmnyeket (outputot).
E kt perifrit, azaz a billentyuzetet s a kpernyot a UNIX standard be- s kimeneti csator-
nnak nevezi, s kis egsz szmokkal lehet rjuk hivatkozni. Pontosabban fogalmazva, a
UNIX hrom standard be- s kimeneti csatornt definil, a standard bemenetet (stdin, 0); a
standard kimenetet (stdout, 1) s a standard hibacsatornt (stderr, 2). A standard bemenet
alaprtelmezs szerint a billentyuzet, a kimenet s a hibacsatorna pedig a kpernyo. Az utb-
bi ketto sztvlasztsnak alapesetben nincs rtelme, hiszen mind a fut programok eredm-
nyt, mind az esetleges hibazeneteket ltni szeretnnk.
Nyilvnval, hogy nem sokra megynk olyan programokkal, amelyek csak a billentyuzetrol
tudnak adatokat fogadni, s csak a kpernyore tudnak kirni e gondon segt az tirnyts
(redirection). Ennek lnyege az, hogy tetszoleges programot utasthatunk arra, hogy bemene-
tt ne a billentyuzetrol vrja, illetve eredmnyeit ne a kpernyore rja. E mechanizmusnak a
UNIX alatt kitntetett jelentosge van: gyakorlatilag minden, a standard outputra r program
kimenete tirnythat egy tetszoleges llomnyba, s hasonlkpp, brmelyik program, ame-
lyik a standard inputrl olvas, tetszoleges llomnybl veheti inputjt. A bemenet tirnyt-
snak jele a '<' karakter, a kimenet a '>' karakter.
Pldul az albbi parancs a katalgus tartalmt nem a kpernyore listzza ki, hanem a file ne-
vu llomnyba teszi:

4. fejezet A parancsrtelmez (Bourne shell)
73
$ ls -l >file
$ cat file
total 364
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 0 Aug 29 16:46 file
-rw-r-xr-x 1 janos guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir
..
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
$
A '<' s '>' karakterek mindkt oldaln tetszoleges szm szkz karaktert tehetnk, de el is
hagyhatjuk oket. Az albbi parancssorozat eloszr ltrehozza az akarmi s a semmi nevu fj-
lokat, majd a cat parancs segtsgvel sszemsolja oket egy harmadik, temp nevu llomny-
ba:
$ echo "Ez akarmi ***" >akarmi
$ cat akarmi
Ez akarmi ***
$ echo "*** Ez semmi" > semmi
$ cat semmi
*** Ez semmi
$ cat akarmi semmi>temp
$ cat temp
Ez akarmi ***
*** Ez semmi
$
A kimenet tirnytsakor, ha az llomny, amibe az tirnytst eszkzltk, nem res, akkor
az jonnan belerd adatok fellrjk a tartalmt. Ennek elkerlsre szolgl a '>>' karakte-
rekkel jelzett additv tirnyts; ekkor az tirnytott adatok a meglevokhz fuzodnek:
$ cat akarmi semmi >>temp
$ cat temp
Ez akarmi ***
*** Ez semmi
Ez akarmi ***
*** Ez semmi
$
A bemenet tirnytsra egy plda: egy megrt levelet tbbeknek szeretnnk postzni. A le-
velezsre hasznlt mail parancs elvileg interaktv mukdsu, azaz meg kell adni a parancssor-
ban a cmzett nevt s a levl trgyt, majd a RETURN utn begpelhetjk a levl szvegt.
Ha viszont mr kszen lvo levelet szeretnnk kldeni, akkor a levelet a bemenet tirnyts-
val adjuk meg a program szmra:

$ mail -w janos geza <level
$
UNIX felhasznli ismeretek
74
Az tirnyts segtsgvel lehetosg nylik pldul a bejelentkezett felhasznlk bc-
sorrendben trtno kilistzsra:

$ who >temp; sort <temp
guest vt01 Mar 28 20:58
guest vt02 Mar 28 20:58
root console Mar 28 20:58
$
A fentebbi pldban hasznlt sort parancs a bemenetrol olvasott adatokat rendezi alfabetiku-
san, vagy szmos ms, opcionlisan bellthat szempont alapjn.
A csovezetk (pipe)
Az elozo pldban az egyik program kimenett hasznlta fel a msik program bemenetknt,
egy ideiglenes llomny kzbeiktatsval. Ennek s az ehhez hasonl feladatoknak a megol-
dsra szolgl a csovezetk (pipe), amely annakidejn a UNIX egyik alapveto jtsa volt. A
pipe, melynek jele a '|' karakter, az egyik program kimenett a msik program bemenetvel
kti ssze. Az elozo pldaprogram teht gy rhat:

$ who | sort
guest vt01 Mar 28 20:58
guest vt02 Mar 28 20:58
root console Mar 28 20:58
$
(Noha a pipe a DOS alatt is szerepel, de ott csak szimullja a parancsrtelmezo a cso jellegu
mukdst, az tadand adatok egy, a felhasznl elott rejtett fjlba kerlnek. Ennek az a k-
vetkezmnye, hogy a msodik program csak akkor tud olvasni a pipe-rl, ha az elso mr be-
fejezte annak rst. A UNIX esetben a pipe-olst egy FIFO oldja meg, amit vltakozva az
elso program tlt, a msodik kiolvas, s ez addig folytatdik, amg az elso programnak van
mit tlteni.)
A pipe-ok tbbszrzhetoek is, azaz lncszeruen egymsra plve adhatjk tovbb az adato-
kat egymsnak. Nzzk meg pldul az albbi programot:

$ who | sort | pr -t -3
guest vt01 guest vt02 root console
$
Ez a parancs eloszr kilistzza a bejelentkezett felhasznlkat, majd bcsorrendbe rendezi
oket, vgl az utols fzisban hromhasbos formban nyomtatja ki oket.
A kvetkezo parancs azt adja meg, hogy a guest nevu felhasznl hny terminlon van beje-
lentkezve:
$ who | grep guest | wc -l
2
4. fejezet A parancsrtelmez (Bourne shell)
75
$
E feladathoz kt, eddig mg nem emltett hasznos UNIX segdprogramot hasznltunk fel. A
grep karaktersorozatoknak, stringeknek llomnyokban trtno keressre szolgl, a wc
(word count) pedig alaprtelmezs szerint a bemenet sorainak, szavainak s karaktereinek
szmt adja meg. A -l opci megadsval csak a sorok szmt rja ki.
Nem utolssorban a pipe-ban val hasznlhatsg kvetelmnye miatt olyan a legtbb UNIX
parancs viselkedse, hogy ha nincs llomnynv megadva, ahonnan inputjt vennie kell, ak-
kor automatikusan a standard inputrl olvas. (Szmos programnl lehetosg van arra, hogy a
standard inputrl val olvasst explicit mdon jelezzk, hagyomnyosan egy nmagban, op-
cibetu nlkl ll jellel.)
UNIX felhasznli ismeretek
76
Programok csoportostsa zrjelezssel
A () zrjelek hasznlatval lehetosgnk nylik programok csoportostsra. Ennek nmag-
ban nem sok rtelme volna, hiszen a
date; who
illetve a
(date; who)
eredmnye kztt nincs klnbsg; mindjrt lesz azonban, ha az eredmnyt egy pipe-on ke-
resztl akarjuk vezetni: a pipe precedencija ugyanis nagyobb, mint a pontosvesszo, s ezrt
ha kt vagy tbb egymst kveto program eredmnyt akarjuk pipe-ra ktni, szksg van a
zrjelekre:

$ date; who
Tue Apr 02 16:12:22 MET 1991
root console Apr 2 08:00
guest vt01 Apr 2 08:00
guest vt02 Apr 2 16:12
$ date; who| wc
Tue Apr 02 16:12:43 MET 1991
3 15 111
$ (date; who) | wc
4 21 140
$
A fenti pldn is ltszik, hogy zrjelezs nlkl csak a who parancs kimenete kerlt a wc
bemenetre, zrjelezs utn viszont a date parancs is.
A standard error
Ha a parancsok hibazeneteiket a standard kimenetre rnk, akkor csovezetkbe kttt prog-
ramoknl egyrszrol nem lennnek lthatak a kpernyon (mrpedig pont a figyelemfelhvs
a funkcijuk), msfelol nem vrt eredmnyeket adnnak, amint ms programok bemenetre
kerlnnek. Mindezek miatt a hibacsatornt a norml kimenettol eltroen kezeli a UNIX. A
hibacsatorna alaprtelmezs szerint szintn a kpernyohz van rendelve, de akkor is gy ma-
rad, ha a standard outputot tirnytottk. (Termszetesen szksg esetn a standard error csa-
torna is tirnythat, csak ppen errol is explicit mdon kell rendelkezni.)
Az albbi pldaprban a hrom sszefuztt parancs kzl a sort rossz opcit kapott, emiatt a
terminlra ki is rta a hibazenetet, de a standard kimeneten keresztl lthatlag semmit nem
adott t ebbol a wc programnak, mert az, csvn keresztl kapva ugyanazt a kimenetet, 0 r-
tket mutat.
$ who | sort -X
4. fejezet A parancsrtelmez (Bourne shell)
77
sort: invalid use of command line options
$ who | sort -X | wc -l
sort: invalid use of command line options
0
$
Csvek elgaztatsa: a tee parancs
A cso kapcsn mg egy hasznos segdprogramrl kell emltst tenni, s ez a tee nevu program.
A tee bemenett szintn a standard inputrl veszi, de kimenett kt helyre kldi; egyrszt a
standard outputra, msrszt a paramterknt megnevezett llomnyba. Ez elsosorban prog-
rambelvseknl igen hasznos szolgltats. A -a opci hatsra a paramterknt megadott ki-
meneti llomnyt nem rja fell a tee, hanem hozzfuzi az jabb kimeneti adatokat.
$ date | tee temp | wc -l
1
$ cat temp
Thu Mar 28 14:40:04 MET 1991
$
Folyamatkezels
A 2. fejezetben mr lttuk a program s a folyamat kzti klnbsget, ami alapvetoen gy
sszegezheto, hogy a folyamat (process) nem ms, mint egy program ppen fut pldnya, a
programkd s a futskor hozzrendelt adatterlet, a maga processz-pldnyonknt egyedi
tartalmval. (Szemlletes hasonlattal lve, amikor tbben hasznljk mondjuk a cat paran-
csot, az egyes elindtott folyamatok programkdja kzs (hiszen ugyanaz a program fut), de
az adatszegmens ms s ms, attl fggoen, hogy melyik folyamat melyik fjlt listzza, hol
tart a listzsban stb.) Ebbol az is leszurheto, hogy a UNIX, mint tbbfelhasznls s tbbfel-
adatos rendszer alatt, a folyamat az egyik legalapvetobb egysg, amivel az opercis rendszer
dolgozik. Az albbiakban a folyamatkezelssel foglalkozunk egy kicsit, klns tekintettel a
httrben futtatsra s a folyamatok idoztett vgrehajtsra.
Httrfolyamatok s folyamatazonostk
Lttuk az elozoekben, hogy egy parancssorban tbb programot is elindthatunk, ha pontos-
vesszovel elvlasztva gpeljk be oket. Ez esetben a programok (pontosabban: a folyamatok)
egymstl teljesen fggetlenl de, egyms utn, szekvencilisan futnak le, amg az elso pa-
rancs ltal indtott le nem fut, a kvetkezo nem indul el. A UNIX azonban egyidejuleg tbb
program futtatsra is kpes. Tegyk fel, hogy van egy idoignyes programunk, amelynek
futtatst nem felttlenl tudtuk az ebdsznetre idozteni, s valami ms hasznosat is szeret-
UNIX felhasznli ismeretek
78
nnk csinlni, amg az fut. Ez esetben a httrben fut folyamatknt elindthatjuk a progra-
mot, elindtsa utn a parancsrtelmezo rgtn visszaadja a promptot, s nem kell a program
befejezodsre vrni, futtathatunk valami mst.

$ grep ilyenugyselesz /* >./eredmeny &
1540
$
A fenti pldban az ilyenugyselesz stringet keressk a gykrkatalgus llomnyaiban, s az
eredmnyt az aktulis katalgusban az eredmeny nevu llomnyba ratjuk. A parancssor v-
gn az '&' jel jelzi, hogy a programot a shell httrfolyamatknt (background process) indt-
hatja, s nem kell a befejezodst megvrnia. A felhasznl szmra ez abban jelentkezik,
hogy rgtn visszakapja a promptot, s a rendszer kir egy szmot. Ez a szm az adott processz
folyamatazonostja, az gynevezett process-id (PID). Ezt az azonostt a ksobbiekben az
adott processzre val hivatkozsokban hasznlhatjuk. Mivel a folyamat a legalapvetobb futsi
entits a rendszerben, a UNIX minden egyes folyamathoz egy egyedi azonost rtket ren-
del, amelyet az adott zemciklusban (teht a kvetkezo bekapcsolsig) egyidoben senki ms
nem kap meg.
Folyamatok lelvse: a kill parancs
A process-id leggyakoribb alkalmazsa az, amikor egy tl sokig fut, netn hibs, vagy nem
az ltalunk vrt eredmnyt ad httrprocesszt le akarunk lltani (nem httrben fut progra-
mot a CTRL-C billentyuvel lehet leloni). Erre a clra a kill parancs szolgl. Paramterknt a
lelvendo folyamat PID-jt kell megadni:

$ kill 1540
$
Szksgtelen mondani, hogy a felhasznl hacsak nem rendelkezik superuser jogostv-
nyokkal csakis a sajt maga ltal elindtott folyamatokat loheti le.
Folyamatok kilistzsa: a ps parancs
Gyakran elofordul azonban, hogy az ember mr nem emlkszik a meglltand folyamat azo-
nostjra. A radiklis megoldsok hvei a kill 0 paranccsal az sszes sajt fut folyamatukat
abortlhatjk (magnak a bejelentkezskor elindult login shell-nek a kivtelvel)
3
, van azon-
ban ennl finomabb mdszer is, nevezetesen a ps parancs segtsgl hvsa. A ps alaprtel-
mezs szerint az rdeklodo felhasznl fut folyamatainak legfontosabb adatait listzza ki,
kztk a folyamatazonostt is; ennek birtokban mr clzottan hvhat meg a kill.


3
Tbb rendszerben a login shell is megli.
4. fejezet A parancsrtelmez (Bourne shell)
79
$ ps
PID TTY TIME COMMAND
113 vt02 0:01 sh
203 vt02 0:00 ps
140 vt02 0:00 sh
141 vt02 0:00 tee
142 vt02 0:00 sh
$
Az eredmnyl kapott listn az egyes folyamatok azonostja, a folyamathoz rendelt terminl
neve, a folyamat futsi ideje s vgl a neve lthat. A -ef opcik megadsval a rendszerben
ppen aktv sszes folyamatrl kapunk rszletes listt, ennek elemzse azonban tlmutat t-
mnkon. (Az viszont sajnlatos mdon idevg, hogy a ps parancs listja megint csak rend-
szerrol rendszerre eltro lehet; a fenti opcik pldul a System V alap rendszerekre rvnye-
sek, BSD UNIX verziknl a ps -ax parancs generl hasonl eredmnyeket. De ezen tlmeno-
leg is, az egyes paramterek kirsi helye s/vagy megadsnak mdja eltrhet, clszeru mindig
utnanzni az online manulban.)
Programfuttats kilps utn: a nohup parancs
Klnsen szmtsignyes programoknl jnne jl, ha az ember a httrben elindthatn
programjt, aztn kilpne a rendszerbol, s nem kellene vrnia a program befejezodst. Nor-
ml krlmnyek kztt erre nincs md, mert ha a felhasznl kilp a rendszerbol, minden
olyan folyamata elhal, amit az o login terminljrl indtottak el, teht a httrfolyamatok is.
Ennek elkerlsre szolgl a nohup (no hang-up) parancs.
Albbi pldnkban a nohup paranccsal indtott sokaigfutok program a felhasznl kilpse
utn is tovbb fog futni, eredmnyt pedig, mivel nem lesz terminl, ahova rhatn, a
nohup.out nevu llomnyba rakja (errol a rendszer gondoskodik, nem neknk kell megadni):
$ nohup sokaigfutok &
641
$ Sending output to nohup.out
(A nohup parancsot is httrfolyamatknt kell futtatnunk, ha vissza akarjuk kapni a
promptot.)
Termszetesen a nohup se vd a rendszer lekapcsolsa ellen, s egy mr fut program utla-
gos tmentsre sem alkalmas
4
.
Programok idoztett vgrehajtsa: az at parancs

4
Vltoznak az idk: vannak mr ma is olyan laptop (!) UNIX gpek, amik vratlan kikapcsolskor elmentik pilla-
natnyi llapotukat, s bekapcsols utn automatikusan ugyanabba az llapotba kerlnek, belertve az sszes ppen
futott alkalmazst, mint ahol kikapcsolskor voltak...
UNIX felhasznli ismeretek
80
Rendkvl hasznos lehetosg, ha parancsainkat s alkalmazsainkat tetszoleges idopontban,
elore temezve, netn periodikusan tudjuk vgrehajtatni. A standard Unix kt parancsa nyjt
erre lehetosget: az at az elore temezett, egyszeri parancsvgrehajtst teszi lehetov, a
crontab pedig rendszeresen ismtlodo parancsok indtst vgzi. (A legtbb rendszerben a
crontab csak a privilgizlt felhasznlk szmra hozzfrheto, ezrt itt nem foglalkozunk
vele.)
Az at parancs a kvetkezokppen indthat (a CTRL-D itt is a tnylegesen letendo
vezrlokaraktert szimbolizlja):

$ at time
tetsz!leges parancs(ok) begpelhet!ek,
lezrs CTRL-D karakterrel
CTRL-D
$
Az albbi pldval azt illusztrljuk, hogy hogyan lehet az jszakai lemezkihasznltsgi lla-
potokat kilistzni:

# at 0030
echo Diszkhasznalat:
df -k
echo
CTRL-D
warning: commands will be executed using /usr/bin/sh
job 746749800.a at Tue Aug 31 00:30:00 1993
#
Pldnkban hrom parancsot adtunk meg, jszaka fl egykor trtno vgrehajtsra, egy echo,
egy df s mg egy echo parancsot. (A df -k parancs hatsra a gp sszes llomnyrendszer-
nek lemezkihasznltsgrl kapunk informcikat, mekkork az egyes lemezek, mekkora a
foglalt s a szabad rszek arnya, mind kilobjtban, mind szzalkosan megadva.)
5

A bemenetet zr CTRL-D megadsa utn a shell figyelmeztet, hogy az ltalunk megadott
parancs(oka)t egy Bourne shell fogja vgrehajtani, vgl kilistz egy azonostt. Ha a mega-
dott idopontban ppen nem vagyunk bejelentkezve, a program(ok) futsakor kapott esetleges
eredmnyt s a hibazeneteket levlben kldi el neknk.
Termszetesen itt is lehet tirnytst hasznlni, gy pldul a vgrehajtand parancsokat egy
llomnyba szerkeszthetjk, s az at parancsot gy indtjuk, hogy a standard input helyett e
fjlbl olvasson:

$ at 3am <napitorles
$
Az idopont megadsakor elg laza szablyok vannak, az at parancs elg intelligens ahhoz,
hogy a legtbb angol idopont- s dtummegadsi mdot felismerje (megint csak a szerzok ta-

5
BSD Unix verziban a df -k megfelelje a bdf parancs.
4. fejezet A parancsrtelmez (Bourne shell)
81
pasztalata, hogy azrt azt az egyet ppen nem szeretik, amit mi igen...). Lehetosg van a
tomorrow, today, midnight, now stb szavak hasznlatra is. Csak zeltol, az albbiak
mind rvnyes s hasznlhat dtumformtumok:

at 0815am Jan 24, at 8:15am, at now + 1 day, at now next day, at 5pm Friday, stb.
Arrl nem ejtettnk mg szt (s ha van az olvask kztt olyan, aki szereti rgvest begpelni
a pldkat, az valsznuleg eltkozott mr ezrt minket), hogy a legtbb rendszerben nem
mindenkinek engedlyezett az at parancs hasznlata sem. Mg pontosabban fogalmazva,
alapbellts szerint csak a root s egyb privilgizlt felhasznlk futtathatnak idoztett pa-
rancsokat.
A hozzfrsek szablyzsa kt fjl rvn trtnik, az at.allow s az at.deny fjlokkal. (Ezek
rendszerint a /usr/spool/cron, vagy a /usr/lib/cron katalgusban tallhatak.) Az elobbibe azo-
kat a felhasznlkat lehet berni, akik hasznlhatjk az at parancsot, utbbiba pedig azokat,
akiknl ezt kifejezetten tiltjuk. A megfelelo fjlok resen hagysval lehet belltani a kt
szlsosget, miszerint mindenki, illetve senki sem jogosult az idoztett parancsvgrehajtsra.
E kt fjlt termszetesen csak privilgizlt felhasznlk mdosthatjk.
A fjlnevek behelyettestse a shell-ben
Lttunk mr nhny olyan karaktert, amelynek valamilyen specilis jelentse van a shell sz-
mra; a pontosvesszo a parancsokat hatrolja, a kerek zrjelek a parancsok csoportostsa-
kor hasznlatosak, a '&' jel a httrben futtatst jelzi, stb. Ezeket a karaktereket szoktk me-
takaraktereknek nevezni, mivel betu szerinti rtelmkn tlmutat jelentsk is van. Ebben a
pontban nhny jabb metakarakterrel ismerkednk meg, amelyek a shell egy igen fontos me-
chanizmusban, a fjlnevek behelyettestsben kapnak szerepet.
Ha a shell a parancssor valamelyik szavban a krdojel (?) vagy csillag (*) karakterek vala-
melyikt tallja, ezeket helyettesto karakternek rtelmezi, s az oket tartalmaz szt megpr-
blja az aktulis katalgusban lvo fjlnevekre illeszteni.
6
A '?' karakter brmelyik karakterre
illeszkedhet, a '*' karakter pedig tetszoleges szm s tetszoleges karakterre illeszkedik. Ha a
shell tallt az adott argumentumra illeszkedo fjlnevet, akkor behelyettesti azt az argumen-
tum helyre. Nzzk meg mindezt nhny pldn! Tegyk fel, hogy katalgusunk az albbi
fjlokat tartalmazza:

$ ls
FULL-INDEX file newdir newfilee2 sendmail.cf text
akarmi file1 newfile semmi temp
$

6
Ha az adott sz elrsi tra jellemz karaktereket (/, .) tartalmaz, akkor az gy meghatrozott katalgusban
prbl meg illeszteni.
UNIX felhasznli ismeretek
82
Most prbljunk meg helyettesto metakaraktereket tartalmaz argumentumokat megadni az
ls parancsnak, s nzzk meg, ezeket milyen fjlnevekre tudja rilleszteni a shell. Elso pl-
dnkban a shell az 'f' betuvel kezdodo, utna egy tetszoleges karaktert tartalmaz, majd az 'le'
karakterekre vgzodo nevu fjlt keres a kurrens knyvtrban; egy ilyet tallt, a file nevut:

$ ls f?le
file
Hasonlkppen a msodik minta a 'file' betukkel kezdodo, s mg egy tetszoleges karaktert
tartalmaz nevet keres ez a file1 llomnyra illeszkedett.

$ ls file?
file1
A kvetkezo plda a 'file' karakterekkel kezdodo, s brmivel folytatd nevekre illeszkedik:
ebbe belefr az az eset is, ha nulla darab karaktert vesz a shell, ezrt illeszkedik a file llo-
mnynvre is!

$ ls file*
file file1
Az albbi plda az akrmivel kezdodo, a 'file' szcskval folytatd, s akrmivel befejezodo
nevekre illeszkedik:

$ ls *file*
file file1 newfile newfilee2
Ez a plda az akrmivel kezdodo, a 'file' karakterek utn egy tetszoleges karaktert tartalmaz
nevekre illeszkedik:

$ ls *file?
file1
Utols pldnkban egy olyan mintt adtunk meg, ami semmilyen fjlnvre nem illeszkedik a
kurrens katalgusban ilyenkor a shell vltozatlanul hagyja az argumentumot, azaz az ls pa-
rancs az x* nevet fogja megkapni, s joggal panaszkodik, hogy ilyen fjl nem ltezik:

$ ls x*
x* not found
$
A '?' s a '*' karaktereket dzsker-karaktereknek is nevezik, a fjlnv behelyettestsben betl-
ttt szerepkre utalva.
Mg egy dzsker-mechanizmus is rendelkezsre ll, ez a karakterosztly megadsnak lehe-
tosge. A szgletes zrjelek '[...]' kztt megadott karakterek egy karakterosztlyt definil-
nak: az ezt tartalmaz minta illeszkedni fog brmelyik olyan karakterre a fjlnevekben, ame-
lyik a karakterosztlyban szereplo brmelyik karakterrel azonos. Egy plda: az a[xyz] minta
illeszkedni fog az ax, ay s az nevekre. Lehetosg van tovbb arra is, hogy az ASCII kd-
kszlet szerint egyms utn kvetkezo sok karaktert a mnuszjel felhasznlsval, tl-ig for-
mban adjuk meg. Az src[0-9] minta illeszkedni fog az src0, src1, ... src9 fjlokra. Vigyzat,
4. fejezet A parancsrtelmez (Bourne shell)
83
egy karakterosztly megadsa mindig egy karakterre illeszkedik, ha pldul ktjegyu szmok-
kal vgzodo mintt szeretnnk megadni, valahogy gy kne: src[0-9][0-9].
A karakterosztlyoknl karakterek ellentettjt is kereshetjk, a '^', illetve jabb shellekben a
'!' karakterek megadsval. gy teht a '[!a-z]' brmely olyan karakterre illeszkedik, ami nem
kisbetu. (Ha magt a '^' vagy a '!' karaktert szeretnnk tagadni, az elso helyen kell
szerepeltetni a karakterosztlyon bell, pl. '[!!a-z]' minden olyan karakterre illeszkedik, ami
nem felkiltjel, vagy kisbetu.)
Van mg egy aprsg, amire nem rt, ha vigyzunk a mintamegadsokkor: akrcsak az ls pa-
rancs, a shell is eltroen kezeli a rejtett fjlokat, s alaprtelmezs szerint a '.', illetve a '*' jel
hatlya nem terjed ki a nvkezdo pont karakterre. Ennek az a kvetkezmnye, hogy a '*' minta
pldul minden ltezo fjlnvre illeszkedni fog, kivve a rejtetteket. Ha azokat is ltni akar-
juk, explicit mdon meg kell adni a szkezdo pont karaktert a mintban, pldul ls .*. (ennek
viszont az a kvetkezmnye lesz, hogy a kurrens s a szlo katalgusra val hivatkozs ('.' s
'..') is illeszkedik a mintra, teht azok tartalmt is kilistzza az ls. Megolds? ls .[!.]*
Vgl ismt csak nyomatkosan emlkeztetnk arra, hogy a fjlnv behelyettestst mindig a
shell vgzi el, s a meghvott program mr a behelyettestett fjlneveket kapja meg: egyik
elozo pldnknl maradva, amikor mi az ls file* parancsot adtuk ki, a shell kt illeszkedo
llomnynevet tallt (file s file1), s ezeket behelyettestette az eredeti parancsba. Amikor
teht a shell tnylegesen meghvja majd az ls parancsot, gy fogja ltni, mintha mi az ls file
file1 parancsot adtuk volna ki, nem fog tudni arrl, hogy hogyan nzett ki a parancssor
eredeti mivoltban.
A DOS s UNIX metakarakterek
A DOS-t ismerok figyelmbe ajnljuk a DOS s a UNIX metakarakter rtelmezse kzti fon-
tos klnbsget: mg a UNIX konzekvensen csinlja a mintaillesztst, addig a DOS ezt fi-
noman szlva elgg elnagyoltan utnozta le. A DOS alatt pldul a mintban szereplo ka-
rakterek az elso '*' karakter utn figyelmen kvl maradnak (mindez kln-kln igaz az llo-
mnynvre, illetve az uttagra). A UNIX shell azonban vgignzi a mintt, s csak olyan llo-
mnyneveket helyettest be, amelyek a teljes mintnak megfelelnek. Teht ha van egy abc s
egy ade nevu llomnyom, a DOS az a*c mintra mindkettot megtallja (rosszul!), mg a
UNIX csak az abc nevut.
Metakarakterek semlegestse
Gyakran van szksg arra, hogy a metakaraktereket literlisan, azaz szszerint lehessen rte-
ni, a shell ne prblja oket interpretlni. Ennek legegyszerubb mdja, ha egyszeres idzojelek
(' ... ') kz zrva rjuk az adott metakaraktereket, ez esetben tbb karakter is szerepelhet az
idzojelek kztt. A msik megolds, hogy a backslash karakterrel egyenknt tiltjuk le a me-
UNIX felhasznli ismeretek
84
takarakterek interpretcijt. Vgl a harmadik mdszer, hogy idzojelek kztt
(" ... ") rejtjk el a karaktereket. Utbbi esetben viszont bizonyos interpretcikat mgiscsak
vgez a shell (ezekrol ksobb mg lesz sz), ezrt inkbb az elso ketto az ajnlhat.
Az albbi pldban hromszor hrom csillagot ratunk ki az echo paranccsal, s mindhrom
csoportot ms-ms semlegesto mdszerrel vdtk le:
$ echo '***' \*\*\* "***"
*** *** ***
$
Ha az idzojelek valamelyikt szeretnnk literlisan megkapni, akkor a msik fajta idzojel
kz zrva rjuk:
$ echo "'"
'
$
Ha jsor karaktert szeretnnk a szvegben megadni, akkor azt valamelyik idzojelpr kz
kell zrni:

$ echo 'Ladies &
> gentlemen'
Ladies &
gentlemen
$
A msodik sor bersakor lthat > karakter az gynevezett msodlagos prompt (secondary
prompt): ez rdik ki olyankor, amikor a parancs befejezshez a shell jabb szvegbevitelt
vr a felhasznltl. E mdszer arra alkalmas, hogy a bevitel sorn megorizzk az eredeti
tbbsoros jelleget.
Ha az jsor karaktert nem idzojelprok kz zrjuk, hanem a backslash karakterrel tesszk
literliss, akkor az jsor karaktert magt is eldobja a shell. Ily mdon lehetosgnk van
hossz sorok bevitelre a rendszerbe:

$ echo abc\
> def\
> ghi
abcdefghi
$
Megjegyzsek
Lehetosg van megjegyzsek elhelyezsre is a shell ltal feldolgozott inputban. A szkezdo
'#' karakter utn kvetkezo szveget a shell a sor vgig figyelmen kvl hagyja:

$ echo hello #there!
hello
4. fejezet A parancsrtelmez (Bourne shell)
85
$ echo hello#there!
hello#there!
$
A szkezdo jellegt azrt hangoztattuk, mert ha egy argumentumban, attl fehr karakterrel el
nem vlasztva szerepel a '#' jel, a shell az argumentum rsznek tekinti, mint a pldban lt-
hat is volt.
Shell script-ek
Az eddigi ismeretek alapjn most rkeztnk el arra a pontra, hogy hasznlhat shell progra-
mokat rjunk. Ennek folyamatt ksrjk vgig most egy olyan program ltrehozsval, ame-
lyik a kurrens katalgusban tallhat fjlok szmt rja ki (egyszerusg kedvrt tekintsnk
most el a rejtett fjloktl s ms egyb nyalnksgoktl). Nevezzk el programunkat nf-nek
(number of files).
Ha parancssorban kiadva szeretnnk a kvnt eredmnyt megkapni, az albbi parancsot kell
vgrehajtani:
$ ls | wc -w
11
$
A feladat ezek utn csak az, hogy hogyan lehet ezt a parancsszekvencit nll parancsknt
indtani?
Elso lpsknt egy llomnyba kell bevinni a fenti szveget, ezt megtehetjk pldul az ed
editorral is, de legegyszerubb, ha egy echo paranccsal tirnytjuk a kvnt szveget az nf ne-
vu llomnyba:
$ echo 'ls | wc -w' >nf; cat nf
ls | wc -w
$ ls # futtatas elotti ellenorzes
FULL-INDEX file newdir newfilee2 semmi temp
akarmi file1 newfile nf sendmail.cf text
$ ls | wc - w # eggyel tobb kell hogy legyen nf miatt
12
$
(Krds: Ha nem zrjuk aposztrfok kz a parancsszveget, mi kerl nf-be? s mirt?)
A nf llomny elkszlte utn a futtatst tbbfle mdon is intzhetjk. Az elso kt megol-
dsnl magnak a parancsrtelmezonek a sokszor idzett meghatrozsbl indulunk ki: a
shell egy olyan program, amely a standard inputot olvassa, az onnan rkezo karaktereket
megprblja vgrehajthat parancsokknt rtelmezni s vgrehajtani. Ha viszont a shell
ugyanolyan kutyakznsges program, mint a tbbi, akkor itt is tirnythatjuk a bemene-
tet, hogy ne a billentyuzetrol vrja, hanem egy vgrehajthat parancsokat tartalmaz fjlbl
azaz nf-bol:
UNIX felhasznli ismeretek
86
$ sh <nf
12
$
A msodik megolds azon alapul, hogy a shell is futtathat gy, hogy a paramterknt tadott
fjl tartalmt olvassa be, s prblja meg vgrehajtani:
$ sh nf
12
$
Mindkt fenti mdszer hasznlhat, de valaki joggal mondhatja azt, hogy unfair a shell pa-
rancsokat tartalmaz programok, s a mondjuk C nyelvrol fordtott, binrisan vgrehajthat
programok futtatsban ilyen klnbsget tenni, hiszen az utbbiak minden kln sh begpe-
lse nlkl indthatak. Ezen meggondols alapjn a UNIX shell minden olyan llomnyt,
amelyik nem binris llomny, de vgrehajthat (a megfelelo hozzfrsi jog engedlyezett),
gynevezett shell fjlnak (ms nven shellscript) tekint, a benne lvo szveget pedig
vgrehajtand shell parancsoknak tekinti, s aszerint prblja meg vgrehajtani.
Hogy egy llomnyt vgrehajthatv tegynk, a mr ismert chmod paranccsal kell csupn a
vgrehajtst engedlyezo hozzfrsi bitet bebillenteni, s a shellscript mr futtathat is:
$ chmod +x nf
$ ls -l nf
-rwxrwxrwx 1 demo guest 11 Aug 30 21:03 nf
$ nf
12
$
Programargumentumok, shell vltozk
Az elobbiek folyamn mr futlag tallkoztunk a shell vltozival (shell variables,
parameters), pldul ilyen volt az tdefinilhat prompt, vagy az llomnyok keresst bizto-
st PATH vltoz. A shell-vltozk kt fajtjt klnbztetjk meg, egyik a hagyomnyos
programozsi nyelvekben megszokotthoz hasonl vltoz, a msik az gynevezett
pozicionlis paramter.
A kznsges shell-vltoznak akr parancsszinten, akr egy programban rtket lehet adni,
azt le lehet krdezni, illetve mdostani. A pozicionlis paramterek azok az argumentumok,
amelyeket vgrehajtskor tad a shell a meghvott shellscriptnek (pldul a myprog 23 /tmp
parancsban kt pozicionlis paramter, a 23 s a /tmp addik t myprog-nak). Ellenttben a
kznsges shell-vltozkkal, a pozicionlis paramterek rtkt a felhasznl soha nem vl-
toztathatja meg, azokat csak lekrdezni tudja. A pozicionlis paramterekrol a shell progra-
mozs kapcsn mg lesz sz, egyelore a kznsges shell-vltozkkal foglalkozzunk.
Egy shell-vltoznak igen egyszeruen adhatunk rtket, a neve utn egy egyenlosgjelet g-
pelnk, s utna a vltoz (j) rtkt. Az egyenlosgjel krl nem lehetnek szkzk, s maga
a shell-vltoz rtke is csak egy sz lehet, gy ha szkzt vagy tabultort is tartalmaz, akkor
4. fejezet A parancsrtelmez (Bourne shell)
87
valamelyik idzojelprral kell krlvenni. Az albbi plda az elsodleges promptot definilja
t, melynek vltozja PS1:
$ PS1='Yes, dear? '
Yes, dear? pwd
/users/demo
Yes, dear? PS1='$ '
$
A shell-vltozk rtkt a set paranccsal lehet lekrdezni (a set maga szmtalan, igen eltro
funkcival rendelkezo parancs, a shell-programozsrl szl fejezetben tbb alkalmazsi le-
hetosgre visszatrnk mg).
$ set
EDITOR=vi
HOME=/users/demo
IFS=

LOGNAME=demo
MAIL=/usr/mail/demo
MAILCHECK=600
MANPATH=/usr/man:/usr/contrib/man:/usr/local/man
PAGER=pg
PATH=/bin:/usr/bin:/usr/contrib/bin:/usr/local/bin:usr/openmail/bin:.
PS1=$
PS2=>
SHELL=/bin/sh
TERM=sun-cmd
TZ=MET-1METDST

$
A fenti pldban lthat vltozk rendszervltozk, amelyeket bejelentkezsnkkor mr bel-
ltott a shell. Ha sajt magunk definilunk vltozkat, azok is lthatak a listn. A foglalt
nevek nagybetusek, mg az ltalnos konvenci szerint a felhasznl ltal definilt shell-
vltozk rendszerint kisbetusek.
Hogy a shell-programozsban hogyan s mire hasznljuk a shell-vltozkat, arra a 10.
fejezetben rszletesen visszatrnk. Itt s most csak olyan krdsekkel foglalkozunk, amelyek
az interaktv shell hasznlat sorn elokerlhetnek.
Nzznk nhny pldt, hogy mire is hasznlhatunk egy shell-vltozt. Ha pldul van egy
gyakran ltogatott katalgusunk, akkor annak nevt egy shell-vltozban elmenthetjk, s a
tovbbiakban nem kell annak teljes nevt begpelnnk, elg, ha a shell-vltoz nevt adjuk
meg a cd parancs paramtereknt:
$ dir=/usr/catman/u_man/man1
$ echo $dir
/usr/catman/u_man/man1
$ cd $dir
$ pwd
UNIX felhasznli ismeretek
88
/usr/catman/u_man/man1
$
A fenti pldbl lthat, hogy a var shell-vltoz rtkre a $var mdon hivatkozunk.
A rendszer ltal lltott fontosabb shell-vltozk
Az albbi tblzatban a rendszer ltal lltott legfontosabb shell-vltozkat tekintjk t.

HOME A cd parancs default rtke, a felhasznl sajt (bejelentkezsi) katalgu-
sra lltja be a rendszer.
PATH A parancsok keressi tvonalt lltja be, azaz hogy a shell hol keresse a
vgrehajtand fjlokat. Az egyes elemeket kettospont (:) vlasztja el egy-
mstl.
CDPATH A cd parancs szmra bellthat keressi tvonal, szintn kettosponttal
szeparlva. Ha e vltoz be van lltva, relatv elrsi tvonalak megad-
sakor a shell a CDPATH-ban felsorolt sszes elrsi tvonalhoz megpr-
blja illeszteni az ltalunk begpelt relatv nevet, s ha tallt ilyet, oda
vlt. Pldul ha CDPATH=/abc, akkor ha kiadunk egy cd bin parancsot,
a shell megnzi, hogy ltezik-e /abc/bin katalgus, s ha igen, oda vlt.
MAIL Az e-mail postazeneteket trol katalgus neve.
MAILCHECK Megadja (msodpercekben), hogy milyen gyakran ellenorizze s rja ki a
shell az j posta rkezst. Alaprtelmezse 600. Ha rtke 0, minden pa-
rancs kiadsa utn, a prompt kirsa elott ellenoriz.
PS1,PS2 Az elsodleges s msodlagos prompt. A default rtkek a $, illetve >.
TERM A felhasznl ltal hasznlt terminl tpusa.
USER
LOGNAME A felhasznl neve (bejelentkezsi azonostja).
IFS Belso mezohatrolk: azon karakterek, amelyek a shell szavait elvlaszt-
jk (default megadsa a szkz, a tabultor s az jsor karakterek).
TERMINFO A curses s terminfo terminlfggetlen kpernyokezelo rutinok szmra
definil kln katalguselrsi tvonalat.
TZ A helyi idozna.
Nagyon gyakran van szksgnk arra, akr interaktv mdban, akr script-ekben, hogy a sajt
kiindulsi katalgusunkra hivatkozzunk; rendszerint azrt, mert onnan kiindul katalgus-
vagy fjlneveket szeretnnk megadni. Ilyenkor igen hasznos (s gyakran kevesebb gpelst is
eredmnyez) a HOME vltoz hasznlata. A legfontosabb rv azonban az, hogy ha brmi-
lyen oknl fogva megvltozik krnyezetnk, vagy egy ltalunk rt shellscript-et ms gpre
szeretnnk tvinni, a HOME vltoz hasznlata biztostja a rendszerfggetlensget akr-
hol, akrmilyen UNIX-os gpen is dolgozunk, a HOME vltoz rtke be lesz lltva, s nyu-
godtan felhasznlhatjuk.
A PATH vltoz a vgrehajtand programok keressi tvonalt adja meg. A shell mindig
balrl jobbra rtkeli ki, teht az elsonek megadott katalgus-
nvben keres eloszr, aztn jn a kvetkezo s gy tovbb. Ellenttben a DOS-sal, itt a kur-
4. fejezet A parancsrtelmez (Bourne shell)
89
rens katalgusnv nem rtetodik bele a keressi tvonalba! Ezrt, ha a PATH vltoznkban
nem szerepel, ne lepodjnk meg, hogyha a shell nem ltja meg az orra elott lvo vgrehaj-
tand fjlt a kurrens katalgusban, s Command not found vagy hasonl hibazenetet ad. A
kurrens katalgust vagy a '.' karakterrel, vagy egy res mezovel adhatjuk meg. (Meg kell je-
gyeznnk, hogy biztonsgi megfontolsokbl nem clszeru a kurrens katalgust megadni a
keressi tvonalban, de ha mgis rsznjuk magunkat, mindenkppen a legvgre tegyk, va-
lahogy gy:

PATH=/bin:/usr/bin:/usr/local/bin:$HOME/bin:.
A TERM vltoznak fontos szerep jut mindannyiszor amikor valamilyen editort futtatunk,
kpernyon listzunk, vagy tvoli gpekre jelentkeznk be. Ezekben az esetekben ugyanis
mindig arra van szksg, hogy valamilyen terminlfggo megjelentst hajtsunk vgre, mr-
pedig szmtalan fajta terminl ltezik, a legbutbb teletype jelleguektol elkezdve a
nagyfelbonts grafikus kpernyokig. Hogy a terminlfggetlen mukdst meg lehessen olda-
ni, a UNIX egy terminl (s nyomtat) adatbzist is tartalmaz. BSD UNIX rendszerekben ez
egyetlen hatalmas fjl, a /etc/termcap, System V alap rendszerekben egy kln katalgusfa,
rendszerint a /usr/lib/terminfo katalgus alatt, ahol minden gyakoribb terminltpus jellemzoi
szabvnyos mdon fel vannak sorolva. Ha egy programban ezek utn kiadjuk pldul a menj
a kpernyo HOME (bal felso) pozcijba parancsot, a program a TERM shell-vltoz
alapjn meghatrozza terminlunk tpust, a terminfo vagy termcap adatbzisban megnzi,
hogy az adott terminlnl milyen karakterszekvencia felel meg a kvnt muveletnek, majd
vgrehajtja azt.
Shell-vltozk exportja
Egy ltrehozott shell-vltoz mindig ahhoz a shell-hez tartozik, amely ltrehozta, s a shell
gyermekeinek, teht a shell ltal indtott programoknak nem addik t automatikusan, mint
ezt az albbi plda is mutatja:

$ x=Hello
$ echo $x
Hello
$ sh # uj shell-t inditunk
$ echo $x

$ exit # most vissza az elozo shell-be
$ echo $x
Hello
$
Az elobbiek miatt, ha azt akarjuk, hogy egy vltozt a leszrmazott processzek is megkapja-
nak, azt exportlni kell, ami az export var parancs kiadsval trtnik:

$ x=Hello; export x
$ sh
UNIX felhasznli ismeretek
90
$ echo $x
Hello
$
Pozicionlis paramterek
A pozicionlis paramtereket, pontosabban azok rtkt a $n megadssal jelljk, ahol n
egsz szm kell hogy legyen (rgebbi shell implementcik csak 9 pozicionlis paramtert
engedlyeztek, $1-tol $9-ig). $1 a shellscriptnek tadott elso paramter, $2 a msodik, stb. $0
hagyomnyosan a shellfile nevt tartalmazza. Az elozoekben szerepelt pldt vve, ha a

myprog 23 /tmp
parancsot adjuk ki, akkor a myprog shellscript a kvetkezo pozicionlis paramtereket kapja:
$0=myprog, $1=23, $2=/tmp. Ennek ismeretben most az nf program pldjra hozzuk ltre az
nf1 programot, amelyik nem a kurrens, hanem tetszoleges katalgusban tallhat fjlok szmt
rja ki. E shellscriptnek egy paramtere lesz, mgpedig a listzand katalgus neve a megfe-
lelo helyen (teht az ls parancs paramterezsnl) a $1 jellssel hivatkozunk r:
$ echo 'ls $1 | wc -w' >nf1; chmod +x nf1
$ ls; nf1
FULL-INDEX file1 newfilee2 ravasz temp
akarmi newdir nf semmi text
file newfile nf1 sendmail.cf
14
$
$ ls /usr; nf1 /usr
adm diag local nettest pub tsm
archive doc lost+found news sam users
backup etc mail old softbench
bin include man openmail spool
boot keysh netdemo pc-dos sysver
contrib lib netls preserve tmp
32
$
Az eddig trgyaltakon kvl a Bourne shell mg az albbi shell vltozk rtkt is lltja:
# A meghvott (fut) program pozicionlis paramtereinek szma. Programciklusokban
hasznlhat jl, pldul a script hvsi paramtereinek (argumentumlistjnak)
feldolgozsakor.
? A legutolsnak vgrehajtott parancs visszatrsi rtke.
$ A fut shell folyamatazonostja. Shellprogramokban ideiglenes fjlnevek kpzsre
hasznlhat, miutn egy program folyamatazonostja egyedi rtk. Ha teht shell
scriptnkben egy ideiglenes fjlnak mondjuk a /tmp/myscript.$$ nevet adjuk, akkor
4. fejezet A parancsrtelmez (Bourne shell)
91
garantlt, hogy akrhny felhasznl is futtatja egyidoben ezt a scriptet, mindegyik
script ms-ms nven hozza ltre az ideiglenes llomnyait.
! A legutolsnak indtott, httrben futtatott processz folyamatazonostja.
Paramterbehelyettests
Arrl mr volt sz, hogy egy var shellvltozra (paramterre) a $var vagy ${var} megadssal
hivatkozhatunk; a shell ilyenkor megprblja behelyettesteni a vltoz rtkt. Az
albbiakban a behelyettestsek nhny specilis esett nzzk meg.
${var:-value} Ha a var vltoz be van lltva, s rtke nem nulla, behelyettestskor a
shell ezzel az rtkkel dolgozik; ellenkezo esetben value-t adja vissza. gy
lehet default paramtereket belltani shell scriptekben, ha argumentum
nlkl hvtk meg oket. Pldul ha a ${1-/tmp} hivatkozst hasznljuk, ha
scriptnket paramter nlkl hvjk meg, $1 helyett a /tmp rtket adja
vissza.
${var:=value} Ha a var vltoz nincs belltva, vagy nullvltoz, var-t value-ra lltja, s
ezutn helyettesti be var rtkt. Pldul ${name:=first_name} esetn,
ha a name vltoz nincs belltva, first_name vltozrtkt fogja
behelyettesteni.
${var:?value} Ha var be van lltva s nem nullvltoz, behelyettesti rtkt, egybknt
kirja a value stringet s kilp a shellbol. (Ha value nem lett belltva, a
"parameter null or not set" zenetet kapjuk.
${var:+value} Ha var be van lltva s nem nullvltoz, value-t adja vissza, egybknt
nem helyettest be semmit.
A fenti vltozhivatkozsok megadhatak a kettospont nlkl is, ebben az esetben a shell
csak azt vizsglja, hogy a vltozk be vannak-e lltva, az rtkket nem ellenorzi.
UNIX felhasznli ismeretek
92
Parancsbehelyettests
E ponton a UNIX shell egyik legelegnsabb s szmtalan helyen hasznlhat mechanizmus-
rl lesz sz, mgpedig a parancsbehelyettestsrol (command substitution). Ennek lnyege
az, hogy egy program eredmnyt nem a kimenetre kldjk, hanem egy msik program para-
mterlistjba illesztjk.
A parancsbehelyettestshez a behelyettestendo parancsot s paramtereit `prog ...` form-
ban, visszafele dolo szimpla aposztrofok (accent grave) kztt kell megadni. Egy plda: vala-
mi elegns formban ki szeretnnk ratni, hogy hny felhasznl van bejelentkezve rendsze-
rnkben. Ezt a kvetkezo paranccsal rhetjk el:

$ who
otto pty/ttys0 Sep 2 07:53
demo pty/ttys1 Sep 2 09:26
kgy pty/ttys3 Sep 2 09:10
janos pty/ttys5 Sep 2 09:11
janos pty/ttys6 Sep 2 09:26
$ echo "Jelenleg `who | wc -l` felhasznalo van bejelentkezve"
Jelenleg 5 felhasznalo van bejelentkezve
$
Ez a mechanizmus a UNIX shell egyik legsokoldalbban hasznlhat eszkze, pldkat a
shell-programozsrl szl fejezetben ltunk majd.
Krnyezetalakts: a profile fjlok
Az eddigiek sorn megismerkedtnk a Bourne shell legalapvetobb funkciival s lehetosgei-
vel. Most nzzk meg azt, hogy hogyan alakthat ezek segtsgvel munkakrnyezetnk.
Ha bejelentkezsi shell-nk a Bourne shell, akkor bejelentkezsnkkor kt specilis konfigu-
rcis llomny tartalmt olvassa be s hajtja vgre a rendszer. E kt fjl a /etc/profile s a
$HOME/.profile, teht a sajt kiindulsi katalgusunkban lvo (rejtett) fjl. A /etc/profile fjl
rendszerszintu konfigurcis parancsokat tartalmaz, ezt a fjlt a felhasznlk nem is mdost-
hatjk. A szemlyreszl belltsokat mindenki a sajt .profile fjljban eszkzlheti. Az
albbi pldban egy tipikus .profile fjlt mutatunk be.
$ cat .profile

# @(#) $Revision: 66.1 $

# Default user .profile file (/bin/sh initialization).
# A default terminalt 'hp'-re allitja:
eval ` tset -s -Q -m ':?hp' `
# A torlo karaktert backspace-re,
4. fejezet A parancsrtelmez (Bourne shell)
93
# a sortorlot CTRL-U karakterre allitja
# az interrupt karakter a CTRL-C karakter lesz,
# a fajlvege a CTRL-D:
stty erase "^H" kill "^U" intr "^C" eof "^D"
# egyeb terminalparametereket allit be:
stty hupcl ixon ixoff
tabs

# beallitja a keresesi utvonalat:
PATH=$PATH:.

# Beallitja a megszakitaskezelest:
trap "echo 'logout'" 0

# valtozok beallitasa:
EDITOR=vi; export EDITOR
PAGER=pg; export PAGER
PS1="$ "; export PS1
$
94
5. FEJEZET


REGULRIS KIFEJEZSEK

A UNIX szpszm adatmanipulcis eszkzt nyjt a felhasznlnak az editorokon kvl is.
Az eszkzk kzl nagyon sok hasznl mintaillesztst, s a megadott mintra illeszkedo adato-
kon tovbbi feldolgozst hajt vgre. Vannak olyan parancsok, ahol a felhasznl adja meg a
keresendo mintt, ilyen a grep parancs, msokban rejtve dolgozik a mintakereso algoritmus.
Ugyanezeket a mintaillesztsi szablyokat hasznljk a UNIX klnbzo editorai is, gy a k-
sobbiekben ismertetendo ed, vi vagy sed is, ez indokolja, hogy kln fejezetben foglalkozunk
a regulris kifejezsekkel. Regulris kifejezsek hasznlatakor egy alkalmasint igen komplex
mintt adunk meg (ez a regulris kifejezs), s azt vizsgljuk, hogy a feldolgozand adatok (az
esetek tlnyom rszben szveges fjlok, teht karakterlncok) melyik rsze illeszkedik a
megadott mintra. A regulris kifejezsek karakterekbol llnak, ezek kzl nhny specilis
jelentst hordoz, ezeket metakaraktereknek hvjuk, hasonlan a shell-ben a fjlnv behelyet-
testskor hasznlt specilis karakterekhez. Vigyzzunk azonban, a hasonlsg csak viszony-
lagos, s a kt mdszer a jellsmdban is eltr egymstl.
Nzzk a regulris kifejezseket meghatroz szablyokat.
Egy egyedlll karakter, amely nem jsor karakter, s nem a . * [ \ ] ^ $ karakterek
egyike, az nmagra illeszkedik. Ez magyarul azt jelenti, hogy ha pldul a keresendo
minta regulris kifejezse egy a betut tartalmaz, akkor ez a vizsglt szvegben
csakis egy darab a beture fog illeszkedni. Hasonlkppen, az alma regulris kifeje-
zs csupa rendes karakterbol ll, amelyek mindegyike nmagra illeszkedik csupn, s
gy a fenti minta a vizsglt szvegben brhol elofordul alma karakterlncra fog illesz-
kedni.
5. fejezet Regulris kifejezsek
95
A \c pros, ahol c egy lthat karakter, a c karakterre illeszkedik a karakter literlis r-
telmben. Teht a \* illeszkedik a *-ra, a \\ pedig a \-re.
A . (pont) karakter egy olyan regulris kifejezs, amely brmelyik (nem jsor) karak-
terre illeszkedik. gy pldul az ab. minta illeszkedik az aba, abc, ... abz, ab0, stb ka-
raktersorozatokra.
Ha e egy regulris kifejezs, akkor e* egy olyan regulris kifejezs, amely e regulris
kifejezs 0 vagy tbbszri elofordulst jelzi. gy az a* regulris kifejezs illeszkedni
fog az res stringre is (hiszen abban nullaszor szerepel az a karakter), valamint az a,
aa, aaa, aaaa, ... stb karakterlncokra.
(A regulris kifejezsek teljes implementciiban szerepel a + jells is, ami a mege-
lozo regulris kifejezs egy vagy tbbszri elofordulsra illeszkedik. Belthat, hogy
ez a jells helyettestheto, hiszen pldul az a+ ekvivalens az aa* megadssal. A leg-
tbb, regulris kifejezseket hasznl UNIX parancsban a szukebb implementci sze-
repel.)
[..] a szgletes zrjelbe tett karaktersorozat illeszkedik az abban a poziciban lvo
brmely, a zrjelben felsorolt karakterre. A karakterek felsorolsra rvnyes szab-
lyok az albbiak:
Kdjukat tekintve egyms utn kvetkezo karaktereket rvidteni lehet a ktojel hasz-
nlatval. Pldul 0-9a-z jelenti az sszes szmjegyet s az angol bc sszes kisbetu-
jt.
A nyit zrjelet kveto ^ jel, a felsorolt karakterek tagadsa. Azaz [^0-9] jelenti br-
mely, nem szm karaktert.
A ] zrjel csak a felsorols elso tagja lehet.
A - karaktert a \- karakterpros jelli. (Ha '[' utn vagy ']' elott szerepel, a megelozo '\'
elmaradhat.
Kt egyms utn rt regulris kifejezs szintn regulris kifejezs. Pldul a [^0-9][0-9]
kifejezs egy nem szm karaktert kveto szmkarakterre illeszkedik.
Kt egymstl | jellel vagy jsorral elvlasztott regulris kifejezs illeszkedik akr az
egyik akr a msik kifejezsre. gy a [a-z]|\. kifejezs az adott pozciban csak kisbetut
vagy egy pontot fogad el.
A \(..\) tett regulris kifejezs illeszkedik a zrjelbe tett kifejezsre, s egyben
megjelli azt.
UNIX felhasznli ismeretek
96
A ^ jel a sor elejre a $ jel a sor vgre illeszti a mintt. Pldul a ^ $ kifejezs az res
sorra illeszkedik, a ^[^0-9]*$ kifejezs pedig a szmot nem tartalmaz sorra.
A \n kifejezs (ahol n egy szm) a zrjelezssel kijellt mintra hivatkozik, mgpedig
a kijells sorrendjben. gy a ^\(.\)\(.\).*\2\1$ minta olyan sorokra illeszkedik, ahol a
sor elso kt karaktere tkrszimmetrikus az utols kt karakterre (pl. 'axc23xa').
Nhny szably a minta elofordulsnak szmossgra utal. Az egykarakteres regulris
kifejezst kveto \{m,n\} sorozat, ahol m s n 256-nl kisebb, nem negatv egsz, azt
mondja, hogy a minta legalbb m-szer s legfeljebb n-szer fordul elo egyms utn. Ha
csak az n szm van a zrjelproson bell, annak jelentse, pontosan n-szer elofordul
minta, ha m, van a zrjelpron bell, annak jelentse legalbb m eloforduls.
Az editorokrl szl tovbbi fejezetekben, s a feladatok kztt szmos j pldt mutatunk a
regulris kifejezsek szleskru alkalmazsra. Tapasztalt UNIX felhasznlk sok munkt ta-
kartanak meg a regulris kifejezsek hasznlatval.

97
6. FEJEZET


AZ ED EDITOR
A UNIX szvegszerkesztoirol ltalban
Az egyik leggyakoribb vd, ami a UNIX rendszereket illeti, hogy a PC-ken elterjedt
kpernyo-orientlt editorokhoz kpest knyelmetlen, fradsgosan hasznlhat editoraik van-
nak. Ez rszben igaz, hiszen a UNIX-os editorok ltalban nem hasznljk sem a kurzormoz-
gat, sem a funkcibillentyuket, radsul elklnl a parancsmd s a beviteli md, ami a
PC-khez szokott felhasznlknak bizony nehezen megszokhat. Ezt a htrnyt ellenslyozza,
mi legalbbis gy gondoljuk, a szellemes s programrshoz jl hasznlhat parancsok soka-
sga. A kvetkezokben trgyalt editorok egymsra plnek, s mindannyian azonos alapelvek
szerint mukdnek. Ezrt clszeru tbbet is megismerni belolk, s mindig az adott feladathoz
legjobban illeszkedot hasznlni.
Az ed
Az ed szvegszerkeszto, vagy ed szuro a UNIX legrgebbi szvegszerkesztoje. rezhetoen
olyan eszkz, ami a ma megszokottnl korszerutlenebb beviteli eszkzre, a teletypera pl.
Br sokan erre azt mondjk, hogy akkor felesleges vele foglalkoznunk, mi mgis azt gondol-
juk, hogy rdemes. Ennek oka nem csak az, hogy sokszor nagyon gyes fogsok elvgzsre
alkalmas, hogy tbb ms, a UNIX alatt ltezo editor is erre pl, valamint, ha brmi okbl
nem tudunk kpernyo-orientlt szvegszerkesztot hasznlni, az ed-et akkor is el tudjuk indta-
ni, pldul ha a login fjlunkban a TERM vltozt helyes rtkre kell lltani. Vgl megem-
ltjk, hogy az ed szuroknt is alkalmazhat, mint azt a pldk nmelyikben majd ltni is
fogjuk.
Az ed trgyalsnl a regulris kifejezsek tulajdonsgait ismerteknek tekintjk.
Mukdsi alapelvek
Akrcsak a szintn trgyalt vi editor, az ed is tbb zemllapottal rendelkezik, a bersi- s a
parancsmddal. Belpskor a felhasznl parancs zemmdban tallja magt.
UNIX felhasznli ismeretek
98
Parancsmdban az egyes bert, s RETURN karakterrel lezrt sorokat megprblja ed pa-
rancsknt rtelmezni, s ha ez sikerlt, vgrehajtja.
Parancsmdbl az a,i,c utastsok valamelyikvel kerlnk bers mdba. Bers zemmd-
ban minden bert karakter a szvegbe kerl, belertve az jsor karaktert is. (A parancssorok
gpelsekor hasznlatos trlo- s egyb specilis karakterek itt is a szoksos mdon
mukdnek.) A beviteli md mindaddig tart, amg egy j sor elejn egy nmagban ll pont
(.) karakter nem szerepel. Az ezutn lettt RETURN karakterrel trnk vissza parancsmd-
ba.
A szvegszerkesztot az
ed
vagy az
ed filename
parancs aktivizlja. Az ed a szerkesztendo szveget egy bufferban tartja, a vltoztatsokat
ezen bufferen hajtja vgre, s csak parancs hatsra menti el fjlba. Az ed editor takarkosan
bnik a megjelentendo szveggel, (azaz teletype-ban gondolkodva: a paprral...) s csak ak-
kor r ki szvegdarabokat, ha egy utastssal erre kln felszltjuk. Behvsakor a parancs
sor utn az editor kijelzi az llomny hosszt karakterekben, majd a kvetkezo res sorban,
parancs mdban vrakozik. Ekkor az a (append) parancsot berva belphetnk a bers zem-
mdba.
Az ed parancsainak alakja
Nagy ltalnossgban az ed parancsokat az albbi alakban lehet lerni:
cmkijells parancs argumentum
A parancs ltalban egy betu, vagy egy betu s egy rsjel (ez a betu ltalban, mint a UNIX-
ban mr annyiszor megszoktuk, a parancs angol elnevezsnek rvidtse).
A parancsok egy lehetsges csoportostsi mdja az, hogy tvisz-e bers zemmdba vagy
sem. A bers zemmdba tvivo parancsok argumentuma a berand szveg, ezt a parancsok
ismertetsnl text nven jelljk. A tbbi parancs argumentumait esetileg trgyaljuk.
A cmkijells meghatrozsa a legsznesebb a hrom fogalom kztt. A cmkijells mindig
egy vagy tbb sort hatroz meg, amelyre vagy amelyekre a parancs vgrehajtsa vonatkozik.
Egy sorra hivatkozhatunk sorszmmal, egy sorokban megadott szvegtartomnyra kt vesszo-
vel elvlasztott sorszmmal. Ha egyltaln nem adunk meg sorszmot, akkor a parancs a min-
denkori aktulis soron hajtdik vgre. gy a
3,13p
parancs hatsra az ed a buffer tartalmt a harmadik sortl a tizenharmadik sorig kinyomtatja
a kpernyore. A
6. fejezet Az ed editor
99
12d
parancssor hatsra a buffer tizenkettedik sora trlodik, mg a
d
parancs hatsra az aktulis sor. (Az j aktulis sor ilyen esetekben ltalban az utols trlt
sor utni lesz.)
A buffer elso sora mindig az 1-es sorszmot viseli. A sorszm meghatrozsban a kvetkezo
jellseket alkalmazhatjuk: a . (pont) karakter az aktulis sort jelli, ahol a mutat ll. Teht
a
.,25d
parancs azt jelenti, hogy az aktulis sortl a huszontdik sorig bezrlag trlni kell. A
.=
hatsra az ed kirja az pp aktulis sor sorszmt. A '$' jel jelli a buffer utols sort. gy a
.,$d
parancs hatsra az aktulistl az utols sorig terjedo szvegrsz trlodik a bufferbl.

Alkalmazhatunk relatv cmzst is, a '+', '-' jelek segtsgvel. Pldul a
.+2,$-3d
parancs az aktulist kveto msodik sortl az utols sor elotti harmadik sorig trl a
bufferban. Azokat a sorokat, amelyeken parancsot akarunk vgrehajtani, nem csak direkt cm-
zssel, hanem szvegminta alapjn is kijellhetjk. A szvegmintnak szintaktikusan eleget
kell tenni a regulris kifejezsek szablyainak. Formlis kvetelmny, hogy a mintt '/' jelek
kz kell zrni. Teht a
/begin/a
szoveg
.
krs az olvass irnyban soronkvetkezo elso olyan sort keresi meg, amelyben a begin ka-
raktersorozat elofordul, s azt kvetoen szrja be a "szoveg" sort a buffer tartalmba, majd a
sor elejn ll pont karakter hatsra jra parancsmdba kerl.
A minta szerinti keress, vagy sorkivlaszts teljesen azonos rtku a sorszm szerinti sorki-
jellssel. gy a
/begin/,/end/d
parancs a legkzelebbi begin szcskt tartalmaz sortl a legkzelebbi end szt tartalmaz
sorig trli a szveget. Figyelem, ebben az esetben a kt mintt egyszerre kezdi keresni, s gy
ha azok azonos sorban fordulnak elo, akkor csak azt az egy sort tallja meg. Amennyiben azt
UNIX felhasznli ismeretek
100
kvnjuk, hogy az end mintt csak az utn a sor utn kezdje keresni, amelyikben a begin
mintt megtallta, akkor a kt mintt pontosvesszovel vlasztjuk el:
/begin/;/end/w file
Teht a fenti parancs hatsra, a kurrens pozcihoz legkzelebb eso begin end pros kzti
szvegdarab a file nevu llomnyba rdik.
Hasznlhatjuk a mintval megkeresett sort relativ cmzsre is:
/begin/-1 s/alma/korte/
gy a fenti parancs a legkzelebbi begin elotti sorban az alma mintt korte mintra cserli.
Ha a minta keresse kzben a buffer vgre rt, az editor a szveg elejn folytatja a keresst. A
keress irnyt megfordthatjuk, ha a '/' jel helyet '?' jelekbol ll prosba tesszk a mintt. Ha a
mintt nem tallja, illetve ms problmja tmad a keress kzben, egy krdojel kirsval vla-
szol az editor.
Ha a munka befejezsvel a buffert el kvnjuk menteni, a
w
vagy a
w file
paranccsal tehetjk meg, vgl a q vagy a Q paranccsal lezrhatjuk az editor mukdst.
Az ed szvegszerkeszto parancsai
e file (edit) Az argumentumban megnevezett llomny betltse a bufferba.

r file (read) Az argumentumban megnevezett llomny betltse a buffer vg-
re.

E file (edit) Editls ellenorzs nlkl.

w file (write) A buffer sorainak elmentse.

W file (write) A buffer hozzrsa a megadott llomnyhoz.

q (quit) Kilps, de csak akkor, ha a buffer aktulis tartalmt elmentette. El-
lenkezo esetben figyelmeztetst kapunk, egy krdojelet.

Q (quit) Kilps ellenorzs nlkl.

nnn
szvegminta
'marker Adott sor kirsa a kpernyore, egyben kurrens sorr ttele. nnn egy
abszolt vagy relatv sorszm lehet, szvegminta egy regulris kifejezs,
6. fejezet Az ed editor
101
marker pedig egy kmarker paranccsal elozoleg belltott szvegjelzo
(marker).

+ A kurzor elorelptetse egy sorral a bufferban.

- A kurzor htralptetse egy sorral a bufferban.

= Sorszm kirats

p (print) Kirats a kpernyore

n (number) Kirats a kpernyore a sorok sorszmaival egytt.

f (file) Az editls alatt lvo llomny nevnek kiratsa.

a
text (append) Hozzrs a kurrens sor utn. j llomny szerkesztsnl az a pa-
rancs kiadsval kell kezdeni a munkt.

i
text (insert) Beszrs a kurrens sor el.

d (delete) Sortrls.

j (join) A megnevezett sorok sszekapcsolsa a felsorolsuk sorrendjben.
Nem szksgszeru, hogy egyms utni sorokat kapcsoljunk ssze, de min-
dig csak az alacsonyabb sorszm sorhoz lehet a magasabb sorszmt
kapcsolni. Az j sor az alacsonyabb sorszm sorban lesz.

s /m1/m2/ (substitute) A parancsban megadott kt minta felcserlse.

u (undo) Az utols vltoztats elotti llapot visszalltsa.

c
text (change) Beszrs mdba kerl s a jelzett sorokat kicserli arra a
szvegre, amit a parancs utni sorokba berunk. Ha tbb j sor van, mint
amit vltoztatsra kijelltnk, akkor a tbblet beszrdik a szvegbe. Ha a
kijelltnl kevesebb j sort runk, a maradk sorok rintetlenek maradnak.
A cserre lert sorok utn j sorba rt soreleji pont visszavisz parancs
mdba.

gedcmd (global) Az edcmd parancs vgrehajtsa a buffer minden illeszkedo sor-
ban.
A felsorolt parancsokkal mr szinte mindent meg tudunk tenni, amit az ed szerkesztovel le-
het, a tovbbi parancsokat inkbb csak a gyakorlott felhasznlk hasznljk.

l (list) Kirats a kpernyore a vezrlokarakterekkel.

mpos (move) A kijellt sor(ok)nak a pos argumentummal megadott sor utn
mozgatsa (pos az ed szablyainak megfeleloen mind sorszm, mind
minta, mind marker lehet).

UNIX felhasznli ismeretek
102
tpos A kijellt sor(ok)nak a pos argumentummal megadott sor utn msolsa
(pos az ed szablyainak megfeleloen mind sorszm, mind minta, mind
marker lehet).

kc Marker elhelyezse a kijellt sorba. A marker neve az argumentumban rt
betu lesz, amire a ksobbiekben a 'c, azaz a betut egy aposztroffal mege-
lozve lehet hivatkozni.

!cmd Argumentuma egy cmd shell parancs, ami vgrehajtdik, majd vissza-
trnk az ed parancsllapotba.
A kvetkezo kt parancsot inkbb parancsmdostknak lehetne nevezni. Helyk a parancs-
sor vgn, a parancsargumentum utn van.

v a parancs vgrehajtsa minden olyan sorban, amit a sorkivlaszt minta
nem jell ki.

g a parancs vgrehajtsa a soron bell minden olyan helyen, ahol lehet.
Nhny plda az ed szvegszerkeszto hasznlatra
Elso pldnkban azt mutatjuk be, hogy hogyan lehet markerrel jelzett sorokon operlni.
Legyen az a feladatunk, hogy egy fjlban az elso lepke szt tartalmaz sor el beszrjuk a
szvegben tallhat sszes pillango szt tartalmaz sorokat. A k parancs segtsgvel a pl-
dban a h betuvel jelljk meg a lepke mintt tartalmaz sort, majd az egsz bufferen
vgrehajtatjuk az thelyezst. (A markeres megadsnak az az elonye, hogy ha maga a lepke
sz megvltozik a referencia sorunkban, a marker orzi pozcijt, s nyugodtan
hivatkozhatunk r parancsainkkal; hasonlkppen, ha a markerral jellt sor pozcija vltozik
a fjlban (akr mert elje szrunk be valamit, akr mert ot magt mozgatjuk), a marker
foggal-krmmel ragaszkodni fog ahhoz a sorhoz, amihez eloszr hozzrendeltk.)
/lepke/kh
g/pillango/m'h-1
Kvetkezo pldnkban Romhnyi Jzsef legends tevjnek htn tevegelnk be az ed
szpsgeinek birodalmba... A teve nevu llomnyunkban az ismert vers egy rszlete
szerepel, csak kiss hibsan:

$ cat teve
Monotn
uget a suppedo homokon
a sivatag lova
oda
$
A javts sorn megnzzk, hogy hny soros a versrszlet, majd eloszr a hinyz utols
elotti sort ('a tetova teve') ptoljuk az a parancs segtsgvel. Mivel az elso s utols sor is
hibs, azokat a c paranccsal cserljk helyesre. Vgl az elsotol az utols sorig kiratjuk a
muvet a kpernyore, majd el is mentjk a fjlt.

6. fejezet Az ed editor
103
$ ed teve
39
$=
4
$-1a
a tetova teve
.
$c
tova
.
1
Monotn
1c
Monoton
.
1,$p
Monoton
uget a suppedo homokon
a sivatag lova
a tetova teve
tova
w
65
q
$
A szmtstechnikhoz kzelebb ll a kvetkezo plda. A cskel.c llomny az albbi:

$ cat cskel
}
if !=
than
else
while !=
{
$
A hibkat jra az ed segtsgvel javtjuk. A javt parancsokat egy javit nevu llomnyba
tesszk, htha mg mskor is hasznt vesszk. A javt a munkjt kommentekkel ksri.

$ cat javit
!echo Kezdodik a javitas
1t$
$-1m1
1d
!echo Mar megcsereltem a sorokat. Betucsere jon.
/^if/ s/!/=/
/than/ s/a/e/
1
g/^[^iwf]/ s/^\( \)/ \1/g
1
g/^[ ]*[^{}]$/ s/\([ ]*\)//
1
g/^ /s/\([^ ]\)/ \1/g
UNIX felhasznli ismeretek
104
1,$p
w cskelj.c
q
$
$ ed cskel.c <javit
29
Kezdodik a javitas
Mar megcsereltem a sorokat. Betucsere jon.
{
if ==
t h e n
e l s e
while !=
}
49
$
A javtfjlban eloszr megcserltk az elso s utols sort, majd az if-fel kezdodo s a than-t
tartalmaz sorban hajtottunk vgre karaktercsert. Ezutn a buffer elejre mentnk, s min-
den nem 'i', 'w' vagy 'f' betuvel kezdodo sor elejre kt szkzt tettnk: ez az elso g paranccsal
kezdodo sor. Utna kiirtottuk a kapcsos zrjelek elol a szkzket, majd a kvetkezo lps-
ben minden szkzzel kezdodo sorban, minden nem szkz karakter utn egy szkzt szr-
tunk be. Vegyk szre a klnbsget. A parancs sor elejn lvo g (global) parancs a buffer
sszes sorra kiterjeszti a sorfelismero mintval val sorkeresst, mg a parancssor vgn l-
vo parancsmdost g az ppen vizsglt sor egszre terjeszti ki a parancs vgrehajtst. V-
gl kirattuk majd eltettk egy j nven az llomnyt.
105
7. FEJEZET


A SED EDITOR

A sed editor az ed igen kzeli rokona, igazsg szerint annak egy szuktett parancskszlett
ismeri. Ennek ellenre kln foglalkozunk vele, mert ms clokra hasznlhat mint rokona, s
feldolgozsi elve is eltr az alapvetoen interaktv ed editortl. (A nv egybknt a stream
editor kifejezsbol ered, magyarra leginkbb az radatszerkeszto, vagy adatfolyamszerkeszto
kifejezssel lehetne fordtani.) Mg az ed s a vi a mindennapos fjlszerkesztsi munka
eszkze, a sed inkbb nagymretu fjlokban rutinszeruen vgrehajtand, komplex
behelyettestsekre alkalmas (kpzeljk el pldul, hogy egy Unix rendszer teljes
manulsorozatban minden manuloldalon ki kell cserlni a verziszmokat, valamint a
megfelelo hivatkozsokat a szvegben; vagy ppen abba a szerencss helyzetbe kerltnk,
hogy kzzel kell megcsinlnunk egy HTML formtum "webes" anyag tkonvertlst gy,
hogy a HTML formz karakterek eltntetsvel tiszta szvegllomnyt akarunk elolltani;
mindezek tipikusan olyan alkalmazsok, melyek a sed utn kiltanak).
A sed hvsi formja a kvetkezo:

sed [opcik ...] script [fjl ...]
A sed mindig a standard kimenetre dolgozik, azaz a bemenetknt szolgl fjlt (ha egyltaln
fjlt olvasott, s nem a standard bemenetet) soha nem mdostja.
A script tartalmazza a sed ltal vgrehajtand parancsokat. Mint mr emltettk, a sed
parancskszlete nagyon hasonlt az ed editorra, de azrt az eltro mukdsbol fakadlag
vannak klnbsgek, ezekre rvidesen kitrnk.
A sed mindssze az albbi hrom opcit ismeri:
-n a feldolgozott sorok automatikus kirst letiltja, csak explicit sed parancs
hatsra rja ki a kimenetre a mdostott sorokat
-f scriptfjl scriptfjl tartalmazza a sed ltal vgrehajtand parancsokat
-e script akkor hasznljuk, ha a sed parancssorban tbb vgrehajtand scriptet
adunk meg. Egyetlen script esetn elhagyhat.
Nhny plda: a

$ sed 's/Unix/UNIX/g' chapter1.txt >chapter1.txt:1
parancs hatsra a chapter1.txt fjlban minden Unix szt UNIX-ra cserl, s az gy mdostott
llomnyt elmenti chapter1.txt:1 nven (az eredeti vltozatlanul hagysval). Az

ls -lt | sed '1d \
3q'
UNIX felhasznli ismeretek
106
hatsra az idorendbe lltott ls lista elso sort trli a sed (az ugyanis nem fjl bejegyzseket
tartalmaz), majd a legfrissebb hrom fjl nevt kirja a kpernyore. Clszeru mindig szimpla
idzojelek kz tenni a vgrehajtand scriptet, ha a parancssorbl gpeljk be. Ha a scriptet
fjlba rjuk, az idzojelek termszetesen elmaradhatnak:

$ ls -lt | sed -f frissfjlok
frissfjlok tartalma pedig ezek utn a kvetkezo:

1d
3q
A sed mukdsi elve
A fenti gyors szintaktikai sszefoglal utn lssuk, hogyan is mukdik a sed. A legfontosabb,
hogy a sed (a ksobb ismertetendo kivtelektol eltekintve) mindig egyszerre egy sorral
dolgozik! A sed a feldolgozand fjl(ok) sorait egyenknt olvassa be, s a beolvasott sor az n.
pattern space-be (mintatrbe) kerl. A sed ezutn a mintatr tartalmn hajtja vgre egyms
utn a scriptben szereplo parancsokat. A dolt betus megads nem volt vletlen: a sed
mukdsbol fakadan a mintatr(be beolvasott) sor tartalmt a vgrehajtott parancsok
mdostjk, gy a legtbb sed parancs mr nem az eredeti beolvasott soron, hanem az elozo
parancs ltal mr mdostott soron hajtdik vgre. Ha a scriptben szereplo sszes parancs
feldolgozta a mintatrben lvo sort, a mintatr tartalma kikerl a standard outputra (a -n
opcival ezt a default kirst tilthatjuk le). A mintatr kirtse utn a sed beolvassa a
kvetkezo sort a bemenetrol a mintatrbe, s azon megint csak sorra vgrehajtdnak a
scriptben szereplo parancsok. A sed mukdst teht az albbi egymsba gyazott ciklussal
szemlltethetnnk:

for sor in ( fjl ); do
sor a mintatrbe kerl
for parancs in ( script ); do
parancs vgrehajtdik a mintatr tartalmn
done
mintatr tartalma a standard kimenetre kerl
done
Nagyon figyeljnk arra, mert a legtbb flrertst ez szokta okozni, hogy a "belso ciklusban"
mindig a parancsok vgrehajtsa szerepel, azaz a sed a sorokat egyenknt olvassa be, s a
mintatrben ppen bennlevo soron hajtja vgre egyms utn a scriptben szereplo sszes
parancsot, nem pedig fordtva, a teljes fjlon egyms utn a script egyes parancsait! A
kvetkezo plda taln megvilgtja a problmt:
Ha egy fjlunkat feldolgozva az alma szt krtre, a krtt pedig barackra szeretnnk
vltoztatni, akkor "reflexszeruen" valami hasonlt rnnk a scriptbe:

s/alma/korte/
s/korte/barack/
7. fejezet A sed editor
107
Futtats utn "keseru kudarc lesz osztlyrsznk": miutn egyms utn mindkt parancs
vgrehajtdik az ppen beolvasott soron, ha abban szerepelt az alma sz, akkor ezt
vrakozsunknak megfeleloen trja krtre, ez a minta viszont a kvetkezo behelyettesto
parancsnak fog megtetszeni, s az a mintatrben nyomban tovbbalaktja a krtt barackk,
ltalunk nem kvnt uniformizlst hajtva vgre gymlcsllomnyunkon... A helyes
megolds a sed belso lelkivilgt figyelembe vve a kt parancs megfordtsa, azaz a

s/korte/barack/
s/alma/korte/
script hasznlata.
Cmzs a sed-ben
A kvetkezokben nzzk meg, hogy mennyiben tr el a sed ltal hasznlt parancsformtum s
cmzs az ed-nl megismertektol. Az ltalnos parancsmegads formja a sed esetben is
ugyanaz, mint az ed-nl volt:

[cm1 [, cm2] parancs [opci(k)]
azaz nulla, egy vagy kt cm (ami kijelli a parancs mukdsi tartomnyt), maga a sed
parancs, s vgl az esetleges parancsmdost flag-ek.
1
A cmmegads is hasonl az ed-hez:
hasznlhatunk abszolt vagy relatv sorszmokat, illetve regulris kifejezseket. Mindjrt
beletkznk viszont egy alapveto korltba: ellenttben az interaktv mukdsu ed editorral,
itt a fjlban visszafel nem hivatkozhatunk, hiszen a sed az egyszer mr beolvasott s
feldolgozott sorra nem tud visszatrni. Ennek rtelmben az

50,$d
megads (trljk a fjl sorait az tvenediktol a fjl vgig) teljesen szablyos, de a

$,.-3d
mr nem, s erre a sed figyelmeztet is, hiszen a relatv visszalpssel nem tud mit kezdeni.
Egy vagy kt cm esetn az ed s a sed program azonosan mukdik, azaz a megadott soron,
vagy sortartomnyban operl. Pldul a

/brehm_eleje/,/brehm_vege/ s/kutya/cica/

1
A sed egy nem dokumentlt tulajdonsga, hogy pontosvesszvel elvlasztva is megadhatjuk a scriptben
szerepl parancsokat, nem kell felttlenl kln sorba rni ket (pl. sed '1,$s/alma/korte/; /$^/d' ). Lehetsg
van arra is, hogy kapcsos zrjelek kztt csoportostva egy cmtartomnyhoz tbb parancsot is megadjunk, s
ekkor a zrjelen belli paran-
csoknak is lehetnek tetszleges cmkijell paramtereik. A
sed '/end_of_paragraph/ { n
/^$/d }'
parancs hatsra az end_of_paragraph mintt tartalmaz sort a sed kirja a kimenetre, beolvassa a kvetkez sort, s
ha az res volt, kitrli.
UNIX felhasznli ismeretek
108
parancs esetn mindkt program az elso, brehm_eleje szt tartalmaz sortl az elso
brehm_vege sorig prblja meg a kutya szt cica-ra cserlni. Cm nlkli sor esetben
viszont eltro viselkedsk: az ed esetben a

s/kutya/cica/
parancs az aktulis sorban cserlte kutyt cicra (ha volt ilyen minta a sorban); sed esetben
ugyanez a parancs azt jelenti, hogy a bemenet minden egyes sorn ksrelje meg a sed a
behelyettestst. Szemlletes klszablyknt azt mondhatjuk, az ed esetben az
alaprtelmezs az aktulis sor, s minden cmmegads ehhez kpes bovti a parancs hatkrt,
a sed esetben pp ellenkezoleg, alaprtelmezs szerint minden soron vgrehajtdik egy adott
parancs, s a cmtartomny megadsa ezt csak szuktheti.
Mg egy utols megjegyzs a cmzssel kapcsolatban: ha egy cmmegads utn a '!'
(felkiltjel) karakter szerepel, az megfordtja a cmzs rtelmet, azaz az utna kvetkezo
parancs(ok) az adott cmzssel ki nem jellt bemeneten hajtdnak vgre. Ha pldul a

/ez_kell/!d
parancsot adjuk ki, akkor minden, az ez_kell szekvencit nem tartalmaz sor trlodik a
bemenetrol.
A sed fontosabb parancsai
A fentiek utn, ha csak rviden is, tekintsk t a sed leggyakrabban hasznlt parancsait.
Mivel a legtbb parancs akr nulla, akr egy vagy kt cmmel is megadhat, a cmmegadst a
kvetkezoek szerint jelljk: ha a parancs csak egy cmet fogad el, a /sorcm/ jellst
alkalmazzuk, ha kettot, akkor a /cmtartomny/ jellst.
Behelyettests
[cmtartomny] s / minta / j_minta / [jelz!k]
A cmtartomny ltal meghatrozott tartomnyban lvo sorokban behelyettesti minta helyre
j_mintt. Mind cmtartomny, mind minta lehet regulris kifejezs, az sszes ott megismert
metakarakter hasznlhat megadsukkor. Ha cmtartomny regulris kifejezs, s azonos
minta-val, azaz minta megadsa nem ktelezo (pl. a /kutya/s//macska/g parancs minden, a
kutya szt tartalmaz soron fog vgrehajtdni, s ott minden kutyt lecserl macskra).
Mdost flagek
Behelyettestskor az albbi jelentsmdost flagek hasznlhatak:
7. fejezet A sed editor
109
n 1 s 512 kzti szm, mely azt jelzi, hogy a behelyettestst minta n-edik
elofordulsn kell csak vgrehajtani
g a mintatrben minta sszes elofordulst lecserli, nem csak a legelsot, amit tall
p kilistzza a mintatr tartalmt
w file a mintatr tartalmt a file llomnyba rja
Metakarakterek a keresendo minta megadsakor
A keresendo mintt a regulris kifejezseknl megismert mdon adhatjuk meg, az ott
megismert metakarakterek hasznlhatak.
Metakarakterek a behelyettests megadsakor
Az albbi metakarakterek a behelyettests jobb oldaln hasznlhatak.
& minta rtknek felel meg. Pldul s/Egyeslt llamok/Amerikai &/ hatsra sed a
teljes nvre egszti ki slendrin megfogalmazsunkat.
\n (n egyjegyu egsz szm); a mintban, teht a behelyettests
baloldaln a regulris kifejezsben szereplo n-edik, \( .. \) ka-
rakterek kz zrt regulris alkifejezsre hivatkozik. Pldul az
s/\([A-Z][a-z][a-z]*\) \([A-Z]\.\) \([A-Z][a-z][a-z]*\)/\3 \1 \2/ parancs hatsra a kz-
napi formban rt angolszsz neveket alaktja t "hivatali hasznlatra", pldul John
C. Smith helyett Smith, John C. formra. (Lefordtva a fenti, valban meglehetoen
ronda kifejezs valami olyasmit csinl, hogy "elso regulris alkifejezs legyen egy
nagybetuvel kezdodo, egy vagy tbb kisbetut tartalmaz karaktersorozat, ezt szkz
kveti, a msodik alkifejezs egy nagybetu, melyet egy pont karakter kvet; szkz,
majd a harmadik alkifejezs ismt csak nagybetu, egy vagy tbb kisbetuvel kvetve;
ha a mintatrben tallt a sed erre illeszkedo mintt, a harmadik, az elso s a msodik
alkifejezsre illeszkedo rszt rja a kimenetre".)
\ tbb funkcit is ellt, egyrszt a msik kt metakarakter specilis jelentst nyomja el,
msrszt tbbsoros behelyettests megadsnl hasznlatos. Tbbsoros
behelyettestsre lehet plda az albbi, ahol ha a
sed 's/\.ti \([0-9][0-9]*\) \(.*\)/\1. fejezet\
\2/'
parancs a
.ti 3 Az cserebogarak halhatatlansagarul
veretes szvegformz makrutastst a
3. fejezet
Az cserebogarak halhatatlansagarul
ktsoros formra hozza.
UNIX felhasznli ismeretek
110
Trls
[cmtartomny]d
A d parancs a kijellt sort vagy sorokat trli (rszleges trlsre a substitute parancsot
hasznlhatjuk). Egy dolgot kell ezzel kapcsolatban megemltennk: ha egy sort kitrlnk a
mintatrbol, a feldolgozs rtelemszeruen megszakad, j sor kerl be a mintatrbe, s a sed
scriptben szereplo parancsok annak feldolgozst kezdik meg.
Hozzfuzs, beszrs, vltoztats
[sorcm]a\
szveg
[sorcm]i\
szveg
[cmtartomny]c\
szveg
Az a (append) parancs a mintatrben lvo sor vgre, az i (insert) parancs a mintatrben lvo
sor elejre, a c (change) parancs pedig a mintasor helyett illeszti be szveget. Vigyzzunk
arra, hogy mindhrom parancs tbbsoros, a parancs betuje utn mindenkppen kell a
backslash karakterrel vdett soremels, s kell a szveg sorainak vgn is, ha a beillesztendo
szveg tbbsoros. Szokatlan lehet az is, hogy a beillesztett szveg kirdik ugyan a
kimenetre, de nem kpezi rszt a mintatrnek, s gy a soronkvetkezo script parancsok nem
veszik figyelembe a sor feldolgozsnl. Mivel a c parancs trlte az eredeti mintateret, a
szban forg sor feldolgozsa ppgy megszakad, mintha a d vagy q parancsot adtuk volna
ki.
Transzformci
[cmtartomny] y / str1 / str2 /
Az y (olvasd: transform... :-) parancs a mintatrbe kerlo sorokon karakterkonverzit hajt
vgre, mgpedig gy, hogy mindazon karaktereket, melyek str1-ben szerepelnek, a
mintatrben str2 ugyanazon pozcin lvo karaktervel helyettesti. (Gyakorlatilag a tr nevu
Unix parancs mintjra.) Az albbi sed parancs pldul minden szmjegyet az N betuvel
helyettest a kimeneten:

sed 'y/0123456789/NNNNNNNNNN/'
7. fejezet A sed editor
111
Nyomtats
[cmtartomny]p
A p (print) parancs a mintatr tartalmt rja ki a mindenkori kimenetre. Miutn a sed
alaprtelmezs szerint a mintatr minden sort kirja, a p parancsot a hibakeress miatti
kirson kvl a leginkbb akkor hasznljuk, ha a sed parancsot a -n opcival hvtuk meg,
azaz alaprtelmezsben letiltottuk a sorkirst. (Ha pldul bizonyos rszeket keresnk egy
fjlban, s nem mdostani akarjuk, e megolds a clravezetobb.)

sed -n '/Linux/p'
A fenti parancs hatsra a Linux szt tartalmaz sorok rdnak ki, a sed a tbbit eldobja.
j sor beolvassa
[cmtartomny]n
Az n (next) parancs hatsra a mintatr pillanatnyi tartalmt sed kirja a kimenetre, trli azt a
mintatrbol, majd beolvassa a soron kvetkezo sort, s azon folytatja a script parancsainak
vgrehajtst. Az albbi parancs a '.' karakterrel kezdodo sorok utn beolvassa a kvetkezo
sort (vigyzat, ekkor az eredetit mr a kimenetre tette!), s ha az jonnan beolvasott sor res
volt, trli azt:

sed '/^\./ { n
/^$/d }'
Fjlok rsa-olvassa
[sorcm]r file
[cmtartomny]w file
Az r (read) paranccsal a megadott cm utn olvassa be a sed a mintatrbe file tartalmt; w
(write) hatsra a megadott cmtartomnyon belli rsz kerl ki file-ba. Szintaktikai
finomsg: mindkt parancs pontosan egy szkzt kvetel meg a parancs s a fjlnv kztt;
ha tbbet adunk meg, azt a fjlnv rsznek fogja tekinteni. Ha nem ltezo fjlt akarunk
olvasni, a sed nem panaszkodik; hasonlkpp, nem ltezo fjl rsakor ltrehozza azt, mr
ltezo tartalmt pedig fellrja. (A scripten belli tbbszri rsok hozzfuznek a fjlhoz.)
Az a, i s c parancsokhoz hasonlan az r parancsra is igaz, hogy azonnal sed kimenetre
kerl, s a script tovbbi feldolgozsban, mintaillesztsben nem vesz rszt, a mintatrben
marad eredeti sor viszont igen. Egy plda ennek illusztrlsra:
Tegyk fel, hogy van egy template nevu mintafjlunk, az albbi szveggel:

Kedves Ismeretlen, On cegunktol az alabbi ingyenes alomutazasok valamelyiket nyerte:
<cimlista>
Ezek igenybevetelehez mindossze az alabbiakat kell tennie...
UNIX felhasznli ismeretek
112
A behelyettestendo adatok pedig a helyszin.txt nevu llomnyban tallhatak:

Kanari szigetek repulogeppel
Korfu szigete autobusszal
Margit-sziget vzibusszal
Ha ezek utn a sed-et a

sed '^/<cimlista>/ { r helyszin.txt ; d }' template
paranccsal hvjuk meg, akkor helyszin.txt szvege beszrdik a mintatr vgre; a kvetkezo
d parancs viszont a mintatr eredeti tartalmt trli, s gy amikor a sed vgzett az adott sorral,
<cimlista> helyett a felknlt helyek listja jelenik meg a kimeneten:

Kedves Ismeretlen, On cegunktol az alabbi ingyenes alomutazasok valamelyiket nyerte:
Kanari szigetek repulogeppel
Korfu szigete autobusszal
Margit-sziget vzibusszal
Ezek igenybevetelehez mindossze az alabbiakat kell tennie...
7. fejezet A sed editor
113
Tbb sor kezelse
N
D
P
Albbi parancsaink az eddig rolvassszeruen ismtelgetett dogmt kezdik ki, miszerint a sed
sororientlt editor, s egyszerre mindig csak egy soron vgez muveleteket. Az N, D s P
parancsok funkcionalitsukban egysoros megfeleloikkel azonosak, de mindegyik tbb soron
dolgozik.
N hatsra sed mg egy sort olvas a bemenetrol, s a mintatr vgre fuzi, annak rgi tartalmt
is megorizve. A mintatrben lvo sorokat az jsor '\n' karakter vlasztja el, s erre a
mintakeresseknl hivatkozhatunk is. (Lsd a kvetkezo pldt.)
D hatsra a mintatrbol egy sor, azaz a mintatr elejtol az elso jsor karakterig terjedo rsz
trlodik. Ellenttben a d paranccsal, hatsra nem olvas be j sort a mintatrbe, a feldolgozs
viszont itt is jra a script elejtol folytatdik. Klasszikus plda a D parancs felhasznlsra,
amikor sok res sort tartalmaz bemenetrol szeretnnk kiszurni a felesleges sorokat:

/^$/ {
N
/^\n$/D
}
(A megolds azon alapul, hogy res sor beolvassa utn a sed mg egy sort beolvas, ha az is
res, az elsot kitrli, s a script vgrehajtsa ellrol indul; azaz mindez a beolvass s trls
addig folytatdik, amg vannak tbbszrs res sorok, a script egyesvel araszol vgig a
beolvasott sorokon. Ugyanez a d parancs felhasznlsval pratlan szm res sorokra nem
mukdik, hiszen a d parancs a teljes mintateret, azaz mindkt sort trlte volna, a harmadik
res sor beolvassa utn viszont nem res sor jnne, s a script ekkor mr nem trln a
harmadik res sort.
P hatsra sed a mintatrbol az elso jsor karakterig terjedo rszt rja a kimenetre.
nmagban nem gyakran hasznljk, tipikus alkalmazsa az elozo pldban szereplo,
tbbsoros mintkat vizsgl alkalmazsokban lehet. Ha ugyanis tbb egyms utni sorban
kell mintt keresni s behelyettestst vgezni, a legclszerubb megolds egy olyan hurok
felptse, ahol megfelelo szm N paranccsal beolvassuk a mintatrbe a vizsgland sorokat,
a megfelelo behelyettestsek utn P paranccsal kirjuk a mintatr mdostott elso sort, majd
ugyanazt trljk a D paranccsal a mintatrbol. A script megint ellrol kezdi a feldolgozst,
egy sorral odbb cssztatva a "vizsglati ablakot" a bemeneten. Alanti programocsknk
(hasznossgrl valsznuleg nem kell gyozkdni a tisztelt olvast :-) a netaln helytelenl rt
Kisfeju Zordonbordon neveket cserli ki az autentikus Kisfeju Nagyfeju Zordonbordonra,
abban az esetben is, ha az a sorhatron tnylva zordonbordonkodik:
Ha a tesztfjlunk az albbi:

Mikor tegnap erre jott Kisfeju
UNIX felhasznli ismeretek
114
Zordonbordon,
morcosan nezett a Kisfeju Zordonbordon,
hogy nevet mindig rosszul mondom
a script pedig ez:

/Kisfeju/ {
N
s/Kisfeju\(.Zordonbordon\)/Kisfeju Nagyfeju\1/g
P
D
}
az eredmny ez lesz:

Mikor tegnap erre jott Kisfeju Nagyfeju
Zordonbordon,
morcosan nezett a Kisfeju Nagyfeju Zordonbordon,
hogy nevet mindig rosszul mondom
A script a Kisfeju szt tartalmaz sorok esetn beolvassa a kvetkezo sort is, s a ktsoros
mintatren globlis behelyettestst hajt vgre, azaz a keresett minta sszes elofordulst
javtja: A Zordonbordon szt s az azt megelozo (szkz vagy jsor) karaktert regulris
alkifejezsknt megjelltk, s a behelyettestskor ugyanezt tesszk vissza. Miutn fenti
mdon az sszes nevet kicserltk, a mintatr elso sort (ami garantltan javtott), kirjuk,
majd trljk a mintatrbol, jabb sort olvasunk be, s jra kezdodik a script vgrehajtsa.
Az ideiglenes troltr s parancsai
A mintatren kvl, ami mindig az aktulis sort tartalmazza, a sed egy msik terletet is
fenntart, ez a hold space (jobb hjn nevezzk troltrnek). Ha egyes muveletek sorn arra
volna szksgnk, hogy a mintatrt elmentsk valahova, mg eredeti tartalmn muveleteket
hajtunk vgre, a troltrben tudunk egy ideiglenes kpit kpezni. A trolteret t, nem
cmezheto parancs kezeli: h, H (hold), g, G (get) s x (exchange). A hold parancsok hatsra
a troltr tartalma a mintatrbe kerl, a get parancsok hatsra pedig a troltr tartalma
kerl vissza a mintatrbe. Az exchange parancs hatsra a troltr s a mintatr tartalma
megcserlodik. A kis- s nagybetus parancsok kztt az a klnbsg, hogy h s g
bemsolskor fellrja a trol-, illetve a mintatr tartalmt, H s G pedig jsor karakterrel
elvlasztva hozzfuzi annak tartalmhoz (az jsor karaktert akkor is beteszi, ha a minta- vagy
troltr ppen res volt).
Elgazsok, feltteles parancsvgrehajts
Szmos olyan sed parancsot lttunk mr, melyek implicit mdon megvltoztatjk a scriptben
a feldolgozs folyamatt; az albbiakban olyan parancsokkal zrjuk ismerkedsnket a sed-
del, melyek kimondottan a parancsvgrehajts folyamatt szablyozzk.
7. fejezet A sed editor
115
Cmkk
A cmkk hasznlata teszi lehetov, hogy ltalunk kijellt tetszoleges helyre ugorhassunk egy
sed scriptben. A cmke egy maximum ht karakterbol ll sorozat, melynek kettosponttal
megelozve, egymagban kell egy sorban szerepelnie, hogy a sed felismerje. (Rendkvl
gyakori hiba, hogy a cmke s a sor vge kztt nhny szkz karaktert felejt az ember; ne
tegyk, mert ht karakterig bezrlag ezeket is a cmke rsznek tekinti a sed!) Ha egy
parancsban cmkre hivatkozunk, a script vgrehajtsa a cmkt kveto soron folytatdik.
Pldul az alanti scriptrszlet hatsra a loop3 cmkre ugrskor a sed a mintatr tartalmt a
troltr tartalmhoz fuzi, majd trli a mintatr elso sort:

:loop3
{
H
D
}
Elgazs
[cmtartomny]b[cmke]
A b (branch) parancs hatsra a script vezrlse a label cmkt kveto sorra addik t; ha nem
adtunk meg cmkt, a vezrls a script vgre kerl, magyarul a mintatr tartalma kirdik s
j sort olvas be a sed. (A b parancs s a cmke kztt megengedett a szkzk hasznlata.)
Pldul a

/^\.start/,/^\.stop/!b
s/\(.*\)/> \1/
script hatsra a .start- .stop parancsokkal kijellt rsz kivtelvel (figyeljnk a negl '!'
karakterre!) nem csinl semmit, mert a vezrlst a script vgre adja t. A .start s .stop
parancsok kzti rszen pedig minden sort el elhelyez egy '> ' szekvencit.
A branch parancs segtsgvel hurkokat is tudunk csinlni:

:eleje
parancs1
/minta/b eleje
parancs2
A fenti programstruktra alkalmazsval parancs1 mindaddig ciklikusan vgrehajtdik, amg
a bemeneten van minta-ra illeszkedo sor; ha nincs, a script vgrehajtsa parancs2-vel
folytatdik. Hasonl mdon alakthatak ki egyb ciklikus vezrlsi szerkezetek is.
UNIX felhasznli ismeretek
116
Feltteles elgazs
[cmtartomny]t[cmke]
A t (test) parancs hatsra a vezrls akkor kerl a megadott cmke utni sorra, ha elozoleg a
kurrens sorban sikeres behelyettests trtnt. Akrcsak a b parancsnl, cmke elhagysa
esetn a vezrls a script vgre addik t. Az albbi script a .pa makrutasts helyett egy
soremels (CTRL-L) karaktert szr be, a .pp makrutasts helyett pedig egy jsor karaktert.
Mindkt esetben, ha sikeres volt a behelyettests, a vezrls a tovabb cmktol folytatdik;
gyakorlatilag teht egy C vagy shell nyelvi case konstrukcit szimullunk:

/^\.pa.*/s//^L/
t tovabb
/^\.pp.*/s//\n/
t tovabb
... egyeb parancsok
:tovabb
A fentiekben csak igen vzlatos ttekintst nyjtottuk a sed-nek, de azt taln sikerlt
bizonytanunk, hogy rendkvl sokoldalan hasznlhat eszkz lehet a felhasznl kezben.
Csak btortani tudunk mindenkit hasznlatra, mert a kezdeti erofesztsek sokszorosan
kifizetodnek majd az elso komolyabb szvegtalakts alkalmval.
117
8. FEJEZET


A VI EDITOR
A UNIX rendszerben tbb editor, eredendoen soreditor hasznlatos. Ezekre az editorokra
mind az jellemzo, hogy egy teletype orientlt szemlletet tkrznek, ellenttben a PC-ken
hasznlatos s szles krben elterjedt kpernyoorientlt szvegszerkesztokkel. A UNIX edito-
rai inkbb programeditorok, de a htrnyokrt cserben szmtalan gyes szerkesztsi leheto-
sget knlnak.
A vi editor (az elnevezs a visual editor kifejezsbol szrmazik) a sororientlt s a
kpernyoorientlt editorok klns (s bonyolult) keverke. Szmos szolgltatsa miatt a
UNIX programozk krben igen kzkedvelt, br a mai modern editorokhoz szokott felhasz-
nlk nha furcsnak tallhatjk egyes vonsait. Elonye mg, hogy ahol UNIX van, ott vi is
tallhat.
A vi editorral val ismerkedst bonyoltja, hogy a vi nem is egy, hanem tbb editor szorosan
sszenott egyttese. A vi az ex editor fl pl, amely az ed editor kibovtett vltozata. A vi-
ban val szerkeszts kzben tlphetnk az ex editorba, vgrehajthatjuk mondjuk annak glo-
blis kereso s/vagy helyettesto parancsait, majd ismt visszatrhetnk a vi-ba, ahol az elozo
vltoztatsok eredmnyt a kpernyon ksrhetjk nyomon.
A vi klnskppen a kezdo felhasznlk szmra bonyolult s nehezen megszokhat, ezrt
lehetosg van arra, hogy vedit nven indtsuk el: ekkor olyan belltsokkal zemel a vi,
amely a szoksosnl kiss bobeszdubb, jelzi a vi aktulis zemmdjt stb. Ha view nven
indtjuk, csak olvashat mdban nyitja meg az llomnyokat, cskkentve a vletlen trls
lehetosgt.
UNIX felhasznli ismeretek
118
A vi mukdse, zemmdjai
A vi egy pufferbe olvassa be a szerkesztendo llomnyt. Minden mdosts, amit a fjlon
vgrehajtunk, ebben a belso pufferben troldik mindaddig, amg egy rsi paranccsal el nem
mentjk.
A vi-nak alapvetoen hromfle zemmdja van: a parancsmd, a beviteli md, s az ex md.
Parancsmdban (ez a vi kiindulsi mdja) a lettt billentyuket a vi parancsokknt rtelmezi
s hajtja vgre. Az ex mdbl is parancsmdba tr vissza, ha elvgezte a feladatt, s beviteli
mdbl is ide trnk vissza, ha parancsot akarunk kiadni. Fut parancsot az ESC billentyuvel
lehet megszaktani.
Beviteli mdba akkor kerl a vi, ha az a A i I o O c C s S R parancsok valamelyikt adtuk ki.
Beviteli mdban a begpelt szveg a szerkesztett llomnyba kerl, s ilyenkor semmilyen paran-
csot nem lehet kiadni mindaddig, amg a beviteli mdbl vissza nem lpnk parancsmdba, ren-
desen az ESC billentyu lenyomsval. (A vi-nak ez a tulajdonsga az, ami a ms editorokhoz
szokott felhasznlknak a legtbb gondot okozza, nevezetesen hogy a parancsmegads s a sz-
vegbevitel ennyire hermetikusan szt vannak vlasztva egymstl. Ennek valsznu oka, hogy a
UNIX-os gpek terminljai annak idejn nem ismertk a PC-ken megszokott kurzormozgat- s
funkcibillentyuket.
ex mdba akkor kerl a vi, amikor a : / ? ! karakterek valamelyikt tjk le parancsmdban.
Ekkor az ex editornak szl parancsokat gpelhetnk be, a sorlezr jsor karakter hatsra a
begpelt parancsokat az ex vgrehajtja. A parancs vgrehajtst a DEL billentyuvel sza-
kthatjuk meg.
Mivel inkbb a gyakorlati felhasznl szemvel szeretnnk ltni s lttatni a vi-t, trgyalsunk
sorn eloszr egy olyan minimlis funkcikszletet mutatunk be, mellyel mr biztonsggal
hasznlhat a vi, ezt fogja kvetni az egyes parancsok funkcik szerint csoportostott
rszletesebb lersa. Kezdjk ht meg trnkat a vi krl! (Olvasinknak azt javasoljuk,
nyissanak meg egy fjlt lehetoleg ne rendszergazdai jogosultsgokkal s ne a
legptolhatatlanabbat... , s azon gyakoroljk az olvasottakat.) Az albbiakban a
parancskaraktereket vastagon szedett betuvel jelljk. A ^ karakter a vezrlokaraktereket jelzi
majd, gy pldul a ^c jells a CTRL-C karakternek felel meg.
8. fejezet A vi editor
119


8. bra: A vi editor zemmdtmeneteirol
Ismerkeds a tllokszlet
Egy fjlt a vi file paranccsal nyithatunk meg szerkesztsre; ha ltezo fjlrl van sz, a vi a fjl
elejre ll, ha mg nem ltezett ilyen fjl, a kpernyo als sorban egy "New file" vagy
"Empty file" szveg figyelmeztet minket. (Meghvhatjuk a vi-t fjlparamter nlkl is, ez
esetben legksobb kilpskor kell nevet adni neki.)
A megnyitott fjlban a villog kurzor az elso sor elejn jelzi, hogy a vi parancsra vr. Ha a
kpernyon a fjl vge (is) lthat, a kpernyo szln a '~' (tilde) karakterek a mr res sorokat
jelzik.
A vi egyik leggyakrabban szidott vonsa szfukarsga; mg gyakorlott felhasznlknak is
rendkvl zavar tud lenni, hogy nem ltjk, milyen zemmdban vannak ppen. Elso
lpsknt ezrt gpeljk be az albbi parancsokat:

:set novice
:set showmode
Ennek hatsra nmileg megolddik a vi nyelve, a tovbbiakban a kpernyo jobb als
sarkban ki fogja rni, hogy milyen beviteli mdban vagyunk ppen; ennek hinya azt jelzi,
hogy parancsmdban vagyunk. (Ha elvesztettk a fonalat, s nem tudjuk, pp milyen vi
mdban vagyunk, nyomjuk meg ktszer egyms utn az ESC gombot, ennek hatsra
garantltan "visszajutunk a klyhhoz", azaz parancsmdba. Mivel a legtbb terminl a
UNIX felhasznli ismeretek
120
parancsmdban rkezo ESC karaktert egy ftylssel vagy villanssal is honorlja, gy ha a
dupla ESC utn ftylt a terminlunk, biztosak lehetnk abban, hogy parancsmdba
kerltnk vissza.
Ahogy a kisbaba is eloszr jrni tanul meg, elsoknt nzzk meg, mely alapveto parancsokkal
mozoghatunk egy fjlban. A legfontosabbak a balra-le-fl-jobbra funkciknak megfelelo
parancsok. Ezeket a klaviatrn rendre az egyms mellett lvo h j k l billentyuvel rhetjk el.
(A legtbb Unix rendszerben s terminlon ma mr hasznlhatak a standard nyl billentyuk
is, m ezek hasznlata nem mindig javasolt. Ennek az az oka, hogy a kurzormozgat nyl
billentyuket a legtbb terminl valamilyen ESC karaktert is tartalmaz 2-4 karakteres
szekvencival kdolja (pldul ESC [ A ). A rendszer leterheltsge esetn knnyen
elofordulhat, hogy e karakterszekvencik feldolgozsa idoben elhzdik, a vi egymstl
fggetlen kln karakterknt fogadja oket, s gy egy nylbillentyu lenyomsakor a vi az ESC
miatt tlp parancsmdba, majd a kurzormozgat szekvencia tbbi karaktert vi parancsnak
rtelmezi.)
Ha nagyobb lpsekkel szeretnnk mozogni a fjlban, a b paranccsal az aktulis sz elejre
ugorhatunk vissza, w paranccsal pedig a (jobbra) kvetkezo sz elejre. A 0 karakterrel az
aktulis sor elejre, a $ karakterrel pedig a sor vgre ugorhatunk. A H paranccsal a kpernyo
tetejre, az L paranccsal pedig a kpernyo utols sorra ugorhatunk. A fjl tetszoleges sorra
az nG paranccsal pozicionlhatunk, gy 1G a fjl legelso sorba visz minket. Paramter
nlkl megadva G az utols sorba rpt. A legfontosabb pozicionl parancsokat grafikus
formban az albbi bra szemllteti.

8. fejezet A vi editor
121
1G
H
k
1 b h * l w $
j
L
G
Ha rni szeretnnk a fjl egy tetszoleges helyre, lljunk a kurzorral a kvnt helyre, majd
adjuk ki az i (insert) parancsot. Ennek hatsra azonnal beviteli mdba kerlnk, s mint mr
mondtuk, az ESC karakter letsig minden, amit gpelnk, bekerl a fjlba. Az i parancs az
el a karakter el szr be, ahol a kurzor ll, az a karakter hatsra pedig a kurzor utn
szrdik be szvegnk. Ha szveg bevitele kzben szeretnnk javtani, a BACKSPACE
karakterrel trlhetnk egy karaktert.
Specilis (pldul vezrlokarakterek) bevitelhez elobb a CTRL-V billentyut nyomjuk le, az
ezutn megadott karaktert a vi nem rtelmezi, hanem berja a fjlba. Pldul ha egy ESC
karaktert szeretnnk berni, a CTRL-V ESC karakterszekvencit kell megadni; a vi a
vezrlokaraktereket a ^c formtumban jelenti meg a kpernyon (az ESC pldul ^[ ), az
kezetes karakterek megjelentse implementci s belltsfggo.
A szvegbevitel utn elobb-utbb trlni is knyszerlnk... Ha nhny karaktert szeretnnk
csak trlni, a kurzorral lljunk r az elso trlendore, s adjuk ki az x parancsot; ennek hatsra
egy karakter trlodik. Ha tbbet szeretnnk, adjuk meg az x elott a darabszmot; gy pldul 5x
t karaktert fog trlni, a kurzor feletti karaktert, s ngy tole jobbra lvot. (Vigyzzunk, ha
ekzben a sor vgre rtnk, a maradk karaktereket balra haladva fogja trlni a vi, mintha a
PC-s DEL funkcibl hirtelen BACKSPACE funkcira vltana.)
Ha egsz sort szeretnnk trlni, a dd paranccsal az aktulis sort trlhetjk.
Ha valamit elrontottunk, s rgtn szrevesszk a hibt, az u (undo) paranccsal vissza lehet
lltani a legutols szvegmdosts elotti llapotot.
Ha vgeztnk munknkkal, a :w paranccsal tudjuk a mdostott fjlt elmenteni, azaz
visszarni a vi puffernek tartalmt a merevlemezre. Kilpni a :q paranccsal lphetnk. Ha
egy fjlt mdostottunk, s ments nlkl akarunk kilpni, a vi nem hagyja: vagy el kell
mentennk a fjlt a :w paranccsal, vagy pedig a :q! paranccsal kell kilpnnk.
Pozicionl parancsok
Szavak, mondatok s egyb szvegelemek
A pozicionl parancsok elott ismerkedjnk meg nhny alapveto vi szvegobjektummal,
nevezetesen a szval, mondattal, bekezdssel s a szekcival. Ezek egyfelol abban segtenek
bennnket, hogy nagyobb lpsekkel tudjunk mozogni a fjlban, msrszt ezekkel tudunk
nagyobb sszefggo elemeket kijellni szerkesztendo llomnyunkban.
UNIX felhasznli ismeretek
122
A szra a vi kt defincit alkalmaz. A szukebb rtelmezs szerint sz a kizrlag
alfanumerikus karaktereket s '-' karaktert tartalmaz karaktersorozat. Az ilyen rtelmezs
szerinti szavak kztt ugrlhatunk a b s w parancsokkal, b mindig a baloldali, w pedig a
jobboldali legkzelebbi szkezdetet jelli.
Tgabb rtelmezs szerint a vi a sz rsznek rtelmezi az sszes, nem szkz s sorvge
karaktereket. E definci szerint teht a kzpontoz karakterek is a sz rszt kpezik. Az
eszerint definilt szavak kzt a nagybetus B s W parancsokkal mozoghatunk.
A mondat a vi defincija szerint szavak olyan sorozata, melyet szkz vagy soremels eloz
meg, s vagy soremels s res sor, vagy egy kzpontoz karaktert kveto legalbb kt
szkz zr le. A mondat elejre s vgre a '(' s ')' karakterekkel mehetnk.
A bekezds (paragrafus) az res sorokkal hatrolt sorok sszessge. Bekezds elejre illetve
vgre a '{' s '}' karakterekkel lphetnk.
A vi parancsok felptse
A pozicionl parancsoknak nem csak a fjlban val mozgskor van szerepk, legalbb ilyen
fontos, hogy segtsgkkel jellhetjk ki egy-egy vi parancs hatkrt. Ennek megrtshez
rviden tekintsk t a vi parancsok ltalnos felptst.
Minden vi parancsot egy betu jell, melyet megelozhetnek s kvethetnek opcionlis
argumentumok is. Egy vi parancs ltalnos felptse a kvetkezo:
argumentum parancs szvegobjektum
Az argumentumokkal leggyakrabban azt adjuk meg, hogy a szban forg parancsot hnyszor
ismteljk meg, de a ksobbiekben ltni fogjuk, hogy pldul a puffer- s markerjells is itt
trtnik. A parancs utn szereplo szvegobjektum pedig arra utal, hogy mekkora
szvegterletre terjed majd ki a szban forg vi parancs hatlya. Mindez valban szraznak
tunhet, jjjn ht nhny plda, az egyszerubbektol a bonyolultabbakig.
Legegyszerubb megoldsknt egyes parancsokat megadhatunk nmagukban is, pldul az x
parancs trli azt a karaktert, amelyen a kurzor ll. E parancsokat megelozhetjk sokszoroz
argumentummal: a 3x parancs a kurzortl szmtott 3 karaktert trl le, hasonlkppen, az l
parancs egy karakterrel jobbra mozgatja a kurzort a sorban, mg 10l hatsra tz karakternyit
mozdulhatunk jobbra. E sokszoroz argumentum hatsra teht az adott parancs ismtlodik n-
szer.
Ms parancsok nem llnak meg nmagukban, paramterek nlkl. Ilyen pldul a trlst
vgzo d parancs. A vi konvencii szerint, ha egy ilyen parancs karaktert megduplzzuk, a
parancs a teljes aktulis sorra fog vonatkozni. Esetnkben teht a dd trli a kurrens sort. Ha
viszont a parancs betuje utn egy norml pozcionl vi parancsot adunk meg, a trlsi
parancs hatlya a pillanatnyi kurzorpozcitl addig a pontig terjed a fjlban, ameddig a
pozicionl paranccsal jutottunk volna. gy dw a pillanatnyi pozcitl a kvetkezo sz
elejig trl, d$ a sor vgig, d) a mondat vgig, d23G a huszonharmadik sorig, s gy
8. fejezet A vi editor
123
tovbb. Termszetesen a pozicionl parancsoknl is szerepelhetnek sokszoroz
argumentumok, ahogy 3w azt jelenti, hogy hrom szt mozdulunk jobbra a kurzortl, gy
d3w azt jelzi, hogy hrom szt trlnk a kurzortl kezdve. Utbbival viszont egyenrtku
lesz a 3dw megads, ami azt jelenti, hogy hromszor hajtunk vgre sztrlst.
Pozicionls karakterek alapjn
h, <BACKSPACE>
A kurzort egy karakterrel balra mozgatja.
l, <SPACE> A kurzort egy karakterrel jobbra mozgatja.
$ A kurzort a sor utols karakterre lltja.
0, A kurzort a sor elso karakterre lltja.
n A kurzort a sor n-edik oszlopra lltja.
^ A kurzort a sor elso nem blank karakterre lltja.
fx A kurzort jobbra mozgatja az elso x karakterre.
Fx A kurzort balra mozgatja az elso x karakterre.
tx A kurzort jobbra mozgatja, az elso x karakter el.
Tx A kurzort balra mozgatja, az elso x karakter mg.
; A megelozo f, F, t, T parancsok ltal keresett karakter kvetkezo elofordulst
keresi.
, Az f, F, t, T parancsok ltal elozoleg keresett karakter jabb elofordulst ke-
resi visszafel.
Az sszes itt felsorolt parancs a kurrens sorban mukdik, belertve a t s f parancsokat is.
Pozicionls sorok alapjn
j A kurzort egy sorral lejjebb mozgatja.
k A kurzort egy sorral feljebb mozgatja.
+, <CR> A kurzort lefele mozgatja, a kvetkezo sor elejre.
- A kurzort felfele mozgatja, a felette lvo sor elejre.
Pozicionls szavak alapjn

w, W A kurzort a kvetkezo sz elso karakterre mozgatja.
b, B A kurzort a megelozo sz elso karakterre viszi.
Pozicionls mondatok alapjn
( A kurzort a mondat elejre viszi.
) A kurzort a kvetkezo mondat elejre viszi.
UNIX felhasznli ismeretek
124
Pozicionls bekezdsek alapjn
{ A kurzort a bekezds elejre viszi.
} A kurzort a kvetkezo bekezds elejre viszi.
Pozicionls a kpernyon
nH A kurzort a kpernyo elso (illetve n-edik) sorra viszi.
M A kurzort a kpernyo kzepso sorra viszi.
nL A kurzort a kpernyo utols (illetve alulrl az n-edik) sorra viszi.
Pozicionls az llomnyban grgets
^f Teljes kpernyonyit elore grget.
^d Flkpernyonyit elore grget.
^b Teljes kpernyonyit htrafele grget.
^u Flkpernyonyit htrafele grget.
Pozicionls sorszm alapjn
^g Az als sorban kirja a kurrens llomny sttuszinformciit (nv, mdostot-
tk-e) s a kurzorpozcit (sorszm/teljes sorok szma, szzalkos pozci az
llomnyon bell).
G A kurzort a buffer utols sornak elejre lltja.
nG A kurzort a buffer n-edik sornak elejre lltja.
Pozicionls mintakeresssel
A / illetve a ? karakter letse utn a kurzor a kpernyo utols sorba, az u.n. parancssorba
kerl, a mintt ide kell folyamatosan gpelni. Termszetesen amit itt runk, az nem kerl a ja-
vtand szvegbe.
/pattern A pattern minta kvetkezo elofordulst keresi a bufferben. A kurzor pattern
elso karakterre ll. Ugyanazon minta ismtelt elofordulst a / karakter minta
nlkl trtno megadsval kereshetjk.
?pattern Visszafele keresi pattern kvetkezo elofordulst. A kurzort pattern elso ka-
rakterre lltja. Ugyanazon minta ismtelt elofordulst a ? karakter minta
nlkl trtno megadsval kereshetjk.
n Megismtli az utols mintakereso utastst.
N Megismtli az utols mintakereso utastst, de az azzal ellenttes irnyba.
8. fejezet A vi editor
125
Szvegbeviteli parancsok
a Beviteli mdba kerl, az j szveget a kurzor mg rja.
A Beviteli mdba kerl, az j szveget az aktulis sor vghez fuzi.
i Beviteli mdba kerl, az j szveget a kurzor el szrja be.
I Beviteli mdba kerl, az j szveget az aktulis sor elso nem res karaktere el szrja
be.
o Beviteli mdba kerl, s j sort kezd az aktulis sor utn. A sor tetszoleges helyn
kiadhat parancs.
O Beviteli mdba kerl, s j sort kezd az aktulis sor elott. A sor tetszoleges helyn
kiadhat parancs.
Szvegmdost (cserlo) parancsok
A szvegmdost parancsok hatsra lnyegben beviteli mdba kerlnk, s a bert
szveggel a kijellt szvegobjektumot cserljk le.
rc A kurzor felett lvo karaktert a c karakterrel helyettesti.
R Fellr zemmdba kerlnk, az ESC lenyomsig gpelt karakterek fellrjk az
aktulis sorban a karaktereket. Ha ekzben elrtk az eredeti sor vgt, a vi append
mdba megy t, s a tbbi begpelt karaktert a fjl vghez fuzi.
s A kurzor alatti egyetlen karakter helyre szrja be az ESC karakterig begpelt
szveget. ns hatsra a kurzortl szmolt n karakter helyett szrja be a begpelt
szveget. (Az s parancs megadsakor, s minden olyan parancsnl, amely
behelyettestst vagy csert vgez, egy $ karakter jelzi annak a tartomnynak a vgt,
ameddig kiterjed a mdosts hatlya. Az ESC lenyomsakor a $ karakter eltunik.)
S A teljes aktulis sort cserli le a behelyettesto szvegre.
cx Az x szvegobjektumot helyettesti az ESC karakterig begpelt szveggel. Pldul
cwalmaESC a kurzortl a kvetkezo sz elejig terjedo rszt cserli le a begpelt
alma szval, c$ a sor vgig terjedo rszt, s gy tovbb.
cc Az aktulis sort cserli le a begpelt szveggel.
C Az aktulis sort a kurzortl kezdve cserli le a begpelt szvegre.
A fenti parancsok mindegyike megelozheto egy szmkonstanssal, ezek rtelemszeruen a
szban forg parancs n-szeri megismtlodst jelenti. Pldul 3salmaESC a kurzorpozcitl
szmolt 3 karaktert helyettesti az alma szval, 4cctextESC az aktulis sorral kezdve 4 sort
cserl le a begpelt szvegre.
UNIX felhasznli ismeretek
126
Trlo parancsok
Trls parancsmdban
x Trli azt a karaktert, amin a kurzor ll.
dx A kurzortl kezdve trli az x szvegobjektumot. Pldul db a kurzortl visszafele a
legkzelebbi sz elejig trl, d$ a sor vgig, d( a kurzortl az aktulis mondat
elejig, d} az aktulis bekezds vgig, 3d{ a kurzortl visszafele hrom bekezdst.
dd Trli az aktulis sort.
A fenti parancsok mindegyike megelozheto egy szmkonstanssal, ezek rtelemszeruen a
szban forg parancs n-szeri megismtlodst jelenti. Pldul 3d} a fenti pldval ekvivalens
mdon a kurzortl visszafele 3 bekezdst trl.
Trls beviteli mdban
Beviteli mdban viszonylag korltozottak lehetosgeink mind naviglsra, mind javtsra,
illetve trlsre. A nylbillentyukkel pldul beviteli mdban rendszerint nem lehet mozogni a
sorok kztt. Trlsre az albbi parancsok hasznlhatak:
BACKSPACE Trli a kurzor elotti karaktert. Egyes terminlokon elofordulhat, hogy a
trlt szveg mindaddig nem tunik el a kpernyorol, amg j sorba nem
lpnk, illetve le nem nyomjuk az ESC karaktert.
^w Trli a kurrens szt ( a szt blank karakterek hatroljk).
@ Trli az aktulis sorbl a frissen bert rszeket.
llomnyvlts s ments
Az albbi parancsok a fjlok mentsvel s a klnbzo fjlok kzti mozgssal foglalkoznak.
ZZ Elmenti az aktulis fjlt s kilp belole.
:wfile file nven lemezre rja (elmenti) a fjlt. Ha ltezo fjlt editltunk, file megadsra
nincs szksg. Ha ms nevet adunk meg, mint a megnyitott fjl, akkor e nven is
csinl egy aktulis kpit, de az eredeti s az j fjl egymstl fggetlen lesz, s
tovbbra is az eredeti fjlban maradunk.
:w!file Akkor is elmenti (rja) a fjlt, ha az rsvdett. (Termszetesen csak akkor, ha mi
tettk r az rsvdelmet!)
8. fejezet A vi editor
127
:q Kilp a vi-bl. Ha mdostottuk az llomnyt, s mg nem mentettk el, figyelmeztet
erre, s nem hagy kilpni, csak akkor, ha vagy elmentettk, vagy a :q! paranccsal
"eroszakoskodunk" vele.
:q! Mindenkppen kilp, az llomny mdosultsgnak tovbbi vizsglata nlkl.
:e file Az ppen szerkesztett llomny helyett file-t nyitja meg editlsra, azaz betlti a
bufferbe. Ha az elozoleg szerkesztett llomnyt mdostottuk elozoleg, akkor
figyelmeztet a mentsre, s csak a ments vgrehajtsa, vagy a :e! file parancs
hatsra kapcsol t az j file-ra.
:e!file A rgi llomny mentse nlkl kapcsol t file-ra.
:e# Az :e paranccsal trtno llomnyvltskor az utoljra megnyitott fjl is hozzfrheto
a :e# paranccsal. A vi mindig a kt legutoljra megnyitott llomny kztt kpes
vltani a :e# paranccsal. Ha a vi-t a vi file1 Unix paranccsal indtottuk, majd az :e
file2 paranccsal tlptnk file2-re, akkor file1 s file2 kztt vltogathatunk; ha
azonban file2-ben tartzkodva kiadjuk a :e file3 parancsot, akkor a :e# a
tovbbiakban file2 s file3 kztt fog vltani.
:e!# A rgi elmentse nlkl lp t az alternatv llomnyba
Lehetosg van a vi-ban arra is, hogy rgtn indtskor egyszerre tbb llomnyt nyissunk
meg, mint pldul a vi file1 file2 file3 paranccsal; az albbi vi parancsok ebben az esetben
hasznlhatak.
:n A vi az argumentumlistban hvskor megadott kvetkezo fjlra megy t, hasonlan
az :e parancshoz, azaz figyelmeztet arra, ha mdostott fjlrl prblunk ments
nlkl tovbblpni.
:n! Ments nlkl lp t a kvetkezo fjlra.
:rew Az argumentumlistban megadott elso fjlra lp vissza (mindazon harcedzett
veternok, akik erre gyanakodva kaptk fel fejket, megnyugodhatnak: ez valban a
mgnesszalagos perifrik rewind parancsnak osi mlysgeit idzo rvidts...).
Specilis parancsok
u "Visszacsinlja" a legutols parancsot. Alternl parancs, gy kt egyms utni u
parancs a visszacsinls elotti llapotot lltja vissza.
U A kurrens sort lltja vissza vltoztats elotti llapotba, feltve, hogy mg rajta
llunk a kurzorral.
. Megismtli a legutols puffermdosulssal jr, teht szvegltrehoz, trlo, vagy
mdost parancsot.
J Az aktulis sort s a kvetkezot egy sorba vonja ssze. A kt sor kztt az jsor
karakter helyett egy szkz karaktert helyez el.
UNIX felhasznli ismeretek
128
^l jrarajzolja az aktulis kpernyot. Kivltkppen akkor hasznos, ha valami
rendszerzenet belerondtott kpernyonkbe.
~ A kurzor alatti karaktert kisbeturol nagybeture, illetve nagybeturol kisbeture
konvertlja.
Jelzopontok (markerek)
A jelzok (markerek) hasznos lehetosget nyjtanak tjkozdsi s kijellsi pontok
ltrehozsra a szerkeszts kzben. Felhasznlhatjuk oket arra, hogy a megjellt helyre
ksobb visszatalljunk, de arra is, hogy velk jelljk ki egy-egy parancs hatkrt. (A
jelzokijells is csak egy nyitott fjlra rvnyes, azt a fjllal egytt nem menti el a vi.)
mc Az mc paranccsal, ahol c tetszoleges kisbetu lehet, helyeznk el egy jelzopontot a
fjlban.
'c Visszavisz a c jelzopontot tartalmaz sor elejre.
`c Pontosan a jelzoponttal megjellt karakterre visz vissza.
Nhny plda: a d'a parancs hatsra a kurzortl az ma paranccsal elhelyezett jelzopont
sorval bezrlag trl a vi. A d`a parancs hatsra a kurzortl a jelzopont karakterig trl.
Pufferkezels
Nvtelen s nevestett pufferek
A vi a "fo" pufferen kvl, ahol a szerkesztett llomnyt tartja, mg szmos egyb kiegszto
puffert is hasznl. Ezeknek elsosorban a komplexebb szvegmozgatsoknl, vagy a fjlok
kzti adatcserben lthatjuk hasznt.
A vi sszesen 36 puffert bocst rendelkezsnkre. Ezek kztt van egy nvtelen, melyet
automatikusan hasznlunk minden olyan vi muveletnl, ahol valami mdosult a fjlban; a
vltoztats ltal rintett, "elveszo", fellrand szvegrszlet kerl ide. (Rvidesen ltni
fogjuk, hogyan nyerhetjk ki e puffer tartalmt.) A kvetkezo 9 puffert, melyekre a "n
jellssel hivatkozhatunk (n a megfelelo puffer szma), szintn automatikusan hasznljuk,
ugyanis ezekbe shiftelodik el a nvtelen puffer tartalma minden egyes jabb puffermdost
muveletnl. Pontosabban fogalmazva, minden llomnymdostssal jr parancsnl a frissen
trlt szvegrsz kerl a nvtelen pufferba, ami eddig ott volt, az az egyesbe, s gy tovbb.
A maradk 26 pufferre (vagy msnven regiszterre) a "c formulval hivatkozhatunk, ahol c
az angol bc egy kisbetuje lehet.
8. fejezet A vi editor
129
A regiszterhivatkozsokat mindig az opcionlis szmparamter utn, de mg a vi parancs
elott kell elhelyezni, gy egy vi parancs legkomplexebb formja az albbi lehet:
argumentum regiszter parancs szvegobjektum
A fentiekre mindjrt ltunk pldkat is.
Szvegmsols: p s y parancs
Eddigi parancsaink kzvetlen hatssal voltak a szerkesztett fjlra, valamit trltek, vagy
valamit valamire cserltek. Az albbi parancsok a pufferkezelssel kapcsolatosak.
yx A y (yank) parancs hatsra az x szvegobjektum a nvtelen pufferbe kerl. y a d
parancshoz hasonlan mukdik, az egyetlen eltrs, hogy a pufferbe tett rszt nem
trli eredeti helyrol. x az eddig megszokott mdon kijellheto tetszoleges
szvegobjektum lehet.
yy Az aktulis sort helyezi a nvtelen pufferbe.
p A nvtelen puffer tartalmt a kurzor karakter mg szrja be. Ha a nvtelen
pufferben egy vagy tbb teljes sor szerepel, akkor a kurzort tartalmaz sor utn
helyezi el oket.
P A nvtelen puffer tartalmt a kurzor karakter el szrja be. Ha a nvtelen pufferben
egy vagy tbb teljes sor szerepel, akkor a kurzort tartalmaz sor elott helyezi el oket.
Ne felejtsk el, hogy a nvtelen pufferbe explicit mdon csak a y paranccsal pakolhatunk,
viszont minden llomnytrlssel jr parancs eredmnye automatikusan oda kerl,
esetlegesen fellrva az ltalunk ott elhelyezett szveget. Clszeru ezrt a yank paranccsal
elhelyezett informcit minl hamarabb kivenni a pufferbol, vagy pedig a 26 regiszter
valamelyikt hasznlni, amelyeket az automatikus ments nem rint.
Az albbi pldk a p s y parancsok hasznlatt mutatjk be:
xp Kt karakter cserjre alkalmas: trli a kurzor alatti karaktert (a kurzor a kvetkezo
karakterre kerl), majd a nvtelen puffer tartalmt (azaz a frissen trlt karaktert) a
kurzor utn helyezi el. Magyarul megcserltk a kt karaktert, pldul amla helyett
alma kerlt a fjlba.
4y) A kurzortl kezdve ngy mondatot a nvtelen pufferbe msol.
"4p A megelozo harmadik fjlmdosts ltal elvesztett szveget a kurzor mg helyezi.
"zd3w A kurzortl elore 3 szt trltnk, s a z regiszterben helyeztk el.
"zp A z regiszter tartalmt a kurzor mg szrtuk be.
"ty`a A kurzortl az a jelzopontig kijellt rszt a t regiszterbe msolja.
UNIX felhasznli ismeretek
130
Vgs-ragaszts
A jelzopontok s regiszterek hasznlatval szinte hatrtalan lehetosgek nylnak meg
elottnk, fjlok tetszoleges rszeit tudjuk kijellni, s egy paranccsal mozgatni. Nem
emltettk mg a regisztereknek azt a nagy elonyt, hogy az egyszerre megnyitott sszes
fjlbl elrhetoek, azaz akr fjlok kzti "hzd s vidd" (drag-and-drop) muveleteket is meg
tudunk valstani, ha elgg "fapados" mdon is. Albbi pldnk ezt szemllteti.
Tegyk fel, hogy mr megnyitottuk a file1 nevu llomnyt, s ennek egy rszt szeretnnk
thelyezni a file2 llomnyba, mgpedig gy, hogy a kutya s a macska sz elso elofordulsai
kzti rszt tesszk t file2-be, a haziallatok kezdetu sor utn (az albbi parancsok
termszetesen sorfolytonosan gpelhetoek, csak a jobb lthatsg miatt szeparltuk oket
kln sorokba, s kivtelesen kln jelltk az jsor karaktereket):

1G/kutya/RETURN
ma
/macska/RETURN
"bd'a
:efile2RETURN
/haziallatok/RETURN
"bp
:e#RETURN
Az 1G/kutya/RETURN hatsra a kurzor file1 elso sorra ll, onnan megkeresi a kutya szt
tartalmaz sort s rll. Az ma parancs hatsra elhelyez egy jelzopontot ezen a soron.
/macska/RETURN hatsra rll a macska szt tartalmaz sorra. "bd'a hatsra trli a
kurzortl az a jelzopontig tart szvegrszt, de a nvtelen puffer helyett a b regiszterben
helyezi el. :efile2RETURN hatsra megnyitja file2-t is, /haziallatok/RETURN hatsra
rll a haziallatok szt tartalmaz elso sorra, vgl "bp hatsra e sor mg beszrja a b
regiszter tartalmt. :e#RETURN hatsra visszall file1-be, a kitrlt, macska szt
tartalmaz sor utni elso sorra.
Fjlmuveletek s klso shell parancsok
Az albbiakban azokkal a parancsokkal ismerkednk meg, amelyek fjlmuveletek vgzst s
klso parancsok vgrehajtst teszik lehetov a vi all.
Klso parancs vgrehajtsa vi all
Gyakran szksgnk lehet egy-egy Unix parancs kiadsra a vi all, s ilyenkor knyelmetlen
kilpni, majd jraindtani az editort. A

:!unix_parancs
8. fejezet A vi editor
131
formtum utasts hatsra vgrehajtdik unix_parancs, eredmnye a kpernyonkre rdik,
innen egy jsor karakter letsre kerlnk vissza elozo kpernyonkre. Ebben az esetben
semmifle kapcsolat nincs a vi ltal editlt fjlunk s a cmd parancs kztt, gy arra sincs
lehetosgnk, hogy adatokat cserljnk a futtatott paranccsal. Az albbi parancs hatsra azt
nzzk meg, hogy melyik katalgisban tartzkodunk ppen:

:!pwd
Fjlok rsa-olvassa
A vi lehetosget nyjt arra, hogy a szerkesztett llomny tetszoleges pontjra beszrjuk egy
msik fjl tartalmt, illetve a szerkesztett fjl egy rszt msik fjlba rjuk.
:[sorcm]r file Hatsra a kurzor mg, illetve cmmegads esetn az adott sorba
beszrdik file tartalma.
:[cmtartomny]w file Hatsra a szerkesztett fjl cmtartomny ltal definilt rsze
(cmmegads hinyban a teljes fjl) berdik a file llomnyba.
cmtartomny illetve sorcm az ed s sed editoroknl mr trgyalt mdon adhat meg, akr
abszolt, akr relatv sorszmok, akr regulris kifejezssel megadott mintk formjban.
Nhny plda:
:23r text
A szerkesztett flj 23. sora utn beszrja text llomnyt.
:1,.-1w rovid.txt
A szerkesztett fjl elejt (az aktulis elotti sorral bezrlag) kimenti rovid.txt nven.
:1,/^_end/w t1.doc
A fjl elejtol a sor eleji _end mintt tartalmaz sorig kimenti a t1.doc fjlba a szerkesztett
llomnyt.
Puffermuveletek
Mg rdekesebb s hasznosabb lehet, ha Unix parancsok eredmnyt tudjuk valahogyan
bepteni fjlunkba, netn a fjl egyes rszeit Unix parancsokkal, szurokkel tudnnk
manipullni. Erre is megvan a lehetosg, s ez teszi igazn rugalmass s sokoldalv a vi-t.
Szmos vi parancsnl (pontosabban az ex zemmd parancsoknl) lehetosg van a vi belso
puffereinek felhasznlsra fjlmuveletek sorn; ilyenkor a '!' karakter jelzi a vi szmra, hogy
klso parancsot kell vgrehajtani, mely rtelemszeruen r vagy olvas a belso pufferbol.

:[sorcm]r ! parancs
Hatsra a megadott sor utn beszrdik parancs eredmnye.

UNIX felhasznli ismeretek
132
! szvegobjektum parancs
Hatsra az aktulis fjl szvegobjektum ltal kijellt rszn vgrehajtdik parancs, s ennek
eredmnyvel helyettestodik az eredeti szvegobjektum. A c,d s ms szvegmdost vi
parancsoknl megszokott mdon, ha a parancskaraktert (esetnkben a felkiltjelet)
megduplzzuk, az a kurrens sorra fog vonatkozni, azaz vi az aktulis sort fogja helyettesteni
parancs eredmnyvel. (Az elso prblkozsokkor kicsit zavar lehet, hogy amikor a kezdo
felkiltjelet begpeljk, semmi sem trtnik, a kvetkezo karakterek begpelsekor
megjelenik ugyan, de cserbe a szvegobjektum megadsra vonatkoz karaktereket
lthatatlanul kell begpelni.)
Nhny plda a puffermuveletek alkalmazsra:

:r !date
A kurrens sor mg beszrja az aktulis dtumot. Figyeljnk a kvetkezonl a klnbsgre:

!!date
a kurrens sort lecserli az aktulis dtumra.
A kvetkezo parancs ekvivalens a :r /etc/hosts paranccsal, a kurzor mg beszrja a
/etc/hosts fjl tartalmt:

:r !cat /etc/hosts
Albbi pldnk akkor lehet hasznos, ha pldul kezetes szveget szerkesztettnk, s emailben
szeretnnk elkldeni egy olyan levelezoprogrammal, amelyik nem konvertlja automatikusan
kldheto formtumra az kezetes szveget:

:1,G !uuencode txt.uu
A fenti parancs a teljes fjlt helyettesti az uuencode paranccsal kdolt vltozatra.
Az albbi parancs a kurrens bekezdst a fold paranccsal maximum 72 karakter hosszsg
sorokra trdeli:

!}fold -w 72
Komplex keressek s behelyettestsek
A vi alatt (megint csak ex zemmdban) lehetosg van mindazon keressek s
behelyettestsek elvgzsre, amire az ex s az ltalunk trgyalt sed editor kpes. Az ex
zemmdot bevezeto parancskezdo kettosponttl eltekintve a szintaxis megegyezik a sed
editornl tanultakkal, ezrt itt bovebben nem trnk ki r. Az albbi plda a DOS formtum
fjlok CR-LF (kocsivissza-soremels) karaktereit konvertlja unixos LF (soremels)
formtumra:

:1,$s/^M$//
8. fejezet A vi editor
133
(Emlkezznk, a CTRL-M (CR) karaktert bers elott a CTRL-V karakterrel kell
levdennk.) Ugyanezt a parancsot egy picit egyszerubben is berhatjuk, az 1,$ tartomnyra
hasznlhatjuk a '%' rvidtst is:

:%s/^M$//
Rvidtsek s makrk
A vi alatt lehetosg van bizonyos billentyukhz megadott parancsokat vagy ka-
rakterszekvencikat rendelni. E makrk, illetve rvidtsek hasznlata adott krlmnyek
kztt sok felesleges munktl s gpelstol menthet meg minket. Rvidtseket a :ab
(abbreviation) paranccsal definilhatunk, feloldsukat pedig a :una (unabbreviation)
paranccsal rhetjk el. (A parancsok teljes nevt is vgiggpelhetjk, de ekkora
mazochizmust egyik olvasnkrl sem tteleznk fel, kivltkpp, ha a vi sem knyszert erre
minket...:-)
:ab rvidts kifejts
:una rvidts
rvidts jelzi az ltalunk hasznlt kifejezst, kifejts pedig a vi ltal behelyettestett
kifejezst.

:ab ux SVR4 UNIX (TM)
hatsra, valahnyszor a szerkesztett szvegben az ux szt lerjuk, a vi az SVR4 UNIX (TM)
mintt fogja a helyre behelyettesteni. A rvidts feloldst az

:una ux
paranccsal rhetjk el.
Makrkat a :map s :map! parancsokkal definilhatunk. Formtumuk a kvetkezo:
:map m makr_parancs
:map! m makr_parancs
ahol m a szban forg makrhoz rendelt billentyu, makr_parancs pedig maga a tnylegesen
vgrehajtand makrutasts. Az elso formtum csak parancsmdban hasznlhat, azaz a vi
beviteli mdban nem rtelmezi s fejti ki a makrutastst. A msodik megadsi forma esetn
szvegbeviteli mdban is rtelmezodik a makr.
Mivel a vi az bc legtbb betujt lefoglalja parancsoknak, gyakran legalbb akkora
gyessget ignyel a makrhv karakter kivlasztsa, mint a makr megrsa.
makr_parancs rsakor vigyzzunk, hogy betuhelyesen rjuk a vgrehajtand utastsokat,
pp gy, mintha interaktvan gpelnnk be vgrehajtskor; ez tbbek kzt azt jelenti, hogy az
jsor karaktereket is meg kell adni a makrlersban, ha a makrra tett parancsot is jsor
karakterrel kell befejezni. (Ne feledjk a vezrlokaraktereket a CTRL-V karakterrel
levdeni!). Nhny plda, csak tvgygerjesztonek (a betuhelyes megads ignye miatt
kivtelesen minden lettt karaktert jellnk):
UNIX felhasznli ismeretek
134

:map CTRL-V CTRL-X !}fold -s 72 CTRL-V CTRL-M
A fenti makr a ^x karakterhez egy szvegtrdelo makrt kt, ami a kurrens bekezdst a
fold -s 72 paranccsal a megfelelo hosszsg sorokra trdeli. (Mivel egy ex parancsot tettnk
makrra, kell az jsor karakter a vgn.)
:map t 1G!Guuencode tmp.uu
Ezt a makrt a sima t karakterhez ktttk, hatsra a kurzorral a fjl elejre megynk, majd
a vgig kijellt rszt (azaz az egsz fjlt) rengedjk az uuencode parancsra, s a kdolt
vltozattal cserljk le az eredetit. Vegyk szre, hogy ezzel ekvivalens (csak hosszabb) az
albbi makrdefinci:
:map t :%!uuencode tmp.uu CTRL-V CTRL-M
Vgl az albbi makr a ^a karakter hatsra beszr a fjl legelejre egy # Date: kezdetu
sort, a napi dtummal:
:map CTRL-V CTRL-A 1GO# Date: CTRL-V ESC :r !date CTRL-V CTRL-M J
A fenti makr 1G hatsra a fjl elejre ll, az O parancs hatsra j sort szr be a kurzor el
(teht ez lesz az j elso sor), berja a fejrsz szvegt, majd ESC karakterrel lezrja a sort (ekkor
a kurzor az j sor vgn ll). A :r parancs a date eredmnyt a kurzor utni sorba szrja be (a
kurzor ettol mg marad az elso sorban), vgl a J parancs segtsgvel a kt j sort
sszevonjuk.
A vi konfigurlsa
A :set parancs s a vi belso vltozi
A vi (s az ex) testreszabst a vi szerkeszts kzben kiadott :set paranccsal rhetjk el. Ha
paramter nlkl hvjuk meg, mindazokat a belso vltozkat listzza ki, amelyek rtkt az
alaprtelmezstol eltroen lltottuk be. A
:set all
parancs hatsra az sszes llthat belso vltoz nevt s rtkt kirja a vi. A szoksos
konvenci szerint az egyes vltozk nevt nem kell vgigrni, csak addig, ahonnan mr
egyrtelmu, ezen kvl egyedi rvidtsek is vannak, gy pldul a
:set autoindent
parancsot a
:set ai
megadssal is rhatjuk. Ha egy vltozt le akarunk tiltani, akkor a no elotaggal kell megadni,
elozo pldnkban maradva a
:set noautoindent,
8. fejezet A vi editor
135
vagy
:set noai
paranccsal. Hely hinyban nem trnk ki itt az sszes opcira, csak a legfontosabbakat
foglaljuk ssze.
autoindent Beugratott bekezdseket lehet vgrehozni szvegbeviteli mdban, azaz
a kvetkezo sort mindig azon a karakterpozcin kezdi, ahol az elozo
volt. Ha egy j bekezdsben a sor elejrol akarunk indulni, a CTRL-D
karakter hatsra lehet ilyenkor a sor elejre ugrani (ne felejtsk,
szvegbeviteli mdban vagyunk, a szoksos vi parancsokat ilyenkor
nem hasznlhatjuk).
showmode novice Bobeszdu zemmdra lltjk a vi-t, tbbek kzt jelzi a beviteli
mdokat.
number Megsorszmozza a sorokat (csak a kpernyon, nyomtatsban nem
jelentkezik).
report=n Ha egy utastssal n sornl tbbet mdostottunk (msols, trls,
behelyettests), kirja a kpernyo aljn.
showmatch A zrjelprokat mutatja meg a kpernyon, s ha egy zrjelen ll a
kurzor, a '%' karakter hatsra rll a prjra.
tabstop=n A kpernyon az n-edik karakterekre lltja a tabultort.
A vi s ex konfigurcis fjljai
A :set paranccsal trtno belltsok csak az adott interaktv szerkeszts alatt rvnyesek, s
utna elvesznek. Ha lland jelleggel be akarunk lltani valamilyen editor paramtert,
legclszerubben a sajt kiindulsi katalgusunkban elhelyezett .exrc nevu fjlban tehetjk
meg. A msik lehetosg az EXINIT krnyezeti vltoz hasznlata.
Az editorok sszehasonltsa
Az elobbiekben megismerkedtnk hrom a UNIX opercis rendszer alatt hasznlatos editor-
ral. A DOS-os vilgban jratosak valsznuleg a vi-t fogjk legszvesebben hasznlni, mert
azzal teljes kpernyon tudnak dolgozni. j llomny ltrehozsakor ez a legjobb lehetos-
gnk. llomnyok javtsakor azonban mr rdemes elgondolkodni ms lehetosgeken is.
Mert, ha csak egy-egy sorban kell vltoztatnunk, az ed sokkal gyorsabb eszkz. Msrszt, ha
egy llomny nagyon sok sorn, esetleg mindegyiken ugyanazt a vltoztatst kell tennnk,
nyilvn clszeru a sed hasznlata. Ilyen utbbi eset lehet bizonyos helyesrsi hibk javtsa
is.
136
9. FEJEZET


SEGDPROGRAMOK

E fejezetben a leggyakrabban hasznlt UNIX segdprogramokkal (utility) ismerkednk meg,
a kvetkezoben pedig a UNIX shell azon finomsgaival, amelyek lehetov teszik az egyes
programok zkkenomentes egyttmukdst. A cl az, hogy rmutassunk a UNIX rendszerfi-
lozfijra, arra, hogy hogyan rdemes mr meglvo, esetleg igen primitv programok (sot,
programocskk) sszeptsvel meghkkentoen bonyolult s komplex feladatokat ellt
jabb programokat ltrehozni anlkl, hogy akr egyetlen programsort is kelljen rni
assembly-ben, vagy akr C nyelven. A hatkony programozst is segti a UNIX az ilyen meg-
oldsok rvn, hiszen ez vgl is nem ms, mint a mostanban igen divatos prototyping, azaz
amikor a programoz eloszr nagyvonalakban hozza csak ltre az implementland progra-
mot, s amit csak lehet, azt minl magasabb szintu nyelven rja meg (pldul a shell program-
nyelvn). A ksz program elkszlte utn pedig mg mindig rr hatkonysgvizsglatokat
vgezni, s a programrendszer szuk keresztmetszetnek bizonyul rszeket valamilyen hatko-
nyabb nyelvre trni.
Meg kell jegyeznnk, hogy a UNIX parancsok nagy szma miatt nem tudunk teljessgre tre-
kedni, illetve az ismertetett parancsok esetben is csak a legfontosabb opcikra szortkozunk.
(A minimlban az rintett parancsok rszletesebb lersa is megtallhat.) Remnynk szerint
azonban elg teljes a bemutatand kszlet ahhoz, hogy a feladatok jelentos rsznek elvgz-
st szolglja, msrszt a pldink segtik majd azokat, akik j parancsokat keresnek ki doku-
mentciikbl, s prblgatjk azokat.
9. fejezet Segdprogramok
137
A visszatrsi rtk
Mielott a UNIX parancsokat rszleteznnk, elorebocstunk egy j fogalmat, az exit sttus
1

fogalmt, ami a parancsok vgrehajtsnak sikeressgrol informl. Nagyon sok UNIX pa-
rancs, de nem mindegyik, lltja ezt az rtket, amit a shell-ben a ? vltoz $? alak lekrde-
zsvel tudhatunk meg. Ott ahol fontos, a parancsok ismertetsekor lerjuk az exit vltoz be-
lltst, ahol nem rjuk, ott ltalnos szably, hogy a sikeresen lefutott parancs 0-ra lltja,
ellenkezo esetben egy ettol eltro rtkre. Vannak parancsok, amik nem lltjk ezt a vltozt,
egyszeruen rintetlenl hagyjk. Egyes szurok esetben tbb informcit is kapunk mint az
egyszeru sikeres befejezs. A rendszer interaktv hasznlatnl ugyan nem sok hasznt
vesszk ennek, de a kvetkezo fejezetben megismerkednk a shell-programozssal, s akkor
majd rtkelni fogjuk ezt a rendszerszolgltatst.
Szurok
A fenti mukdsi mechanizmus egyik legfontosabb eszkze a pipe (cso, csovezetk), amely-
nek rvn az egyes programok lncba kapcsolhatak. Nem vletlen ezrt, hogy a UNIX prog-
ramok elspro tbbsge a pipe-ban val mukdsre felkszlve a standard input s output
csatornk hasznlatt tmogatja. Az ilyen programokat a szemlletes UNIX zsargon szurok-
nek nevezi. A tovbbiakban a UNIX utility-k ismertetse sorn tlnyomrszt ilyen szurokrol
lesz sz. DOS-ban jratos olvasinkat emlkeztetjk, hogy szurok ott is vannak ugyan ( find,
more, sort ), de lnyegesen kisebb szmban, s kisebb szabadsggal a parancsargumentumok
meghatrozsa tern.
Nzznk nhny szurot, a leggyakrabban elofordul feladatok tkrben!
llomnyok rendezse
llomnyok rendezsre a standard Unixban egyetlen, mde igen eroteljes parancs ll
rendelkezsre, a sort. Mukdse kitunoen alkalmas a szabvnyos Unix szursi mechanizmus
ismertetsre is. Alapveto szintaktikus formja a kvetkezo (a rszletes opcilerst lsd a
Minimanul c. fejezetben):

sort [opcik] [bemenet]

1
Az exit status fogalmnak elnevezsre nem honosodott meg stabil kifejezs. A knyvben mg hasznlni fogjuk
az exit vltoz s a visszaadott rtk kifejezseket is.
UNIX felhasznli ismeretek
138
Ha bemenet nincs megadva, a standard inputot olvassa s rendezi (ezt explicit mdon is
megadhatjuk, a - karakterrel). A kimenet alaprtelmezs szerint a standard output, a
-o kimenet opcival lehet egy fjlba irnytani a rendezs eredmnyt. (rdemes vigyznunk
arra, hogy ha a -o opci megadsa nlkl, a sort bemenetnek s kimenetnek ugyanaz a fjlt
adjuk meg, akkor a rendezs tnkreteszi azt; ilyen esetben a -o opci hasznlata ktelezo.)
Alaprtelmezsben a sort parancs soronknt, ASCII karakterrtk szerint, nvekvo
sorrendben, a teljes beolvasott sorokat sszehasonltva rendezi a bemenetet. A -r opci
hatsra a rendezs sorrendje fordthat meg, a -n opci hatsra pedig nem ASCII
karakterrtkknt, hanem szmknt hasonltja ssze a beolvasott sorokat. (Nemcsak egsz,
hanem elojeles tizedespontos szmokat is tud a sort rendezni.) Pldul a
ps | sort -n
parancs hatsra a fut folyamatokat a processzazonostk szerintve listzhatjuk ki.
Karakter szerinti rendezsnl fontos lehet a -d opci, ennek alkalmazsval gynevezett
sztri rendezst hajtathatunk vgre, ekkor csak a betuk, szmjegyek, valamint a szkz s
tabultor karakterek jtszanak a rendezsben. A -f opci hatsra a kis- s nagybetus
karaktereket egyformn kezeli a sort, azaz esetrzketlen rendezst rhetnk el. Meglepoen
hasznos lehet a -M opci, ennek hatsra az sszehasonltott mezo elso hrom karaktert
angol hnapnevek rvidtseknt kezeli a sort, s eszerint rendez (rvnytelen < JAN < FEB
< ... < DEC sorrendben).
Eddig nem emltettk a sort egyik legfontosabb ernyt, miszerint nemcsak a teljes sort
sszehasonltva rendezhetjk a bemenetet, hanem azon bell egyes mezoket rendezsi
kulcsknt megadva, kulcsonknt, mghozz tbb kulcs szerint is. Alaprtelmezs szerint a
bemenet mezoi a szoksos shell rtelmezs szerinti nll, teht szkz s tabultor
karakterekkel megadott szavak, de a -tc opcival tetszoleges ms mezohatrol karaktert is
kijellhetnk.
A rendezsi kulcsokat a +m[.n] -p[.q] szintaxissal adhatjuk meg; a + jellel kezdodo opci
mondja meg, hogy a rendezsi kulcs hol kezdodik, a - karakterrel megadott opci pedig a
mezo vgt. m.n az m-edik mezo n-edik karaktert adja meg (a mezoket s karaktereket a
sort 0-tl szmozza!). A mezon belli karaktermegads elhagyhat, ilyenkor rtelemszeruen
a kulcskezdo mezo elso, illetve a kulcszr mezo utols karaktert jelenti. Hogy kicsit
vilgosabb tegyk:

sort -n -t: +2 -3 /etc/passwd
hatsra a passwd fjl tartalmt a harmadik mezo numerikus rtke szerint fogja rendezni, a
mezoket pedig a ':' karakter fogja hatrolni. Ms szval a felhasznli azonostk rtke szerint
rendezve ratjuk ki a fjlt. Ne felejtsk, hogy a sort parancs a mezoket nulltl szmozza, fo a
vltozatossg alapon...

sort -n -t: +3 -4 -n +2 -3 -o /etc/passwd /etc/passwd
hatsra eloszr a password fjl negyedik mezoje (felhasznli csoportazonost) alapjn
rendez, ha kt sor ennek alapjn azonos, akkor msodlagos kulcsknt a harmadik mezo, azaz
9. fejezet Segdprogramok
139
a felhasznli azonost alapjn rendez - mindkt mezo tartalmt numerikus rtkknt
kezelve. A rendezett fjlt visszarja a /etc/passwd fjlba. Kvetkezo pldnkban a
sort -n +2.4 my_data
parancs hatsra a my_data nevu fjlt rendezzk, a rendezsi kulcs pedig a harmadik mezo
tdik karaktertol a sor vgig tart. Vgl utols pldnkban olyan adatokat rendeznk
sorba, ahol a sorok elejn az angol megads szerinti dtumokat (pl. Aug 23, 1995) vrunk:
sort -n +2 -3 -M +0 -1 -n +1 -2
Vgl mg kt fontos opcit emltnk meg: a -m hatsra kt elozetesen mr rendezett fjlt
fsl ssze egybe, a -u pedig a rendezsnl azonosnak tallt sorokbl csak egyet r a
kimenetre. (Utbbi esetben rdemes vigyzni, ha ugyanis nem a teljes sor szerint rendeznk,
akkor a rendezsi kulcs szerinti azonossg nem jelenti azt, hogy a kt sor azonos is!)
Mintakeress llomnyokban
Az elozoek sorn emltettk mr a grep programot, amelyik arra szolgl, hogy egy adott minta elo-
fordulsait keresse a paramterknt megadott llomnyokban.
$ cat semmi
*****
Ez semmi
***** *****
alma
korte
repa
retek
alma
mogyoro
alma
barack
korte
mogyoro
narancs
$ grep a semmi
alma
repa
alma
alma
barack
narancs
A minta, amivel kivlasztottuk a kvnt sorokat egy regulris kifejezs, jelenleg az a betu.
Termszetesen dolgozhat a grep mint egy pipeline tagja is.
UNIX felhasznli ismeretek
140

$ ls -l | grep '^d'
A fenti parancs az ls -l parancs kimenetrol kivlasztja a d betuvel kezdodo sorokat, azaz a
katalgusokat, s csak azokat engedi tovbb. Sokszor hasznlhat gyes eszkz a grep akkor
is, ha az llomnyaink kzt keresnk egyet a tartalma alapjn.
$ grep '^main' *.c
A fenti utastssor a .c kiterjesztsu llomnyokbl az(oka)t a sorokat fogja kilistzni,
amely(ek) a main kulcsszval kezdodnek. A pldkbl lthat, hogy a mintt idonknt idzo-
jelbe tettk, idonknt nem. Az idzojelek hasznlata akkor clszeru, ha a minta a shell ltal is
rtelmezett specilis karaktert (pl. *?) is tartalmaz. A grep parancs nem tud minden regulris
kifejezst, mint mintt elfogadni, ezrt hasznos ismernnk az egrep parancsot is, ahol logikai
kapcsolattal sszefuzhetjk a mintkat, ezt jelli a '|' karakter, tehetnk a minta utn '+' jelet,
ha a minta egy vagy tbbszri elofordulst keressk, illetve '?' jelet, ha a minta legfeljebb
egyszeri elofordulst figyeljk.
$ egrep '^main|^\/\*+Ez a foprogram!? \*+\/' *.c
A fenti minta beszdesen gy hangzik, hogy keressk azt a .c kiterjesztsu llomnyt, amely-
ben vagy a main fggvny van, vagy egy komment sorban, esetleg csillagok kz zrva, az
"Ez a foprogram" szveget tallja, gy, hogy a vgn vagy van, vagy nincs felkiltjel.
Az egrep-nl lehetosgnk van arra, hogy a mintt egy llomnybl vegyk. Az ember nyil-
vn akkor hasznlja ezt a lehetosget, ha bonyolult mintt kell gyakran alkalmazni.
$ cat pattern
[A-Z].*[\.!\?]$
$ egrep -f pattern szoveg
A pldnkban a szoveg nevu llomnybl azokat a sorokat vlasztjuk ki, amelyek (nagy val-
sznusggel, mert hisz' tulajdonnvvel is kezdodhet egy sor) legalbb egy teljes mondatot tar-
talmaznak (teht nagybetuvel kezdodnek s mondatzr rsjelre vgzodnek).
Az fgrep (fixed grep) parancs esetben a minta csak karakterlnc lehet (nem regulris
kifejezs!!!)
A grep csald tagjai a visszatrsi rtket 0-ra lltjk, ha nem talltak illeszkedst, 1-re, ha
igen, s 2-re, ha akadlyoztatva voltak a parancs vgrehajtsban.
Mg a grep parancs sorokat vlaszt ki az llomnybl, addig a cut paranccsal oszlopokat le-
het kiszabni belole. Az oszlopokat ktflekpp rtelmezi a parancs. Az elso, egyszerubb
esetben, karakterpozci vagy karakterpozcikkal hatrolt mezo formjban adjuk meg a ki-
vgand oszlopot, mint a kvetkezo pldban:
$cut -c1,3-5 semmi
****
E se
****
ama
krte
rpa
rtek
9. fejezet Segdprogramok
141
ama
mgyo
ama
brac
krte
mgyo
nran
A msik lehetosgnk, hogyha nem a karakterpozci szerint, hanem mezoelvlaszt karakte-
rek pozcija szerint meghatrozott oszlopokat, ebben az rtelemben mezoket vlasztunk ki a
sorokbl. A mezoelvlaszt karaktert a -d opci utn rjuk.
$cut -f4,5 -d: /etc/passwd
A fenti pldban a /etc/passwd llomnybl a csoportazonostt s a teljes nevet tartalmaz
mezoket vlasztottuk ki.
Vigyzzunk arra, hogy a cut nem tud megbrkzni a hagyomnyos unixos szelvlaszts (egy
vagy tbb szkz vagy tabultor) fogalmval, mivel egy s csakis egy elvlaszt karakter
hatrolhatja el a feldolgozand mezoket, s ha tbb egyms utni szkzt tall, minden egyes
szkz utn egy res mezot ttelez fel. Pldul ha mintafajlunk az albbi:
abc 123 456
def 23 456
ghi 3 456
akkor a cut -d -f 2 <mintafajl parancs hatsra nem az sztnsen vrt
123
23
3
lesz a kapott eredmny, hanem

123
miutn az egynl tbb szkz res mezoket jelentett a cut szmra.
A uniq program arra a clra szolgl, hogy az egyms utn kvetkezo azonos sorokat kiszurje
az inputbl, s minden sort csak egyszer rjon a kimenetre. E tulajdonsga miatt gyakran szok-
tk a sort, illetve a grep elott vagy utn, e kt program bemenetnek vagy kimenetnek szu-
rsre hasznlni.

$ sort semmi | uniq -c
1 *****
1 ***** *****
1 Ez semmi
3 alma
1 barack
2 korte
2 mogyoro
1 narancs
1 repa
1 retek
$
UNIX felhasznli ismeretek
142
Tovbb is ragozhatjuk a krdst, ha meg akarjuk nzni, hogy melyik sor fordult elo a leg-
gyakrabban.

$ sort semmi | uniq -c| sort -n | tail -1
3 alma
$
A pldban jdonsgknt megjelent a tail parancs, amely az llomny vgbol ad vissza soro-
kat.
A tail paranccsal nagymretu llomnyokban tudunk mozogni, gy elsosorban arra hasznl-
juk, hogy egy hossz llomny vgre pozcionljunk, s onnan rassunk ki egy darabot. Az
albbi pldban a /etc/passwd llomny utols 50 karaktert ratjuk ki:

$ tail -50c /etc/passwd
pix
abraham:x:108:1:abraham:/usr/abraham:/bin/ksh
$
Bizonyos Unix implementcikban a tail parancs csak 20 kB mlysgig kpes visszamenni a
listzott fjlban. Ha ennl tbbet szeretnnk kilistzni (pldul logfjlokat kurttannk, de nem
elg a 20 kB mret) akkor clszeru a fjl elejtol elindulni, s a head paranccsal pozicionlni az
ltalunk kvnt rszig.
llomnyok sszehasonltsa
Klnbzo szempontbl hasonltanak ssze llomnyokat a comm, a cmp s a diff paran-
csok.
A comm hrom oszlopban rja ki kt llomny sszehasonltsnak eredmnyt. Az elso osz-
lopban csak azok a sorok szerepelnek, amelyek csak az elso, a msodikban azok amelyek
csak a msodik, vgl a harmadikban azok amelyek mindkt llomnyban elofordulnak. Ha
az egyik llomnynv helyn jelet runk, akkor a standard inputrl vrja az egyik sszeha-
sonltand tartalmat. gy interaktvan hasznlhat arra is, hogy megnzzk bizonyos sorok
megltt egy llomnyban.
Egyik fjlunk legyen a pr oldallal odbb definilt semmi, s valami egy msik llomny.
$ cat valami
*****
Ez valami
***** *****
alma
korte
repa
retek
mogyoro
narancs
9. fejezet Segdprogramok
143
Ha a comm paranccsal sszehasonltjuk semmit s valamit az eredmny csak egy kzs sort fog
mutatni, az elso, csupa csillagbl ll sort. rtelmesen csak akkor tud a comm dolgozni, ha az
llomnyok sorai bc-be rendezettek.
A cmp parancs kt llomny sszehasonltsra szolgl, itt is szerepelhet az egyik llomny
helyn - karakter, a standard inputot jellve. Alaprtelmezs szerint azonos llomnyok ese-
tn nem r ki semmit, eltrs esetn jelzi az eltrs sor- s bjtszmt. Felismeri, ha az egyik
llomny a msik kezdeti rsze. Nagy elonye, hogy a diff paranccsal ellenttben binris
fjlok sszehasonltsra is alkalmas.
A diff program kilistzza a kt sszehasonltott llomny eltro rszeit, ----- karakterekkel je-
llve az egyes llomnyokban eltro rszeket. A diff igazi hasznlhatsga azonban abban rej-
lik, hogy nemcsak azt mondja meg, hogy a kt llomny hol tr el egymstl, hanem azt is, hogy
hogyan lehet az egyikbol a msikat rekonstrulni. A produklt kimenetben olyan sorok is szere-
pelnek, amelyek az ed editor szmra rtelmezheto parancsok, s azt mondjk meg, hogy mely
ed parancsokkal lehet az egyik llomnyt a msikk konvertlni.
Az ed parancssorok utn egymstl vonallal elvlasztva jnnek az egyik illetve a msik llomny-
ban rintett sorok. A -e opci hatsra csak a megfelelo ed parancssorok generldnak, gy lehe-
tosg nylik egyfajta primitv verzikvetsi rendszer ltrehozsra. Vegyk pldnak azt az
esetet, amikor egy llomnyt mdostva ltrehozunk egy msik llomnyt, de ahelyett, hogy
mindkettot elmentennk, csak az elsot, illetve a kt vltozat klnbsgt mentjk el.
Van mg kt llomnyunk a vers1 s vers2.
$ cat vers1
Elaludtak a fak
a levelek libegnek
az almok tudnak varni
az almok nem sietnek
$ cat vers2
Elaludtak a fak
a levelek libegnek
az almok tudnak varni
az almok nem sietnek
Tudjal te is almokra varni,
ahogy ok tudnak varni rad
Az eber csak igy nem csalja meg magat.
A ketto klnbsge:

$ diff vers1 vers2
4a5,7
> Tudjal te is almokra varni,
> ahogy ok tudnak varni rad
> Az eber csak igy nem csalja meg magat.
$
Ksztsk el a delta javtllomnyt.

$ diff -e vers1 vers2 | tee delta
4a
Tudjal te is almokra varni,
ahogy ok tudnak varni rad
UNIX felhasznli ismeretek
144
Az eber csak igy nem csalja meg magat.
.
$
A '4a5,7' ed parancs azt jelzi, hogy az eredeti fjl negyedik sora utn kell beszrni a msik
fjl 57 sorait.
Ha most az albbi parancssorozatot gpeljk be, akkor az eredeti szveg s a klnbsg alap-
jn visszakaphatjuk a frissebb vltozatot:

$ (cat delta; echo '1,$p') | ed vers1
Elaludtak a fak
a levelek libegnek
az almok tudnak varni
az almok nem sietnek
Tudjal te is almokra varni,
ahogy ok tudnak varni rad
Az eber csak igy nem csalja meg magat.
$
Mielott tovbbmennnk, tegynk kt megjegyzst az elobbi parancssorhoz. A pipe-olt utast-
sok temezst nem a shell, hanem a kernel vgzi. Az echo parancs argumentuma itt az ed
editor munkjnak befejezst vezrli, az 1,$ az elsotol az utols sorig jelli ki a tartomnyt,
a p pedig a print parancs.
A pldban felhasznltuk a tee parancsot is. Ez a parancs megcsapolja az outputot, gy a
termszetes outputon kvl keletkezik a delta llomny ugyanazzal a tartalommal, mint amit a
kpernyon ltunk.
Ugyanezen az elven mukdik egybknt a UNIX SCCS (Source Code Control System) for-
rskveto rendszere is.
A cmp s a diff egyarnt lltjk a kimeneti vltozk rtkt, mgpedig egysgesen az albbi
szempont szerint: 0-ra, ha a kt llomny egyezik, 1-re ha klnbznek, s 2-re, ha akadly
van a parancs vgrehajtsban.
Nem letbevgan fontos parancs, inkbb csak a UNIX-rl alkotott kp kisznezsre emlt-
jk meg a join parancsot, ami kt llomny soraibl fuzi ssze az outputjt, gy, hogy az
sszefuzs kulcsul vlasztott mezok alapjn az azonos tartalm mezoket egyesti. A helyes
mukds felttele, hogy a kulcsnak vlasztott mezo alapjn az llomny lexikografikusan ren-
dezett legyen. Megint csak pldval segtjk a megrtst:

$sort -n -t: +3 -4 /etc/passwd >pswd
$sort -n -t: +2 -3 /etc/group >grp
$join -t: -j1 4 -j2 3 -o1.1 1.4 2.1 pswd grp
Az elso kt sor rtelme, hogy rendezze a nevezett llomnyok sorait, az elso esetben a harma-
dik s negyedik, a msodik esetben a msodik s harmadik mezo alapjn. (A mezohatroz
karakter a kettospont.) A harmadik sor azt mondja, hogy mg mindig a kettospont mezoelv-
lasztval dolgozva, az elsoknt megadott llomny negyedik s a msodikknt megadott llo-
mny harmadik mezeje szerint ( -j1 4 -j2 3) prostva a sorokat az output sorait az elso llo-
mny elso s negyedik valamint a msodik llomny elso mezeibol tegye ssze ( -o1.1 1.4
9. fejezet Segdprogramok
145
2.1). Egyszerubben szlva, az output sorai rendre a bejelentkezsi nvbol, a csoport azonos-
tbl s a csoport nvbol fognak llni.
llomnylistz (dump) parancsok
Az albbiakban ismertetendo UNIX parancsok kzs vonsa az, hogy llomnyok tartalm-
nak klnbzo szempontok alapjn trtno megjelentsre szolglnak elsosorban. Az od
(octal dump), a dd (decimal vagy disk dump) egyarnt erre a clra jtt ltre. Mivel azonban
krhetjk a listzst akr karakteres formban is, ezrt elkvethetjk azt a hibt, hogy egy bi-
nris llomnyt akarunk karakteresen a kpernyore kldeni, ami zurzavart okozhat. (Hasonl-
an, ahhoz, mintha a cat paranccsal akarnnk egy binris llomnyt elolvasni.) Amikor egy l-
lomny tpusrl nem tudunk biztosat, az ilyen galibkat megelozhetjk, a mr emltett file
parancs hasznlatval.
$ file semmi
semmi: ascii text
$
Az od parancs, azzal, hogy megfelelo opci vlasztssal a nem nyomtathat karakterek kdja-
it is megjelenti, alkalmas aprbb trkkkre. gy pldul kiolvashatjuk vele a katalgust, illet-
ve a katalgusbl azt, ha egy hiba folytn egy llomnynvbe nem lthat karakter kevere-
dett.
$ od -c semmi
0000000 * * * * * \n E z s e m m i \n *
0000020 * * * * * * * * * \n a l m a \n
0000040 k o r t e \n r e p a \n r e t e k
0000060 \n a l m a \n m o g y o r o \n a l
0000100 m a \n b a r a c k \n k o r t e \n
0000120 m o g y o r o \n n a r a n c s \n
0000140
$
A dd parancs szintaktikjra kln fel kell hvni a figyelmet, ugyanis ellenttben a legtbb
paranccsal, itt az opcikat az opci = rtk formban adjuk meg, gy mint egy shell-vltoz
rtkadsnl.
A dd parancs elsosorban klnfle konverzis opcii miatt hasznlatos. Pldul a kvetkezo
parancs a kisbetuket alaktja naggy.
$dd if=valami conv=ucase
****
EZ VALAMI
***** *****
ALMA
KORTE
REPA
RETEK
MOGYORO
UNIX felhasznli ismeretek
146
NARANCS
$
Az albbi parancs a beolvasott llomnyt fordtott bjtsorrenddel rja ki (figyeljk meg, hogy
a dd a UNIX llomnykoncepcijnak megfeleloen az jsor karaktert is ugyangy kezeli,
mint a kznsges karaktereket, teht azok is rsztvesznek a bjtcserben):
$ dd if=semmi conv=swab of=semmi1; pr -t -m semmi semmi1
0+1 records in
0+1 records out
***** ****
Ez semmi *zEs meim*
***** ***** ***** ****a
alma ml
korte aoktr
repa eerapr
retek tekea
alma ml
mogyoro aomygro
alma olaamb
barack raca
korte koktr
mogyoro eomygro
narancs oanarcn
s
$
Az eredmnyt kldhettk volna kzvetlenl a kpernyore is, ha nem hatrozunk meg output
fjlt. Ezt azrt nem tettk, mert gy a pr parancs -m opcijt hasznlva az eredeti s a ford-
tott bjtsorrendu llomnyt egyszerre tudtuk megjelenteni.
Karakterkonverzi
A karakterkonverzis programok kzl a leghasznosabb s legismertebb a tr (translate). Ez a
parancs a standard bemenetrol a standard kimenetre dolgozik, mikzben az input egyes karakte-
reit kicserli. A cserhez kt tblzatot hasznl, amelyeket string (karakterlnc) formban a
parancs argumentumaiknt kell megadni. A csernek az a stratgija, hogyha a beolvasott sz-
vegben tall egy olyan karaktert, amelyik a sorrendben elsoknt megadott stringben tallhat,
akkor azt a msodik string azonos pozcij karaktervel helyettesti.
Az albbi parancs minden a betut x, b betut y s c betut z beture cserl:

tr abc xyz < file1
Az albbi parancs a vers1-ben szereplo szavakat rja ki gy, hogy minden sz kln-kln
sorba kerljn:

$ tr -cs "[A-Z][a-z]" "[\012*]" <vers1
Elaludtak
a
9. fejezet Segdprogramok
147
fak
a
levelek
libegnek
az
almok
tudnak
varni
az
almok
nem
sietnek
$
A plda megrtshez ismernnk kell a tr parancs kt felhasznlt opcijt. A -c opci
hatsra a cserre sznt karakterek helyett az ASCII karakterkszlet minden olyan karaktert
rtelmezi, amit nem soroltunk fel, s azokat cserli ki a msodik karakterlnc megfelelo
elemre. Teht ebben az esetben mindent ami nem kis- vagy nagybetu, a pldban szkz s
sorvge fordul elo, kicserli a \012 karakterre, azaz a sorvgre. A -s opci hatsra a csere
miatt egyms mell kerlt tbb azonos karakter helyett csak egyet r ki. Teht ebben az
esetben, a forrs szvegben lvo szkz s sorvge pros miatt keletkezo kt sorvgbol
csinl egyet. A cserre sznt karakterlncban a csillag karakter arra szolgl, hogy a megelozo
karaktert, itt a sorvgt, pont annyi darabb sokszorozza, ahny karakter a cserre sznt
karakterlncban van, gy a parancs minden kicserlendo karakterhez tall prt.
Mg egyszer felhvjuk a figyelmet arra, hogy a tr a standard ki- s bemenetet hasznlja,
fjlparamtert nem fogad el.
llomnykeress
Gyakran elofordul feladat, hogy bizonyos jellemzoik alapjn llomnyokat kell elokeresni
az llomnyrendszerbol. Erre a clra a find program szolgl. Hvsi mdja a kvetkezo:

find pathname_list expr
A find parancs rekurzv mdon vgighalad a pathname_list-tel megadott elrsi nevektol
kezdve az llomnyrendszeren, megkeresi azokat az llomnyokat, amelyekre igaz a param-
terknt megadott expr logikai felttelsorozat. Az expr-ben tbb felttelt sorolhatunk fel,
amelyek egymssal logikai AND kapcsolatban vannak, ha mskpp nem rendelkeznk. A
felttelek nagyobb rsze egy-egy llomnyjellemzore krdez, mint a mret (-size) vagy a kor
(-newer)..., de szmtalan ms felttel ll rendelkezsre (lsd minimanul). Amennyiben a fel-
ttelek kzt a -print felttel is szerepel, akkor a standard outputra rja a felttelekhez illeszke-
donek tallt llomnyok nevt, illetve, ha a -exec cmd felttel is szerepel, akkor vgrehajtja
rajtuk a cmd UNIX parancsot.
UNIX felhasznli ismeretek
148
Az albbi parancs az aktulis katalgusban lvo llomnyokat listzza ki (magt a katalgust
s a szlo katalgust is):

$ find . -print
.
./.profile
./.lastlogin
./.sh_history
./valami
./vers1
./nu
./nme
./semmi
./akarmi
./vers2
./ascii.c
./logsh
./temp
./semmi1
./delta
$
Az albbi parancs trli mindazokat az a.out nevu (vgrehajthat binris) llomnyokat, illetve
mindazokat a .o kiterjesztsu (object) llomnyokat amelyekhez egy htnl rgebben nem frt
hozz senki (ne feledkezznk meg a zrjelek levdsrol):

$ find /\( -name a.out -o -name "*.o" \) -atime +7 -exec rm {} \;
$
Az -exec opci hatsra vgrehajtott trlsnl a megtallt llomny nevre a kapcsos zrjel-
prral hivatkozhatunk. A pontosvesszot azrt kell kirnunk, mert az exec opcival megadott
cmd parancs (pldnkban az rm parancs) vgt jelzi, s elvileg megadhatunk utna tovbbi
opcikat. (Vigyzzunk arra is, hogy a jobboldali kapcsos zrjel s a backslash karakter
kztt szkznek kell lennie!)
Adatbeviteli parancsok
Mint mr arrl esett sz, egy ltezo shell vltoznak egyszeru rtkadssal lehet rtket adni.
Egy msik lehetosgnk az rtkadsra a read parancs, ami a standard inputrl olvas be egy
sort, s a paramterben felsorolt vltozknak adja a kapott rtket.

$ read a b c; echo $a; echo $b; echo $c
Kezdetben volt az aranykor
Kezdetben
volt
9. fejezet Segdprogramok
149
az aranykor
$
Lthat, hogy az elso (a) vltozba az elso hatrol szkzig, a msodik (b) vltozba a m-
sodik szkzig pakolja az rtket, s ha elfogynak a vltozk, akkor az utols (c) vltozba az
input sor maradkt teszi.
Egyes UNIX applikcikban ltezik egy line parancs is, ami sorvgig veszi a standard input-
rl jvo karaktereket, s visszarja oket a standard kimenetre; ezt is felhasznlhatjuk arra,
hogy a beolvasott sort vltozba tegyk.
Aritmetikai kifejezseket kezelo parancsok
A UNIX szemlletmdja a legtbbszr nem tmogatja az aritmetikai kifejezsek hasznlatt.
Ez csak ritkn okoz problmt a hasznlatban, leggyakrabban a kvetkezo fejezetben ismerte-
tendo shellscript-ek rsakor van rjuk szksg. Kt fontos olyan parancs van, ami elfogad
idegen aritmetikt: a test s az expr. A test parancs arra szolgl, hogy egy objektumrl
(fjlrl vagy karaktersorozatrl) megtudjuk, hogy egy adott tulajdonsggal br-e. gy pldul
tesztelhetnk egy llomnyt aszerint, hogy ltezik-e, vgrehajthat-e, stb. Hasonlkppen
vizsglhatjuk egy karaktersorozat tulajdonsgait (be van-e lltva, mekkora a hossza, azonos-
e egy msikkal, stb.) (Teljesebb opcilersok megint csak a Minimanulban szerepelnek.)

UNIX felhasznli ismeretek
150
$ test -w /etc/group; echo $?
1
$ a=2; test $a -eq 2; echo $?
0
$ test "$a" = "02"; echo $?
1
$
A fenti plda, alapveto butuskasga ellenre megmutatja a test parancs hrom arct. Az elso
esetben a /etc/group llomnyrl szeretnnk megtudni, hogy ltezik-e s rhat-e,
preczebben, rhat-e a mi szmunkra, mivel a parancs a hv szempontjbl vizsglja az en-
gedlyeket. A vlasz nem, ezt mutatja az exit vltoz ($?) nulltl klnbzo rtke. A
msodik esetben, miutn rtket adtunk az a vltoznak, azt teszteltk, hogy annak rtke
azonos-e kettovel. Mivel a test parancs -eq opcijt hasznltuk, az egybknt
alaprtelmezsben stringknt kezelt vltozt a Unix numerikus rtkknt kezelte, s numerikus
sszehasonltst vgzett. Harmadik pldnkban viszont az = jel azt jelezte a Unix shell
szmra, hogy stringsszehasonltst kell vgrehajtania, s gy a vltozt stringknt kezelve
hasonltotta a '02' karakterekhez, amelyek gy valban nem egyeznek egymssal.
Az expr parancs hrom, egymstl elgg eltro feladatra alkalmazhat. Az elso, s
leggyakrabban hasznlt funkcija, hogy az tadott argumentumlistt logikai vagy (egsz) arit-
metikai kifejezsknt rtkeli ki. A legegyszerubb plda ennek szemlltetsre taln az alb-
bi:

$ expr 16 + 3
19
$ a=5; expr $a + 1
6
$
Az sszeadson kvl termszetesen ismeri a kivons, (-) a szorzs, (\*) az oszts (/) s a ma-
radk kpzs (%) muveleteket. rdemes felfigyelni a parancs szintaktikjra, mert aprsg-
bl eredo nagy bosszsgtl vhatjuk meg magunkat. Rszint vegyk szre, hogy a kifejezs
belsejben lvo muveleti jelet szkzk veszik krl, msrszt a shell szmra rtelmezheto
karaktert mindig el kell fednnk a shell elol egy backslash karakterrel.
sszekapcsolhatunk kifejezseket logikai S (&) s VAGY (|) jelekkel, s hasznlhatunk
relcis opertorokat is.

$ a=1; expr $a >= 0
0
$
Az expr parancs kvetkezo kt funkcija stringek illeszkedsnek vizsglatra szolgl. Az
expr var : pattern
megads esetn az expr a var argumentumra prblja meg illeszteni a pattern argumentumot,
mint mintt, s az illeszkedo karakterek szmt fogja kirni. A mintaknt hasznlt msodik
argumentum tetszoleges regulris kifejezs lehet. Nzzk meg ezt kt pldn!
9. fejezet Segdprogramok
151
Az elso esetben azt vizsgljuk, hogy a munkakatalgusunk nevre hogyan illeszkedik az
alapkatalgusunk neve, mint minta:

$ pwd; echo $HOME
/usr/users /usr/users/demo
$ expr `pwd` : $HOME
0
$
Az expr 0 rtket adott vissza, mert maga a minta hosszabb, mint a szveg. Ha viszont
fordtva, a munkakatalgusunk illeszkedst vizsgljuk az alapkatalgusra...

$ expr $HOME : `pwd`
10
$
Ugyanennek a stringillesztses funkcinak egy mdostsa, hogy nem az illeszkedo
karakterek szmt ratjuk ki, hanem az illeszkedo stringrszletet. Ehhez az kell, hogy a
pattern mintban a kiiratand szvegrszt backslash karakterrel levdett kerek zrjelek kz
rjuk. Az albbi pldban a basename parancs mukdst modellezzk: a megadott fjlnvrol
leszedjk az esetleges katalgusneveket, s csak a fjlnevet hagyjuk meg:

$ expr /usr/archive/src12.c : '.*/\(.*\)'
src12.c
$
(E megolds a regulris kifejezsek illesztsnek azon sajtossgt hasznlja ki, hogy az
illeszto algoritmus (balrl jobbra haladva) mindig a leheto leghosszabb mintt prblja az
adott stringre illeszteni. Ennek pedig az a kvetkezmnye, hogy a fenti pldnkban az illeszto
algoritmus a '.*/' mintt a fjlnvben szereplo legjobboldalibb '/' karakterig hzza ki, a
zrjelek kztt megadott '.*' rovsra - jelen esetben pedig ppen ez az, amit akartunk.)
Kommunikcis parancsok
A UNIX mr korai megjelensekor is tmogatta, hogy klnbzo terminlokon, esetleg nem
is egyidejuleg dolgoz felhasznlk egymssal elektronikusan kapcsolatot tudjanak teremte-
ni. Egyik terminlrl a msikra rhatunk interaktivan a write paranccsal.

$write janos
Hogy allsz a munkaval?

Majdnem kesz vagyok

Tovabbi jo munkat! Szia Jutka

^d
$
Kzben Jnos kpernyojn ez lthat:

UNIX felhasznli ismeretek
152
$ls
file1
Message from lj tty2
Hogy allsz a munkaval?
Majdnem kesz vagyok

Tovabbi jo munkat! Szia Jutka
EOT
file2
file3
Mint ltjuk, a hv a hvottat a login nevvel, vagy a terminljnak azonostjval cmzi meg,
s utna azonnal rhatja az zeneteit, addig amg egy interupttal, vagy fjl-vge jellel be nem
fejezi. A hvottnl a terminl egy esetleges csengetssel s a Message from... zenettel jelent-
kezik s az elso zenet utn egy write paranccsal vlaszolni lehet. Termszetesen az zenetek
csak a kpernyon jelennek meg, nem rondtanak bele az esetleg pp feldolgozs alatt lvo l-
lomnyba. Ha a hvott ki szeretn zrni a lehetosget, hogy ot megszltsk, akkor egy mesg
n paranccsal bezrja sajt ablakt, amit ksobb egy mesg y paranccsal jbl kinyithat.
A write-hoz hasonl eszkz a talk is, ahol interaktvan levelezhetnk a cmzettel, a kt rszre
osztott kpernyo egyik feln a mi ltalunk, a msik feln a partnernk ltal begpelt szveg
lthat.
Vgl a rendszeradminisztrtori jogokkal br felhasznlnak rendelkezsre ll a wall (azaz
write all) parancs, amivel egyszerre tud zenni az sszes bejelentkezett felhasznlnak
(broadcast message).
Nem interaktv kommunikcira szolgl a mail, ami az egymstl tvoli gpeken lvo
felhasznlk legalapvetobb levelezsi eszkze.

$mail janos
Sietnunk kell mert lekoroznek
.
$
Jnos kpernyojn egy ido mlva (vagy ha ppen nincs bejelentkezve, a kvetkezo
bejelentkezs utn a You have mail, vagy valami hasonl szveg jelenik meg.

$ echo alma
alma
You have mail
$ mail
From lj Wed Sep 1 16:40 EDT 1993

Sietnunk kell mert lekoroznek
?d
q
$
9. fejezet Segdprogramok
153
A mail utn rt cm mondja meg, hogy kinek sznjuk a levelet. A cmzett lehet a mi gpnk
valamelyik felhasznlja (akr sajt magunk is), vagy egy tvoli gprol valaki; ilyenkor
rendszerint a user @ host formban adjuk meg a cmet, ahol user a tvoli felhasznl
bejelentkezsi neve, host pedig a tvoli gp neve. Magt az zenetet a parancs utni sorba
kezdjk el rni, s egy fjl vge, azaz CTRL-D jellel, vagy az res sorba rt ponttal zrjuk le.
Bejelentkezskor, illetve a MAILCHECK vltozban megszabott idonknt a rendszer meg-
nzi, hogy van-e valami a felhasznl postaldjban, s ha igen, akkor egy you have mail
zenetet kld a terminlra. Amennyiben a mail parancsot cmzett nlkl rjuk le, akkor a kp-
ernyore rti a postalda tartalmt, s egy ?-el vrja, hogy rendelkezznk rla. Egybetus pa-
rancsokkal, pldul d (trls), q (kilps) stb. rendelkezhetnk a tovbbiakrl.
Egyes UNIX verzikban ltezik egy mailx program is, ami valamivel jobb felhasznlsi
felletet nyjt; megint ms rendszerben ezt a mailx programot lehet mail nven meghvni...
Egyb hasznos UNIX utility-k
Az albbiakban csak megemltnk nhny olyan UNIX segdprogramot, amelyek hasznlata
hasznos lehet. Ismt hangoztatni kell a Reference Manual ktetek permutlt indexnek,
illetve a man -k parancs hasznlatnak fontossgt, mert adott funkcit ellt programokat
kizrlag innen ksrelhetnk meg felfedezni.

bc tetszoleges pontossg aritmetikai nyelv
calendar emlkezteto rendszer
cal naptr nyomtatsa
dc asztali kalkultor
news kirja a rendszerrel kapcsolatos friss hreket
nl besorszmozza a sorokat
pack, pcat, unpack
llomnyokat tmrt, visszafejt, illetve tmrtett llomnyokat listz
paste llomnyok sorait fsli ssze
size trgy kd llomnyok mrett rja vissza
split feldarabolja a nagymretu llomnyokat

154
10. FEJEZET


SHELL PROGRAMOZS
Az elozoek sorn egyfelol megismerkedtnk a shell alapveto szolgltatsaival, msfelol tte-
kintst nyerhettnk a leggyakrabban hasznlatos UNIX programokrl. Az albbiakban a
UNIX shell bonyolultabb szolgltatsairl lesz sz, s ezek hasznlatt pldaprogramokon il-
lusztrljuk. Vgsosorban arrl lesz sz, hogy vezrlsi szerkezetek segtsgvel hogyan tu-
dunk shell parancsokbl programokat, a mr sokat emlegetett shellscript-eket elolltani, ami-
ket a parancsokhoz hasonlan tudunk aztn hasznlni. A nagyobb pldk bemutatsa elott
ezrt az eszkzkszletet: vezrlsi struktrkat, paramteradst, az eredmny megorzst stb.
ismertetjk.
A shell komplex tirnytsi funkcii
Tallkoztunk mr a be- s kimenetek tirnytsnak lehetosgvel. Az ott trgyaltakon kvl
ms tirnytsi lehetosgeket is biztost a shell. Az eddig ismert tirnytsi mechanizmusok
megadhatak gy is, hogy az tirnyts jele el egy szmot runk, pldul 2> file. Ez a szm
az gynevezett llomnyler (file descriptor); amely egyrtelmuen azonostja a UNIX sz-
mra a megnyitott llomnyokat, illetve a bemeneteket s a kimeneteket. A szoksos kioszts
szerint 0 a bemeneti (standard input), 1 a kimeneti (standard output), mg 2 a hiba (standard
error) csatorna lerja, a megnyitott egyb llomnyok ennl nagyobb szmokat kapnak, de
ezt pldinkban nem hasznljuk ki. A fenti plda teht azt jelenti, hogy a hiba csatornt ir-
nytottuk t a file llomnyba.
Egy llomnyra illetve be/kimeneti csatornra az llomnyler segtsgvel is hivatkozha-
tunk, ebben az esetben az llomnylert egy & karakter kell hogy megelozze, pldul &1 a
standard outputra hivatkozik. Az albbi pldban a sort program standard error csatornjt a
standard outputra kldjk, amit tirnytunk a valami llomnyba. Amikor rossz opcit adunk
meg, lthat, hogy a hibacsatorna tartalma is a valami llomnyba kerl: (az tirnyts nl-
kl a terminlra kerlne)

$ sort -X semmi >valami 2>&1
$ cat valami
sort: invalid use of command line options
$
Begyazott input (here documents)
10. fejezet Shell programozs
155
Az tirnytsoknak egy specilis fajtja az gynevezett here documents, amit jobb hjn be-
gyazott input nven fogunk emlegetni. E klnleges mechanizmus megadst a kvetkezo
pldn szemlltetjk:
$ ed semmi <<vege
1,\$p
1,\$s/\^/\* /
1,\$p
w
q
vege
96
*****
Ez semmi
***** *****
alma
korte
repa
retek
alma
mogyoro
alma
barack
korte
mogyoro
narancs
* *****
124
$
A fenti pldban a << jel azt jelzi, hogy a behvott program, jelen esetben az ed, inputjt a
shell-tol veszi, mgpedig addig, amg egy olyan sorral nem tallkozik, amelyik a sor elejn a
<< jel utn szerepelt mintt (esetnkben a vege szcskt), s csak azt tartalmazza. Ez a minta
termszetesen tetszoleges lehet. A fenti pldban a semmi nevu llomnyt editltuk meg gy,
hogy eloszr az egszet kirattuk, majd az egsz llomnyban a sorkezdetekre beillesztettnk
egy csillag s egy szkz karaktert.

$ cat semmi
* *****
* Ez semmi
* ***** *****
* alma
* korte
* repa
* retek
* alma
UNIX felhasznli ismeretek
156
* mogyoro
* alma
* barack
* korte
* mogyoro
* narancs
$
E mdszer terminlrl kzvetlenl begpelt shell parancsok esetben is hasznlhat, de igazi
jelentosge shellscript-ekben van, ahol elore megrt parancsszekvencikat tudunk tadni
olyan programoknak, amelyek bemenetket a standard inputrl veszik, s valamilyen ok miatt
nincs lehetosg a standard input tirnytsra.
Vezrlsi szerkezetek a shell-ben
Mr emltettk, hogy a shell egy teljes programozsi nyelv, ennek megfeleloen viszonylag
bonyolult vezrlsi szerkezeteket, feltteles elgazsokat, ciklusokat s vltozkat is definil.
A vltozkrl mr esett sz a 4. fejezetben, most a vezrlsi szerkezetekkel ismerkednk
meg. Elsoknt azonban emlkeztetjk az olvast az exit vltozra, arra az egsz szmra,
amelyet a UNIX parancsok lefutsukkor belltanak
1
. A UNIX manulokban az egyes progra-
moknl mindig szerepel a lehetsges visszatrsi rtkek felsorolsa. Valjban most fogjuk
hasznlni ezt a vltozt, mivel a parancsok visszatrsi rtkt hasznljk az albb
ismertetendo shell vezrlsi szerkezetek is. Maguk a vezrlsi szerkezetek, szintaktikjuk s
szemantikjuk egyarnt a C nyelv hasonl szerkezeteire emlkeztetnek, ami termszetesen
nem vletlen.
Elgazsok
Az if elgazsi mechanizmus
Az alapveto elgazs szerkezet a UNIX shell-ben az if-szerkezet, amelyben, a ms program-
nyelvekben szokott mdon, egy felttel teljeslshez van ktve, hogy mi legyen a
soronkvetkezo vgrehajtand utasts. Az if-szerkezet a kvetkezokppen nz ki:

if command_list1
then command_list2 elif-part
fi

1
Ha egy parancs nem lltja a visszatrsi vltoz rtket, a legutols bellts marad rvnyben erre
vigyzzunk az exit vltoz lekrdezsekor!
10. fejezet Shell programozs
157
ahol elif-part a kvetkezok valamelyike lehet:

elif command_list
then command_list elif-part
vagy

else command_list
Az if-g akkor hajtdik vgre, ha az if kulcssz utn megadott command_list1 logikai rtke
igaz, azaz a command_list1 visszatrsi rtke nulla. A command_list1 tbb parancsbl is ll-
hat (ezeket a mr ismert pontosvesszovel, illetve a kerek zrjelekkel, vagy ppen a pipe r-
vn csoportosthatjuk). Tbb parancs esetn az utols parancs visszatrsi kdja szmt a
command_list1 kirtkelsekor. Mint lthat, az else-part el is maradhat, de tbb elgazsi
felttelt is tartalmazhat. Vigyzni kell arra, hogy a feltteleket a fentiek szerint trdeljk so-
rokba, vagy ha egy sorba rjuk oket, akkor pontosvesszovel vlasszuk oket el egymstl, mert
ebbol ismeri fel, hogy az adott helyen kulcsszt kell keresnie, s nem az utols utasts egy
argumentumrl van sz.
(Ha elegnsabban akarjuk megoldani a kiratst, s magt a dtumot nem akarjuk ltni,
tirnythatjuk a grep kimenett a "szemtkosrba", a /dev/null fjlba:

$ if date | grep Apr >/dev/null; then echo Tavasz van!; fi
Tavasz van!
$
(A /dev/null egy klnleges fjl-jellegu perifria: ha errol olvasunk, mindig az EOF (fjl
vge) karaktert kapjuk, ha pedig runk r, az eredmny sehol nem jelenik meg - pp ezrt
szoktk "szemtkosrknt" hasznlni, a ltni nem kvnt kimenet tirnytsra.)
A case elgazsi mechanizmus
A case utasts a tbbszrs elgazsok megvalstsnak legkzenfekvobb eszkze. Formja
a kvetkezo:

case word in case-part esac
ahol case-part a kvetkezo lehet:

pattern) command_list;;
Az mr termszetes, hogy a command_list tbb, egymssal akr kapcsolatban levo utasts is
lehet. Fontos viszont, hogy az utastssort kt darab kettospont zrja.
A case szerkezet a kvetkezokppen mukdik: a shell megkeresi azt az elso pattern mintt,
amelyik illeszkedik a word sz aktulis rtkhez, s vgrehajtja azt a command-list parancsot
vagy parancssorozatot, amelyik ehhez az illeszkedo minthoz tartozik. A minta megadsakor
az llomnynv kifejtsnl trgyalt metakarakterek hasznlhatak. Ha word aktulis rtke
egyik mintra sem illeszkedik, akkor semelyik command_list sem hajtdik vgre. Fontos
hangslyozni, hogy az elsonek tallt illeszkedo minthoz tartoz parancsokat hajtja vgre a
UNIX felhasznli ismeretek
158
shell, ezrt a specilistl az egyre ltalnosabb mintk fel haladva clszeru megadni a mint-
kat. A '|' karakter hasznlatval tbb mintt is megadhatunk, ha ezek brmelyikre illeszkedik
word, a parancsg vgrehajtdik.
Ciklusok
A for ciklus
A for ciklusutasts a kvetkezokppen nz ki:

for name in word_list do command-list done
A word_list egy karakterlncokbl ll felsorols. A felsorolt elemeket a szkz ltalnos
mezoelvlaszt tagolja.
A for ciklus vgrehajtsakor a shell a name vltoznak sorra a word_list felsorolsban sze-
replo rtkeket adja, s ezzel az rtkkel hajtja vgre a command_list parancssorozatot. Az
albbi pldban tszr egymsutn kirjuk az idot, hrom msodperces idokznknt, s meg-
adjuk azt is, hogy hnyadik kirats zajlik:

$ for i in 1 2 3 4 5; do echo $i; date; sleep 3; done
1
Wed Apr 17 20:58:30 MET 1991
2
Wed Apr 17 20:58:34 MET 1991
3
Wed Apr 17 20:58:37 MET 1991
4
Wed Apr 17 20:58:41 MET 1991
5
Wed Apr 17 20:58:44 MET 1991
$
Mint lttuk, a name ciklusvltoznak tetszoleges explicit rtket is megadhatunk, de lehet a
word-list egy '*' is. Shellscript-ekben gyakori, hogy a for ciklus a pozicionlis paramtereken
megy vgig. Ennek figyelembevtelvel ha az in word_list rsz hinyzik a for ciklus mega-
dsakor, akkor a word_list rtkt a shell automatikusan $*-nak rtelmezi, s az ennek kifejt-
sbol addan a pozicionlis vltozk rtkeit helyettesti be sorban a ciklusvltozba.
A while s az until ciklus
A while s az until ciklusok egymshoz hasonl formja a kvetkezo:

10. fejezet Shell programozs
159
while command_list1 do command_list2 done
until command_list1 do command_list2 done
A while ciklusban a shell vgrehajtja command_list1 parancssorozatot, s ha annak visszaa-
dott rtke nulla,
2
azaz command_list1 logikai rtke igaz, akkor vgrehajtja command_list2-
t; mindezt addig ismtli, amg command_list1 logikai rtke nem lesz hamis. Az until ciklus-
ban ugyanez trtnik, csak a felttel kirtkelse fordtott, amg command_list1 logikai rtke
hamis, addig hajtja vgre a ciklust. Az albbi parancsok vgtelen ciklusban rjk ki az idot
(msodpercenknt), az elore definilt, igaz logikai rtku true llandt hasznlva:
3



2
Tbb parancs esetn az utols bellts szmt.
3
A true s a false tnylegesen bels shellparancsok, de a felhasznls szempontjbl ez rdektelen. Az exit
vltozt rtelemszeren lltjk be.
UNIX felhasznli ismeretek
160
$ while true; do date; sleep 1; done
Wed Apr 17 20:59:30 MET 1991
Wed Apr 17 20:57:31 MET 1991
Wed Apr 17 20:57:33 MET 1991
Wed Apr 17 20:57:34 MET 1991
...
$
A program futsa az aktulis interrupt karakterrel szakthat meg.
Pldaprogramok
Az albbiakban nhny shellscript vizsglatn keresztl illusztrljuk a shell parancs-
nyelvnek eddig tanult jellemzoit, s azt, hogy hogyan lehet gyorsan meglepoen komplex fela-
datok elltsra szolgl keretprogramokat ltrehozni. Javasoljuk az olvasnak, hogy egy-egy
program megrtse utn gondolja el, hogy kedvenc programnyelvn mekkora munkval tudna
azonos feladatot ellt programot rni.
2, 3, 4, ...: tbbhasbos nyomtats
Az albbi szellemes program arra a clra szolgl, hogy a kimenet tbbhasbos nyomtatst te-
gye lehetov: (A program llomnyneve furcsa mdon egy szmjegy.)
$ cat 2
# 2,3,...: print in multiple columns

pr -$0 -t -l1 $*
$ who
guest vt01 Apr 17 14:23
janos vt02 Apr 17 18:10
$ who | 2
guest vt01 Apr 17 14:2 janos vt02 Apr 17 18:1
$
Pldaprogramunk nem csinl egyebet, minthogy a pr parancson engedi keresztl a kimenetet.
A -t -l1 opcik rvn az egyes lapokra nem kerl r az llomnynv, a dtum s a lapszm,
valamint a lapmret egy sorra lltdik, ezek kvetkeztben folyamatos lesz a nyomtats. A -
$0 opciban $0 helyre az llomny neve, jelen esetben 2 fog behelyettestodni; -2 azonban a
pr szmra rvnyes opci, s azt jelenti, hogy kthasbos formban kell nyomtatnia a stan-
dard outputra. A $* megads a shell-nek tadott sszes pozicionlis paramtert jelenti, azaz
ha a 2 programot valamilyen opcival, vagy brmi egyb paramterrel hvtuk meg, akkor az
taddik a pr programnak, s az fogja rtelmezni oket. Ez a megolds azt is illusztrlja, hogy
hogyan lehet olyan keretprogramokat rni, amelyek csak a szmukra fontos opcikat emelik le
10. fejezet Shell programozs
161
a paramterek kzl, a tbbit pedig transzparens mdon tadjk a feldolgozsi sorban utnuk
kvetkezo programnak. Ezt szemllteti pldul a ksobbiekben szereplo updt pldaprogram,
amely csak kt opcionlis paramtert hasznl fel maga, a parancssorban szereplo tovbbi op-
cikat pedig tadja a programsor utols tagjnak, az ls programnak, s az llomnyneveket tar-
talmaz eredmny a megfelelo ls opcik szerinti formtumban jelenik meg. Pldul updt ki-
menete az ls parancs kimenetnek felel meg, az updt -lrt parancs viszont az ls -lrt parancs
formtumval lesz azonos.
Nyilvnval, hogy a fenti program alkalmas tetszoleges hasbszm nyomtatsra is, ha a kvnt
hasbszmnak megfelelo nven tudjuk meghvni, hiszen a hvsi nv, mint a shell-nek tadott
pozicionlis paramter, szolgltatja a trdelsi informcit a pr parancs szmra. A legegysze-
rubb megolds az lenne, ha a 2 programot a kvnt neveken lemsolnnk. Ez azonban felesleges
helypocskols lenne, hiszen a UNIX ismeri a linkels fogalmt, s gy a mr ltezo 2 nevu llo-
mnyra tetszoleges neveken hivatkozhatunk. A linkelst megcsinlhatjuk gy is, hogy egyms
utn vgrehajtjuk az ln 2 3; ln 2 4; stb parancsokat. A shell ciklusszerkezett kihasznlva azon-
ban knyelmesebben is eljrhatunk:

$ for i in 3 4 5 6; do ln 2 $i; done
$ ls -l 2 3 4 5 6
-rwxr-xr-x 5 guest other 56 Apr 17 20:15 2
-rwxr-xr-x 5 guest other 56 Apr 17 20:15 3
-rwxr-xr-x 5 guest other 56 Apr 17 20:15 4
-rwxr-xr-x 5 guest other 56 Apr 17 20:15 5
-rwxr-xr-x 5 guest other 56 Apr 17 20:15 6
$
A parancssorban megadott for ciklus az i ciklusvltoznak sorra a 3..6 rtkeket adja, s az ln
parancs vgrehajtsakor 2 az i ciklusvltozhoz aktulis rtkhez fog linkelodni (preczeb-
ben szlva, egy olyan llomnynv jn ltre a katalgusban, amely nv azonos az i ciklusvl-
toz aktulis rtkvel, vagyis $i-vel).
bell: adott szm terminl hangjelzs
$ cat bell
n=${1-1}
while [ $n -gt 0 ]; do
echo '\07\c'
n=`expr $n 1`
sleep 1
done
$
A bell program egyet csenget a terminlon, ha argumentum nlkl hvtuk meg, egybknt pe-
dig annyit, amekkora az elso argumentuma. A program elso sorban a paramterek behelyet-
testsnek egy gyakori esett lthatjuk. A ${var-value} konstrukci a value rtket adja
UNIX felhasznli ismeretek
162
vissza,
4
ha a vltoz nincs belltva. Ily mdon teht default paramtermegadst lehet biztos-
tani a shell vltozinak. A konkrt pldban az n shell-vltoz rtke azonos lesz az elso
pozicionlis paramterrel, ha olyan ltezik; ha viszont pozicionlis paramter nem volt meg-
adva, akkor n rtke 1 lesz.
A kvetkezo programsorban egy while ciklus kezdodik: a ciklus vgrehajtsi felttele a szg-
letes zrjelek kz zrt kifejezs; ha ennek logikai rtke igaz, azaz az n shell-vltoz rtke
nagyobb vagy egyenlo mint nulla, akkor vgrehajtdik a ciklustrzs. Figyeljk meg, hogy mi-
vel a do kulcssz nem kln sorban szerepel, kell elje a vgrehajtsi felttel lezrsra a
pontosvesszo szepartor. (Maga a [ $n -gt 0 ] felttelmegads egy formai rvidts, a [ ... ]
forma a UNIX test parancsnak jelzsre szolgl. A felttelmegads teljes formjban kirva
teht while test $n -gt 0 lenne.)
A kvetkezo sorban az echo parancs kirja a 07 ASCII kd karaktert (CTRL-G), ami a ter-
minlon a hangjelzst generlja. A \c biztostja az echo parancsban azt, hogy a csengokarak-
ter kirsa utn ne rdjk ki feleslegesen egy jsor karakter is.
5
A kvetkezo sorban az
expr parancs kifejezsknt feldolgozza az argumentumokat, amelyekkel meghvtk, s az ered-
mnyknt kapott rtket (jelen esetben az n vltoz rtknl eggyel kisebb szmot) kirja a
standard outputra; a `...` metakarakterek segtsgvel azonban ezt az rtket argumentumknt
tadhatjuk az n shell-vltoz j rtknek belltst vgzo parancsnak. E kiss bonyolult
mdon sikerlt n rtkt eggyel cskkenteni.
exch: llomnyok cserje
Az exch shell program kt llomny nevt cserli fel. Elsoknt egy ideiglenes llomnynvre
nevezi t az egyik llomnyt, majd hrmas csert hajtva vgre vgl a kt kiindulsi llomny
neve felcserlodik. A programban kt emltsre rdemes vons van. Az egyik az egyedi nevu
llomnyok ltrehozsval kapcsolatos. Szmos esetben lehet szksge arra egy programnak,
hogy egyedi nevu llomnyokat hozzon ltre, pldul ha egyidejuleg tbb felhasznl is fut-
tatja a programot, s mindegyik fut pldny nll ideiglenes llomnyokat kell hogy gene-
rljon. E clra igen alkalmas a shell $$ jellsu shell-vltozjnak hasznlata: ez ugyanis
mindig az adott folyamat azonostjt, a PID rtkt tartalmazza. Mivel a UNIX gondoskodik
arrl, hogy a PID rtkek egyediek legyenek, az ennek felhasznlsval ltrehozott llomny-
nevek is egyediek lesznek. Az albbi program elso sorban ennek kihasznlsval hoztuk lt-
re a TMP nevu ideiglenes llomnyt, pontosabban az llomny nevt. A kvetkezo sorban
megadott utastsokat a && karakterek vlasztjk el; ez a rvidts azt jelenti, hogy a pa-
rancssor kvetkezo parancsa csak akkor fut le, ha az elozo parancs visszatrsi rtke igaz
volt (0 exit sttusz), azaz ha az elozo program sikeresen lefutott. (E megads vgso soron egy
else g nlkli if szerkezettel azonos.) A && jells prja a || karakterpr, mely azt jelzi,
hogy a soron kvetkezo parancs csak akkor fut le, ha az elozo logikai rtke hamis volt.
$ cat exch

4
Magt a var vltozt lltja be!
5
BSD Unix alatt az echo-n rvn rhet el ugyanez a hats.
10. fejezet Shell programozs
163
TMP="exch$$"
mv $1 $TMP && mv $2 $1 && mv $TMP $2
$ ls -l semmi valami; exch semmi valami; ls -l semmi valami
-rw-r--r-- 1 guest other 124 Apr 17 20:08 semmi
-rw-r--r-- 1 guest other 42 Apr 17 20:07 valami
-rw-r--r-- 1 guest other 42 Apr 17 20:07 semmi
-rw-r--r-- 1 guest other 124 Apr 17 20:08 valami
$
same_nm: azonos nevu llomnyok keresse
A same_nm program vgignzi a /bin, /usr/bin s /etc katalgusokat, s kirja mindazokat az
llomnyokat, amelyek ezen katalgusok valamelyikben szerepelnek, s azonos nevuek a pa-
ramterknt megadott llomnnyal.
$ cat same_nm
# same_nm -- find files of same name in /bin,/usr/bin,/etc directories
usage='usage:\tsame_nm files'
s1="/bin"
s2="/usr/bin"
s3="/etc"
case $# in
0) echo $usage; exit;;
esac
case $1 in
'-?') echo $usage; exit;;
esac
for i
do
[ -s "$s1/$i" ] && ls -l $s1/$i
[ -s "$s2/$i" ] && ls -l $s2/$i
[ -s "$s3/$i" ] && ls -l $s3/$i
done
$
A program elso case szerkezetben azt vizsgljuk, hogy hny paramterrel lett meghvva
same_nm. $# az adott program pozicionlis paramtereinek szmt adja meg ($0 nem szmt
bele); ha ez az rtk nulla akkor same_nm kirja help szvegknt az elore definilt usage
shell-vltoz tartalmt, s az exit parancs hatsra terminlja magt.
A kvetkezo case szerkezet az elso pozicionlis paramtert vizsglja, s ha az -?, akkor szintn
a helpszveget rja ki, majd befejezodik. Nem vletlen a '-?' minta megadsnl a '...' idzo-
jelpr hasznlata: ha nem vdennk le ezltal a -? stringet a shell-tol, akkor az a ? karaktert
metakarakterknt rtelmezn, s minden - karakterrel kezdodo argumentum hatsra ezt az
gat hajtan vgre.
UNIX felhasznli ismeretek
164
Vgl a for ciklusban minden pozicionlis paramterre vgrehajtdik a hrom if g; a rvid-
tsek miatt nehezen rtelmezheto elso rnzsre, de mr lttuk, hogy a [ .. ] karakterek kzti
rsz a test utastsnak felel meg, az utnuk rt && pedig az elozo (test) parancs sikeres lefu-
tsa esetn hajtdik csak vgre: azaz ha a "$s1/$i" nevu llomny ltezik s nem nulla a
hossza, akkor az ls paranccsal kirja rszletes adatait.

$ same_nm passwd
-r-sr-sr-x 1 root sys 22272 Mar 28 1990
/bin/passwd
-r--r--r-- 1 root sys 1190 Mar 13 10:08
/etc/passwd
$
updt: frissen mdostott llomnyok listzsa
Az updt program azoknak az llomnyoknak az adatait listzza ki (az ls opcii hasznlhat-
ak), amelyeket egy adott idon bell mdostottunk. Default belltsa szerint a kiindulsi ka-
talgusban vgzi el a vizsglatot, az aznap mdostott llomnyokat keresve. Az opcik utni
elso paramter, ha szerepel, a katalgus, ahonnan kiindulva keresnk, ezutn lehet megadni
az idohatrt, a find parancs jellsmdja szerint.

10. fejezet Shell programozs
165
$ cat updt
# updt -- list files updated in [dir] in the last [n] day
usage='Usage:\tupdt [-?logtasdrucifp] [dir (def:$HOME)] [[+-] day (def:0)]\n
\t\t+/-<n> means more/less than <n> days'
f=/tmp/updt.dat
until test $# -eq 0
do
case $1 in
'-?') echo $usage; exit;;
-*) flags="$flags $1"; shift;;
*) break;;
esac
done
if test "$flags"
then
find ${1-$HOME} -mtime ${2-0} -type f -print >$f
if test -s $f
then ls $flags `cat $f`
fi
rm -f $f
else
find ${1-$HOME} -mtime ${2-0} -type f -print
fi
exit
$
Az until gban addig marad a program, amg valamennyi pozicionlis paramtert fel nem dolgoz-
ta, azaz amg $# rtke nullra nem cskken. A paramterfeldolgozst a case ciklus vgzi, amely
az elso pozicionlis paramtert vizsglja, a same_nm esetben ltott mdon lekezeli a seglykro -
? opcit, az sszes tbbi opcit pedig hozzrja a flags nevu shell-vltozhoz. A shift parancs arra
szolgl, hogy a pozicionlis vltozkat eggyel balra lptesse, azaz $1 trlodik, $2-bol $1 lesz, s
gy tovbb. Amikor nem opci a pozicionlis paramter, akkor a ciklus megszakad, a tovbbi
pozicionlis paramtereket vltozatlanul hagyva.
A program tovbbi rsze egy if-else szerkezetbe gyazdik. Ha nem adtunk meg opcikat
(flags nullstring, ez az else g), akkor a find parancs hajtdik vgre, s a tallt llomnyoknak
pusztn az elrsi neveit rja ki. Ha ellenben definiltunk opcikat, akkor a find parancs az f
ideiglenes llomnyba irnytja kimenett.
Ha a find tallt llomnyokat, akkor az f ideiglenes llomny hossza nagyobb mint nulla (ezt
vizsglja a test -s parancs), s ekkor az ls parancs argumentumlistaknt megkapja a tallt llo-
mnyok neveit. A paramtertads azrt trtnt ilyen bonyolult mdon, mert ha az ls `find ...`
szerkezetet hasznltuk volna, akkor a program nem mukdne helyesen. Ha ugyanis a find
nem tall a feltteleknek megfelelo llomnyt, akkor argumentumknt egy nullstringet ad t
ls-nek; ls viszont ignorlja a nullstringet, s tnyleges argumentum hinyban az aktulis kata-
lgust listzza ki.

UNIX felhasznli ismeretek
166
$ updt -?
Usage: updt [-?logtasdrucifp] [dir (def:$HOME)]
[[+-] day (def:0)]
+/-<n> means more/less than <n> days
$ updt
/usr/guest/.lastlogin
/usr/guest/valami
/usr/guest/vers1
/usr/guest/semmi
/usr/guest/vers2
/usr/guest/2
/usr/guest/log.log
/usr/guest/lo
/usr/guest/semmi1
/usr/guest/delta
/usr/guest/bundle
/usr/guest/same_nm
/usr/guest/updt
/usr/guest/exch
/usr/guest/bell
/usr/guest/3
/usr/guest/4
/usr/guest/5
/usr/guest/6
bundle: programcsomagok tmrtse s kibontsa
Ez a program a shell programozs egyik gyngyszeme, egyszerusge s hasznossga rvn
egyarnt.
6
Arra a clra szolgl, hogy szmos apr kis shell programocskt egyetlen llomny-
ba sszecsomagolva lehessen mshova elkldeni, floppyra menteni stb, s rendeltetsi helyn
automatikusan lehessen az eredeti programokat kicsomagolni s visszanyerni. (Az llom-
nyok nem felttlenl kell hogy shellscript-ek legyenek, az egyetlen megkts az, hogy ne bi-
nris llomnyok legyenek.)
Az sszecsomagoland llomnyokat egyszeruen a bundle file(s) paranccsal lehet sszevon-
ni (defaultban bundle is a standard outputra r). Kicsomagolskor, ha mondjuk pkg volt a
csomag neve, az sh pkg parancs automatikusan ltrehozza az eredeti llomnyokat.

$ cat bundle
# bundle: group files into distribution package

6
E programot (amely egybknt a shar nev public-domain program shellscript formban megrt vltozata) a
Kernighan-Pike: The Unix Programming Euvironment cm knyvbl vettk t lehetett volna hasonl scriptet
rni, de nem rdemes, most legalbbis szerzk szerint ennl jobban s tmrebben kevs program tudja a
shell lehetsgeit bemutatni.
10. fejezet Shell programozs
167

echo '# To unbundle, sh this file'
for i; do
echo "echo $i 1>&2"
echo "cat >$i <<'=== End of $i ==='"
cat $i
echo "=== End of $i ==="
done
$

$ mkdir newdir; bundle bundle 2 same_nm
>newdir/package.pkg;
$ cd newdir; ls -l
total 2
-rw-r--r-- 1 guest other 769 Apr 17 20:20
package.pkg
$

UNIX felhasznli ismeretek
168
$ cat package.pkg
# To unbundle, sh this file
echo bundle 1>&2
cat >bundle <<'=== End of bundle ==='
# bundle: group files into distribution package

echo '# To unbundle, sh this file'
for i do
echo "echo $i 1>&2"
echo "cat >$i <<'=== End of $i ==='"
cat $i
echo "=== End of $i ==="
done
=== End of bundle ===
echo 2 1>&2
cat >2 <<'=== End of 2 ==='
# 2,3,...: print in multiple columns

pr -$0 -t -l1 $*
=== End of 2 ===
echo same_nm 1>&2
cat >same_nm <<'=== End of same_nm ==='
# same_nm -- find files of same name in /bin,/usr/bin,/etc directories
usage='usage:\tsame_nm files'
s1="/bin"
s2="/usr/bin"
s3="/etc"
case $# in
0) echo $usage; exit;;
esac
case $1 in
'-?') echo $usage; exit;;
esac
for i
do
[ -s "$s1/$i" ] && ls -l $s1/$i
[ -s "$s2/$i" ] && ls -l $s2/$i
[ -s "$s3/$i" ] && ls -l $s3/$i
done
=== End of same_nm ===
$

$ sh package.pkg; ls -l
bundle
2
same_nm
total 8
-rw-r--r-- 1 guest other 56 Apr 17 20:21 2
-rw-r--r-- 1 guest other 175 Apr 17 20:21 bundle
-rw-r--r-- 1 guest other 769 Apr 17 20:20 package.pkg
-rw-r--r-- 1 guest other 343 Apr 17 20:21
same_nm
10. fejezet Shell programozs
169
$
A bundle mukdse azon a trkkn alapszik, hogy maga is egy vgrehajthat shellscript-et
generl, amelyben a kicsomagol parancsok, illetve az sszecsomagolt programok szvege is
benne van, s ezeket a vteli oldalon a begyazott input mechanizmusa segtsgvel lltja
helyre.
Elso lpsknt a keletkezo llomnyba egy shell commentet tesz be, ez arra j, hogy a
vteli oldalon tjkoztassa a felhasznlt, hogyan is kell kicsomagolnia a keletkezo l-
lomnyt.
A tovbbiakban egy for ciklus rvn a tmrtendo valamennyi llomnyra vgrehajtja
az albbiakat:
Ber a keletkezo llomnyba egy olyan parancsot, amely a standard error csatornra ki-
rja az aktulis llomny nevt (itt ugyanis a shell mr kifejtette a $i paramtert, teht
egy konkrt llomnynv szerepel);
ber a keletkezo llomnyba egy olyan parancsot, amelyik begyazott inputknt az ak-
tulis llomnyba rja az === End of llomnynv === stringig terjedo rszt;
most a keletkezo llomnyba berja magt a tovbbtand llomnyt;
vgl berja a keletkezo llomnyba a begyazott inputot zr === End of llomny-
nv === szekvencit.

170
11. FEJEZET


A C SHELL

A C shell a BSD alap UNIX rendszerekben terjedt el elsoknt, de hamarosan ez is szabv-
nyos rsze lett a UNIX-nak, gy ma minden rendszerben megtallhat. E shell szintaxisban
is eltr a Bourne shell-tol, szmos, a Bourne shell-ben meglvo konstrukcit egszen ms m-
don kell hvni. Cserbe viszont jval tbbet tud: ezek kzl leggyakrabban a parancssor szer-
kesztsnek lehetosgt s a rgi parancsok visszaidzhetosgt szoktk hasznlni, de hason-
lkppen kellemes szolgltats az aliasing mechanizmusa, amelynek rvn hossz parancsok-
ra rvid nevekkel tudunk hivatkozni, illetve a C nyelvre erosen hasonlt, igen komplex ve-
zrlsi szerkezetek ppgy, mint a parancsnevek automatikus kiegsztse gpels kzben.
Termszetesen a C shell-ben is lehetosg van arra, hogy shell parancsokat tartalmaz fjlokat,
gynevezett shellscript-eket hajtsunk vgre, de ilyen clra tbb ok miatt sem szoktk javasol-
ni, mind a Bourne, mind az azzal fellrol kompatbilis Korn shell alkalmasabb e clra. ppen
e megfontolsokbl mi is a C shell interaktv, parancssori hasznlatra sszpontostunk, br
lesznek pldk shellscript-ekre, illetve shellscript-ekben alkalmazhat mechanizmusokra is.
A C shell indtsa
Ha bejelentkezsi shell-nk nem a C shell, a parancssorban kiadott

csh
paranccsal tudjuk elindtani. Hacsak a konfigurcis fjlokban mskppen nem rendelkeznk,
a prompt a % jel lesz, privilgizlt felhasznl esetben a # jel.
Kilps a C shell-bol
Hasonlan a Bourne shell-hez, az eof (rendszerint CTRL-D) karakter hatsra kilphetnk a
C shell-bol is, feltve hogy az ignoreeof flag nincs belltva. E flagnek ugyanis ppen az a
szerepe, hogy megelozze a vletlen kilptetst a shell-bol. Tegyk fel pldul, hogy egy alkal-
mazsunknak akartuk jelezni a CTRL-D karakterrel a bevitel vgt, szerencstlen mdon
azonban ktszer nyomjuk le a gombot, vagy hosszan tartjuk rajta keznket s ismtel a billen-
tyuzet: az eredmny ugyanaz, a msodik vezrlokaraktert mr a shell veszi magra, s ki-
lptet, ami alkalmanknt igen kellemetlen is lehet, pldul ha modemen keresztl jelentkez-
11. fejezet A C shell
171
tnk be. Az ignoreeof flag hatsra a C shell figyelmen kvl hagyja az eof funkcihoz ren-
delt karaktert, s csak kln parancsra lptet ki.
A kilpteto parancs ltalban az exit, hacsak nem a login shell-rol van sz; ebben az esetben
a logout parancs hatsra lphetnk ki a shell-bol.
A C shell konfigurcis fjljai
Amikor a C shell-t elindtjuk, az alapkatalgusunkban lvo .cshrc fjl tartalmt beolvassa s
vgrehajtja a shell. Ez a tevkenysg minden egyes C shell indtsakor vgrehajtdik, teht
ha valamilyen oknl fogva tbb shell-t indtunk el egyms fltt, akkor annyiszor, ahny
shell-t indtottunk. (Ugyanez igaz akkor is, ha egy ablakkezelo rendszerrel rendelkezo gpen
egy olyan j ablakot nyitottunk, amelyik C shell-t hasznl.)
Abban az esetben, ha az elindult C shell a bejelentkezsi shell, a .cshrc lefutsa utn a .login
fjl tartalmt is vgrehajtja a rendszer, feltve hogy ltezik ilyen fjl az alapkatalgusunkban.
A login shell-bol val kilpskor a .logout fjl tartalma is vgrehajtdik (termszetesen me-
gint csak akkor, ha ltezik ilyen fjl).
Lthat, hogy ellenttben a Bourne shell konfigurcis mechanizmusval, itt nem egy-egy
rendszer-, illetve felhasznl-specifikus konfigurcis fjl szerepel (/etc/profile, illetve
$HOME/.profile), hanem kt felhasznl-specifikus llomny. Mindez nem okoz klnsebb
gondot, mindkt rendszerrel megoldhatak a tipikus konfigurcis problmk
1
. Mivel a
.cshrc minden shell indtsakor lefut, ebben clszeru a shell-vltozk belltst elvgezni,
mg a .login fjlban az egyszeri, bejelentkezssel kapcsolatos teendoket, pldul terminlt-
pus- s paramterek belltsa, postaellenorzs stb.
A .cshrc konfigurcis fjl
Az albbiakban egy tipikus .cshrc fjlt mutatunk be. Rendszerint azokat a konfigurland r-
tkeket szoks itt belltani, amelyek minden shell lefutsnl az applikcitl fggoen vltoz-
hatnak, pldul keressi tvonal belltsa, a felhasznl ltal specifiklt egyedi shell-
vltozk, stb.

hp 22: cat .cshrc
# Default keresesi utvonal beallitasa:
set path=( /bin /usr/bin /usr/local/bin $home/bin . )


1
Ha mindenkppen szksg van egy rendszer-specifikus kzs konfigurcis fjlra, a ksbb megismerend
source parancs segtsgvel lehet meghvni mindenki szmra lefut konfigurcis llomnyt. Egyes rendsze-
rekben ezenkvl kibvtettk a C shellt gy, hogy lehetsg van egy rendszer-specifikus konfigurcis fjl hasz-
nlatra is.
UNIX felhasznli ismeretek
172
# C shell kornyezet beallitasa:
if ( $?prompt ) then # interaktiv shell
# nyilvantartott elozo parancsok
set history=20
# belepesek kozt megorzendo parancsok szama
set savehist=20
# rendszer neve
set system=`hostname`
# a parancs prompt definicioja
set prompt = "$system \!: "

# alias beallitasok:
alias h history
alias dir ls -al
endif
A .login konfigurcis fjl
A .cshrc utn vgrehajtd .login fjl elsosorban a globlis parancsokat tartalmazza, azokat,
amelyeket csak egyszer clszeru lefuttatni, a rendszerbe trtno bejelentkezskor. Az albbi
plda egy tipikus .login llomnyt mutat:

hp 23: cat .login
# idozona beallitas:
setenv TZ MET-1METDST
# postafiok beallitas:
setenv MAIL /usr/mail/demo

# terminal beallitas:
# default terminal lekerdezese es beallitasa
eval `tset -s -Q -m ':?hp' `
# terminalparameterek beallitasa
stty erase "^H" kill "^U" intr "^C" eof "^D" susp "^Z" hupcl ixon ixoff tostop cs8 -istrip
# tabulator-kezeles beallitasa
tabs

# shell kornyezet beallitas:
set noclobber # letezo fajl felulirasat letiltja

# globalis parancsok:
# altalanos kozlemenyek
news | more
A .logout konfigurcis fjl
rtelemszeruen ebbe a fjlba olyan programok kerlnek, amelyeket kilpskor szndkozunk
vgrehajtatni. (ltalban nem sok ilyen tevkenysg akad; olyan gpeken, ahol nyilvntartjk
11. fejezet A C shell
173
az egyes felhasznlk ltal felhasznlt gpidot, vagy egyb eroforrsokat, ezek felhasznls-
rl szoktk kiratni a statisztikt.)
UNIX felhasznli ismeretek
174
Metakarakterek semlegestse
Mielott mdszeresen vgigmennnk a metakaraktereken, eloszr azt nzzk meg, adott eset-
ben hogyan lehet ezek specilis jelentst elnyomni, ugyanis ez nmikpp eltr a Bourne
shell-nl megszokottaktl.
Akr a Bourne shell-nl, itt is hrom mdon nyomhatjuk el a metakarakterek specilis jelen-
tst, a levdendo metakarakter el helyezett backslash (\) karakterrel, vagy annak szimpla, il-
letve dupla idzojelek kz ('..', "..") kz zrsval. E hrom mdszer erossgben tr el
egymstl. A dupla idzojelek kztt levdett karakterekre a shell paramterbehelyettestsi
szablyai tovbbra is rvnyesek, azaz pldul a shell-vltozk nevt a C shell a dupla idzo-
jelek kztt is kifejti. A szimpla idzojelek hatsa mr eltr a Bourne shell-ben megszokottl:
noha itt is erosebb a dupla idzojelnl, de a (ksobb trgyaland)
esemnybehelyettestsnl hasznlt felkiltjel specilis jelentst nem nyomja el. gy az ese-
mnybehelyettests szimpla idzojel prok kztt is vgbemegy, mint azt a prompt vltoz
definilsnl ki is hasznltuk a pldaknt bemutatott .cshrc fjlban. Tkletes vdelmet csak
a backslash karakter nyjt.
2

Szintaktikus metakarakterek
Szintaktikus metakarakterek azok a metakarakterek, amelyekkel parancsokat lehet csoportos-
tani, elvlasztani, illetve parancscsoportok vgrehajtst veznyelni. E metakarakterek rtel-
mezse azonos a Bourne shell-vel.
; Az egy parancssorban begpelt parancsokat vlasztja el, jelentsben azonos rtku az
jsor karakterrel.
| Az elvlasztott kt parancsot csovezetkbe kapcsolja, az elso parancs kimenete a mso-
dik bemenetre kerl.
() A pontosvesszovel elvlasztott vagy csovezetkkel sszefuztt parancsokat egy cso-
portban, egy kln shell-t indtva hajtja vgre.
& Az elotte szereplo parancs(oka)t httrfolyamatknt hajtja vgre. A httrben indtott
parancs indulsakor rgtn megjelenik az j parancsprompt, nem vrja meg az elozo
parancs befejezodst.
|| Az utna szereplo parancsokat csak akkor hajtja vgre, ha az elotte szereplo parancs si-
kertelen volt (az ennek megfelelo logikai rtkkel trt vissza).
&& Az utna kvetkezo parancsokat csak akkor hajtja vgre, ha az elotte szereplo
parancs sikeres volt (az ennek megfelelo logikai rtkkel trt vissza).

2
A '!' karakter akkor is elveszti specilis jelentst, ha szkz, jsor karakter, tabultor, illetve '(' vagy '.' karakter
kveti.
11. fejezet A C shell
175
# Hasonlan a Bourne shell-hez, a megjegyzseket vezeti be, ezeket a shell figyelmen k-
vl hagyja. Ha azonban a sor elejn szerepel, egyb specilis jelentssel is brhat, errol
a Parancsvgrehajts folyamata c. pontban lesz sz.
Automatikus fjlnv kiegszts
Az automatikus fjlnv kiegszts a C shell igen kellemes szolgltatsa (a Korn shell-ben is
megtallhat). Lnyege, hogy egy parancssor begpelsekor nem kell a kvnt fjlnevet teljes
egszben vgiggpelni, hanem annak egy rszt megadva a shell kikeresi az illeszkedo
nev(ek)et, s felajnlja azokat.
3

Ha a parancssor gpelse kzben az eof funkcihoz rendelt karaktert letjk (mint lttuk mr,
ez rendszerint a CTRL-D), akkor az utoljra begpelt argumentum helyett a shell az sszes
gy kezdodo fjlnevet kilistzza, majd jra kirja az eddig begpelt parancssort, rnk bzva,
hogy a megfelelo fjlnevet berjuk.
Ha a parancssorban az ESC karaktert gpeljk be, akkor az utolsnak begpelt argumentumot
a leghosszabb olyan fjlnvvel helyettesti a shell, aminek az eleje illeszkedik az argumen-
tumra. (Ha ilyet nem tall, vagy tbbet is tall, spolssal figyelmeztet.)
Ha a behelyettestendo argumentum a tilde (~) karakterrel kezdodik, a C shell nem az illesz-
kedo fjl-, hanem a felhasznli neveket fogja kilistzni, illetve behelyettesteni.
Parancsszerkesztsi lehetosgek a C shell-
ben
A C shell szmos parancsszerkesztsi lehetosget knl, ezek lehetov teszik, hogy az elozo
parancsok tszerkesztsvel megsproljuk a hossz parancsok jragpelst, illetve rgebben
begpelt parancsokat s parancssorozatokat knnyuszerrel megismteljnk. Ennek megval-
stsra a C shell egy esemnypuffert
4
(event buffer) definil, s az utoljra begpelt parancso-
kat e pufferban trolja. Amikor parancsszerkesztst hajtunk vgre, a shell ennek a puffernak a
tartalmn operl. Lehetosgnk van tbbek kztt arra, hogy elozo esemnyeket (parancso-
kat) teljesen megismteljnk, vagy klnbzo parancsokbl ms-ms rszeket, argumentumo-
kat sszeollzva lltsunk ssze vgrehajtand parancsokat stb.

3
Ehhez be kell lltani a filec shellvltozt.
4
Az esemny, illetve esemnypuffer elnevezs azrt hasznlatos a parancs s parancspuffer helyett, hogy ezzel is
hangslyozzk a tnyt, miszerint a mdostand s jra felhasznland parancsok valjban igen bonyolult, komp-
lex utastsstruktrk is lehetnek.
UNIX felhasznli ismeretek
176
Parancshistria megtekintse
A shell ltal trolt parancsok listjt a history paranccsal nyerhetjk elo:

hp 21: history
2 exit
3 mailx
4 cat .cshrc
5 cat .login
6 env
7 set lo=1
8 echo $lo
9 set lo = 2
10 echo $lo
11 nslookup lwr.camaz.mx
12 nslookup
13 ping lwr.camaz.mx
14 /etc/ping lwr.camaz.mx
15 ping 192.93.224.53
16 /etc/ping 192.93.224.53
17 /etc/ping 192.93.224.11
18 telnet lwr.camaz.mx
19 telnet lwserv.camaz.mx
20 finger icl@lwr.camaz.mx
21 history
hp 22:
Parancsok ismtelt vgrehajtsa
Az elozo parancsokat a megadott esemnyre val hivatkozssal lehet jra vgrehajtatni. Az
esemnyekre hromflekppen lehet hivatkozni:
az esemny sorszmval;
az esemny relatv elhelyezkedsvel a pillanatnyi esemnyhez kpest;
az esemny szvegvel, vagy abbl kiemelt mintval.
A fentiek specilis eseteknt a legutoljra vgrehajtott parancsot a !! karakterekkel tudjuk
vgrehajtani. E jellsbol az elso felkiltjel a parancsbehelyettestsi mechanizmust indtja,
a msodik pedig a legutolsnak vgrehajtott parancsra hivatkozik.
Hivatkozs az esemny sorszmval
Az esemny sorszmra val hivatkozskor a kezdo felkiltjel utn az jra vgrehajtatni kvnt
parancs esemny sorszmt kell megadni. Ezt az informcit persze csak akkor tudjuk hasznl-
ni, ha valamilyen formban rendelkezsnkre ll; ha a promptunk nem rja ki az esemnysorsz-
mot, definiljuk t a .cshrc fjlban a prompt vltozt gy, hogy az az albbiakat (is) tartalmaz-
za:
set prompt = "\!% "
11. fejezet A C shell
177
Az elozoekben pldaknt bemutatott history lista alapjn pldul a !10 parancs hatsra az
echo $lo parancs fog jra vgrehajtdni:

hp 22: !10
echo $lo
2
hp 23:
Vgrehajts elott az ismtlendo parancsot kirja a shell, teht ltjuk, hogy mit hajtunk vgre; mdo-
stani viszont, legalbbis ez esetben, nem tudjuk a parancsot.
Hivatkozs az esemny relatv elhelyezkedsvel
E hivatkozsi md alapvetoen hasonlt az elozohz, az eltrs annyi, hogy nem egy abszolt
sorszm alapjn azonostjuk az jra vgrehajtand parancsot, hanem a pillanatnyi esemny-
sorszmhoz kpest adjuk meg pozcijt. Ha pldul promptunk a 23 rtket mutatja, a !-20
parancs hatsra a mailx parancs fog vgrehajtdni:

hp 23: !-20
mailx
No mail for demo
hp 24:
Elofordulhat, hogy az ily mdon megadott esemnyre a shell az "Event not found." hibaze-
nettel reagl. Ez foknt akkor fordul elo, ha olyan esemnyre hivatkozunk, ami mr kiesett az
esemnypuffernkbol. (A puffer mrett a history shell-vltozban llthatjuk be, ltalban
15-20 krli rtkre; ha mondjuk 20 a belltott rtk, az ezelotti huszonkettedik parancsot
nem tudjuk mr elovarzsolni.)
Hivatkozs az esemny szvegvel
Az esemny szvegre trtno hivatkozs a legegyszerubb: a felkiltjel utn egyszeruen g-
peljk be a megismtelni kvnt parancs elso nhny betujt, annyit, ami egyrtelmuen meg-
klnbzteti az esemnypufferben lvo tbbi parancstl. Pldul a !ma parancs hatsra a
mailx parancs fog jra lefutni:

hp 24: !ma
mailx
No mail for demo
hp 25:
Az ilyen esemnyilleszts hatra az elso fehr karakter (szkz, tabultor); a C shell csak
az eddig terjedo rszt hasznlja az esemnyillesztsnl, az ltalunk megadott minta tbbi r-
szt a megtallt parancsnak adja t argumentumknt. Az albbi pldban az

!ls -l
UNIX felhasznli ismeretek
178
parancs megadsakor nem az ltalunk gondolt ls -l parancsot (#38) fogja illeszteni a C shell,
hanem, mivel az esemnyillesztsnl hasznlt ls tbb parancsra is illett, azok kzl veszi az
utolst (#39), s ahhoz fuzi hozz argumentumknt a -l opcit:

hp 40: history
37 ls -a
38 ls -l
39 ls /etc
40 history
hp 41: !ls -l
ls /etc -l
itt a /etc katalguslistja kzetkezik...

-l not found
hp 42:
Gyakran kzenfekvobb lenne, ha nem a parancssz, hanem a parancs tetszoleges rsze alap-
jn tudnnk az elozo parancsokra hivatkozni. Ilyenkor a !?minta? megadst hasznlhatjuk,
ahol minta a keresett parancsban brhol szereplo karaktersorozat lehet. Az elobbi pldnl
maradva:

hp 43: !?-l?
ls -l
total 378
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 14 Aug 29 16:53 akarmi
-rw-rw-rw- 1 demo guest 530 Aug 29 16:46 file
-rw-r-xr-x 1 demo guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2
-rwxrwxrwx 1 demo guest 11 Aug 30 21:03 nf
-rwxrwxrwx 1 demo guest 14 Sep 2 09:51 nf1
-rw-rw-rw- 1 root sys 31 Sep 1 13:45 ravasz
-rw-rw-rw- 1 demo guest 13 Aug 29 16:53 semmi
lrwxrwxrwx 1 demo guest 20 Aug 23 23:14 sendmail.cf ->
/usr/lib/sendmail.cf
-rw-rw-rw- 1 demo guest 54 Aug 29 16:57 temp
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
hp 44:
Parancs argumentumok jra felhasznlsa
E mechanizmus arra ad lehetosget, hogy ne csak teljes parancsokat hajtsunk vgre az ese-
mnypufferbol, hanem az elozo esemnyek parancs argumentumait nll ptokockkknt
hasznljuk fel. A C shell ugyanis nem csak magukat a vgrehajtott esemnyeket szmozza
meg, de az egyes parancsok argumentumait is. Egy tetszoleges argumentumra gy hivatkoz-
hatunk, hogy az elozoekben ltott brmelyik mdszerrel megnevezzk a parancsot, amelyben
11. fejezet A C shell
179
a kvnt argumentum elofordult, majd egy kettospont (:) karakter utn az albb ismertetendo
mdon hivatkozunk az argumentumra.
Az argumentumokra a Bourne shell-nl ltott mdon, mint sorszmokra hivatkozunk, a k-
lnbsg az, hogy most nem kell oket a dollr ($) jelnek megeloznie. Pldul a !18:0 hatsra
a telnet sz fog behelyettestodni, mert a 18-as esemny sorszm parancs nulladik paramte-
re maga a parancs neve, esetnkben a telnet.
Kt knyelmi jells is rendelkezsre ll: a csk (^) karakter a mindenkori msodik szra,
teht rendszerint a parancsnevet kveto elso argumentumra hivatkozik, a dollr ($) karakter
pedig a legutols szt jelli. Vgl a csillag (*) karakterrel az elso (azaz a szmozsban a
nulladik) argumentumot kveto sszes argumentumra hivatkozhatunk. Egy plda taln vil-
gosabb teszi a dolgokat: ha a parancs, amibol csemegznk a 13. esemny sorszm volt s
gy nzett ki:

cat alma korte repa
akkor
!13:0=cat, !13:1=alma, !13:2=korte, !13:3=repa, !13:^=alma, !13:$=repa s !13:*="alma
korte repa".
Lehetosg van arra is, hogy ne csak egy, hanem tbb egymst kveto argumentumra is hivat-
kozzunk, ilyenkor a kettospont utn egy ktojellel elvlasztott listt lehet megadni. A !7:3-$
jells pldul a hetedik parancs sszes paramtert kijelli, a harmadiktl kezdve.
E mechanizmus hasznlhatsgt nagymrtkben nveli az a tny, hogy tetszoleges helyre
beszrhatak az ily mdon megjellt argumentumok, s egy parancsot tbb helyrol vett fo-
darabokbl barkcsolhatunk ssze.
A C shell egy nagyon fontos tulajdonsgra kell itt felhvnunk az olvas figyelmt: a fenti ar-
gumentum behelyettestsi eljrsban a C shell kicsit mskppen rtelmezi az argumentum
fogalmt, mint ahogy azt a Bourne shell-nl lttuk. A Bourne shell-nl argumentumnak csak
azokat a karaktersorozatokat neveztk, amelyeket a vgrehajtand parancsnak tadott a shell,
teht pldul az tirnytsra vonatkoz metakaraktereket (<, >, >>) nem, hiszen ezeket a
shell maga dolgozta fel, a vgrehajtand program ezek ltezsrol nem tudott, nem is tudha-
tott. A C shell azonban a fontosabb metakaraktereket nll argumentumknt kezeli, lega-
lbbis a fenti argumentum behelyettestsi eljrs sorn.
Elozo esemnyek mdostsa
A fentiekben mr ltott eszkzkkel mdunk van arra, hogy elozo parancsokbl tvett dara-
bokkal operljunk. Az albb kvetkezo eszkzkkel lehetosgnk nylik arra is, hogy mdo-
stsuk az gy elolltott j parancsot. E clra az gynevezett esemnymdostk szolglnak,
melyek listjt az albbiakban kzljk.
Az esemnymdostkat, akrcsak az argumentumokra trtno hivatkozsokat, a kettospont
(:) karakter elozi meg.
UNIX felhasznli ismeretek
180
Ha egy teljes elozo esemnyre hivatkozunk, s ez utn szerepel esemnymdost, akkor an-
nak hatsa az egsz kijellt esemnyre rvnyes lesz. Ha egy esemnybol argumentumokat
jelltnk ki, akkor az esemnymdost hatsa arra az argumentumra terjed ki, amelyik utn
szerepel. Egy argumentum vagy esemny utn tbb esemnymdostt is megadhatunk.
Az esemnymdostk listja a kvetkezo:
s/old/new
Az old string elso elofordulst lecserli a new stringre. Ha a new stringben az 'at' (&)
jel szerepel, akkor annak helyre behelyettestodik az old string. Fontos megjegyezni,
hogy csak egyszeres behelyettestst vgez ez a parancs, ha tbbszr akarjuk vgrehaj-
tani, a g esemnymdostt is hasznlnunk kell.
g nmagban nem, csak ms esemnymdostkkal egytt hasznlhat, az elozo mdos-
t (tipikusan az s) hatst a teljes parancssorra kiterjeszti. Ha pldul egy parancssor-
ban az sszes old stringet a new stringre kell cserlnnk, a gs/old/new paranccsal rjk
el a kvnt eredmnyt. Vigyzzunk! Egy parancsargumentumon bell csak egy helyet-
tests hajthat vgre, mg a g esemnymdost megadsa esetn is, teht ha pldul a
mv /usr/src/srclib /tmp parancsban szeretnnk az elso fjlnevet /usr/oldsrc/oldsrclib
nvre cserlni, a gs/src/old& parancs hatsra is csak a
mv /usr/oldsrc/srclib /tmp eredmnyt kapjuk. Ugyanakkor a
mv /usr/src /usr/lib/src /tmp parancsra kiadva a fenti mdostkat, a vrakozsunknak
megfelelo eredmnyt kapjuk, azaz a
mv /usr/oldsrc /usr/lib/oldsrc /tmp parancsot, hiszen a g flagnek megfeleloen minde-
gyik argumentumban megtrtnt a csere egyszer.
p A megnevezett esemnyt kilistzza a kpernyore, de nem hajtja vgre. Ez kivlt akkor
lehet hasznos a szmunkra, ha egy komplex parancsot akarunk editlni, s nem va-
gyunk biztosak abban, hogy egy lpcsoben vgre tudjuk hajtani az sszes mdostst.
q Nem engedlyez tovbbi mdostsokat az adott argumentumon.
h A fjlnvnek tekintett argumentumrl levgja az utols fjlnv komponenst, azaz csak
a katalgus rszt hagyja meg. Pldul a /usr/src/proba.c.1 nvbol e mdost hatsra
/usr/src lesz.
t A h mdost ellentte: a fjlnvnek tekintett argumentum utols nvelemt tartja csak
meg, azaz levgja a katalgus-rszt. A /usr/src/proba.c.1 fjlnvbol a proba.c.1 rszt
hagyja meg.
r A fjlnvnek tekintett argumentum kiterjesztst (azaz az utols pont (.) karakter utni
rszt, ha van olyan) levgja, teht pldul a proba.c.1 fjlnvbol proba.c lesz.
& Megismtli a legutoljra vgrehajtott helyettestsi muveletet. Ez a flag hasznlhat
pldul az s esemnymdost kicselezsre, amikor egy argumentumon bell szeret-
nnk tbbszrs helyettestseket vgrehajtani.
11. fejezet A C shell
181
Az alias mechanizmus
Az alias
5
mechanizmus, amit a C shell s a Korn shell is nyjt a felhasznlnak, igen hasznos
eszkz olyankor, amikor ltalunk gyakran hasznlt, bonyolultan lerhat parancsszekvencik-
ra akarunk egy rvid nvvel hivatkozni. Mukdsi elvben az alias mechanizmusa a makrkra
hasonlt leginkbb; amint a shell egy aliasra bukkan, kifejti azt az alias defincija alapjn.
Hasznos szolglatokat tesznek az aliasok akkor is, ha valamilyen parancsot hajlamosak va-
gyunk rosszul gpelni, netn a DOS utn nem ll r a keznk az ls-re s folyton a dir paran-
csot akarjuk vgrehajtani ilyenkor az alias hasznlatval a problma viszonylag knnyen
megoldhat.
Az rvnyben lvo aliasokat gy listzhatjuk ki, hogy paramterek nlkl adjuk ki az alias
parancsot:

hp 22: alias
h history
hp 23:
j alias megadsa hasonlkppen trtnik,

alias nv parancs
formban, ahol nv az ltalunk vlasztott alias, parancs pedig az a parancs vagy parancssoro-
zat, amiv az aliast a shell kifejti.
Mind mr ltezo parancsnvre ltrehozhatunk aliast, mind j neveket adhatunk. Az elsore egy
plda, ha mondjuk a cd parancsot akarjuk felbovteni, s minden katalgusvlts utn ki-
ratjuk a katalgusban lvo fjlokat:
hp 24: alias cd 'cd \!* ; ls'
hp 25: alias
cd cd !* ; ls
h history
hp 26: cd
FULL-INDEX file1 newfilee2 ravasz temp
akarmi newdir nf semmi text
file newfile nf1 sendmail.cf
hp 27:
A msik megoldsra gyakorlati plda lehet a dir nevu alias, ami a csknys DOS felhasz-
nlk lett knnytheti meg:

hp 29: alias dir 'echo "Ugye ls-t akart mondani...?"; ls -l'
hp 30: dir
Ugye ls-t akart mondani...?
total 378
-rw-rw-rw- 1 demo guest 166262 Aug 23 20:29 FULL-INDEX
-rw-rw-rw- 1 demo guest 14 Aug 29 16:53 akarmi
-rw-rw-rw- 1 demo guest 530 Aug 29 16:46 file

5
Az alias is azon kifejezsek kz tartozik, amit eredeti formjban tartottunk meg, mivel nem ltezik igazn j
magyar megfelelje. (Szoktk msnvknt, illetve lnvknt is emlegetni.)
UNIX felhasznli ismeretek
182
-rw-r-xr-x 1 demo guest 18 Aug 23 20:42 file1
drwxrwxrwx 3 demo guest 1024 Aug 23 20:59 newdir
-rw-rw-rw- 1 demo guest 18 Aug 23 20:42 newfile
-rw-rw-rw- 1 demo guest 18 Aug 23 20:43 newfilee2
-rwxrwxrwx 1 demo guest 11 Aug 30 21:03 nf
-rwxrwxrwx 1 demo guest 14 Sep 2 09:51 nf1
-rw-rw-rw- 1 root sys 31 Sep 1 13:45 ravasz
-rw-rw-rw- 1 demo guest 13 Aug 29 16:53 semmi
lrwxrwxrwx 1 demo guest 20 Aug 23 23:14 sendmail.cf ->
/usr/lib/sendmail.cf
-rw-rw-rw- 1 demo guest 54 Aug 29 16:57 temp
-rw-rw-rw- 2 demo guest 18 Aug 23 20:59 text
hp 31:
Mindkt alias ignyel nmi magyarzatot. ltalnosan elterjedt szoks, hogy az "alias-olt"
parancsot vagy parancssorozatot szimpla idzojelek kz zrjk, elkerlendo hogy a shell be-
helyettestseket vgezzen a tartalmn, vagy hogy a shell metakarakterek (esetnkben a ket-
tospont) zavart okozzanak. A felkiltjel elotti backslash szerepe kevsb magtl rtetodo.
Ha nem szerepelne ott, akkor a C shell szoksos esemnybehelyettestsi mechanizmusa lp-
ne letbe (az ugyanis a szimpla idzojelet se tiszteli), s behelyettesten az alias parancs
elotti utols parancs argumentumait magba az alias definciba ltalban nem ez az, amit
akarunk, mint az albbi plda is mutatja:

hp 35: echo alma korte repa
alma korte repa
hp 36: alias cd 'cd !*; ls'
alias cd 'cd alma korte repa; ls'
hp 37:
Az esemny-behelyettestsi mechanizmus elol a backslash alkalmazsa vdi csak meg a fel-
kiltjel karaktert; ennek hatsra a '!*' metakaraktereket csak az alias vgrehajtsakor fogja
majd a C shell kifejteni s behelyettesteni, s mivel ekkor a mg kifejletlen, alias vgrehajts
nlkli cd parancs volt az elozo parancs, a kifejtett alias annak a paramtereit fogja
megkapni.
Az alias behelyettests
A C shell a parancsok nll szavakra bontsa utn hajtja vgre az aliasok kifejtst: a pa-
rancssor elso szavt leellenorzi, hogy nem szerepel-e az alias listban; ha igen, akkor behe-
lyettesti az illeszkedo alias defincijt az argumentum helybe. Az gy behelyettestett j
parancssor elso szavt megint sszeveti a shell az alias listval, mindaddig, amg tall illesz-
kedo aliasokat. A behelyettestett nevet a shell megjelli, s ha a kvetkezo menetben ugyan-
ez az alias kerl elo, akkor nem vgzi el az aliaskifejtst, elkerlve a vgtelen hurkokat. Emi-
att mukdokpes az elobbiekben bemutatott cd alias is.
Kt olyan megkts van, amit az aliasok hasznlatnl figyelembe kell vennnk: az egyik,
hogy az alias foglalt nv, teht az alias sz maga nem szerepelhet aliasknt. Az

11. fejezet A C shell
183
alias alias akrmi
teht tilos, ha ilyen parancsot adunk ki, a shell hibazenetet ad. (Fordtva mukdik a dolog,
teht az alias parancsnak csinlhatunk j aliast, pldul az

alias a alias
leglis, mellesleg igen gyakori megolds, a kevsnl is kevesebbet gpelni akark rmre,
hasonlan az

alias h history
parancshoz.)
A msik megkts, hogy egy alias defincijban maga az "aliasolt" nv csak egyszer szere-
pelhet, tbbszr nem. Ennek is az clja, hogy kikszbljk a vgtelen hurkokat. Ennek meg-
feleloen az

alias cmd 'cmd; cmd'
tpus szerkezet tiltott, ha ilyet definiltunk, vgrehajtskor "Alias loop" hibazenetet ad a
shell.
Alias trlse
Szksgnk lehet arra is, hogy egy aliast trljnk, akr azrt, mert nincs szksgnk r, akr
mert rosszul definiltuk. Ezt az unalias paranccsal hajthatjuk vgre:

hp 21: alias
h history
hp 22: unalias h
hp 23: alias
hp 24:
tirnytsok
Akrcsak a Bourne shell-nl, itt is lehetosg van a be- s kimenetek tirnytsra. Az albbi-
akban szereplo megadsi mdokat hasznlhatjuk az tirnytskor. Egysgesen igaz az, hogy
az tirnyts forrsaknt illetve cljaknt megadott name fjlnven a C shell szksg esetn
mind fjlnv, mind vltoz, mind parancsbehelyettestst vgrehajt. A C shell mskppen ke-
zeli az tirnytst, mint a Bourne shell, ezrt a metakarakterek hasznlatnl indokolt a fi-
gyelem.

<name A bemeneti csatorna a standard input helyett name lesz.
>name A kimeneti csatorna a standard output helyett name lesz. Ha name mr l-
tezik, rgi tartalma fellrdik. Ha a noclobber shell-vltoz be van llt-
va, s name mr ltezik, a shell hibazenetet ad.
UNIX felhasznli ismeretek
184
>& name Mind a kimenet, mind a hibacsatorna name lesz. Ha a noclobber shell-
vltoz be van lltva s name ltezik, a shell hibazenetet ad.
>>name Additv kimenettirnyts. A kimeneti csatorna tartalmt name tartalm-
hoz fuzi. Ha name nem ltezik, s a noclobber shell-vltoz be van llt-
va, a shell hibazenetet ad.
11. fejezet A C shell
185
>>& name A kimenetet s a hibacsatornt name tartalmhoz fuzi. Ha noclobber be
van lltva, s name nem ltezik, a shell hibazenetet ad.
>! name, >&! name, >>! name, >>&! name
Ugyanaz mint az elozoek, az eltrs a nem ltezo, illetve fellrand name
fjl kezelsben van. Ha a noclobber shell-vltoz be van lltva, az ope-
rtorok utn beszrt ! karakter hatsra rheto el, hogy a shell hibazenet
kldse helyett vgrehajtsa a nem ltezo name ltrehozst, illetve a lte-
zo fjl mdostst. A noclobber shell-vltoz belltsa esetn ugyanis
nem hajtdnak vgre a fjlok fellrst eredmnyezo muveletek.
<<pattern
...
pattern Begyazott input (Here document): a kvetkezo sortl addig olvassa a
shell a bemenetet, amg egy sor elejn nem szerepel a pattern minta. A be-
olvasott szveget gy tekinti, mintha a billentyuzetrol gpeltk volna be.
A gyakorlatban ez gy mukdik, hogy a shell a lezr pattern mintig ter-
jedo sorokat egy belso ideiglenes fjlba olvassa be, majd a lezr minta
felismerse utn egy pipe-ot nyit meg a begyazott inputot fogad prog-
ramhoz, s e pipe-ba msolja az ideiglenes fjl tartalmt. Magn a pattern
mintn a shell nem hajt vgre semmilyen behelyettestst sem, s a beolva-
sott szvegen is csak akkor hajt vgre vltoz- s parancs behelyettestst,
ha a pattern mintt nem vdtk le escape karakterrel vagy idzojelekkel.
prog1 | prog2 A prog1 program kimenett prog2 bemeneti csatornjra kti.
prog1 |& prog2
Nemcsak prog1 kimeneti, hanem hibacsatornjt is prog2 bemenetre ir-
nytja.
A fenti mechanizmusokat megnzve a legfontosabb klnbsg a Bourne shell-hez kpest az,
hogy itt nem lehet kln-kln dnteni a kimenet s a hi-
UNIX felhasznli ismeretek
186
bacsatorna tirnytsrl, hanem vagy a kimenet, vagy a kimenet s a hibacsatorna egyttes
tirnytsrl lehet csak sz.
6

Shell-vltozk
A C shell vltozi, noha alapvetoen ugyangy hasznlandak, mint a standard Bourne shell
vltozi, szmos dologban eltrnek azoktl. Tn az egyik legfontosabb klnbsg, hogy a C
shell vltozi tmbvltozk is lehetnek, s e tmb elemeit egyenknt is llthatjuk, illetve hi-
vatkozhatunk rjuk.
A C shell vltoznevei maximum 20 karakter hosszak lehetnek, alfanumerikus karaktereket,
valamint az alhzs jelet tartalmazhatjk, s betuvel vagy alhzs karakterrel kezdodhetnek.
rtkads s hivatkozs vltozkra
A C shell vltozihoz a set paranccsal rendelhetnk rtket, illetve e paranccsal krdezhetjk
le az aktulis belltsokat. Ha argumentum nlkl adjuk ki a set parancsot, a mr ltott m-
don kilistzza a belltott shell-vltozk rtkt. A tnyleges rtkads a

set var = value
illetve tmbvltoz esetn a

set var = ( wordlist )
formban trtnhet, ahol var a vltoz neve, value, illetve tmbvltoz esetn wordlist a vl-
tozhoz rendelt rtk. Tmbvltoz elemeit kerek zrjelek kz zrva, egymstl szkzzel
elvlasztva kell megadni, a shell is ilyen formban, de zrjelek nlkl listzza ki oket:


6
Nmi trkkzssel megoldhat a hibacsatorna kizrlagos tirnytsa is.
11. fejezet A C shell
187
hp 75: set elso = 1; echo $elso
1
hp 76: set masodik = ( 2 harom 4 ot ); echo $masodik
2 harom 4 ot
hp 77:
Egy vltozt az unset paranccsal lehet trlni.
A fenti pldkbl is lthatan, akrcsak a Bourne shell-nl, itt is a $var megadssal lehet egy
vltozra hivatkozni. A ktrtelmusgek elkerlsre itt is hasznlhat s clszeru is hasznl-
ni a ${var} jellsmdot, ami funkcionlisan ekvivalens az elozovel, de nem ad mdot a vl-
toznv s az utna rt karakterek sszekeversre.
Tmbvltozk elemeire hivatkozskor a $var[index], illetve a ${var[index]} megads hasz-
nlhat. (Az index argumentumon szksg esetn vltozbehelyettestst is vgrehajt a shell.)
Maga az index lehet egyetlen szm, lehet * (ez az sszes elemet kijelli), valamint tl-ig jel-
legu megads is hasznlhat: rtelemszeruen var[m-n] az m-ediktol az n-edikig terjedo ele-
meket jelli ki, flig res megadsnl pedig var[-n] az elsotol az n-edikig, mg var[m-] az m-
ediktol az utolsig hivatkozik a tmbvltoz elemeire.
Szmos vltozt csak kapcsolknt hasznl a shell, a konkrt rtkt nem nzi, csak azt, hogy
be van-e kapcsolva (set var), vagy sem (unset var). Ilyen jelleguek azok a vltozk, amelyek
a shell viselkedst befolysoljk, mint pldul a filec, noclobber stb.
Numerikus shell-vltozk s kifejezsek
Mint lttuk, a set paranccsal tudunk egy shell-vltoznak rtket adni. Ez az rtk karakterso-
rozat lesz. Ha numerikus rtkadst szeretnnk, teht arra volna szksgnk, hogy az adott
shell-vltoz valamilyen numerikus muvelet eredmnyt trolja szmknt, a set parancs he-
lyett az "at" jelet (@) hasznljuk:

UNIX felhasznli ismeretek
188
hp 28: set sum=5+4 # stringkent kezeli
hp 29: echo $sum
5+4
hp 30: @ sum=5+4 # az argumentumokat kulon kell irni!
@: Badly formed number.
hp 31: @ sum=5 + 4 # szamokkent kezeli
hp 32: echo $sum
9
hp 33: set sum1=$sum+3 # megint string lesz
hp 34: echo $sum1
9+3
hp 35: @ sum2 = $sum + 3 # megint szam lesz
12
hp 36:
A numerikus rtkads parancsnak hrom formja van:
@
@ nv = kifejezs
@ nv[index] = kifejezs
Ha csak a @ karakter szerepel parancsknt, ez teljesen ekvivalens az argumentumok nlkl
kiadott set paranccsal, azaz kilistzza a belltott shell-vltozkat (nem csak a numerikuso-
kat!). A msodik megadsi mdra lttunk pldt a fentiekben, a harmadik pedig tmbvltozk
indexelt elemeinek rtkt lltja be, a C nyelvben megszokott szintaxis szerint.
Vltozbehelyettests
A shell-vltozkon a C shell mindig megprbl vltozbehelyettestst vgrehajtani, azaz ha
valamilyen specilis metakarakter szerepel a vltoz nevben, az ennek megfelelo behelyette-
stst vgrehajtja, s az ennek eredmnyekppen add j argumentumot helyettesti be a rgi
helyre. A behelyettestsek megakadlyozsra a vltoznv hivatkozsokban vagy a $ jel
el kell egy backslash karaktert elhelyezni (pldul \$myvar ), vagy pedig szimpla idzojelek
kz kell zrni a hivatkozott vltoz nevt ( '$myvar' ).
11. fejezet A C shell
189
A C shell az albbi specilis vltozbehelyettestsi konstrukcikat hasznlja:
$#name
${#name} A name vltozban lvo szavak szmt (azaz a tmbvltoz elemeinek
szmt) adja meg.
$0 Annak a fjlnak a nevt helyettesti be, ahonnan a bemenetet olvassa.
$n, ${n} Az n-edik pozicionlis paramter. (Egyenrtku a $argv[n] megadssal.)
$* Az sszes pozicionlis paramter ($0 kivtelvel). (Egyenrtku a
$argv[*] megadssal.)
A fenti mechanizmusokra hasznlhatak az albbi esemnymdostk is: :e, :h, :t, :r, :q, s
:x, valamint a :gh, :gt s :gr. (Gyakran hasznlatosak pldul a pozicionlis paramterknt
tadott fjlnevek megtiszttsra, a katalgus s/vagy kiterjesztsek levgsra.)
Az albbi behelyettestsek esetn nem lehet esemnymdostkat hasznlni.
$?var, ${?var} Ha var be van lltva, az 1 rtket helyettesti be, ha var nincs belltva, a
0 rtket.
$?0 Az 1 rtket helyettesti be, ha a bemeneti fjl ismert, 0 rtket, ha nem.
$$ A fut folyamat folyamatazonostjt adja vissza.
$< A standard bemenetrol beolvas egy sort (tovbbi behelyettestst nem hajt
rajta vgre), s azt helyettesti be.
Krnyezeti- s shell-vltozk a C shell-ben
A Bourne s a Korn shell vltozkezelshez kpest a C shell egy igen bonyolult, mondhatni
tlbonyoltott vltozkezelsi mdszert alkalmaz. Eloszr is, a C shell vltozi kt csoportra
vannak osztva: kznsges shell-vltozkra (shell variables), illetve krnyezeti vltozkra
(environment variables). A krnyezeti vltozkat (ezeket rendszerint nagybetuvel rjk) a C
shell automatikusan exportlja a benne meghvott programoknak, mg a shell-vltozkat nem
(ha shell-vltozt akarunk exportlni, akkor a setenv parancsval tehetjk meg).
Az albbi kt plda a norml, illetve a krnyezeti shell-vltozkat mutatja (figyeljk meg a
path s a PATH eltro szintaxist):

hp 1: set # normal valtozok
argv ()
autologout 60
cwd /users/demo
history 20
home /users/demo
noclobber
path (/bin /usr/bin /usr/contrib/bin /usr/local/bin .)
prompt hp !:
savehist 20
shell /bin/csh
status 0
system hp
term sun-cmd
UNIX felhasznli ismeretek
190
A krnyezeti vltozk ugyanekkor:

hp 2: setenv # kornyezeti valtozok
HOME=/users/demo
PATH=/bin:/usr/bin:/usr/contrib/bin:/usr/local/bin:.
LOGNAME=demo
TERM=sun-cmd
SHELL=/bin/csh
MAIL=/usr/mail/demo
MANPATH=/usr/man:/usr/contrib/man:/usr/local/man
TZ=MET-1METDST
A C shell ezenkvl egyes fontos vltozkat megklnbztetetten kezel, s ezeket mind nor-
ml, mind krnyezeti vltozknt nyilvntartja. E shell-vltozk kzl nhny (zrjelben a
megfelelo krnyezeti vltozk neve): user (USER), home (HOME), term (TERM), path
(PATH), shell (SHELL) stb.
Nhny ilyen vltozprnl a kt vltoz kzt semmi kapcsolat nincs, a shell indulsakor azo-
nos rtkre lltja be oket a rendszer (mg ez se trvnyszeru), a tovbbiakban teljesen fg-
getlenek egymstl, s ha szinkronizlni akarjuk oket, neknk kell kiadni a megfelelo paran-
csokat.
set var=$VAR
11. fejezet A C shell
191
hatsra a var shell-vltoz felveszi krnyezeti vltozprja (VAR) rtkt, mg a
setenv VAR $var
parancs hatsra a VAR krnyezeti vltozt frissthetjk fel a norml var shell-vltoz rtk-
vel. Ilyen jellegu vltozprt alkot pldul a shell s a SHELL:
hp 7: set shell=/bin/ksh # shell valtozot modosit
hp 8: echo $shell $SHELL
/bin/ksh /bin/csh
hp 9: setenv SHELL /bin/sh # korny.valtozot modosit
hp 10: echo $shell $SHELL
/bin/ksh /bin/sh
A vltozprok msik csoportjnl viszont, ha a felhasznl megvltoztatja a shell-vltozt, a
megfelelo krnyezeti vltoz automatikusan felfrisstodik; ugyanakkor fordtott irnyban ez
nem ll fenn. Ebbe a csoportba tartoznak a user (USER), a home (HOME) s a term
(TERM) vltozprok, valamint nmikpp kakukktojsknt egyes C shell implementci-
kban a cwd (PWD) vltozk is:
hp 21: echo $term $TERM
sun-cmd sun-cmd
hp 22: set term=vt100; echo $term $TERM
vt100 vt100
hp 23: setenv TERM sun-cmd; echo $term $TERM
vt100 sun-cmd
hp 24:
Vgl csak hogy az eddig se egyszeru modell mg kvethetetlenebb legyen van egyetlen-
egy olyan vltozpr, a path (PATH), ahol a norml- s a krnyezeti shell-vltozk kztt
ktirny kapcsolat ll fenn, azaz brmelyik vltoztatsakor automatikusan frisstodik a m-
sik is; ehhez kpest mr dto radsknt hat, hogy e kt vltoznak a szintaxisa is eltro, a
PATH a UNIX alatt megszokott mdon, kettospontokkal vlasztja el az egyes elemeket (hi-
szen ezt a vltozt dolgozzk fel az egyb programok), a path vltozban viszont szkzzel
elvlasztva vannak felsorolva a katalgusok (ahogy az egy jlnevelt tbbelemu C shell-
vltozhoz illik)...
hp 65: echo $path; echo $PATH
/bin /usr/bin
/bin:/usr/bin
hp 66: set path = ( $path /etc ); echo $path; echo $PATH
/bin /usr/bin /etc
/bin:/usr/bin:/etc
hp 67: setenv PATH $PATH\:$HOME/bin; echo $path; echo $PATH
/bin /usr/bin /etc /users/demo/bin
/bin:/usr/bin:/etc:/users/demo/bin
hp 68:
(Figyeljk meg, hogy az utols pldban a 67-es sorszm parancsnl a kettospont karaktert
is le kellett vdeni a backslash karakterrel, mert klnben esemnymdost metakarakter-
knt kezelte volna a shell.)
A C shell belso vltozi
UNIX felhasznli ismeretek
192
Az albbiakban a C shell belso shell-vltozit tekintjk t, azokat, amelyeket maga a shell de-
finil s hasznl. Az albbi lista szksgkppen nem teljes, mert a C shell implementcik
kztt is jelentos klnbsgek vannak, ugyanakkor az is elofordulhat, hogy az ltalunk hasz-
nlt implementciban nem szerepel valamelyik itt szereplo vltoz.
A vltozk jelentos rsze logikai vltoz (boolean), amelyeknl a konkrt rtk nem rdekes,
csak az, hogy egyltaln be vannak-e lltva, vagy sem. (Mint mr lttuk, egy logikai vltozt
(pldnak okrt a noclobber vltozt) a
set noclobber
paranccsal lehet bekapcsolni, az
unset noclobber
paranccsal pedig kikapcsolni.)
argv E vltoz a parancssori argumentumokat tartalmazza, gy, ahogy a hv
shell azokat tadta.
autologout Ha e vltoz rtke nem nulla, akkor a megadott (percekben mrt) ido el-
teltvel, ha azalatt nem hasznlta a felhasznl a terminlt, kilpteti a fel-
hasznlt a rendszerbol. E szolgltatst vagy a 0 rtk belltsval, a
set autologout=0 paranccsal, vagy az
unset autologout paranccsal lehet letiltani.
cdpath A path vltozhoz hasonl, de ez a cd (valamint a chdir s popd) parancs
vgrehajtsban nyjt knnyebsget. Ha a cd parancs argumentuma rela-
tv elrsi tvonallal van megadva (nem a '/' jellel kezdodik) s az aktulis
katalgus alatt nem tallhat ilyen nevu katalgus, akkor a cdpath vlto-
zban szereplo katalgusokban keresi a megnevezett alkatalgust, s ha va-
lahol tall ilyet, oda vlt. Pldul ha demo nven jelentkeztnk be s a
/users/demo katalgusban vagyunk, s a cdpath vltozt a
set cdpath = ( ~/bin ~/local ) paranccsal lltottuk be, akkor ha kiadjuk a
cd tmp parancsot, a shell eloszr a /users/demo/tmp katalgust keresi; ha
ilyet nem tallt, akkor a /users/demo/bin/tmp, vgl pedig a
/users/demo/local/tmp katalgust fogja keresni.
cwd A munkakatalgus elrsi tvonalt tartalmazza. Minden egyes cd parancs
utn frisstodik az rtke. Bejelentkezskor a HOME vltoz rtkt tar-
talmazza (ami viszont a /etc/passwd fjlban van megadva).
filec Logikai vltoz; bekapcsolsa esetn lehetov teszi, hogy a mr ismerte-
tett mdon hasznljuk a fjlnv kiegsztsi mechanizmust (CTRL-D, il-
letve ESC).
history Az esemnypufferben trolt esemnyek (elozo parancsok) szma.
home A felhasznl alapkatalgust adja meg.
ignoreeof Logikai vltoz. Ha be van kapcsolva, akkor a CTRL-D hatsra nem le-
het kilpni a shell-bol, csak az exit, illetve login shell esetn a logout pa-
ranccsal.
mail Azon fjlok listja, amelyeket a C shell postafjlknt kezel; ha brmelyik
mrete megvltozik, a C shell jelzi, hogy j levl rkezett. Ha az elso ele-
11. fejezet A C shell
193
me e vltoznak numerikus rtk, a C shell az itt (msodpercben) mega-
dott idokznknt ellenorzi le a postafjlokat.
noclobber Logikai vltoz. Megbzhat mentov a kezdo UNIX felhasznlk szm-
ra: ha be van lltva a set paranccsal, akkor meggtolja a fjlok tirnyt-
sok rvn bekvetkezo mdostst. Termszetesen a fjlok ekkor is m-
dosthatak, de kln jelezni kell a '!' karakter hasznlatval, hogy ko-
molyan gondoltuk a dolgot.
noglob Logikai vltoz. Belltsa esetn letiltja a fjlnv behelyettestseket.
Shell script-ekben lehet hasznos, ha gondoskodni akarunk arrl, hogy az
tadott fjlnevek ne essenek ldozatul jabb nem vrt behelyettestsek-
nek.
nonomatch Logikai vltoz. Belltsa esetn, ha egy fjlnv behelyettests nem jr
eredmnnyel, a behelyettesteni prblt mintt adja vissza, nem pedig hi-
bazenetet.
notify Logikai vltoz. Belltsa esetn a httrben indtott folyamatok befeje-
zsrol rgtn rtestst kapunk, egybknt csak a soron kvetkezo
prompt kirsa elott rja ki a httrfolyamatok befejeztt.
path A parancsok keressi tvonala. Az aktulis katalgusra a '.' karakterrel, il-
letve res elemmel lehet hivatkozni. A shell indulsakor a PATH krnye-
zeti vltozbl kapja rtkt, ha pedig vltozik, PATH is kveti a mdo-
sulsokat.
prompt A shell ltal kirt parancspromptot definilja. Nem interaktv shell-ek ese-
tn, teht amik shellscript-et futtatnak, vagy nem terminlrl lettek elindt-
va, prompt rtke nincs belltva. A prompt rtkt a
if ($?prompt == 0) felttellel lekrdezve lehetosgnk nylik arra, hogy
azokat a parancsokat, amelyek nem-interaktv krnyezetben feleslegesek,
ne futtassuk le, gy jelentosen gyorsthat a shell-ek indtsa.
savehist A kvetkezo bejelentkezsre tmentett esemnypuffer mrete (sorokban).
Az elmentett parancsokat a ~/.history fjlban trolja a rendszer, s a fel-
hasznl kvetkezo belpsekor ezekre is tud hivatkozni.
shell Annak a parancsrtelmezonek a nevt tartalmazza, amelyik a shellscript-
eket vgrehajtja.
status A legutols parancs visszatrsi rtke. A szoksos konvenci szerint a
shell beptett parancsai 0 rtket adnak vissza sikeres lefuts esetn, 1-et
sikertelensg esetn, valamilyen abnormlis esemny bekvetkeztekor pe-
dig oktlis 200 addik hozz.
verbose Logikai vltoz. Az esemnybehelyettests megtrtnte utn kirja a pa-
rancsot a kpernyore. Hibakeressnl tehet j szolglatokat.
Parancsbehelyettests
UNIX felhasznli ismeretek
194
A Bourne shell-hez hasonlan a C shell is lehetosget ad arra, hogy egy parancs kimenett
egy msik parancs argumentumlistjba fuzzk (parancs behelyettests). A szintaxis ugyan-
az, mint a Bourne shell-nl, azaz a behelyettestendo parancsot argumentumaival egytt a
backgrave accent (`..`) karakterek kz zrjuk:

hp 29: set hostname=`uname -n`
hp 30: echo $hostname
hp
hp 31:
Fjlnv behelyettests
Az albbi metakarakterek fjlnv behelyettestskor jtszanak szerepet. Minden olyan argu-
mentumot, amelyben az albbi metakarakterek szerepelnek, a C shell behelyettestendo fjl-
nvnek tekint, s az albbi szablyok alapjn prblja a megadott (vagy annak hinyban az
aktulis) katalgusban lvo fjlnevek listjra illeszteni. Ha tallt egy vagy tbb olyan fjlne-
vet, ami illeszkedik a keresett mintra, akkor az argumentum helyre ezeket a fjlneveket fog-
ja behelyettesteni. Ha az illeszts sikertelen volt, a nonomatch shell-vltoz belltstl
fggoen vagy hibajelzst ad a shell, vagy vltozatlanul hagyja az eredeti, fjlnv behelyettes-
tsi metakaraktereket tartalmaz argumentumot:

hp 67: ls x*; echo $status
No match.
1
hp 68: set nonomatch; ls x*; echo $status
x* not found
2
hp 69:
A fenti pldban eloszr belltatlan nonomatch vltozval prbltunk kilistzni nemltezo
fjlokat, a shell a 'No match.' hibazenetet adta, s a parancs visszatrsi rtke 1 volt, ami a
beptett parancs rendellenes lefutst jelzi; ha a nonomatch vltozt bekapcsoltuk, nem a
shell adott hibazenetet, hanem az ls parancs, jelezvn, hogy nem tallta a sz szerint rtel-
mezett argumentumnak megfelelo x* fjlt. A visszatrsi rtk ez esetben 2 volt, amit az ls
parancs lltott be a sikertelen keress hatsra.
Az albbiak a csh ltal rtelmezett fjlnv behelyettesto metakarakterek:

? Brmely karakterre illeszkedo dzsker karakter.
* Akrmennyi tetszoleges karakterre illeszkedik (nulla darab karakterre is!).
[...] Karakterosztly definci: egyetlen olyan karakterre illeszkedik, amelyik a
szgletes zrjelek kztt szereplo karakterek valamelyikvel azonos. A
karakterek megadsa trtnhet tl-ig formban is, pl [a-z] brmelyik
kisbetu karakterre illeszkedik.
Az albbi metakarakterek nem szerepelnek a Bourne shell-nl:
11. fejezet A C shell
195
{..,..} A karakterosztly fogalmnak kibovtse. A kapcsos zrjelek kztt tet-
szoleges hosszsg karaktersorozatok szerepelhetnek, ezeket vesszovel
elvlasztva kell felsorolni. Az ily mdon megadott minta rtelemszeruen
nem egy karakterre, hanem tetszoleges szm karakterre illeszkedhet. Pl-
dul az {a,alfa,beta,gamma}bc minta illeszkedni fog az abc, alfabc,
betabc s gammabc fjlnevekre egyarnt. A kapcsos zrjelek egymsba
is gyazhatak, s hasznlhatak benne a '?' s '*' dzskerkarakterek is.
~ A megnevezett felhasznl alapkatalgusnak (home directory) neve he-
lyettestodik be. Ha pldul rendszernkben a felhasznlk alapkatalgu-
sai a /users katalgus alatt tallhatak, akkor a ~peter megadssal a
/users/peter nv fog behelyettestodni. Ha a tilde karakter utn rgtn egy
slash karakter szerepel, akkor a sajt alapkatalgusunk fog behelyettes-
todni, gy demo nven dolgozva a ~/bin/proba a /users/demo/bin/proba
fjlnvre fog illeszkedni.
Kifejezsek s opertorok
Az albbi pontokban a numerikus- s string-kifejezsek megadsakor hasznlhat opertoro-
kat ismertetjk. Vigyzzunk, hogy az egyes vltozkat, muveleti jeleket s zrjeleket a shell
ltal elklntheto mdon, azaz szkzkkel elvlasztva rjuk. Nhny muveleti jelet ugyan
ennek hinyban is el tud klnteni, de az esetek nagy tbbsgben nem, ezrt legjobb, ha
mindent kln-kln argumentumknt adunk meg.
Aritmetikai opertorok
() Zrjelezs, a kirtkelsi sorrend megvltoztatsra.
+, _, *, / sszeads, kivons, szorzs s oszts.
% Maradkos oszts.
^ Bitenknti kizr VAGY (excl.OR).
~ Unris egyes komplemens.
>>, << Jobbra, illetve balra lptets.
&, | Bitenknti S (AND) s VAGY (OR).
Logikai (relcis) opertorok
== Egyenlo. Mind stringekre, mind numerikus rtkekre hasznlhat.
!= Nem egyenlo. Mind stringekre, mind numerikus rtkekre hasznlhat.
! Negls.
Az albb kvetkezo logikai opertorok esetn mindig zrjelezni kell az operandusokat s az
opertort.
UNIX felhasznli ismeretek
196
>, >=, <, <= Nagyobb, nagyobb-egyenlo, kisebb, kisebb_egyenlo. Csak szmokra.
&&, || Logikai S (AND) s VAGY (OR).
rtkadsi opertorok
Az albbi opertorokkal lehet vltozknak rtket adni.
= rtkads.
+=, -=, *=, /=, %=, ^=
Ezen opertorok egyfajta tmrtett megadst tesznek lehetov, ha az r-
tkads bal oldala s az elso jobboldali operandus azonos; pldul az
a += b megads megfelel az
a = a + b muveletnek. A tbbi rtkadsi opertor hasonlkppen rtelme-
zendo.
7

Postfix opertorok
A C nyelvben szereplo mechanizmushoz hasonlan, itt is lteznek postfix opertorok, a ++ s
a --, melyek gyakorlatilag a var += 1 illetve a var -= 1 konstrukcinak felelnek meg, azaz a
megnevezett var vltoz rtkt eggyel nvelik vagy cskkentik. gy az albbi hrom szerke-
zet egyenrtku (figyeljk meg, hogy a postfix opertornl nem szksges a $ jel kittele a
vltozra hivatkozshoz):

@ i++
@ i = $i + 1
@ i += 1
Fjl- s parancs-teszt opertorok
A fjlokkal kapcsolatos tesztekre kln opertorcsoportot definil a C shell. A felttelek tel-
jeslse esetn igaz (1), egybknt hamis (0) logikai rtket adnak vissza. Nem ltezo, vagy
valamilyen okbl hozzfrhetetlen fjlok tesztelse esetn mindegyik albbi opertor hamis
rtket ad vissza.
-r file Igaz, ha a felhasznlnak olvassi joga van a fjlra.
-w file Igaz, ha a felhasznlnak rsi joga van a fjlra.
-x file Igaz, ha a felhasznlnak vgrehajtsi (keressi) joga van a fjlra.
-e file Igaz, ha a fjl ltezik.
-o file Igaz, ha a felhasznl a fjl tulajdonosa.
-z file Igaz, ha a fjl res (nulla hosszsg).

7
A lptet s a bitmveletekre nincs ilyen rvidtett rsmd.
11. fejezet A C shell
197
-f file Igaz, ha a fjl kznsges llomny (nem katalgus, perifriameghajt,
stb.).
-d file Igaz, ha a fjl katalgus.
Az albbi opertorral parancs(ok) visszatrsi rtkt lehet lekrdezni.

{ command } Ha a kapcsos zrjelek kzti parancs, illetve parancssorozat sikeresen fu-
tott le, igaz (1) rtket ad vissza, egybknt hamisat (0). Nagyon fontos
emlkeznnk r, hogy ez a kirtkelsi md ellenttes magval a parancs
ltal adott visszatrsi rtkkel, hiszen a UNIX-os konvenci szerint a si-
keresen lefutott programok 0 rtkkel lpnek ki, brmi ms visszatrsi r-
tk valami problmt jelez. Ha teht valami miatt a parancs tnyleges
visszatrsi rtkre vagyunk kvncsiak (exit status), azt a status shell-
vltozbl tudhatjuk meg.
Vezrlsi szerkezetek
A C shell beptett vezrlsi szerkezetei teszik lehetov, hogy shell-programokat futtatva (il-
letve korltozott mrtkben a parancssorbl vgrehajtva is) a megfelelo felttelek teljeslse-
kor eltro parancsgak hajtdjanak vgre, vagy ciklikusan ismtlodjn egyes kdrszletek
vgrehajtsa. A C shell ltal biztostott vezrlsi szerkezetek funkcionlisan igen hasonlak a
Bourne (s a Korn) shell megfelelo mechanizmusaihoz, az elso ltsra szembetuno klnbsg
a szintaxisban mutatkozik: a C shell vezrlsi szerkezetei lehetosg szerint a C nyelv megfe-
lelo parancsainak megadsi mdjt kvetik.
if-then-endif
Ez a szerkezet a feltteles elgazsok kialaktsra j. Szintaxisa a kvetkezo:

if (expr1) then
cmdlist1
else if (expr2) then
cmdlist2
else
cmdlist3
endif
A fenti lersban expr1 tetszoleges kifejezs lehet (belertve parancsok visszatrsi rtknek
kielemzst is), a cmdlistn megads pedig tetszoleges szm parancsbl ll sorozatokat je-
ll. Ha expr1 igaz, az elso else gig terjedo programrszt (cmdlist1) hajtja vgre a shell; ms-
klnben, ha expr2 igaz, akkor a cmdlist2 parancslistt, egybknt pedig a cmdlist3 parancsa-
it. Mind az else if, mind az else gak opcionlisak, else if pedig tetszoleges szmban szerepel-
het. A legtbb csh implementcinl vigyzni kell arra, hogy az if ... then, illetve az else if,
UNIX felhasznli ismeretek
198
else s endif szintaktikai elemek kln sorban szerepeljenek, a kztk lvo programrszekkel
ne keveredjenek.
A fenti parancs leegyszerustett vltozata az

if (expr) cmd
megadsi md, ahol egyetlen parancs, cmd hajtdik vgre expr igaz volta esetn (sem pipe,
sem parancssorozat, sem zrjelezett parancsok nem megengedettek ez esetben, s az egsz
parancsnak egy sorban kell szerepelnie
8
).
switch
A switch vezrlsi szerkezet a tbbirny elgaztats cljait szolglja. Szintaxisa a kvetke-
zo:
switch (word)
case pattern
1
)
cmdlist1
...
breaksw
...
case patternm)
cmdlist
m

...
breaksw
default:
cmdlist
n

...
breaksw
endsw
A switch szerkezet vgrehajtsakor a shell sorra sszehasonltja a word argumentumot a case
sorokban szereplo pattern mintkkal, s amelyikre illeszkedik, az ahhoz tartoz cmdlist paran-
csot vagy parancssorozatot vgrehajtja. A word szcskn parancs- s vltoz-behelyettestst
vgez a shell, a pattern mintkon fjlnv- s vltoz-behelyettestseket, ezrt megadhatunk a
mintban *, ? s [..] metakaraktereket is. Ha egyik minta se illeszkedik a word argumentumra,
a default: ghoz tartoz parancs(ok) hajtdnak vgre.
Ha az egyes gak vgn a breaksw kulcssz szerepel, akkor a vezrls a teljes switch szerke-
zetet lezr endsw kulcssz utnra kerl, ellenkezo esetben a soronkvetkezo mintra addik
t. Formai megkts, hogy a case s a default utastsok a sor elejn kell hogy kezdodjenek.

8
Logikailag kell egy sorban szerepelnik, teht ha az olvashatsg gy kvnja, a backslash karakterrel levdve az
jsor karaktereket, tbb sorba is trdelhetjk a parancsot.
11. fejezet A C shell
199
foreach
E parancs ciklusszervezsre alkalmas, szintaxisa az albbi:
foreach var (wordlist)
...
end
A parancs mukdse, a formai eltrsektol eltekintve azonos a Bourne shell for parancsval:
a var vltoz rtke sorra felveszi a wordlist tbbelemu lista egyes elemeinek rtkt, s a le-
zr end kulcsszig terjedo rszt ezzel az rtkkel hajtja vgre. Az elozoekhez hasonlan, a
foreach s az end elemeknek kln sorban kell szerepelnik.
Ha a ciklustrzsn bell arra van szksg, hogy ido elott lpjnk ki, a break utastssal tehet-
jk meg, mely az ot tartalmaz legbelso ciklusbl lptet ki. A kilps utn a break parancsot
tartalmaz sor tbbi rszt hajtja vgre a shell, gy lehetosg van arra, hogy tbb break
kulcssz egyms utn rsval egymsba gyazott ciklusokbl lpjnk ki.
Ha nem a ciklusbl val kilpsre, hanem a kvetkezo ciklus ido elotti kezdsre van szk-
sg, azt a continue paranccsal rhetjk el. Ennek hatsra az ot krlvevo legbelso ciklusfej
jra kirtkelodik, s az j rtkkel folytatdik a vgrehajts.
E vezrlsi szerkezet a parancssorbl is kiadhat, ilyenkor a for ... sor utn az jsor karakter
begpelsekor krdojel jelenik meg (msodlagos prompt), jelezvn, hogy a shell tovbbi be-
vitelre vr.
while
Szintn ciklusszervezo utasts, az albbi szintaxissal:

while (expr)
...
end
Mindaddig, amg az expr kifejezs kirtkelsekor igaz logikai rtket kapunk, az end kulcs-
szig terjedo ciklustrzs vgrehajtdik. A foreach parancshoz hasonlan hasznlhat itt is a
break s a continue parancs a ciklus ido elotti megszaktsra, illetve tovbblptetsre. A
while s az end elemeknek itt is kln sorban kell szerepelnik. E vezrlsi szerkezet is hasz-
nlhat interaktv mdon, a parancssorbl.
goto
A goto label parancs hasznlhat felttel nlkli elgazsok megvalstsra. Hatsra a ve-
zrls a label: mintt tartalmaz sor utni sorra kerl.
UNIX felhasznli ismeretek
200
A parancsvgrehajts folyamata
Az albbiakban azt a folyamatot tekintjk t, amelynek sorn egy ltalunk begpelt parancs-
sorozatot vgrehajt a shell.
9

Ha a vgrehajtand parancs a C shell egy beptett parancsa, a shell felismeri azt, s rgtn
vgrehajtja. Ha nem belso parancsrl van sz, a shell a megadott nevu, vgrehajtsi jogokkal
rendelkezo fjlt fogja keresni az llomnyrendszerben. Ha a fjlnv abszolt elrsi tvonal-
lal van megadva, teht a '/' karakterrel kezdodik, a keressi tvonal egybol adott; ha relatv el-
rsi tvonallal van a fjlnv megadva, a shell a path vltozban szereplo katalgusokban
fogja keresni a fjlt. (E keress felgyorstsra a csh belso tblkban, az n. hash-elsi elj-
rssal indexelve nyilvntartja a keressi tvonalakon tallhat sszes vgrehajthat fjlt. E
belso tblkat a rehash paranccsal tudjuk felfrissteni, az unhash paranccsal pedig a haszn-
latt letiltani.)
Ha a parancsnv nem tartalmaz katalgus rszt, a shell sszeveti a nevet az rvnyes aliasok
listjval; ha valamelyik alias nvvel egyezik, a shell kifejti az aliast a definci szerint, s az
gy add j nvvel, a kifejtett alias elso argumentumval dolgozik tovbb, ha szksges,
jabb alias kifejtseket hajtva vgre. Az alias-kifejtskor a parancsnven kvli keletkezett
ptllagos argumentumok befuzodnek az eredeti argumentumlistba.
Ha a shell vgl megtallta a kvnt fjlt a megfelelo vgrehajtsi jogokkal, elindt egy j fo-
lyamatot, s ennek az j folyamatnak adja t vgrehajtsra a futtatand program nevt s ar-
gumentumait (pontosabban szlva ezt az j folyamatot fogja fellrni a futtatand program-
mal). A futtatand program tpustl fggoen ngyfle mdon trtnhet a fjl vgrehajtsa.
Ha a futtatand program szabvnyos, gynevezett a.out formtum binris vgrehajthat l-
lomny, a kernel fellrja vele az j folyamatot s rgtn vgrehajtja.
Ha a fjl nem binris, hanem szvegfjl, s a '#!' karakterekkel kezdodik, akkor a '#!' karakte-
rek utni argumentummal megnevezett programot fogja a

9
Az esemnybehelyettests megtrtnte utn.
11. fejezet A C shell
201
kernel a vgrehajt programnak tekinteni, elindtja azt az j folyamat helyn, argumentum-
knt tadva neki a vgrehajtand fjl nevt.
Ha a fjl szvegfjl ugyan, de nem a '#!' karakterekkel kezdodik, a fjl elso karaktertol fg-
goen megint csak kt eset lehetsges: ha a fjl elso karaktere a '#' karakter, az j folyamat he-
lyn egy C shell indul el, s az hajtja vgre a fjlt; brmi ms esetben a standard Bourne shell
fog elindulni.
Jobkezels
Amikor a parancssorbl tjra bocstunk egy parancsot vagy parancssorozatot, a csh egy
gynevezett jobazonostt (job id) rendel hozz. Ha nem httrfolyamatknt indtottuk a
parancso(ka)t, ebbol semmit se ltunk. Ha viszont httrfolyamatot futtatunk (a parancso(ka)t
a '&' karakterrel zrjuk le), a prompt megjelensekor a csh szgletes zrjelek kztt kirja a
jobazonostt, utna pedig az ehhez a jobhoz tartozan elindtott sszes folyamat folyamata-
zonostjt:

hp 21: find / -name semmi -print &

[1] 4354
hp 22:
A kurrens jobok listjt a jobs paranccsal tekinthetjk meg, a listban '+' jel jelli a legutolj-
ra meglltott, vagy httrbe helyezett jobot, '-' jellel pedig a megelozo jobot; ha a kurrens job
megszunik vagy elotrbe kerl, ez lp a helyre.
Ha egy elotrben fut folyamatot szeretnnk httrbe helyezni, a suspend funkcihoz rendelt
karakterrel (ez rendszerint a CTRL-Z) tudjuk az elotrben fut folyamatot felfggeszteni; ez-
utn pedig a megfelelo parancsokkal tudjuk folytatni a futst, httrbe helyezni, vgleg lel-
ltani, stb.
A jobokon az fg, bg, kill, stop s % parancsokkal tudunk muveleteket vgezni. ltalban
igaz az, hogy egy jobra val hivatkozs a % jellel kezdodik; az nmagban ll % jel a kur-
rens jobra hivatkozik.

UNIX felhasznli ismeretek
202
%, %+, %% A kurrens job.
%- Az elozo job.
%job E megadsnl job akr a konkrt jobazonost lehet (pldul kill %3),
akr az adott jobra egyrtelmuen jellemzo parancssori rszlet: pldul a
fg %find parancs elotrbe fogja hozni az elozoleg httrben futtatott find
parancsot.
A jobkezelo parancsok az albbiak:

bg [%job] Az aktulis, illetve paramterknt megadott jobot a httrben futtatja.
fg [%job] A megadott, illetve paramter hinyban az aktv jobot elotrbe hozza s
ott futtatja.
jobs [-l] Az ppen fut, jobvezrlo parancsokkal elrheto jobokat listzza ki. -l ha-
tsra a folyamatazonostkat is kirja.
kill [-sig][%job] A TERM (lellt), illetve megadsa esetn valamelyik msik sig szignlt
kldi ki a megnevezett folyamatnak. A jobazonostval (%job) hivatkoz-
hatunk a lelltand folyamatra. A -l opci hatsra kilistzza a kldheto
szignlok listjt. A szignl akr szmmal, akr nvvel megadhat.
stop [%job] A megadott, ennek hinyban pedig az aktulis jobot lelltja.
A C shell beptett parancsai
Az albbiakban a C shell beptett parancsait tekintjk t. Ezek olyan parancsok, amik a fel-
hasznl szmra megklnbztethetetlenek a szokvnyos UNIX parancsoktl, a klnbsg
abban rejlik, hogy ezek a shell-be beptett parancsok, nem egy msik UNIX parancsot hv
meg a shell, amikor hasznljuk oket.
: res parancs. Hatsra semmi tevkenysg nem trtnik. Rendszerint fel-
ttel-gak kitltsnl hasznlatos.
11. fejezet A C shell
203
alias [name [def]] A def defincit rendeli hozz a name nvhez. name nem lehet azonos az
alias, illetve unalias szval. Argumentum hinyban a ltezo alias defin-
cik rdnak ki.
bg [%job] Az aktulis, illetve paramterknt megadott jobot a httrben futtatja.
break A legbelso foreach vagy while hurkon kvlre ugrik s onnan folytatja a
vgrehajtst.
breaksw switch parancsbl lp ki, az endsw kulcssz utni rszen folytatva a vg-
rehajtst.
case label: vgrehajtsi g a case vezrlsi szerkezetben.
cd dir, chdir dir A dir katalgusba vlt. Ha dir relatv elrsi ttal megadott katalgusnv,
s a kurrens katalgus alatt nem tallhat, akkor a cdpath vltoz ltal
megadott katalgusok alatt is keresi.
continue A pillanatnyi pontot krlvevo legbelso while vagy foreach ciklusra ug-
rik, s annak elejrol folytatdik a program futsa.
default: A switch vezrlsi szerkezet alaprtelmezsu ga. Ha a tbbi gra ugrs
felttele nem teljeslt, az e szcska utn kvetkezo kd hajtdik vgre.
dirs [-l] A katalgus-verem tartalmt listzza ki, a legutolsnak bert elemmel
kezdve. A -l opci hatsra a teljes elrsi t nevet rja ki, a ~ rvidts
megszunik.
echo [-n] list A list argumentumokat a standard kimenetre rja, szkzzel elvlasztva. A
kirst jsor karakterrel zrja, kivve ha a -n opcit is megadtuk.
eval arg .. Az argumentumokat beolvassa a shell-be s az eredmnyl add paran-
csokat vgrehajtja. Olyankor szoks hasznlni, ha parancs- vagy vltoz-
behelyettestssel generlt parancsokat szeretnnk vgrehajtani, ugyanis
egybknt a parancssor feldolgozsa mr a parancsbehelyettests elott
megtrtnik.
exec cmd A cmd parancs(oka)t az aktulis shell megszntetsvel, annak helyn
hajtja vgre.
exit [(expr)] Megszunik a shell, ha expr definilt, annak rtkvel, egybknt pedig a
status vltoz rtkt flvve.
UNIX felhasznli ismeretek
204
fg [%job] A megadott, illetve paramter hinyban az aktv jobot elotrbe hozza s
ott futtatja.
foreach var ( wordlist )
cmdlist
end Ciklusszervezo vezrlsi szerkezet. var sorra felveszi wordlist elemeinek
rtkt, s a ciklustrzset ezzel az rtkkel hajtja vgre. A break pa-
ranccsal ido elott ki lehet lpni az egsz ciklusszerkezetbol, a continue
pedig soronkvl a ciklusfejjel folytatja, a kvetkezo wordlist elemet be-
helyettestve.
goto label A parancsvgrehajts a label: szveggel kezdodo sor utn folytatdik. Ha
szksges, a label cmkn a shell vgrehajtja a parancs- s fjlnv behe-
lyettestseket, s az gy add cmkt keresi. Ciklusba beugrani tilos,
akr while, akr foreach ciklusrl van is sz.
history [-hr] [n] Kilistzza az esemnypuffer tartalmt, azaz a feljegyzett elozo parancso-
kat. n a kilistzand esemnyek szmt adja meg (ha nem adtunk meg r-
tket, a history vltoz ltal belltott rtket veszi). -r hatsra fordtott
sorrendben listzza ki az esemnyeket, mg -h az esemnyszm nlkl.
if (expr1) then
cmdlist1
else if (expr2) then
cmdlist2
else
cmdlist3
endif Ha expr1 igaz, az elso else gig terjedo programrszt (cmdlist1) hajtja
vgre a shell; msklnben ha expr2 igaz, akkor a cmdlist2 parancslistt,
egybknt pedig a cmdlist3 parancsait. Mind az else if, mind az else gak
opcionlisak, else if pedig tetszoleges szmban szerepelhet.
A fenti parancs leegyszerustett esete az
if (expr) cmd vltozat, ahol egyetlen parancs, cmd hajtdik vgre expr igaz
teljeslse esetn (sem cso, sem parancslista, se zrjelezett parancsok
nem megengedettek).
jobs [-l] Az ppen fut, jobvezrlo parancsokkal elrheto jobokat listzza ki. -l ha-
tsra a folyamatazonostkat is kirja.
kill [-sig] [pid]
[%job]
kill -l A TERM (lellt), illetve megadsa esetn valamelyik msik sig szignlt
kldi ki a megnevezett folyamatnak. Akr folyamatazonostval (pid),
akr a jobazonostval (%job) hivatkozhatunk a lelltand folyamatra. A
-l opci hatsra kilistzza a kldheto szignlok listjt. A szignl akr
szmmal, akr nvvel megadhat.
limit [-h]
[resource]
[max-use] Az aktulis folyamat, vagy az ltala indtott folyamatok eroforrs ignyt
maximlja. Ha a max-use rtket nem adjuk meg, a pillanatnyi belltst
11. fejezet A C shell
205
rja ki; ha az eroforrst (resource) se nevezzk meg, az rvnyes sszes
hatrrtket kilistzza.
-h Hatsra az gynevezett "hard limitet" listzza ki a shell, azokat
az rtkeket, ameddig a pillanatnyi belltsokkal elmehetnk. Hard limi-
tet csak privilgizlt felhasznl nvelhet meg.
A bellthat eroforrsok s neveik erosen rendszerfggoek, de rendsze-
rint a CPU ltal hasznlhat ido, a maximlis fjlmret, programok data-
s stackterletnek mrete, fjllerk szma stb. llthatak be.
login [user [-p]] Lelltja a login shell-t s elindtja a login parancsot. A
-p opci hatsra az elozo krnyezetet tmenti az j felhasznl szmra.
logout Lelltja a login shell-t.
nice [+n|-n]
[command] Megvltoztatja a definilt parancs (ennek hinyban az aktulis shell) pri-
oritst. Minl magasabb szmrtket adunk meg, annl kisebb priorits-
sal (lassabban) fog futni a rendszer. A prioritst nvelni csak a
privilgizlt felhasznlknak van joga. A megadhat szmrtk -20 s +19
kzti rtk lehet, a default 4.
UNIX felhasznli ismeretek
206
notify [%job] Ha a megnevezett, illetve ennek hinyban az aktulis job llapota meg-
vltozik, aszinkron mdon, kzvetlenl rtesti a felhasznlt.
onintr [-|label] A Bourne shell trap parancsnak megfeleloje, a szoftver megszaktsok
(szignlok) lekezelsre. Ha argumentum nlkl hvjuk meg az onintr pa-
rancsot, alapllapotba lltja a megszaktskezelst: ez azt jelenti, hogy
egy szignl rkezsekor (leggyakrabban ha a felhasznl CTRL-C billen-
tyuvel lelvi a programot (TERM szignl)) a shellscript elhal, a vezr-
ls pedig taddik a script-et indt shell szintjre. A - opci hatsra az
sszes szignlt figyelmen kvl hagyja a script.
10
label megadsval a
script egy
goto label parancsot fog vgrehajtani, valahnyszor szignl rkezik.
popd [+n] Eloveszi (egyben trli) a katalgus-verem legfelso elemt, s oda vlt. Ha
szmrtket is megadunk, a verem n-edik elemt trli a shell (de nem vlt
oda!).
pushd [+n | dir] Ha paramter nlkl hvjuk meg, a katalgus-verem elso kt elemt cserli
meg (nulladik s elso), egyttal tvlt az j nulladik elemre.
Ha szmparamtert adunk meg, a katalgus-verem n-edik elemt a verem
tetejre helyezi (s oda is vlt), a tbbi katalgust pedig rotlja.
Ha katalgusnvvel hvjuk meg, a dir katalgust a verem tetejre rakja s
egyttal oda vlt.
rehash A shell a gyorsabb hozzfrs rdekben belso (n. hash-algoritmussal
feltlttt) tblkban tartja nyilvn a path vltozban szereplo katalgu-
sokban lvo sszes parancsot. A rehash paranccsal ezeket a tblkat tud-
juk frissteni, ha valamelyik katalgusba j parancsot rtunk be.
repeat n cmd A cmd parancsot n-szer vgrehajtja.

10
Vannak olyan szignlok, amelyeket nem lehet letiltani: a KILL s a STOP szignl nem foghat el, s a hozz-
juk rendelt default akci sem vltoztathat meg.
11. fejezet A C shell
207
set [var [=value]]
set var[n]=word Paramterek megadsa nlkl az sszes shell vltoz rtkt listzza ki, a
tbb szbl ll vltozrtkeket zrjeles listaknt. Ha csak a var vlto-
znevet adjuk meg, a vltozhoz res (null) rtket rendel. a var[n] mega-
ds a var vltoz n-edik elemhez rendel rtket.
A vltozkhoz rendelt rtkeken a shell elobb vgrehajtja az esetleges
fjlnv- s vltoz behelyettestseket.
setenv [VAR [word]]
Argumentum megadsa nlkl az sszes krnyezeti vltoz rtkt listz-
za ki. Csak a VAR vltoznv megadsval a vltozhoz az res (null) r-
tket rendeli. (A krnyezeti vltozk a konvenci szerint nagybetusek.)
shift [var] A var vltoz, illetve argumentum megadsnak hinyban az argv shell-
vltoz elemeit eggyel balra lpteti a shell, azaz az elso elemet eldobja, a
msodik lesz az elso, stb.
source [-h] name Shell parancsokat olvas be s hajt vgre a name fjlbl. A -h opci hats-
ra a name fjlbl beolvasott parancsokat az esemnypufferbe helyezi,
anlkl hogy vgrehajtan oket.
stop [%job] A megadott, ennek hinyban pedig az aktulis jobot lelltja.
suspend Felfggeszti a fut shell vgrehajtst, hasonlan a CTRL-Z billentyuhz.
switch (string)
case label:
...
breaksw
...
default:
...
breaksw
endsw Tbbirny elgaztats: arra a case gra ugrik a vezrls, amelynek label
mintja illeszkedik az expr kifejezsre. Ha nem volt illeszkedo minta, a
default g hajtdik vgre.
time [cmd] Argumentum megadsa nlkl a fut C shell s az ltala elindtott gyer-
mek folyamatok ltal felhasznlt sszes idot rja ki. A cmd parancs mega-
dsval vgrehajtja azt, s cmd vgrehajtsi idejt rja ki.
umask [value] A ltrehozand j fjlok hozzfrsi jogait lltja be, illetve listzza ki.
unalias pattern Trli a pattern nevu aliasokat. (A vgrehajts elott fjlnv behelyettestst
vgez a megadott alias nven,
unalias * pedig trli az sszes definilt aliast.)
unhash Letiltja a belso hash tbla hasznlatt.
unlimit [-h] [resource]
A resource eroforrsra bevezetett korltokat feloldja. Ha nem neveznk
meg eroforrst, akkor az sszes eroforrsra vonatkoz limitet trli. A -h
opci hatsra a hard limiteket trli. Ezt akrcsak a belltst csak
privilgizlt felhasznl teheti meg.
unset pattern Trli mindazokat a vltozkat, amelyek neve (a fjlnv behelyettestsi
szablyok szerint) illeszkedik a pattern mintra.
UNIX felhasznli ismeretek
208
unsetenv VAR Trli a VAR krnyezeti vltozt. Az unset paranccsal ellenttben, a VAR
vltoznven nem trtnik fjlnv behelyettests.
wait Nem r ki addig parancspromptot, amg a httrben fut folyamatok be
nem fejezodnek, illetve megszakts nem rkezik.
while (expr)
...
end Mindaddig vgrehajtja a while s end kzti rszt, amg expr kirtkelse
igaz (nem nulla) logikai rtket ad.
%[job][&] A megadott, illetve ennek hinyban az aktulis jobot az elotrbe hozza;
ha a & jelet is megadjuk, akkor job a httrben fut tovbb.
209
12. FEJEZET


A KORN SHELL

A UNIX trtnetnek lersakor mr emltettk, hogy a Korn shell a Bourne shell tovbbfej-
lesztseknt jtt ltre a Bell Laboratriumban, David Korn munkjnak eredmnyeknt. Mi-
vel ez egy tovbbfejleszts, ezrt micimacki logikval mindjrt fel is tehetjk a krdst,
hogy miben jobb vagy tbb a Bourne shell-nl. Nhnyat megemltnk az elonykbol:
"history" buffer kezels. Ez nem ms, mint az a lehetosg, hogy a mr elozoleg beg-
pelt s vgrehajtott parancsot jra elo lehet hvni. Tapasztalatunk szerint ez nagyon
megdobogtatja a makacs DOS kedvelok szvt.
lnevek, azaz aliasok, bevezetse. Ez jabb eszkz arra, hogy a shell interaktiv felle-
tt zlsnk szerint alaktsuk, knyelmesebb tegyk.
Bevezeti a job fogalmt, ami a legtbb esetben jobban rdekli a felhasznlt, mint a fu-
t processek fogalma.
A tovbbi j tulajdonsgok felsorolsa helyett inkbb megemltjk, hogy a Korn shell
95%-ban fellrol kompatbilis a Bourne shell-lel.
Ennyi j utn most mindezt rszletezzk, de termszetesen csak azokra a tulajdonsgokra t-
rnk ki rszletesen, ami a Bourne shell-tol eltr.
Indts s kilps a Korn shell-bol
A Korn Shell rendszerint a /bin/ksh parancs futtatsval lesztheto fel a Bourne shell-bol, de
a felhasznl login shell-jv is teheto. Ez utbbi esetben is termszetesen vgrehajtdik a
login folyamat vgn a felhasznl gynevezett home katalgusban lvo .profile llomny.
A shell minden elindulshoz az ENV krnyezeti vltoz segtsgvel mg egy indul
shellscript-et is kthetnk. A shell futst a mr hasznlt eof karakter, ltalban a CTRL-D,
letsvel vagy az exit parancs bersval lehet befejezni.
Ellenttben a C shellel, a Korn shellbol val kilpskor nem hajtdik vgre automatikusan
egy logout konfigurcis parancs. Ha mindenkppen szksgnk van erre a funkcionalitsra,
az "Ami kimaradt..." cmu fejezetben trgyalt mdon, egy trap
1
parancshoz rendelhetjk a
kvnt scriptet, s gy a shell megszunsekor automatikusan le fog futni.

1
A trap parancs segtsgvel egy parancsot tudunk rendelni egy szignlhoz. A parancs akkor fut le, ha a szignl
megjelenik.
UNIX felhasznli ismeretek
210
Konfigurcis fjl s shell-vltozk
A Korn shell a Bourne shell-hez kpest tovbbi beptett vltozkat vezet be. Ezek kzl a
legfontosabbakat, illetve a legrdekesebbeket ismertetjk. Amennyiben az ENV krnyezeti
vltoznak rtket adtunk, azt a shell egy futtathat llomny nevnek fogja fel, s minden
ksh hvskor, gy a bejelentkezs utn is, megprblja lefuttatni. Ennek az llomnynak szo-
ksos, de nem ktelezo elnevezse .kshrc. Mi a tovbbiakban mint krnyezeti llomnyra fo-
gunk r hivatkozni. Hasznlata rdekes tleteket sugall a sajt krnyezet rugalmas alakts-
ra.
Az EDITOR s a VISUAL vltozk definiljk, hogy az editlst lehetov tvo
parancsokban (pldul llomnynv behelyettests, parancssor editls) melyik editor
mukdsmdjt emullja a shell. A Korn shell a vi s az emacs editor zemmdokat
tmogatja, knyvnkben a tovbbiakban a vi zemmd hasznlatt ttelezzk fel.
A MAILPATH vltozban tbb tvonalat is meg lehet adni, amelyek mind leveles-ldk-
hoz vezetnek. Amikor rtket adunk ennek a vltoznak, implicite felszltjuk a shell-t, hogy
a MAIL-ben megadott postaldnkon kvl ezeknek az llomnyoknak a vltozst is figyel-
je a MAILCHECK ltal definilt idokznknt.
A PWD vltoz az aktulis, az OLDPWD vltoz az utols cd parancs elotti katalgus nevt
tartalmazza.
A RANDOM shell-vltoz egy kvzi-vletlen rtket tartalmaz.
A PS1 vltoz itt is a promptot tartalmazza, mghozz alaprtelmezs szerint a dollr jelet.
Nagy elony a Bourne shellhez kpest, hogy a shell minden egyes kiratskor jrartkeli PS1
rtkt, gy ha pldul szerepeltetjk benne a PWD vltozt, a promptban a DOS-ban
megszokott mdon lesz lthat az aktulis katalgus. (Szmos vizsglat tansga szerint
szerint a leggyakrabban vgrehajtott Unix parancsok listjt utcahosszal vezeti a pwd
parancs...) Hlzatos krnyezetben mg knyelmesebb tehetjk letnket, ha gpnk nevt
is szerepeltetjk a promptban:
host=`uname -n` # az uname parancs rvn kinyert gpnv a host nevu vltozba

PS1='${host}:${PWD}> '
Ha a fenti kt sort szerepeltetjk .kshrc fjlunkban, a prompt az albbihoz hasonl lesz:

hp:/users/janos>
A C shellhez hasonlan itt is lehetosg van a kiadott parancsok sorszmozsra a !
karakterrel, gy ha a PS1='!${host}:${PWD} ! ' megadst hasznljuk, promptunk ilyen
jellegu lesz:

[46] hp:/usr/lib/terminfo>
A REPLY, LINE, PS3, - (elvlasztjel), HISTFILE, HISTSIZE rtelmezst az alkalma-
zsnl ismertetjk.
12. fejezet A Korn shell
211
Az _ (alhzs) jelli az elozo utastssor utols argumentumt.
Az elozoek illusztrcijaknt nzzk meg, mi trtnik, ha a $HOME/.profile-unkat gy eg-
sztjk ki:

ENV=$HOME/.kshrc
let SorSzam=0
trap "$HOME/.logout" 0
export ENV SorSzam
A Korn shell minden indulsakor keresni fogja a $HOME/.kshrc nevu llomnyt, mivel ezt
tallja az ENV vltozban, hogy azt lefuttassa. Ennek az llomnynak a tartalma az albbi:
$ cat $HOME/.kshrc
let SorSzam=$SorSzam+1
echo Uj shell indul
$
Vgl a $HOME/.logout tartalma:
$ cat $HOME/.logout
let SorSzam=$SorSzam-1
if test $SorSzam gt 0
then echo Meg nem erte el az utolso reteget
fi
echo "A kilepes `date |cut -c12-20 ` -kor tortent"
$
Gondoljuk vgig mi trtnt, ha a kpernyon kvetkezo sorozatot ltjuk.
login:zsu
Uj shell indul
$ echo $SorSzam
0
$ ksh
Uj shell indul
$ echo $SorSzam
1
$ exit
Meg nem erte el az utolso reteget
A kilepes 12:10:00:-kor tortent
$ exit
A kilepes 12:10:02:-kor tortent
login:
A shell opciinak belltsa
A shell opcii a shell funkcik vgrehajtsnak mdjt hatrozzk meg. Az opcik be- (on)
illetve kikapcsolt (off) llapotban lehetnek. Az opcikat a set -o paranccsal lehet lekrdezni,
illetve tkapcsolni. Ennek ismertetse a Korn parancsok kzt megtallhat.
UNIX felhasznli ismeretek
212
Az opcik:
(Az rtelmezs mindig a bekapcsolt llapotra vonatkozik. A felsorols sorrendje pedig a set -
o parancs diktlta sorrend.)
allexport Minden paramter automatikusan exportlt.
errexit Ha a shell-t nem-interaktv zemmdban dolgozik, s egy utasts vgre-
hajtsa elhal, futtassa le az ERR hibaszignlhoz kttt fggvnyt s azon-
nal lpjen ki. (Ezt a mdot a shell ignorlja a .profile futsa alatt.)
bgnice Minden bg paranccsal indtott job, alacsonyabb prioritssal fut tovbb.
emacs
gmacs Bekapcsolt llapotban az utastssor az emacs gmacs editorok szablyai
szerint javthat.
ignoreeof Nem lehet fjl-vge jellel (azaz CTRL-D -vel) kilpni a shell-bol, helyette
ktelezo az exit parancs begpelse.
keyword A parancs sorban, a parancs utn elofordul rtkadsok is a parancsot
hv shell vltozit lltjk.
markdirs A kirt llomnynevek kztt / karakterrel megjelli a katalgusokat.
monitor A httrben fut jobok kln folyamat-csoportot alkotnak, s ha
befejezodnek, a futsuk eredmnyessgrol egysornyi zenettel tjkoztat-
nak.
noexec A bert az utastssorokat a shell nem hajtja vgre.
noglob Kikapcsolja a shell llomnynv illesztsi (globbing) mechanizmust.
(Pldul nem helyettest be egy csillag helyre tetszoleges llomnyne-
vet.)
nounset Jelzi, ha rtket nem kapott vltoz rtkre akarunk hivatkozni.
verbose Minden begpelt utastst vgrehajts elott visszar a kpernyore.
trackall Az utastsok az elso hasznlatkor teljes elrsi tvonalukkal bekerlnek
az aliasok tblzatba.
vi Az utastssor vi editor jelleggel javtgathat. Ennek rszleteit a history le-
hetosg lersnl fogjuk ltni.
viraw gy rtelmezi a karaktereket, mintha vi editorban dolgozva gpeltk volna
be.
xtrace A shell behelyettestseinek elvgzse utn, de a parancsvgrehajts elott
visszarja a parancssort.
A - (elvlasztjel) vltoz a bekapcsolt opcikat jelzi:

$ echo $-
iskm
$
A fenti plda azt jelzi, hogy is --interactiv shell, k --keyword, m -- monitor, teht az albbi
pldban ez a hrom opci van bekapcsolva.

$ echo $-
iskm
$
12. fejezet A Korn shell
213
A shell, mint parancsrtelmezo tulajdons-
gai
A Korn shell rendelkezik mindazokkal a parancsrtelmezo kpessgekkel, amivel a Bourne
shell. Teht lehet vele a standard ki- s bemenetet stb. tirnytani, parancsokat csohlzatba
sszefuzni, valamint vannak a parancshatrolk, mint ';' (pontosvesszo, azaz a sorozatbani
vgrehajts jele), '&&' (logikai S kapcsolat, a msodik utastst csak az elso sikeres futsa
utn indtja) vgl a '||' (logikai vagy, a msodik utastst csak az elso sikertelen futsa esetn
indtja), valamint kpes shellscript-ek futtatsra is. Mindebbol rszletesen csak arrl szlunk
ami valamiben eltr a Bourne shell-beli megoldstl, vagy annl tbbet nyjt. gy nem kell
kln foglalkoznunk avval, hogyan illeszti a legtbb metakaraktert (*,?, [...]) a shell az llo-
mnynevekre, s az idzojelek hasznlatval. A specialitsokat az albbiakban foglaljuk
ssze:
Ktirny csohlzat
A ktirny csohlzat, npszerubben ktirny pipe, megrtshez elobb
a norml egyirny pipe fogalmt kell megrtennk. Az egyszeru csohl-
zat lnyege, hogy kt folyamat egy FIFO-n keresztl kommunikl egyms-
sal, az

$ ls -l | grep '^d'
parancssor pldul csak a katalgusokat rja a kpernyore. A folyamatot a kernel vezrli, fela-
data az, hogy az ls ne tltse tl a FIFO-t, a grep viszont vrakozzon, ha a FIFO res. Ktir-
ny pipe esetn a Korn shell egy olyan folyamatot hoz ltre, ami a be- s kimenett egyarnt
a szlo shell-tol kapja, egy FIFO-n keresztl.
Ktirny pipe-ot a parancs utn tett- '|&' karakterprral tudunk ltrehozni, ami utn shell-
bol a print -p s read -p parancsokkal tudunk a folyamattal kapcsolatot tartani.
Nyilvnval, hogy ezt a lehetosget leginkbb interaktv mdon mukdo utastsok esetn le-
het kihasznlni, ilyen azonban a UNIX-ban nem sok van. Szintn jl hasznlhat ez az esz-
kz, ha kzbenso llomny ltrehozst akarjuk elkerlni.
A nagyabc nevu script a tr parancsot hasznlja fel a ktirny pipe-hoz. A bemenetre rt so-
rokat a kimenetre rja, mikzben a nagybetuvel kezdodo sorok sszes magnhangzjt szin-
tn nagybeture cserli. (Nem tlsgosan izgalmas feladat, de taln a ktirny csohlzat al-
kalmazsnak egy lehetosgt bemutatja.)

$ cat nagyabc
tr [aeiou] [AEIOU] |&
while read a
do
if echo $a|grep '^[A-Z]' >/dev/null
UNIX felhasznli ismeretek
214
then print -p $a
read -p a
fi
echo $a
done
$
A nevjegyzek hasonl mdon hvja az ltalunk rt keres nevu parancsot, hogy megnzesse
vele, hogy a bemenetre kldtt nv szerepel-e a cimlist fjlban. A plda ugyan bugyuta, a
feladatot egyszerubben is meg lehet oldani, inkbb csak meg kvntuk mutatni, hogy hogyan
dolgozik egy magunk ltal rt script ktirny pipe segtsgvel.

$ cat keres
read a
if grep $a cimlist >/dev/null
then print -p "igen"
else print -p "Kerem a $a cimet:\c"
fi
$
$ cat nevjegyzek
while read a
do
keres |&
print -p $a
read -p b
if [ "$b" = "igen" ]
then
echo "Van ilyen nev a listaban"
* else
echo $b
read b; echo $a : $b>>cimlist
fi
done
$
Az echo parancs argumentumba rt \c a soremelst tiltja be.
llomnynv kiegsztsek
Emlksznk r, hogy a Bourne shell-ben bizonyos esetekben nem kellett kirnunk az llom-
nyok neveit, hanem a csillagot vagy krdojelet tartalmaz argumentum helyre a shell behe-
lyettestette a katalgusban lvo llomnynevekbol azt amire a minta illett, majd az gy
kifejtett parancsot adta t a kernelnek vgrehajtsra. Az llomnynv kiegsztssel a Korn
shell egy olyan eszkzt ad, amivel parancsvgrehajts elott visszakapjuk a mintnkra
illeszkedo llomnyneve(ke)t, ami(ke)t ezek utn elfogadhatunk, vagy trhatunk. Ezt a szol-
gltatst az ESC s mg egy msik billentyu megnyomsval lehet kivltani.
2


2
A Korn shell nem mindegyik rgebbi verzijba ptettk be ezt a lehetsget.
12. fejezet A Korn shell
215
Lehetosgeink az albbiak.
Kt ESC letsre felknlja az illeszkedo nevet, ha csak egy van, ha pedig a keresett minta
tbb nvre is illeszkedik, a shell a leghosszabb kzs rszt rja vissza. Ezt a tovbbiakban
tetszolegesen mdosthatjuk.
Az ESC= karakterpros letse utn a shell felsorolja az sszes illeszke-
do nevet, s az utasts megismtlsvel vrja, hogy a hinyz karaktereket kiegsztsk. Ah-
hoz, hogy ezt megtehessk, elobb az 'a' karaktert (append) kell letnnk, ekkor a vi 'append'
mdjhoz hasonlan tovbbrhatjuk a nevet.
Az ESC* karakterpros utn a shell egy sorban ajnlja fel az illeszkedo neveket:
Meroben ms lehetosg, amikor vltozk rtkeit ratjuk be a shell-lel, a vltoz neve utn
lettt kt ESC karakterrel.
A fenti lehetosgek nem csak llomnynevekre, hanem katalgus tvonalakra is alkalmazha-
tak.
Tilde jel behelyettestse
A tilde (~) karakternek az eloforduls helytol fggoen az albbi rtkei lehetnek:
Egyedl llva rtke a HOME vltoz tartalmval egyenlo.

$ echo $HOME
/home/book
$ echo ~
/home/book
$

UNIX felhasznli ismeretek
216
Ha egy + jel kveti, a PWD tartalmval lesz azonos, ha - jel, akkor az OLDPWD-vel.

$ cd fejezet
$ pwd
/home/book/fejezet
$ echo ~+
/home/book/fejezet
$ echo ~-
/home/book
$

Ha egy /-el lezrt karaktersor kveti, akkor megkeresi az /etc/passwd llomnyban,
hogy tall-e ilyen alap nevu felhasznlt, ha igen, akkor az o alapkatalgusnak teljes
elrsi tvonalt adja vissza.

$ ls ~book/fejezet
Korn vi Csh
$ ls /home/book/fejezet
Korn vi Csh
$
Vltozk s a paramter helyettestsek
Ktfajta vltoz van, a pozicionlis, amire most is sorszmmal hivatkozunk, s a nvvel azo-
nosthat. A shell-be beptett nvvel azonostott vltozkrl mr esett sz.
A Korn shell-ben a vltozknak deklarlhatunk tpust, illetve hasznlhatunk tmbket. A
tpusdeklarls a typeset paranccsal trtnik, amit a parancsok kzt ismertetnk. A
tpusdeklarcival bevezetett vltozra a shell vigyz, hogy ne kaphasson ms tpus rtket.
$ typeset -i a
$ a=qq
ksh:qq:bad number
$ a=1+1
$ echo $a
2
$
A vltozk rtknek mr ismert helyettestsi szintaktikja kiss mdosult.
$ echo $par
Semmit sem ltunk, mert ilyen nevu vltoznak mg nem adtunk rtket
$ echo ${par:-"par ures"}
par ures
$ echo $par

$
Berja a helyettesto rtket, de a vltozt belltatlanul hagyja.
$ echo ${par:=value}
value
12. fejezet A Korn shell
217
$ echo $par
value
$
A vltoz rtket kap, ami ki is rdik az outputra.
$ echo ${par:+masik}
masik
$ unset par
$ echo ${par:+ujabb+}

$
Az rtket kapott vltoz helyett a helyettesto rtk rdik be, az reset egy szkz jelzi.

$ echo par

$ echo ${par:?value}
value
login:
Ha a vltoz mg nem kapott rtket, a helyettesto rtk rdik be s kilptet a shell-bol. Ha
nem adunk helyettesto rtket s res a vltoz, egy behuzalozott zenet jelenik meg.
Az elobbi kifejezsekben hasznlt kettospontot ha elhagyjuk, elmarad an-
nak vizsglata, hogy a vltoz kapott-e mr rtket. (A Bourne shell-ben ez
a vizsglat nem iktathat ki.) Tovbbi lehetosg a paramterek rtknek helyettestsre a
minta segtsgvel trtno kivgs. Ennek ltalnos
alakja:

${parameter##minta} illetve ${parameter%%minta}

$ echo $HOME
/home/un
$ echo $PWD
/home/un/book
$ c=${PWD#${HOME}}
$ echo $c
/book
$
A # hatsra a shell a paramter rtknek elejre illeszti azt a mintt, ami a # msik oldaln
tall, s csak a nem illeszkedo rszeket rja ki. Egy # esetn a legrvidebb, ketto esetn a leg-
hosszabb illeszkedst keresi

$ echo ${x%:*}
noveny:gyumolcs
$ echo ${x%%:*}
noveny
$
A '%' karakter esetn az illeszts logikja hasonl az elobbi esethez, de a levgand mintt
htulrl keresi.
UNIX felhasznli ismeretek
218
Mindkt esetre igaz, hogy ha a shell nem tall illeszkedst, a paramterek teljes rtkt rja
vissza.
Shell vltozk tmbjt ltrehozhatunk tpusdeklarcival vagy rtkadssal. A C nyelvben
hasznlatossal megegyezo mdon a tmbindex szmozsa 0-val kezdodik, a tmbelemre pe-
dig szgletes zrjelbe tett indexszel lehet hivatkozni.

$ typeset -u a[2]
$ b[0]=DES
$ b[1]=szilva
$ a[1]=EUKLI
$ echo ${a[1]}${b[0]} megrta az elemeket
EUKLIDES megrta az elemeket
A vltozkkal kapcsolatban meg kell emltennk nhny specilis jelentsu karaktert, illetve
jellst. A Bourne shell-hez hasonlan a $* illetve a $@ tartalmazza a shellscript sszes para-
mtert, a $1-essel kezdve, szkzkkel elvlasztva.
12. fejezet A Korn shell
219
Ha elemek egy vltoztmb, akkor a kvetkezok lehetsgesek.

$ elemek[0]=csok
$ elemek[1]=or
$ elem=csokor
$ echo ${elemek[*]}
csok or
$
A kifejezs az elemek tmb elemeit rja ki.

$ echo ${#elem}
6
$
Ez a kifejezs az elem helyettestsi rtkben a karakterek szmt rja ki.

$ echo ${#elemek[*]}
2
$
A visszaadott rtk az elemek tmb elemeinek szma.
Utastsok behelyettestse
Utastsok helyettestsre Bourne shell-ben hasznlt visszafele dolo idzojel, `parancs`, for-
ma mell j alak lp be: $(parancs).

$ echo "A bejelentkezett felhasznalok: $(date;
who|sort)"
Fri Jul 30 10:22:03 EDT 1993
jani console Jul 30 09:35
un tty01 Jul 30 09:00
$
A zrjeles alak egymsba egyszerubben skatulyzhat mint az idzojeles. gy az albbi kt
alak egyenrtku:

$ echo $(echo $(echo szia))
szia
$ echo `echo \`echo szia\` `
szia
$
Ezzel az rsmddal egyszerustseket lehet az utastsok rsba vinni, ha pp valakinek erre
szottyan kedve. Az itt kvetkezo mindhrom esetet a shell elfogadja s azonosan rtelmezi.

$ echo "\n$(cat file)"
$ echo "\n $(<file)"
$ echo `<file`
Vgl nzznk egy rdekes pldt a pozicionlis paramterek helyettestsre is. Az albbi
sor egy shellscript belsejbol val s az X-edik pozicionlis vltoz rtkt ratja ki.

UNIX felhasznli ismeretek
220
x=1
echo " a $x valtozo erteke $(eval echo \$$x)"
Gondoljuk meg mit rna ki az echo az eval fggvny nlkl! A fenti echo paranccsal azonos
outputot ad egysornyi echo parancsot Bourne shell-ben nem is tudunk rni. Ezen is elgon-
dolkodhatunk, hogy vajon mirt?
Alias-ok s fggvnyek
A shell-ben az alias parancs segtsgvel egy gynevezett alias vagy lnv tblt lehet feltl-
teni. A tblzat minden bejegyzse egyenlosgjellel sszekapcsolt kt karakterlnc. A shell a
parancs vgrehajtsakor rendre megkeresi, hogy a parancssor elemei szerepelnek-e valame-
lyik bejegyzs bal oldaln, s ha igen, akkor helyettesti az egyenlosgjel jobb oldaln lvo
karakterlnccal. Nagyon fontos tulajdonsg, hogy minden parancs rtelmezsnl csak egyet-
len egyszer nzi meg a shell ezt a tblzatot.
gy az alias-ok hasznlata egy jabb lehetosg arra, hogy a UNIX felhasznli fellett
komfortosabb tegyk a magunk szmra.
Azrt, hogy felhasznlsi pldkat lssunk, nzzk meg egy alias tbla egy rszlett:

$ alias
false=let 0
functions=typeset -f
history=fc -l
integer=typeset -i
r=fc -e -
true=:
type=whence -v
ls=/bin/ls
who=who|sort
$
A fenti lista az utols kt sortl eltekintve a shell-ben kiindulskor is benne lvo alias-okat
mutatja. Magyarzatra az 'ls=' kezdetu sor szorul. Itt arrl van sz, hogy ha az utasts helyett
a teljes tvonalat adjuk meg, ahol a parancs elrheto, akkor a parancsvgrehajts idejt
rvidtjk meg. Mirt? Gondoljunk arra, hogy a vgrehajtand llomnyokat a shell a PATH
tartalma szerinti helyeken keresi. Mielott tovbb olvasn az olvas a fejezetet, megkrjk,
hogy gondolatban keresse meg a shell opcik kztt a track-et.
Az alias-ok hasznlatakor az ember gy rzi, hogy j lenne, ha szimbolikusan hivatkozhat-
nnk az utasts argumentumaira is. Mivel itt egyszeru tblzat alapjn trtno behelyettes-
tsrol van sz, ezt nem tudjuk megtenni. A hinyt ptolni lehet a fggvnyek hasznlatval.
A prompt utn rt eddig mg nem hasznlt kulcssz s az utna tett nyit-csuk zrjelpr jel-
zi a shell-nek, hogy fggvnyt akarunk definilni. Amennyiben szndkunkat megrti, a
RETURN letse utn a folytatsori prompt jelenik meg a kpernyon. A fggvny magjt a
sor elejre rt kapcsos zrjel pr kz rjuk, szintaktikailag a shellscript-ekkel azonosan.
12. fejezet A Korn shell
221
Lssunk egy pldt, ahol a cd parancs vgrehajtst gy bovtjk ki, hogy a promptban meg-
jelenjen az aktulis katalgus.

$ cdd()
>{ cd $1; PS1='! $PWD $'
> }
$ cdd /bin
123 /bin $
Megjegyzendo, hogy a fggvny belsejben is hasznlhatunk alias-okat. Ne feledjk, hogy az
interaktvan definilt alias-ok s fggvnyek csak a shell-bol val kilpsig lnek, ezrt azo-
kat, amelyeket mindig hasznlni kvnunk, a konfigurcis fjljainkba kell belernunk.
UNIX felhasznli ismeretek
222
Egsz aritmetika
A let parancs argumentumaknt aritmetikai kifejezs adhat meg, amit a shell long integerek-
bol ll aritmetikai kifejezsknt rtkel ki. Az albbiakban, a kirtkels szempontjbl
cskkeno precedencia sorrendben a hasznlhat opertorokat soroljuk fel.

- minus jel (ktojel)
! logikai negls
* / % szorzs, oszts, maradk kpzs
+- sszeads, kivons
<= >= <> sszehasonlts
== != azonossg, klnbsg
= rtkads
A muveletek vgrehajtsnak sorrendjt zrjelekkel lehet trendezni. Szintaktikusan ez a
gmblyu "()" zrjelprt jelenti.
Amikor a < vagy a > jelet hasznljuk, a kifejezst idzojelek kz kell tennnk, hogy a shell
ne tvessze ssze az I/O tirnytssal.
A let szcskt helyettesthetjk a "(())" zrjelprral.
Nzznk pldkat. A let argumentumaknt kapott rtkadsban a muveleti jeleket valban
muveleti jelknt fogja fel.

$ a=11+1
$ echo $a
11+1
$ let a=11+1
$ echo $a
12
$
Idzzk fel, hogy Bourne shell-ben egy ilyen rtkadst hogyan tudnnk elvgezni!
Az albbi, tartalmban mr ismeros, bresztora script Korn shell alatt gy rhat meg:

12. fejezet A Korn shell
223
$ cat vekker
let a=`date | cut -c12-13`
let c=`date | cut -c15-16`
until ((a==$1))&&((c>=$2))
do
sleep 50
let a=`date | cut -c12-13`
let c=`date | cut -c15-16`
done
echo brrr
$
A job fogalma
A job nem ms mint egy parancssor vgrehajts kzben a maga teljes krnyezetvel. Legegy-
szerubb esetben ez egy parancs vgrehajtsa, de egy jobnak szmt egy csohlzat is, mint az
albbi pldban:

$ ls -l|grep '^d'|sort>katalogusok
Informcit a rendszerben nyilvntartott munkkrl a jobs paranccsal lehet krni, ami vlasz-
knt a jobszmot (szgletes zrjelben), a job llapotot, egy + vagy - jelet, valamint az erede-
ti utastssort adja. A jobszm egy egsz szm, amit a rendszer oszt ki. A job llapot az albbi
hrom rtk egyike: Running, Done, Stopped, azaz fut, befejezodtt s lelltott A + jel az
aktulis, a - jel a megelozoen indtott munkt jelli.
Stopped llapotba a rendszer suspend karaktervel lehet a munkt tenni. A suspend karakter
az stty paranccsal llthat. A szoksos bellts:

$ stty susp CTRL-Z
A terminl hasznlata s egy job futsa kztt nem kell szoros kapcsolatnak lenni, pldul
egy hosszan fut parancsnak nem kell az egsz futs alatt a terminlt foglalni. Erre megolds
a mr a Bourne shell-bol ismert httrben futtats, amit a parancs utni & jellel kezdem-
nyezhetnk. A shell midon a httrbe teszi a munkt, visszarja a jobszmot, szgletes zr-
jelben, s a folyamatszmot. A ksobbiekben erre a munkra %jobszm-mal lehet hivatkozni.
Az fg paranccsal elotrbe hozhatjuk; az elotrben fut jobot pedig a susped (rendszerint
CTRL-Z) karakterrel felfggeszthetjk, majd az fg, illetve bg paranccsal az elotrben, illetve
a httrben tovbb futtathatjuk. Amennyiben lefutsa elott kvnjuk a munkt befejezni, ak-
kor a kill paranccsal meglhetjk. Ha a monitor shell opci be van kapcsolva, a httrben fu-
t, de normlisan befejezodo parancs valami hasonl llapotzenetet kldi a kpernyore:

[1]+Done du|sort>diskus&
Az utastssor editlsa, history hasznlata
UNIX felhasznli ismeretek
224
Gyakran tapasztaljuk, hogy azok akik DOS felhasznlok is egyben, hinyoljk, hogy a UNIX-
ban nem lehet elohvni mr egyszer vgrehajtott utastsokat, az utastssort minden esetben
jra kell rni. Ez a szomor tapasztalat igaz a Bourne shell-re, de nem igaz a Korn shell-re.
Amennyiben a shell opcikat megfeleloen lltjuk be, gy az utastssor editlhat. A shell
opcikat termszetesen akr interaktiven akr a .profile-unkbl vagy a $ENV llomnybl
bellthatjuk, az albbi mdok egyikvel.

$ set -o vi
Msik lehetosg, ha a VISUAL vagy az EDITOR vltozknak vi, gmacs, vagy emacs rt-
ket adva a megfelelo editort tesszk soreditorr. Az EDITOR rtknek vizsglatra csak ak-
kor kerl sor, ha VISUAL nincs belltva.

VISUAL=vi
export VISUAL
illetve

EDITOR=gmacs
export EDITOR
A HISTFILE s a HISTSIZE vltozk tartalmazzk a parancstrtnetet ler llomny ne-
vt, s utastssorokban szmllt mrett. Amennyiben mskpp nem rendelkeznk, a history
fjl neve .sh_history, hossza pedig 128 parancssor. Ebben az llomnyban mozoghatunk az
editorok egyikvel, ahogy azt mr lertuk, valamint az fc (fix command) paranccsal. A paran-
csot termszetesen ebben az esetben is a parancsokat tartalmaz manulban rszletezzk,
most csak nhny plda kvetkezik.
$ fc -l 20 22
20 pwd
21 ls -l
22 ps
$
A -l opci listzza a parancsfjl kijellt rszlett. A history sz egy szoksos alias az fc -l
karaktersorozatra.
A -e opcival az alkalmas editort vlasztjuk ki, amivel a history megadott sorait editljuk. Az
gy kialaktott parancssorozatot el lehet tenni egy llomnyba, de fggvnyknt vgre is haj-
tdik s bekerl a historyba.

$ fc -e vi 20 22
Az albbiakban az fc -e - parancs magban ll mnuszjele a kijellt editorra vonatkozik. Az
argumentum rtelmezse a kvetkezo: a feljegyzett parancsokban visszafel haladva, keresse
meg az elso olyan echo utastst ahol a paramterekben megtallja a dio szcskt, azt cserlje
ki mogyorora. Ezutn kirja az utastst majd vgrehajtja.

$ echo De jo a dio
De jo a dio
$ fc -e - dio=mogyoro echo
echo De jo a mogyoro
12. fejezet A Korn shell
225
De jo a mogyoro
$
A historyt el lehet rni a mr emltett editorok hasznlatval. Az albbiakban a vi hasznlat-
rl ejtnk nhny szt. A parancssorban egy ESC karaktert tve mris editor parancs mdban
vagyunk. Itt hasznlhatjuk a vi editorbl ismert kurzor mozgat billentyuket, parancsmdban
kiadhat parancsokat (pl.: a,i stb.). Pusztn azt kell tudnunk, hogy a mutat flfele illetve
lefele mozgatsval az elozo parancssorokat tartalmaz llomnyban mozgunk, azok megje-
lennek a kpernyon, s javtgathatk, gy ahogy azt lertuk. A RETURN gomb letse utn
az gy kialaktott parancssort prblja a shell vgrehajtani.
226
13. FEJEZET


AMI KIMARADT...


Ebbe a fejezetbe prbltuk belegymszlni mindazokat a tevkenysgeket, amikkel egy
felhasznlnak elobb utbb szembeslnie kell egy UNIX rendszeren, ugyanakkor az
elvgzendo tevkenysgek nem frnek bele egy-egy parancs rvid lersba; akr azrt, mert
maga a tevkenysg szertegaz, s nagy jelentosge miatt fontos, hogy a felhasznl a
felletesnl kicsit mlyebben megismerkedjen vele; akr pedig azrt, mert az adott
problmakrrel kapcsolatban szmos parancs hasznlatra van szksg, amelyeket nem lett
volna clszeru kln-kln sztszrva trgyalni. Az albbi tmakrk egyttal mind kicsit
"rendszeradminisztrcis zuek", olyan problmk, amikkel ugyan alapvetoen a
rendszeradminisztrtornak kell foglalkoznia, de a htkznapi munka sorn gyakran mi sem
sszuk meg az ismerkedst. E fejezet ebben kvn segtsget nyjtani, a terminlkezels, a
nyomtats, az archivls, valamint a DOS fjlok kezelsvel kapcsolatban.
Terminlkezels
E pontban elsosorban azokkal a problmkkal foglalkozunk, amik a terminlok hasznlatakor
lphetnek fel. ltalban kt eset fordul elo: vagy mr a bejelentkezskor problmk vannak,
mert rossz a terminlbellts, vagy pedig menetkzben lltdik el (pldul binris fjl
listzsa egszen kivlan alkalmas e clra...). Az elso esetben konfigurcis fjljainkban
(.login, .cshrc, .profile) kell a megfelelo belltsokrl gondoskodnunk, utbbi esetben
viszont parancssorbl kell kiadni a megfelelo parancsokat, gyakran "vakreplsben", minden
visszajelzs nlkl.
Elsoknt az stty paranccsal ismerkedjnk meg, ami a terminlbelltsok minden szintjt
vezrli, s ismerete valamilyen szinten mindenkppen ajnlatos (br nem tl lvezetes) a
felhasznlnak, hacsak nincs llandan a kzelben gyakorlott segtsg vagy rendszergazda.
Az stty parancs
Az stty parancs neve a "set teletype" rvidtsbol ered, s mr maga a nv is nemes patint s
idotlensget rzkeltet, hiszen hol vannak ma mr a teletype-ok? A nv mindenesetre
megmaradt, s vele a mltbl rklt opcik s belltsi lehetosgek tmege is.
Fggelk Permutlt index
227
Az stty parancs kt parancssori opcival hvhat meg: a -a opci hatsra az sszes belltst
kilistzza, nem csak a legfontosabbakat, a -g opci hatsra pedig olyan formtumban
trtnik a kirats, hogy egy msik stty parancs bemenetknt tudja azt hasznlni.
A parancssorban szereplo sszes tbbi argumentum mr a konkrt stty belltsokhoz
tartozik, ezeket funkciik szerint tbb csoportba osztjuk. Megadsuk nmikpp eltr a UNIX
opcik tbbsgtol, ugyanis e paramterek tbbsge alternl kapcsolknt zemel, egy-egy
jellemzo terminlfunkcit be-, illetve kikapcsol. A func funkci bekapcsolt (engedlyezett)
llapott az
stty func
paranccsal rhetjk el, mg a kikapcsolst (letiltst) a
stty -func
paranccsal. Nhny paramterhez msik paramter is tartozik, ami a tnyleges rtket
hordozza, pldul
stty kill ^u
a kill funkcihoz (teljes sor trlse) a CTRL-U karaktert rendeli.
A fenti szablyok szerint viselkedo opcik az albbi ismertetokben a (-)func, illetve a func (-
func) jellsekkel szerepelnek.
UNIX felhasznli ismeretek
228
Az stty listiban a vezrlokarakterek a ^c megadssal szerepelnek; berskor
implementcifggoen vagy ugyangy adhatunk meg egy vezrlokaraktert, vagy egy
backslash karaktert runk elje, hogy elnyomjuk esetleges specilis jelentst. A DEL
billentyut a ^?, mg az res, rtkkel nem br belltst a ^' karakterek szoktk jelezni.
Az stty ltal szablyzott funkcik az albbi nagy csoportokba oszthatak: kontroll belltsok
(control modes), input belltsok (input modes), output belltsok (output modes), loklis
belltsok (local modes), vezrlokarakter belltsok (control assignments) s kombinlt
belltsok (combination modes). Implementcitl fggoen ms csoportok is lehetsgesek, s
persze platformonknt ms s ms plusz szolgltatsok is lehetsgesek, ppen ezrt csak a
mindenhol megtallhat, szabvnyosodott belltsokkal foglalkozunk.
Kontroll belltsok
Ebbe a csoportba tartoznak az ltalnos vonali jellemzoket, sebessget, paritst, flow-controlt
szablyz paramterek.

(-)parenb Paritsbit belltsa s szlelse.
(-)parodd Engedlyezse esetn pros, letiltsa esetn pratlan paritst alkalmaz.
(-)parext Kiterjesztett paritsvizsglatot engedlyez (mark s space parity).
cs5, cs6, cs7, cs8
Belltja a megfelelo karaktermretet. (Magyar kezetes megjelentshez
rtelemszeruen a cs8 bellts szksges.)
110, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400
1

A vonali sebessg belltsa az adott rtkre (baud-ban mrve). (Nha
kln ispeed n s ospeed n opcikkal lehet lltani a be- s kiviteli
sebessget.)
(-)hupcl Modemes kapcsolat esetn kilpskor bontja a vonalat.
(-)cstopb Engedlyezs esetn 2, letilts esetn 1 stopbitet hasznl karakterenknt.
Input belltsok
E csoportba tartoznak tbbek kztt a bert karakterek rtelmezst s lekpzst vezrlo
opcik.
(-)ignbrk Figyelmen kvl hagyja a bemenetrol rkezo break karaktert (a break egy
specilis hosszsg vezrlokarakter, tbbek kztt a vonali sebessg
automatikus felismersre s vltsra hasznljk).
(-)ignpar Figyelmen kvl hagyja a paritshibkat.
(-)istrip Engedlyezse esetn 7 bitesre vgja le a vett karaktereket. (Magyar
kezetes szveg esetn ezrt mindig le kell tiltani ezt az opcit.)

1
baud = bit/sec.
Fggelk Permutlt index
229
(-)inlcr A beolvasott jsor (NL) karaktert kocsi-vissza (RETURN) karakterr
kpezi le.
(-)igncr A beolvasott RETURN karaktert figyelmen kvl hagyja.
(-)icrnl A beolvasott kocsi-vissza (RETURN) karaktert jsor karakterr (LF)
kpezi le.
(-)iuclc A beolvasott nagybetuket kisbetukk kpezi le.
(-)ixon A START/STOP kimenet vezrlsi (n. handshake protokoll) hasznlatt
engedlyezi. (A kirats lellthat a STOP vezrlokarakterrel, a START
vezrlokarakter vtelekor pedig folytathat.) (lsd a vezrlokarakter
belltsoknl).
(-)ixany Brmely karakter hatsra folytatdik a kivitel, nem csak a START
vezrlokarakterre.
(-)ixoff A bemeneti puffer majdnem res/majdnem teli llapotban START
illetve STOP vezrlokarakterek kldst vrja.
Output belltsok
(-)opost Tovbbfeldolgozs: a kimenet tovbbi feldolgozsa az albbi opcik
szerint engedlyezett, letilts esetn tovbbi feldolgozs nlkl kldi ki a
karaktereket.
(-)olcuc Kisbetuket nagybetuv konvertlja a kimeneten.
(-)onlcr Az jsor (LF) karaktert kocsi-vissza-soremels (RETURN-LF)
karakterprr kpezi le a kimeneten.
(-)ocrnl A kocsi-visszt (RETURN) jsorr (NL) kpezi le a kimeneten.
(-)onocr Az elso oszlopban lvo kurzor esetn nem kldi el kocsi-visszt
(RETURN) a kimenetre.
(-)onlret Az jsor (NL) karakter hatsra kocsi-vissza (RETURN) funkcit hajt
vgre.
Loklis belltsok
(-)isig Leellenorzi, hogy a beolvasott karakterek nem specilis
vezrlokarakterek-e (intr, quit, swtch).
(-)icanon Engedlyezi az gynevezett kanonikus inputot (tallbban taln
soreditlsnak nevezhetnnk); ilyenkor az erase s kill karaktereket a
kocsi-vissza karakter berkezse elott feldolgozza.
(-)xcase Kis/nagybetus megjelents rtelmezse.
(-)echo Visszar a kpernyore minden begpelt karaktert.
(-)echoe A bettt erase karaktert backspace-szkz-backspace
karaktersorozatknt rja vissza. (CRT terminlokon ennek hatsra a
trlni kvnt karakter valban trlodik, br specilis karakterek,
tabultorok esetn sszezavarodhat a megjelents.)
(-)echok A kill karakter utn jsor (NL) karaktert is kir.
UNIX felhasznli ismeretek
230
(-)echonl Visszarja a kpernyore az jsor (NL) karaktert is.
(-)echoctl A vezrlokaraktereket ^c formban jelenti meg.
Vezrlokarakter belltsok
control-char c A control-char funkcihoz a c karaktert rendeli. A legelterjedtebb
vezrlofunkcik az albbiak:
eof Fjlvge, illetve bevitel vgnek jelzse. Rendszerint CTRL-D.
Fggelk Permutlt index
231
erase A kurzor feletti karaktert trli. Rendszerint a DEL, a RUBOUT,
illetve a BS billentyuk valamelyike, hagyomnyosan a # karakter.
intr Program futsnak megszaktsa. Rendszerint a CTRL-C,
idonknt a DEL karakter.
kill Teljes addig begpelt sor eldobsa. Rendszerint a CTRL-U,
hagyomnyosan a @ karakter.
start Adatkivitel (pldul kpernyolistzs) jraindtsa. Rendszerint a
CTRL-Q karakter.
stop Adatkivitel (pldul kpernyolistzs) lelltsa. Rendszerint a
CTRL-S karakter.
susp Folyamatok futsnak felfggesztse. Rendszerint a CTRL-Z
karakter.
Kombinlt belltsok
A kombinlt mdok, mint nevk is mutatja, egyfajta men lehetosget biztostanak,
jellemzoen egytt elofordul opcik egyszerre trtno belltshoz. Nhny a gyakoribbak
kzl:

Nv belltskombinci
evenp, parity parenb cs7

-evenp, -parity -parenb cs8

oddp parenb parodd cs7

-oddp parenb parodd cs8

raw (-raw, cooked) -opost -isig -icanon -xcase
(Sormd be- s kivitel: nincs kimeneti tovbbfeldolgozs, az erase, kill, intr, quit, swtch
s eot karaktereket se dolgozza fel.

nl -icrnl -onlcr

-nl -icrnl -onlcr _inlcr -igncr -ocrnl -onlret

sane A terminlparamtereket nagyjbl mindenhol hasz-
nlhat rtkekre lltja be.
Eltrs az SVR4 s BSD stty kztt
Az "egysgestett" UNIX-ok elterjedsvel, azaz azoknl, ahol mind az SVR4, mind a BSD
UNIX-ok parancsai megtallhatak, gyakran okoznak gondot azok a parancsok, amelyek
mindkt verziban szerepelnek, de eltro hvsi mddal, vagy mukdssel. Az stty is ezek
kz tartozik, s mert elg alapveto szerepet jtszik, meg kell hogy emlkezznk a kt verzi
legfontosabb eltrseirol.
UNIX felhasznli ismeretek
232
A legfontosabb klnbsg, hogy az SVR4 alap stty esetben a vonalparamterek lltst,
illetve lekrdezst a standard inputknt megadott perifrin vgzi, mg a BSD alap stty
ugyanezt a standard outputra hajtja vgre. Ha teht a /dev/tty23 nevu terminl vonali
paramtereit lltjuk (mondjuk a karaktermretet szeretnnk a cs8 opcira lltani), akkor
SVR4 rendszer esetn az
stty cs8 </dev/tty23
parancsot kell kiadnunk, mg BSD UNIX esetn az
stty cs8 >/dev/tty23
a megfelelo bellt parancs
2
.
Tovbbi eltrs mg a kt verzi kztt, hogy a BSD vltozatnl nhny tovbbi opci is
szokott szerepelni, tbbek kzt parancssori opciknt a -h, aminek hatsra jobban olvashat,
oszlopos formtumban rja ki az opcikat s a vezrlokarakter belltsokat.
Terminlproblmk kezelse
Mint mr emltettk, terminlproblmkkal leginkbb kt esetben tallkozhatunk: egyfelol
belpskor, ha nem megfeleloen belltott paramterekkel rendelkezik a terminlunk,
msfelol ha menetkzben lltdik el valamilyen paramter. A rosszul belltott
terminlparamterek esetn a megolds kulcsa inkbb az illetkes rendszeradminisztrtor
kezben van, o tudja csak mdostani a terminlok alapveto vonali paramtereit, ugyanakkor
a felhasznl is bellthat konfigurcis fjljaiban stty paranccsal llthat paramtereket. A
leginkbb gyakori mdostsok a vezrlokarakterek hozzrendelsben, a paritsbitek
kezelsben s a karaktermret belltsban lehetsgesek; vgl is prblgatssal is be lehet
loni a megfelelo llapotot, de mindenkppen clszerubb a rendszergazda segtsgt krni.
Ms eset, ha menetkzben lltdott el a terminl, pldul egy binris llomny
kilistzsakor. Ilyenkor rendszerint "se kp se hang" llapot kvetkezik be, a terminl
semmilyen billentyure sem reagl, a kpernyo pedig befagy. Az albbiakban ismertetett
mdon ltalban visszallthat a mukdokpes llapot, ha nem, akkor a kpernyo ki-
bekapcsolst is megksrelhetjk (egyes rendszereken ez sajnlatos mdon kilpteti a
felhasznlt).
Ha semmilyen billentyure nem reagl a terminl, valsznuleg a sorlezr jsor (RETURN)
karaktert nem rzkeli a terminl. Prblkozzunk azzal, hogy a parancsok lezrsakor nem az
ENTER (RETURN, stb jelzsu) gombot nyomjuk meg, hanem a CTRL-J, illetve a CTRL-M
karaktert, majd pedig egymsutn mindkettot; ha a be- s kimeneti RETURN-LF lekpezsek
romlottak el, a fenti karakterkombincik valamelyikre reaglni fog.
Ha a bevitelt mr rzkeli a terminl, az


2
Hogy melyik stty verzi hol tallhat (felttelezve, hogy mindkett megtallhat gpnkn), az rendszerfgg,
s a PATH vltoz ltal definilt keressi sorrend hatrozza meg, hogy melyik verzit tallja meg elsnek; a
msikra csak teljes nvmegadssal hivatkozhatunk.
Fggelk Permutlt index
233
stty -a
paranccsal rassuk ki az aktulis belltsokat. Ha semmit nem ltunk, valsznuleg a
kpernyore trtno visszars (echo) opcik vannak letiltva. Adjuk ki az

stty echo echoe echok
parancsot, ennek hatsra mr kell hogy visszajelzst kapjunk.
Ha mr a bevitelt is rzkeli a terminl s vissza is rja a begpelt karaktereket, akkor tbb-
kevsb mukdokpes a dolog; ha kiadjuk az

stty sane
parancsot, a terminlparamterek egy nagyjbl mindenhol alkalmazhat kombincira
llnak be, innen mr "finomhangolssal" lehet az eredeti llapotot visszalltani.
A tput parancs
A tput paranccsal egy terminl bellt paramterei krdezhetoek le, illetve kldhetoek ki az
adott terminlnak. Egyes opciival ezenkvl alapllapotba is helyezheto a terminl, s ez az a
szolgltats, amire szksgnk lehet.
A tput parancs az albbi formkban hvhat:
tput [-Ttype] capname [parms...]
tput [-Ttype] init
tput [-Ttype] reset
tput [-Ttype] longname
A -Ttype megads opcionlis, a type nevu terminlt, ennek hinyban a kurrens terminlt
hasznlja a parancs (ennek neve a TERM shell-vltozban tallhat).
Az elso megadsi md esetn a terminl adatbzisban szereplo megjelentsi funkcik rtkt
lehet lekrni. (A terminl adatbzis a gyakrabban hasznlt terminlok jellemzoit tartalmazza.
Az egyes funkcikhoz szabvnyos elnevezsek (capname) tartoznak (pldul cup a
kurzorpozicionlsi funkci neve, clear a kpernyotrls stb), s minden ilyen funkcinl ott
szerepel az a karaktersorozat, ami az adott terminlnl az adott funkcit vgrehajtja.)
Mivel a lekrt funkcihoz tartoz vezrlokaraktereket a tput a standard kimenetre (azaz a
terminlra) listzza ki, ebbol egyttal az is kvetkezik, hogy ha a sajt terminlunkra
vonatkoz funkcikat krdeztnk le a tput paranccsal, az adott funkcik azonnal vgre is
hajtdnak, hiszen a terminl a karaktersorozat megjelentsekor neki szl, ltala
rtelmezheto vezrlokaraktereket fog ltni. gy pldul brmely tpus terminlon is
jelentkeztnk be, a

tput clear
UNIX felhasznli ismeretek
234
paranccsal trlhetjk a kpernyot.
A msodik s a harmadik megadsi md a terminl alapllapotba hozst, illetve
inicializlst szolglja: tput reset hatsra az alapllapotba jutshoz szksges
vezrloszekvencikat hajtja vgre a terminl, tput init pedig a kezdeti inicializl
muveleteket hajtja vgre. Ezek azok a parancsok, amiket hasznlhatunk mg megbokrosodott
terminlunk helyrepofozsra. Clszeru ltalban az stty belltsok korriglsa utn kiadni
oket.
A negyedik megadsi md az adott terminl nevt s alapveto jellemzoit rjarja ki, a
szokottnl rszletesebb formban.
Nyomtats
A nyomtatssal kapcsolatos krdseket kt kln pontban trgyaljuk, mert az SVR4 s a BSD
eltro parancskszletet hasznl. Elljrban azonban nhny sz arrl, ami kzs: a UNIX
nyomtatskezelse erosen tkrzi a nagygpes rendszerek filozfijt, annak minden
elonyvel s htrnyval egytt. Az elonyk kz sorolhat az, hogy egy UNIX rendszer
szmos nyomtat egyideju s megklnbztetett kezelsre kpes, a nyomtatsi feladatokat, a
nyomtatkat s a felhasznlkat igen komplex szempontok figyelembe vtelvel kpes
egymshoz rendelni. Megoldhat az, hogy egyes printerek csak meghatrozott felhasznlk
meghatrozott tpus fjljait nyomtassk ki, msokat brki hasznlhasson, stb. Mindennek
viszont (a rendszeradminisztrtorra nehezedo terheken kvl) ra is van: a nyomtats erosen
helyfggov vlik, az a specilis nyomtatsi opci, vagy nyomtatnv, ami egy adott
rendszerben hasznlhat, nem felttlenl, sot, nagy valsznusggel egyltaln nem
hasznlhat a msikban. A felhasznl szempontjbl csak egy biztos fogdz akad: ha van a
rendszerben nyomtat installlva, akkor a default nyomtatsi parancs kiadsval valahol,
valamilyen formban az adott fjl kinyomtatdik - brmi, ezen tlmutat specilis igny
esetn (nyomtat, karakterkszlet, specilis opcik megvlasztsa stb) az illetkes
rendszergazdhoz kell fordulni.
Mindkt UNIX verziban igaz az, hogy a nyomtatsi parancs (lp, lpr) kiadsakor nem
kzvetlenl a nyomtatra kerl az elkldtt fjl, hanem egy belso adattrol terletre
(spooling area), ahonnan a nyomtatsvezrlo dmonok indtjk el a tnyleges nyomtatst. Az
egy paranccsal nyomtatsra kldtt fjlokat a rendszer egy egysgknt, gynevezett
nyomtatsi feladatknt (print job) kezeli; ez a jobfogalom hasonlatos a C s a Korn shell job
fogalmhoz. A nyomtatsvezrlo alrendszer a berkezo nyomtatsi feladatokat sorba lltja,
s egyms utn hajtja vgre oket. Mind a BSD, mind az SVR4 verzijban kln parancsok
szolglnak a nyomtatsi sor llapotnak lekrdezsre, illetve mr elkldtt nyomtatsi
feladatoknak a sorbl val kivtelre.
SVR4 rendszerek
Fggelk Permutlt index
235
Az lp parancs
Az lp parancs szolgl az SVR4 UNIX rendszerekben a nyomtatsra, illetve a mr elkldtt
nyomtatsi feladatok egyes jellemzoinek utlagos mdostsra. A parancs ltalnos
formtuma a kvetkezo:

lp [options] [file(s)...]
illetve

lp -i req-id [options]
Az elso forma a fjlok nyomtatsnak elindtsra szolgl. Ha nem adunk meg fjlnevet, a
standard bemenetet olvassa s kldi tovbb nyomtatsra.
Az lp parancs msodik formjban a mr elindtott nyomtatsi feladatok jellemzoit lehet
mdostani; a nyomtatsi feladatra annak req-id azonostjval hivatkozunk. Az azonostt az
lp parancs kirja a kpernyore, az albbihoz hasonl formban:

hp 29: lp proba.c
request id is hp3d-2347 (1 file)
hp 30:
Az lp ltal elfogadott opcik az albbiak (megint csak lehetsgesek kisebb-nagyobb,
implementcitl fggo eltrsek):

-c Nyomtats elott msolatot kszt a fjlrl, nem az eredetit nyomtatja.
-d dest A dest nyomtatra, illetve egy, a dest nyomtatosztlyba tartoz
nyomtatra kldi a fjlt. Ha a dest egy konkrt nyomtat neve, akkor
kizrlag azon nyomtatdhat ki az llomny, ellenkezo esetben brmelyik,
abba az osztlyba tartoz nyomtatn. Ha nem adunk meg nyomtatnevet,
az LPDEST shell-vltozbl veszi a rendszer, ennek hinyban a default
nyomtatra kldi az llomnyokat.
-f form-name
[-d any] A kikldtt fjlt a form-name nyomtatvny forma szerint nyomtatja. Ha a
vlasztott printer nem tmogatja e nyomtatvnyformt, vagy egyltaln
nincs nyomtatvnyforma definilva, a nyomtatst visszautastja a
rendszer. (A nyomtatvnyformk elore definilt fjlok, pldul amik a
fejlces cges papr lerst tartalmazzk.)
-m A nyomtats befejeztekor levelet kld a felhasznlnak.
-n num num pldnyban nyomtatja a fjl(oka)t.
-o options A nyomtat-specifikus opcik megadsa. Ezen opcik rtelemszeruen
eltrnek egymstl, az albbiak azok, amelyek az gynevezett standard
nyomtatsi fellethez tartoznak, s elvileg minden nyomtatnak ismerni
kell oket (zrjelben adjuk meg az alternl jellegu opcik prjt):
nobanner
(banner) Nem nyomtat az egyes feladatokhoz fedlapot.
nofilebreak
UNIX felhasznli ismeretek
236
(filebreak) Az egy feladatban elkldtt tbb fjl esetn nem tesz a fjlok kz
lapdobs karaktert.
length =scaled_dec_num scaled_dec_num sor hossz lapokat nyomtat.
scaled_dec_num egy decimlis szm lehet, amit az lci karakterek
valamelyike kvet, s sorban, centimterben, vagy hvelykben adja meg a
lap mrett. Pldul a
length=10.6c a 10,6cm laphossznak felel meg. Ha sklzs nlkl, csak szmot adunk
meg, az sorszmknt rtelmezodik, azaz a
length=66 bellts 66 soros laphosszsgot jelent.
width=scaled_dec_num
A fentiekhez hasonlan rtendoen, a lapszlessget adja meg. A
mrtkegysg hinyban itt oszlopszmot kell rteni, azaz az
width=72 megadssal 72 karakter szles sorokat definiltunk.
lpi=scaled_dec_num
A sortvolsgot lltja be. Mrtkegysg nlkli szm esetn sor/hvelyk
rtendo.
Fggelk Permutlt index
237
cpi=scaled_dec_num
A karaktersurusget lltja be, mrtkegysg hinyban karakter/hvelyk
rtendo. Hasznlhat mg rtkknt a pica (10 cpi), az elite (12 cpi) s a
tmrtett (condensed) - utbbi az adott nyomtat ltal kezelheto
mindenkori legsurubb betukiosztsnak felel meg.
A length, width, lpi s cpi belltsokkal egyidoben nem adhat meg a -f
opci.
-P page-list A fjl megadott oldalait nyomtatja csak ki. Az oldalszmok mind nll
szmok, mind tl-ig jellegu tartomnymegadsok, mind a ketto
kombincii lehetnek. Nem minden nyomtat szuro tmogatja ezt az
opcit.
-q A nyomtatsi sor prioritsszintjt lehet vltoztatni a 0-39 tartomnyban (0
a legmagasabb).
-s Elnyomja az lp program "szsztyr" zeneteit (pldul a req-id
megadst).
-S char-set [-d any]
-S print-wheel
[-d any] A nyomtatand fjlt a megadott char-set karakterkszlettel, vagy
cserlheto rmuves nyomtat esetn a print-wheel rfejjel nyomtatja ki.
Ha az adott nyomtat vagy nyomtatosztly nem tmogatja a kvnt
karakterkszletet, a nyomtatsi krst az lp visszautastja.
-t title A fedlapon a title cmet nyomtatja ki (alaprtelmezs szerint nem nyomtat
cmet).
-T cont-type [-r] A nyomtatand fjlt egy olyan nyomtatra kldi, amelyik kpes a cont-
type tpus fjlok direkt nyomtatsra. Ha ilyen nyomtat nincsen, olyan
nyomtathoz kldi a fjlt, amelyik rendelkezik a cont-type tpus fjl
kinyomtatshoz szksges szurovel. Ha nem tall ilyen nyomtatt, a
nyomtatsi krst visszautastja. (A leggyakoribb, csak ASCII
karaktereket tartalmaz fjlok tpusa simple, s alaprtelmezs szerint a
nyomtatk is ilyen tpus fjlokhoz vannak rendelve. Ennek az opcinak a
hasznlatra akkor lehet szksg, ha pldul egy PostScript formtum
fjlt akarunk nyomtatni; ilyenkor nem szksges tudnunk, melyik
nyomtatt cmezzk meg nv szerint, az
lp -T postscript ... file
parancs hatsra garantltan olyan nyomtatn fog megjelenni a fjl,
amelyik kpes a PostScript formtum lekezelsre, ellenkezo esetben a
krst visszautastja a rendszer.
-w A nyomtats vgn zenetet r ki a felhasznl terminljra, illetve ha mr
nincs bejelentkezve, levelet kld neki.
A cancel parancs
UNIX felhasznli ismeretek
238
A cancel paranccsal lehet nyomtatsi feladatmtatsi feladatokat trlni a sorbl. A trlendo
feladatokat kijellhetjk azonostjuk (req-id) alapjn, trlhetjk az adott nyomtatra
kldtt sszes feladatot, vagy az adott felhasznl ltal indtott feladatokat.
A cancel parancs hvsi formi a kvetkezok lehetnek:

cancel [req-id ...] [printer ...]

cancel -u login-id ... [printer ...]
Az elso hvsi formnl vagy a trlendo nyomtatsi feladatok azonostit rjuk be, vagy a
nyomtat nevt - utbbi esetben a kurrens feladat fog trlodni az adott nyomtatn.
A msodik hvsi md esetn az adott felhasznl ltal a megnevezett nyomtat(ko)n indtott
sszes nyomtatsi feladat trlodik.
Norml felhasznl csak a sajt maga ltal indtott feladatokat trlheti a sorbl, a
privilgizlt felhasznl jogosult csak a teljes sor trlsre.
Az lpstat parancs
Az lpstat parancs rvn szerezhetnk informcikat a nyomtatsi alrendszer llapotrl,
belertve a nyomtatsi sorokat is. Argumentum nlkl az sszes nyomtatsi feladatot
kilistzza. Ha argumentum opci nlkl szerepel, azt feladatazonostknt kezeli a parancs,
s az adott feladatra vonatkoz informcikat listzza ki. Ha az opcibetu utn nem szerepel
rtk, vagy az all szcska ll, az adott opcival kapcsolatos valamennyi nyomtatsi feladatot
kilistzza az lpstat. Az lpstat legfontosabb opcii a kvetkezok:

-a [list] Kirja, hogy a megnevezett nyomtatk, illetve nyomtatsi osztlyok
fogadnak-e nyomtatsi krelmeket. list a nyomtatk s nyomtatsi
osztlyok neveit tartalmazza.
-c [list] A nyomtatsi osztlyok neveit rja ki, tovbb a hozzjuk tartoz
nyomtatkat.
-d A default nyomtatt, illetve nyomtatsi osztlyt adja meg.
-f [list] [-l] A listban megnevezett nyomtatvnyformkat ellenorzi, hogy ismeri-e
oket a nyomtatsi alrendszer. A -l opci hatsra a nyomtatvnyformk
lerst is kilistzza.
-o [list] A nyomtatsi feladatok llapott jelzi ki. A -o opci el is maradhat. A lista
tartalmazhat vegyesen nyomtat s nyomtatsi osztly neveket, tovbb
feladatazonostkat.
-p [list] [-D] [-l] A listban megnevezett nyomtatk llapott jelzi ki. -D s -l hatsra
rszletesebb sttuszinformcit szolgltat.
-r A nyomtatstemezo httrprogram (LP scheduler) llapott rja ki.
-R A megnevezett feladatnak a nyomtatsi sorban elfoglalt helyzett adja
meg.
-s Rszletes sttuszinformcikat ad az temezorol, a default nyomtatrl, az
egyes nyomtatsi osztlyokrl s azok tagjairl, a nyomtatkhoz rendelt
Fggelk Permutlt index
239
fizikai perifrikrl, a nyomtatvnyformkrl s a hasznlhat karakter-
kszletekrol.
-S [list] [-l] A listban felsorolt karakterkszletek illetve rfejek hozzfrhetosgt
ellenorzi le. A -l opci hatsra mindegyik kszlethez kirja az azt
kiszolglni kpes nyomtatk listjt is.
-t Teljeskru sttuszinformcit ad, a -s opci ltal szolgltatott adatokon
kvl az sszes printer zemkszsgi llapott is kirja.
-u [login-id-list] A listban szereplo felhasznlk nyomtatsi feladataira vonatkoz
informcikat listzza. A felhasznlk mind loklis, mind tvoli gpeken
lvo felhasznlk lehetnek, utbbi esetben a host!user megadssal
hivatkozhatunk rjuk.
-v [list] Az egyes nyomtatkat s a hozzjuk tartoz fizikai perifrikat listzza ki.
BSD rendszerek
BSD alap UNIX rendszerekben a felhasznl szmra fontos nyomtatsi parancsok az lpr
(fjl kikldse a nyomtatnak), az lpq (a nyomtatsi sor lekrdezse) s az lprm (job trlse
a nyomtatsi sorbl).
Az lpr parancs
E paranccsal lehet a fjlokat a nyomtatnak kikldeni, illetve a klnfle nyomtatsi opcikat
belltani. Hvsi formja:

lpr [options] [file(s)...]
Ha nem adunk meg fjlnevet, a standard inputot olvassa. A legfontosabb opcik a
kvetkezok:

-P printer A megnevezett nyomtatra kldi a fjlt; ennek hinyban a PRINTER
krnyezeti shell-vltozban megadott, illetve a default nyomtatra.
-#n n pldnyban nyomtatja a fjl(oka)t.
-C class A feladatazonost szvegknt class fog megjelenni a nyomtatsi
fedlapon, nem a kldo gp neve.
-J job Nem az elso megadott fjl nevt, hanem a job szveget rja ki
azonostnak a nyomtatsi fedlapon.
-T title A title szveget rja ki azonostnak a nyomtatsi fedlapra.
-i [indent] A kimenetre indent szkzzel beugratva nyomtat. (A default 8.)
-w cols cols karakteres lapszlessget ttelez fel.
-m A nyomtats befejeztekor levelet kld a felhasznlnak.
-h Nem nyomtat fedlapot (banner page).
-s Nem msolja be a nyomtatsi adatterletre (spooling area) a nyomtatand
fjlokat, hanem az eredeti pldnnyal dolgozik.
UNIX felhasznli ismeretek
240
-filter Az albbi egybetus opcikkal lehet szurot definilni a nyomtatshoz. A
nyomtatand fjlok eloszr a megfelelo szuron haladnak t, s csak utna
kerlnek a nyomtatsi adatterletre. A hasznlhat szurok listja erosen
rendszerspecifikus, az albbiak csak a leggyakoribbak.
-p A fjlokat a pr parancshoz hasonlan formzza.
-t troff formtum fjlokhoz.
-d TeX formtum fjlokhoz.
(Szmos rgi lpr implementciban nem engedlyezett az opcik egybersa, teht pldul az
lpr -fs megadsi md.)
Az lpq parancs
Az lpq paranccsal lehet a nyomtatsi sor tartalmt megjelenteni. Paramter nlkl meghvva
a sorban ll sszes nyomtatsi feladatot kilistzza, egybknt az albbi opcik segtsgvel
lehet egyes kivlasztott feladatokrl (job#), vagy az egy adott user felhasznlhoz tartoz
nyomtatsi feladatokrl informcit kapni.

lpq [options] [job#] [user]
Az opcik az albbiak:

-P printer A printer nyomtat nyomtatsi sort adja meg, ennek hinyban a
PRINTER krnyezeti shell-vltoz, illetve a default printer sort.
-l Rszletesebb listt ad a nyomtatsi feladatokrl, a kldo gp nevt is
kirva.
+ [interval] Periodikusan kilistzza a sort, amg teljesen el nem fogy. interval a
lekrdezsek kzti ido (msodpercekben).
Fggelk Permutlt index
241
Az lprm parancs
E paranccsal lehet nyomtatsi feladatokat trlni a nyomtatsi sorbl.

lprm [options] [job#] [user]
A feladatokat trlhetjk a feladatazonost (job#) megadsval, illetve a felhasznl
nevnek megadsval az adott felhasznlhoz tartoz sszes feladat trlodik a sorbl.
Argumentum nlkl meghvva az lprm parancsot, az ppen aktv feladat trlodik, feltve
hogy mi indtottuk, teht van trlsi jogosultsgunk. Az opcik:

-P printer A printer nyomtat nyomtatsi sorbl trli a feladatokat, ennek
hinyban a PRINTER krnyezeti shell-vltoz ltal meghatrozott,
illetve a default printer sorbl.
- A felhasznl ltal indtott sszes nyomtatsi feladatot trli a sorbl. Ha
privilgizlt felhasznl adja ki e parancsot, az sszes nyomtatsi feladat
trlodik.
Archivls, ments
A UNIX rendszer zemeltetsnek szerves s nlklzhetetlen rszt kpezi az
llomnyrendszerek rendszeres archivlsa, mentse. Ez termszetesen a
rendszeradminisztrtor gondja s ktelessge, de a mindennapi letben gyakran elofordulnak
olyan szitucik, amikor a felhasznlnak is szksge van arra, hogy llomnyait valamilyen
hordozhat mdira mentse, akr a biztonsg nvelse cljbl, akr azrt, mert mshova kell
teleptenie. E szakaszban hangslyozottan ezen utbbi problmval foglalkozunk, s nem
rintjk azokat a parancsokat, amelyek kifejezetten teljes llomnyrendszerek mentsre
szolglnak. Az ltalunk rintett parancsok a cpio, a tar s a dd. Majdnem minden rendszer
knl ezeken kvl jabb s tbbet tud parancsokat, ezekkel csak egy gond van, de az annl
nagyobb - nem elterjedtek s nem kompatibilisek egymssal. E hrom parancs viszont
minden gpen hozzfrheto, ezrt trgyalsunkban ezekre szortkozunk.
A cpio parancs
A cpio parancs hrom zemmddal rendelkezik, ezeket az elso opcibetuvel adjuk meg.
cpio -ooptions
cpio -ioptions pattern
cpio -poptions dir
cpio -o hatsra a standard bemenetrol egy fjlneveket tartalmaz listt olvas, s ezekbol a
fjlokbl kszt archivumot a standard kimenetre. Az archivum fjl orzi az eredeti
UNIX felhasznli ismeretek
242
llomnyok teljes elrsi tvonalt, s minden eredeti fjlinformcit (tulajdonosok,
hozzfrsi jogok stb).
cpio -i hatsra a standard inputrl az ltalunk megadott mintra illeszkedo fjlokat olvassa
be. A cpio a standard bemenetet egy megelozo cpio -o parancs eredmnynek ttelezi fel, ha
ms formtum bemenetet olvas, a beolvass sikertelen. A beolvasand fjlok nevnek
megadshoz a shell fjlnv behelyettestsben hasznlhat metakarakterei is megadhatak,
teht a '?*[ ]' karakterek, valamint a '!' karakter, ami neglst jelent. Ha nem adunk meg
fjlnv mintt, a cpio az archivum sszes fjljt beolvassa.
A beolvasott fjlokat a munkakatalgusban hozza ltre, az archivumban trolt nevekkel, de
alaprtelmezsben csak akkor, ha az archivumban lvo fjl jabb, mint a gpen lvo vltozat.
A beolvasott llomny mdjai az archivumra kimentett llomnynak felelnek meg, a
tulajdonos s a csoport azonban a cpio parancsot futtat felhasznlval lesz azonos. Ez all
kivtel az, ha privilgizlt felhasznlknt dolgozunk, ekkor megmarad az archivumon trolt
tulajdonos s csoport informci. A -a opci visszalltja az archivum szerinti elrsi, -m
pedig a mdostsi idot.
cpio -p hatsra a standard inputrl katalgus s fjlnevek listjt olvassa, a megnevezett
llomnyokat pedig a megadott katalgus al helyezi el.
Az albbi pldban a munkakatalgus alatti llomnyrendszert hajlkonylemezre mentjk,
majd szintn a cpio paranccsal, visszaolvassuk:

find . -print | cpio -oBvc >/dev/rfd0

cpio -iBvcam </dev/rfd0
A mentsnl a find parancs szolgltatta a fjlnevek listjt, amelyekbol az archivum kszlt;
az archivumfjlt a standard kimenet tirnytsval helyeztk a hajlkonylemezre.
Visszamentsnl az archivumfjl beolvassa egy menetben hozza ltre a szksges fjlokat s
katalgusstruktrkat.
Az albbi pldban teljes katalgusstruktrkat msolunk a newdir katalgusba:

find . -depth -print | cpio -pdlmv newdir
Nagy ernye a cpio-nak a tbbi archivl paranccsal szemben, hogy lehetov teszi a tbb
adathordozra trtno mentst, ha az adatok egy lemezre nem frnek r. Az elso lemez
beteltekor az albbi figyelmeztetst rja ki: "If you want to go on, type device/file name when
ready." jra be kell gpelni a perifriaegysg nevt, s a ments/visszallts a kvetkezo
lemezrol folytatdik.
A cpio legfontosabb opcii a kvetkezok:

-a Hozzfrsi idoket lltja vissza.
-A A fjlokat hozzfuzi a mr ltezo archivumhoz. Csak a -O opcival
egytt, s fjlformtum, vagy lemezen lvo archivumoknl alkalmazhat.
-b Szavanknt megcserli a bjtokat. Csak az -i opci esetn hasznlhat.
-B ha karakter tpus eszkzmeghajtt adtunk meg perifriaknt, 10 blokkos
egysgekben r a perifrira. (lsd -C opci)
Fggelk Permutlt index
243
-c ASCII formtum fejlceket generl az archivumhoz (akkor van
jelentosge, ha eltro architekturj gpek kzt akarjuk az archiv fjlt
mozgatni).
-C size A blokkmretet hatrozza meg (bjtokban mrve). A default 1 blokk, azaz
512 karakter.
-d Szksg esetn ltrehozza a nem ltezo katalgusokat.
-E file file tartalmazza az archivumbl visszamentendo katalgusok s fjlok
listjt.
-f A megadott mintkat nem tartalmaz fjlokat menti vissza az
archivumbl.
-I file A megnevezett file perifrirl olvas, ha vgzett az elso adathordozval,
RETURN hatsra folytatja a kvetkezovel. Csak a -i opcival egytt
hasznlhat.
-k tugorja a rossz fejlcet tartalmaz s srlt fjlokat. Csak a -i opcival
egytt hasznlhat.
-l Ahol lehet, msols helyett lncolst hajt vgre. Csak a -p opci esetn
hatsos.
-L Kveti a szimbolikus lncokat (alaprtelmezs szerint nem).
-O file A megnevezett file perifrira r, az adathordoz beteltekor RETURN
hatsra folytatja a kvetkezo lemezen. Csak a -o opcival egytt
hasznlhat.
-r Interaktv mdon tnevezi a fjlokat. Egyenknt kirja a fjlneveket, az
jsor karakter hatsra tlpi az adott fjlt, a '.' (pont) karakter hatsra az
archivumbl visszalltja az eredeti nevet s elrsi utat.
-s Flszavakban cserli fel a bjtokat.
-S Flszavakat cserl fel szavakban.
-t Csak az archivum tartalmt listzza ki.
-u Felttel nlkl lltja vissza az llomnyt, akkor is, ha a gpen lvo
frissebb, mint az archivum.
-v Bobeszdu zemmd, kirja a fjlok neveit. A -t opcival kombinlva ls -l
formtum listzst kapunk.
A tar parancs
A tar parancs, ellenttben a cpio-val, valdi archivumkezelo program, a mr archivumban
lvo fjlokat trlhetjk, lecserlhetjk vagy frissthetjk. Msik nagy elony a cpio
ellenben, hogy mindig rekurzvan dolgozik, azaz a megadott katalgusnevek az adott
pontbl indul teljes llomnyft jelentik; ennek kvetkeztben a kezelendo fjlok megadsa
sokkal egyszerubb, nem kell egy kln programmal sszeszedni azokat. Komoly hinyossga
viszont, hogy a tbblemezes mentst nem tmogatja.
3


3
Mindez a legelterjedtebb, szabvnyos tar implementcira vonatkozik, egyes vltozatai tmogatjk a
tbblemezes mentseket is.
UNIX felhasznli ismeretek
244
A tar parancsnak is szmos zemmdja van, ezeket a parancsnv utni elso betuvel adjuk
meg, ezt a tar specilis zsargonjban kulcsnak (key) hvjk, s ezt kvetik az egyb opcik. (A
'-' karakter kiraksa nem ktelezo.)
A tar ltalnos hvsi formja a kvetkezo:
tar key[options] file(s)...
Az alapveto kulcsok s a hozzjuk tartoz zemmdok a kvetkezok:

c j archivum ltrehozsa.
r A megnevezett fjlokat az archivum vgre fuzi.
u Archivum frisstse: csak a mg nem archivlt, vagy az archivumban
szereplonl frissebb fjlokat menti el.
x Fjlok visszalltsa az archivumbl.
t Archivum listzs. Fjlnv hinyban a teljes llomnyt listzza.
A tar fontosabb opcii az albbiak:

b size Blokkolsi tnyezo, azt adja meg, hogy hny blokkos egysgekben rja az
archivumot a perifrira. (Alaprtke 1, a maximum 20).
B Kieroszakolja az adott blokkmretu adatmennyisg olvasst, ha kell,
tbbszrs olvassi muveleteket vgrehajtva. Hlzatrl, vagy csvn
keresztl olvasva ugyanis nem mindig rkezik teljes blokkmretnyi adat, s
ez olvasskor megbolondthatja a tar blokkmret felismerst.
f file Az archivum (tarfile) nevt adja meg, ami lehet akr egy perifria
meghajt neve, vagy egy kznsges fjl. Ha az f opci szerepel, de file
nem, a TAPE shell-vltoz, ennek hinyban pedig a /etc/default/tar fjl
ltal megadott perifrianevet hasznlja. A '-' karakterrel lehet a standard
ki-, illetve bemenetet megadni.
h Kveti a szimbolikus lncokat, mintha kznsges fjlok vay katalgusok
lennnek. (Alaprtelmezs szerint nem kveti.)
l Ha nem tudja feloldani az archivland fjl ltal kvetett lncokat, hibt
jelez.
m A visszamentett llomnyok mdostsi idejt fellrja, az archivumban
szereplo helyett a visszaments ideje lesz.
o A visszamentett llomnyok tulajdonosi s csoport jellemzoit fellrja a
tar programot futtat felhasznlval.
P A visszamentett fjlok hozzfrsi jogait az eredetiek szerint lltja be, az
rvnyes umask belltst figyelmen kvl hagyva.
v Muveletek kzben kirja az rintett fjlok neveit, s a muveleti kulcsot.
w Interaktv mdban, minden fjlmuvelet elott visszaigazolst kr.
X file A megadott file llomny azon katalgusok s fjlok neveit tartalmazza,
amelyek kimaradnak a tar muveleteibol (cxt). Tbb X opcit is
megadhatunk egy parancsban, de egy X karakterhez csak egy fjlnv
argumentum tartozhat.
I file A megadott file llomnyban szereplo neveket gy kezeli, mintha
parancssori fjlnv argumentumknt lettek volna berva. (A kizr X
Fggelk Permutlt index
245
felsorols erosebb mint az I, ezrt ha egy fjl mindkt felsorolsban
szerepel, ki fog maradni az adott tar muveletbol.
Az albbi pldnl ttelezzk fel, hogy a nosave nevu fjl tartalma a kvetkezo:

/usr/mail
/usr/man
/usr/share
/etc/inet
/tmp
Az albbi parancs kiadsval a teljes llomnyrendszert szalagra mentjk, a /usr/mail,
/usr/man, /usr/share, /etc/inet s /tmp katalgusfk kivtelvel:

tar cvf /dev/rmt/0h -X nosave /
A fenti pldval kapcsolatban egy dologra szeretnnk mg felhvni a figyelmet, s ez a relatv
elrsi utak hasznlatnak fontossga. A tar llomny az eredeti elrsi tvonalakat megorzi,
ha abszolt elrsi nevet adtunk, akkor azt, ha relatvot, akkor azt. Tegyk fel, hogy az elobbi
plda alapjn elmentett anyagunkbl csak a /users/demo katalgusft szeretnnk visszahozni,
de valamilyen oknl fogva a /old/users/demo nven. Mivel visszalltskor is az archivumban
lvo elrsi utat hasznlja a rendszer, ha a katalgusft abszolt nven mentettk el, nem
tudjuk mshova rakni, mint ahol eredetileg volt! Ezrt mindig gyeljnk arra, hogy a tar ltal
mentendo katalgusfkat reletv mdon cmezzk, pldul a fenti plda helyesen gy nzne
ki:

cd /; tar cvf /dev/rmt/0h -X nosave .
Ennek hatsra a /users/demo katalgusfa ./users/demo nven lesz archivlva, s
visszamenteni a kvetkezokppen tudjuk az j helyre:

cd /old; tar xvf /dev/rmt/0h ./users/demo
E parancs hatsra a /old katalgus alatt ltrejn az elmentett teljes /users/demo katalgusfa.
A dd parancs
A dd parancsrl mr volt sz a segdprogramok kztt, itt elsosorban azrt kerl elo, mert
tvoli mentsek esetn, amikor nem a loklis gpen lvo perifrira mentjk anyagainkat,
gyakran hasznljk a tvoli perifria kezelsre, az albbihoz hasonl mdon:

tar cvfb - 20 . | rsh rhost dd of=/dev/rmt/0m bs=20b
illetve
rsh rhost dd if=/dev/rmt/0m bs=20 | tar xvfbB - 20
A fenti parancssorozatban a munkakatalgust s az az alatti fjlrendszert mentjk el az rhost
nevu tvoli gpen lvo, /dev/rmt/0n nevu mgnesszalagos egysgre, majd vissza. A tar a
standard kimenetre kldi a mentendo anyagokat, az rhost tvoli gp pedig a standard
UNIX felhasznli ismeretek
246
bemenetrol olvassa a mentendo anyagokat, s az of opcival megnevezett perifrira menti el,
20 blokkos egysgekben (ez a maximlis blokkmret, s kivltkppen nagytmegu adatok
mentsnl clszeru belltani, ha az adott perifria ezt tmogatja). A tar parancs esetben is
belltottuk a 20 blokkos blokkmretet (-b 20), s a msodik parancsnl, a visszamentsnl a -
B opcival gondoskodtunk arrl is, hogy a csvn keresztl pontosan a megadott
blokkmretu csomagok menjenek t. (Ha errol kln nem intzkednk, a hlzaton, illetve
csveken keresztl nem teljesen feltlttt csomagok is tmehetnnek.)
Szksg esetn kihasznlhatjuk a dd parancsnak azt a lehetosgt is, hogy eltro lehet a
bemeneti s a kimeneti blokkmret. Ha pldul az adott perifria tmogatja nagyobb
blokkmret hasznlatt (jellemzoen a DAT kazettknl s ms nagykapacits trolknl),
akkor a dd parancs a

dd ibs=20b obs=126b
vagy hasonl opcikkal is hasznlhat. (Pldnkban 20 blokkos egysgekben olvastatunk s
126 blokkos egysgekben runk a mdira. Ne felejtsk, hogy a dd bjtokban szmol, a b
karakter jelzi a blokkos mretmegadst.)
DOS alap fjlok s lemezek kezelse
Mindennapos ignyknt merl fel a gyakorlatban, hogy UNIX felhasznlknt is kpesek
legynk DOS formtum adatllomnyok feldolgozsra. Kt viszonylag egyszeru md
knlkozik megoldsknt. Az egyik, hogy a DOS formtum hajlkonylemezt becsatoljuk
(mountoljuk) a UNIX llomnyrendszerbe, ezltal az teljes jog rszv vlik a
fjlrendszernek, a tovbbiakban gond nlkl hasznlhatak a szoksos UNIX alatti parancsok
a DOS fjlokon is. Elofelttele ennek a megoldsnak, hogy UNIX-os rendszernk ismerje a
DOS fjlrendszer formtumot - ez, hacsak nem valami ilyen rgi UNIX verzival dolgozunk,
ltalban nem szokott gondot okozni. A problma ezzel a megkzeltssel az, hogy a
becsatolst csak privilgizlt felhasznl hajthatja vgre. A problma megkerlsre tbb
megolds ltezik. Az egyik, hogy egy C nyelvu programot kell rni
4
, ami becsatolja, illetve
lecsatolja a DOS-os fjlrendszert, e programot lefordts utn root tulajdonv kell tenni s
be a set-user-id jogokat engedlyezni kell. Ennek hatsra akrki hvja meg e programot,
root-knt hajthatja vgre a DOS llomnyrendszer be-, illetve lecsatolst. E gyorstalpal
megoldsnak lteznek szebb vltoztai is, szabadon hozzfrheto, gynevezett public domain
programok formjban, amik megbzhat mdon gondoskodnak a floppy (s CD-ROM!)
hozzfrs kezelsrol. Ilyen programok installlsa a rendszergazda feladata.
A msik megolds, amit pldul a SunOS 5.x (SVR4 kompatibilis) vltozata knl, hogy a
fenti problmt felismerve talaktjk az opercis rendszert a cserlheto adathordozk

4
Azrt C nyelv programot az egyszerbb shell script helyett, mert egyes rendszerekben biztonsgi okokbl
shell script nem kaphat set-uid jogosultsgokat, csak binris vgre-
hajthat llomny.
Fggelk Permutlt index
247
hasznlatnak specilis ignyeit figyelembe vve: e rendszerben a kernel automatikusan
detektlja egy floppy vagy CD-ROM behelyezst s automatikusan becsatolja az
adathordozt az llomnyrendszerbe.
DOS konverzis segdprogramok
Szmos UNIX rendszer, kivlt az IBM PC alapak, a DOS formtum fjlok kezelsre
kln parancsokat is knl. E parancsok neve s szintaktikja erosen eltro lehet, ltalban a
"dos" szcska szerepel a nevkben, pldul dosdir, doscopy, dosdel, stb. ppen a lehetsges
vltozatok nagy szma miatt ezekkel nem foglalkozunk rszletesebben, csak azrt sem, mert
minden szempontbl az elozo megolds az elonysebb, a DOS fjlrendszer becsatolsa a
UNIX al.
Egy parancsrl azonban mindenkpp meg kell itt emlkeznnk, s ez a dos2unix
5
(illetve
prja, a unix2dos), amely a DOS-UNIX fjkonverzit hajtja vgre. A kt fjlformtum kztt
alapvetoen kt klnbsg van: a DOS alatt a sorvgt a CR-LF karakterpros jelzi, mg UNIX
alatt csak az LF karakter; a msik pedig a DOS alatt a fjlvg jelzsre szolgl CTRL-Z
karakter, aminek a UNIX alatt nincsen megfeleloje. A dos2unix, illetve a unix2dos parancs
szuroknt mukdik s a megfelelo irny fjlkonverzit hajtja vgre.

5
A nv a DOS-to_Unix sz szndkos fonetikus "flrehallsbl" ered.
248
FGGELK


Mivel f!zznk, avagy
permutlt index magyarosan

A UNIX dokumentcik egyik vonz rszlete, az gynevezett permutlt index, amib!l az
olvas, abc sorrendben rendezett felsorolsban tallja a parancsokat s a lersukat. gy
knnyen segteni tud magn, ha azt keresi, hogy adott feladat vgrehajtshoz tall-e UNIX
parancsot. Ezt igazn "angolosan", mr csak a magyar nyelv sajtossgai miatt sem tudjuk
megvalstani. Helyette, lvn az egyik szerz! egyben hziasszony is, a receptknyvekb!l
ismert mit-mihez, mivel-mit felsorolst vlasztottuk.
Mivel-mit tehetnk
cat llomnyok olvassa s egyms utn f"zse
cd munkakatalgus cserje
chgrp llomny, katalgus csoportazonostjnak vltoztatsa
chmod llomnyok, katalgusok hasznlati engedlyeinek vltoztatsa
chown llomny, katalgus tulajdonosnak vltoztatsa
cmp llomnyok sszehasonltsa
comm kt llomny kzs sorainak kivlasztsa
cp llomnyok msolsa
cpio llomnyok archivlsa, visszalltsa
cut mez!k kivgsa egy llomny soraibl.
date dtum s id! belltsa vagy lekrdezse
dd llomnyok msolsa, konvertlsa
expr argumentumok kirtkelse kifejezsknt
file llomnyok tartalmnak tpusmeghatrozsa
find llomnyok keresse a katalgusrendszerben
grep minta keresse llomnyban
ln llomnyok linkelse
ls katalgusok tartalmnak listzsa
mail levl kldse felhasznlknak
mesg zenetek kperny!n megjelentsnek engedlyezse
mkdir j katalgus ltrehozsa
mount katalgusrendszerek becsatolsa a fjlrendszerbe.
Fggelk Permutlt index
249
more llomny tartalmnak kirsa a terminlra
mv llomnyok thelyezse
nohup indtott folyamatok futtatsa a felhasznl kilpse utn
od llomnyok oktlis dumpolsa
passwd password attribtumainak megvltoztatsa
pg llomny listzsa a kperny!re
pr llomnyok nyomtatsa
ps fut folyamatok llapotinformcii
pwd munkakatalgus nevnek kirsa
rm llomnyok trlse
rmdir katalgusok trlse
rsh UNIX parancsrtelmez! cskkentett lehet!sgekkel
rsh tvoli gpeken fut UNIX parancsrtelmez!
set vltozk s opcik belltsa
sh UNIX parancsrtelmez!
sleep parancsvgrehajts ksleltetse
sort llomnyok tartalmnak rendezse
split llomnyok tartalmnak sztdarabolsa
stty terminl paramtereinek belltsa
su belps szuperuser mdba
tail llomnyok tartalmnak sztdarabolsa
tar archivls mgnesszalagra
umount katalgusrendszerek lecsatolsa filerendszerr!l.
uniq llomnyok azonos sorainak kiirtsa
unset vltozk, opcik rtknek trlse
wc sorok, szavak, karakterek szmllsa
who bejelentkezett felhasznlk listja
Mit hasznljunk, ha csak a cl ismert
llapotinformcii (fut folyamatok ...) ..................................................... ps
llomny kzs sorainak kivlasztsa (kt ...) .....................................comm
llomny listzsa a kperny!re.................................................................... pg
llomny soraibl. (mez!k kivgsa egy ...) ............................................. cut
llomny tartalmnak kirsa a terminlra .............................................. more
llomny, katalgus csoportazonostjnak vltoztatsa ....................... chgrp
llomny, katalgus tulajdonosnak vltoztatsa .................................. chown
llomnyban (minta keresse ...) ............................................................. grep
llomnyok archivlsa, visszalltsa ...................................................... cpio
llomnyok thelyezse................................................................................ mv
llomnyok azonos sorainak kiirtsa ........................................................ uniq
llomnyok keresse a katalgusrendszerben ........................................... find
llomnyok linkelse ..................................................................................... ln
UNIX felhasznli ismeretek
250
llomnyok msolsa .................................................................................... cp
llomnyok msolsa, konvertlsa ............................................................. dd
llomnyok nyomtatsa ................................................................................ pr
llomnyok oktlis dumpolsa ..................................................................... od
llomnyok olvassa s egyms utn f"zse ............................................... cat
llomnyok sszehasonltsa ..................................................................... cmp
llomnyok tartalmnak rendezse .............................................................sort
llomnyok tartalmnak sztdarabolsa .................................................... split
llomnyok tartalmnak sztdarabolsa ......................................................tail
llomnyok tartalmnak tpusmeghatrozsa ..............................................file
llomnyok trlse ...................................................................................... rm
llomnyok, katalgusok hasznlati engedlyeinek vltoztatsa ..........chmod
archivls mgnesszalagra ........................................................................... tar
archivls, visszallts (llomnyok ...) ................................................. cpio
argumentumok kirtkelse kifejezsknt .................................................expr
thelyezs (llomnyok ...) ........................................................................ mv
attribtumok megvltoztatsa (password ...) ......................................passwd
azonos sorok kiirtsa (llomnyok ...) .................................................... uniq
bellts (terminl paramtereinek ...) ...................................................... stty
bellts (vltozk s opcik ...) .................................................................set
bellts vagy lekrdezs (dtum s id! ...) ............................................. date
becsatols a fjlrendszerbe. (katalgusrendszerek ...) ............................ mnt
bejelentkezett felhasznlk listja ............................................................. who
belps szuperuser mdba ............................................................................ su
csere (munkakatalgus ...) ......................................................................... cd
cskkentett lehet!sgekkel (UNIX parancsrtelmez! ...) .........................rsh
csoportazonost vltoztatsa (llomny, katalgus ...) ....................... chgrp
dtum s id! belltsa vagy lekrdezse .................................................. date
dumpols (llomnyok oktlis ...) .............................................................. od
engedly vltoztatsa (llomnyok, katalgusok hasznlati ...) ..........chmod
engedlyezs (zenetek kperny!n megjelentsnek ...) ......................mesg
rtk trlse (vltozk, opcik ...) ......................................................... unset
fjlrendszerbe. (katalgusrendszerek becsatolsa a ...) .......................... mnt
felhasznlk listja (bejelentkezett ...) .................................................... who
felhasznlknak (levl kldse ...) .........................................................mail
fjlrendszerr!l. (katalgusrendszerek lecsatolsa ...) ........................... umnt
folyamatok llapotinformcii (fut ...) ..................................................... ps
folyamatok futtatsa a felhasznl kilpse utn (indtott ...) ............. nohup
fut folyamatok llapotinformcii .............................................................. ps
fut UNIX parancsrtelmez! (tvoli gpeken ...) ......................................rsh
futtats a felhasznl kilpse utn (indtott folyamatok ...) ............... nohup
felf"zs (llomnyok olvassa egyms utn ...) ........................................ cat
hasznlati engedlyek vltoztatsa (llomnyok, katalgusok ...) ......chmod
id! bellts vagy lekrdezs (dtum s ...) ............................................. date
indtott folyamatok futtatsa a felhasznl kilpse utn ..................... nohup
Fggelk Permutlt index
251
karakterek szmllsa (sorok, szavak, ...) ...................................................wc
katalgus csoportazonostjnak vltoztatsa (llomny, ...) .............. chgrp
katalgus ltrehozsa (j ...) .................................................................mkdir
katalgus tulajdonosnak vltoztatsa (llomny, ...) ......................... chown
katalgusok hasznlati engedlyeinek vltoztatsa (llomnyok, ...) .chmod
katalgusok tartalmnak listzsa ..................................................................ls
katalgusok trlse ................................................................................. rmdir
katalgusrendszerek becsatolsa a fjlrendszerbe. ................................ mount
katalgusrendszerek lecsatolsa filerendszerr!l. ................................. umount
kperny!n megjelentsek engedlyezse (zenetek ...) ........................mesg
kperny!re (llomny listzsa a ...) .......................................................... pg
keress a katalgusrendszerben (llomnyok ...) .................................... find
keress llomnyban (minta ...) .............................................................. grep
ksleltets (parancsvgrehajts ...) .........................................................sleep
kt llomny kzs sorainak kivlasztsa ..............................................comm
kirtkels kifejezsknt (argumentumok ...) ..........................................expr
kifejezsknt (argumentumok kirtkelse ...) ........................................expr
kirs (munkakatalgus nevnek ...) ........................................................ pwd
kirs a terminlra (llomny tartalmnak ...) ....................................... more
kiirts (llomnyok azonos sorainak ...) ................................................. uniq
kilps utn (indtott folyamatok futtatsa a felhasznl ...) ............... nohup
kivgs egy llomny soraibl. (mez!k ...) ............................................... cut
kivlaszts (kt llomny kzs sorainak ...) .......................................comm
konvertls (llomnyok msolsa, ...) ...................................................... dd
kzs sorok kivlasztsa (kt llomny ...) ..........................................comm
lecsatols filerendszerr!l. (katalgusrendszerek ...) ............................. umnt
lekrdezs (dtum s id! belltsa vagy ...) ........................................... date
ltrehozs (j katalgus ...) ...................................................................mkdir
levl kldse felhasznlknak ...................................................................mail
linkels (llomnyok ...) .............................................................................. ln
lista (bejelentkezett felhasznlk ...) ....................................................... who
listzs (katalgusok tartalmnak ...) ...........................................................ls
listzs a kperny!re (llomny ...) ............................................................ pg
mgnesszalagra (archivls ...) .................................................................. tar
msols (llomnyok ...) ............................................................................. cp
msols, konvertls (llomnyok ...) ........................................................ dd
megjelentsek engedlyezse (zenetek kperny!n ...) ........................mesg
mez!k kivgsa egy llomny soraibl. ...................................................... cut
minta keresse llomnyban ..................................................................... grep
munkakatalgus cserje ................................................................................ cd
munkakatalgus nevnek kirsa ............................................................... pwd
nv kirsa (munkakatalgus ...) .............................................................. pwd
nyomtats (llomnyok ...) ......................................................................... pr
oktlis dumpols (llomnyok ...) .............................................................. od
olvass s egyms utn f"zse (llomnyok ...) ........................................ cat
UNIX felhasznli ismeretek
252
opcik belltsa (vltozk s ...) ...............................................................set
opcik rtknek trlse (vltozk, ...) ................................................. unset
sszehasonlts (llomnyok ...) .............................................................. cmp
paramterek belltsa (terminl ...) ......................................................... stty
parancsrtelmez! (tvoli gpeken fut UNIX ...) ......................................rsh
parancsrtelmez! (UNIX ...) ...................................................................... sh
parancsrtelmez! cskkentett lehet!sgekkel (UNIX ...) .........................rsh
parancsvgrehajts ksleltetse ................................................................sleep
password attribtumainak megvltoztatsa ..........................................passwd
rendezs (llomnyok tartalmnak ...) ......................................................sort
sorok kiirtsa (llomnyok azonos ...) .................................................... uniq
sorok, szavak, karakterek szmllsa ...........................................................wc
szmlls (sorok, szavak, karakterek ...) ....................................................wc
szavak, karakterek szmllsa (sorok, ...) ...................................................wc
sztdarabols (llomnyok tartalmnak ...) ............................................. split
sztdarabols (llomnyok tartalmnak ...) ...............................................tail
szuperuser mdba (belps ...) ................................................................... su
tartalom kirsa a terminlra (llomny ...) ........................................... more
tartalom listzsa (katalgusok ...) ...............................................................ls
tartalom rendezse (llomnyok ...) .........................................................sort
tartalom sztdarabolsa (llomnyok ...) ................................................. split
tartalom sztdarabolsa (llomnyok ...) ...................................................tail
tartalom tpusmeghatrozsa (llomnyok ...) ........................................... file
tvoli gpeken fut UNIX parancsrtelmez! ..............................................rsh
terminl paramtereinek belltsa ............................................................. stty
terminlra (llomny tartalmnak kirsa a ...) ...................................... more
tpusmeghatrozs (llomnyok tartalmnak ...) ....................................... file
trls (llomnyok ...) ................................................................................ rm
trls (katalgusok ...) .......................................................................... rmdir
trls (vltozk, opcik rtknek ...) ................................................... unset
tulajdonos vltoztatsa (llomny, katalgus ...) ................................ chown
j katalgus ltrehozsa .........................................................................mkdir
UNIX parancsrtelmez! ............................................................................... sh
UNIX parancsrtelmez! (tvoli gpeken fut ...) ......................................rsh
UNIX parancsrtelmez! cskkentett lehet!sgekkel ..................................rsh
zenetek kperny!n megjelentsnek engedlyezse .............................mesg
vltozk s opcik belltsa ........................................................................set
vltozk, opcik rtknek trlse .......................................................... unset
vltoztats (llomny, katalgus csoportazonostjnak ...) ................ chgrp
vltoztats (llomny, katalgus tulajdonosnak ...) ........................... chown
vltoztats (llomnyok, katalgusok hasznlati engedlyeinek ...) ...chmod
visszallts (llomnyok archivlsa, ...) ............................................... cpio

253
FGGELK


Mini manul

Mini manulunk f!knt az angolul egyltaln nem tudk kedvrt kszlt. Nem tartalmaz
minden UNIX parancsot. A feldolgozott parancsokat bc sorrendben kzljk. A
szintaktikus alak megadsnl azzal a szoksos jellsmddal lnk, hogy az opcionlis
rszeket szgletes zrjel pr kz zrjuk. Az egy kzs minus jel mg csoportosthat
opcikat kzs zrjel prba tesszk, a msikakat nem.
cat
Feladata, hogy llomnyok tartalmt olvassa s egyms utn a standard outputra kldje !ket.
Szintaktikus alakja
cat [-u] [-s] [-v [-t] [-e]] file...
A cat parancs legfontosabb opcii
-u Buffereletlen outputot generl.
-s Nem kapunk hibazenetet hinyz llomnyok esetn.
-v A nem nyomtathat karaktereket (a tabultor, a kocsivissza s a soremels
kivtelvel) olvashat formban jelenti meg (a hexa 0-20 kzti
karaktereket a kzismert ^n jellssel, az egyb nem nyomtathatakat
pedig M-n formban, ahol n az als 7 bitnek megfelel! karakter.
A -v opci hasznlata mellett az albbiak is hasznlhatak: (lsd szintaktikus jellst)
-t A tabultorokat s a lapdobsokat is olvashat formban jelenti meg (^I,
illetve ^L).
-e Minden sor vgn, az jsor karakter el!tt egy $ karaktert nyomtat.
cd
Feladata katalguscsere vgrehajtsa.
UNIX felhasznli ismeretek
254
Szintaktikus alakja
cd [katalgus]
A katalgus helyn llhat egy abszolt vagy relatv tvonal, vagy egy krnyezeti vltoz
tartalma, vagy semmi. Ez utbbi esetben a $HOME rtk helyettest!dik be.
chgrp
Feladata, hogy az llomny vagy katalgus csoportazonostjt vltoztassa.
Szintaktikus alakja
chgrp csoport nv
Ahol a csoport az j csoport neve, a nv pedig az llomny vagy a katalgus neve.
Fggelk Mini manual
255
chmod
Feladata az llomnyokra, illetve katalgusokra vonatkoz rs-olvassi-vgrehajtsi jogok
vltoztatsa. Csak az llomny tulajdonosa, illetve a szuperuser az aki a fenti jogokat
vltoztathatja.
Szintaktikus alakja
Ktfle szintaktikus alakja ltezik. Abszoltnak nevezett az albbi:

chmod md nv
Szimbolikus vltoztatsnak nevezik az albbi szintaktikus alakot:

chmod [kinek]opertor engedlyek nv
Ahol
md hrom vagy ngy oktlis szmjegy: "dabc".
Az a rtke az albbi: 1 jelenti, hogy az llomny vgrehajthat, 2, hogy
rhat, 4, hogy olvashat az llomny tulajdonosa szmra, s ezen
rtkek VAGY-olt alakjai is rtelmezettek.
A b a tulajdonossal egy csoportban lv!k, c a rendszerben ltez! brmely
felhasznl jogait mutatja, az rtkek hasonlan rtelmezend!k, mint a
tulajdonos esetn.
A d rtkt csak a szuperuser llthatja. Ha rtke 1, akkor az gynevezett
"sticky bit"-et kapcsoljuk be, aminek hatsa, hogy a parancs szvegt a
memribl, a parancs lefutsa utn csak akkor spri ki a swap, ha a
szabad terlet az als hatr al cskken. Ha rtke 2, akkor a "set GID"
bitet, ha 4 akkor a "set UID" bitet lltja be. Ha a "set" bitek hatsra a
felhasznl, vagy a vele egy csoportban lv! ugyanazokat a jogokat kapja,
mint az llomny tulajdonosa. ( Kpzeljk el, mi trtnik, ha egy
rendszerparancsnak az albbi engedlyei vannak: -rwsrwxrwx. )
UNIX felhasznli ismeretek
256
nv az llomny vagy a katalgus neve.
kinek az a felhasznli szimblum akinek a jogait vltoztatjk. Ez lehet u, ha a
userr!l van sz, g, ha a csoportrl van sz, s o, ha a tbbi felhasznlrl
van sz.
opertor a plusz vagy a mnusz jel, attl fgg!en, hogy hozzadjuk, vagy elvesszk
az adott jogot.
engedlyek a w (rs), r (olvass), x (vgrehajts) engedlye.
chown
Feladata, hogy az llomny vagy a katalgus tulajdonost vltoztassa.
Szintaktikus alakja
chown tulaj nv
A tulaj az j tulajdonos bejelentkezsi neve vagy felhasznli azonostja. A nv az llomny
vagy a katalgus neve.
Ezt a m"veletet, hasonlan a chgrp m"velethez, csak az llomny vagy katalgus
tulajdonosa vagy a szuperuser hajthatja vgre.
cmp
Feladata, hogy kt llomnyt sszehasonltva, csak akkor adjon outputot, ha klnbz!sget
tall. Ebben az esetben az eltrs helynek bjt s sorszmt is kijelzi. szreveszi, ha az egyik
llomny a msiknak els! fele.
Szintaktikus alakja
cmp [-s] file1 file2
Ha az exit vltoz rtke
0 A kt llomny azonos.
1 A kt llomny klnbz!
2 Hibs, vagy el nem rhet! parancsargumentum.
A cmp parancs legfontosabb opcii
Fggelk Mini manual
257
-s Nem r ki semmit, csak a visszatrsi rtke jelzi, hogy azonos-e a kt
llomny.
comm
Feladata, hogy kezd!bet"ik szerint alfabetikus sorrendbe rendezett sorokbl ll kt ASCII
kd llomnybl sztvlassza, s kln kln oszlopban kirja a csak ez els!ben, csak a
msodikban s a mindkett!ben el!fordul sorokat.
Szintaktikus alakja
comm [-[123]] file1 file2
A comm parancs legfontosabb opcii
A comm parancs opcii az ltalnos gyakorlattl eltr!en nem bet"k hanem szmok.
-123 A megfelel! opcik tetsz!leges egy vagy ktszmjegy" kombincija
szerepelhet, mindegyik a megfelel! szm oszlop nyomtatst tiltja le.
Pldul -3 a kzs sorok nyomtatst tiltja.
UNIX felhasznli ismeretek
258
cp, ln, mv
Feladatuk rendre, hogy llomnyt msoljon, linkeljen, vagy thelyezzen.
Szintaktikus alakjuk
cp [-i][-p][-r] llomny1... cl
ln [-fs] llomny1... cl
mv [-f][-i] llomny1... cl
A cl lehet llomnynv, vagy cp s mv esetben katalgusnv is, de ha llomnynv, akkor
annak el!zetes tartalma trl!dik. Az mv parancs esetn llomny1 is lehet katalgus, ez egy
katalgus tnevezst jelenti.
Az cp, ln s mv parancs opcii
-i Interaktv md. Megkrdezi, hogy tegye-e, miel!tt egy fjlt
fellr.(y=igen)
-p Meg!rzi, illetve rkti az eredeti fjl hozzfrsi jogait s mdostsi
idejt.
-r Ha llomny1 katalgus, akkor az egsz katalgust a benne lv!
alkatalgusokkal egytt msolja. Felttel, hogy a cl is katalgus legyen.
-f Ha rsvdett llomny a cl, a parancsok hibt jeleznek, kivve, ha ez az
opci be van kapcsolva.
-s Csak ln parancs esetn. Hatsra szimbolikus link keletkezik.
Fggelk Mini manual
259
cpio
Feladata, hogy kivlasztott llomnyokat archivljon, illetve archivltakbl, akr szelektven
llomnyokat el!vegyen.
Ennek megfelel!en a cpio parancsnak hrom zemmdja van:
cpio -o A standard bemenetr!l olvas egy llomny listt s a standard kimenetre
kszti az archvumot. Az archvumban az llomnyok minden fontos
tulajdonsga el van mentve, gy mint az eredeti path s a
sttusinformcik. Az archivum blokkokbl pl fel, egyb rendelkezs
hinyban a blokkok hossza 512 byte.
cpio -i minta A standard bemenetet egy el!z! cpio -o paranccsal ksztett archvumnak
tekinti s ebb!l a minta, mint llomnynv, ltal specifiklt llomnyokat
olvassa be. A minta egy regulris kifejezs. Minta hinyban az sszes
archivlt llomnyt megprblja beolvasni. A beolvass csak akkor trtnik
meg ha az archvumban lv! llomny jabb mint a gpen lv! azonos nev"
vltozata. A beolvasott llomny mdjai az archvumra kimentett l-
lomnynak felelnek meg, tulajdonosa s csoportja azonban a cpio parancsot
elindt felhasznljval lesz azonos, ha az nem a superuser. Ha a fel-
hasznl a superuser akkor megmarad az archvumon trolt tulajdonos s
csoport. A beolvasott llomnyok engedlyei az elmentett llomny
engedlyeivel lesznek azonosak.
cpio -p katalgus A standard bemeneten felsorolt llomnyokat az adott katalgusba
msolja t.
Szintaktikus alakja
cpio -o[acBvV] [-C bufmret] [[-O file] [-M zenet]
cpio -i[BcdmrtuvVfsSb6] [-C bufmret] [[-I file] [-M zenet] [minta]
cpio -p[adlmuvV] katalgus
Figyelem, ne feledkezznk meg arrl, hogy a cpio mindig a standard bemenetr!l vr
parancsot.
A cpio parancs legfontosabb opcii
a visszalltja az archvum szerinti elrsi id!t (access time),
m visszalltja a mdostsi id!t (modification time).
Teht, ha az eredeti llomnyokat akarjuk visszalltani akkor superuser-knt kell dolgoznunk
(vagy az llomnyok eredeti felhasznljaknt) s hasznlnunk kell a -am argumentumokat.
u (unconditional) argumentumot hasznljuk, ha az llomny(oka)t akkor is
fell akarjuk rni, ha azok fiatalabbak mint az archivumban lv!k.
UNIX felhasznli ismeretek
260
c ASCII fejlcet kszt az archvumban a hordozhatsg rdekben
B karakter meghajt esetben blokkokat r, illetve olvas a cpio
t az archvumnak csak a tartalmt kell kilistzni
v b!beszd" zemmd (verbose)
-I "file" Ha a "file", amir!l olvas egy karakteres berendezs, akkor a tartalmnak
vgigolvassa utn, kicserlhetjk a mdiumot, npszer"bben szlva a
lemezt egy ugyan olyan tpusra, s egy ENTER letse utn folytathatjuk
a beolvasst. Csak az -i opci mellett lehet hasznlni ezt az opcit.
-O "file" az -I opcival azonos a "file" rtelmezse, csak rs esetre. Csak a -o
opci mellett lehet hasznlni.
-d ha beolvasskor vagy katalgusba msolskor (-p) katalgusokat is ltre
kell hozni, akkor a -d opci nlkl a cpio erre nem kpes.
Fggelk Mini manual
261
cut
Feladata, hogy mez!ket vgjon ki egy llomny soraibl.
Szintaktikus alakja
Attl fgg!en, hogy hogyan hatrozzuk meg a kivgand mez!, ktfle hvsa lehet a
parancsnak. Az egyik esetben a mez!t karakterpozcival definilhatjuk:

cut -clista [llomny ...]
A msik esetben mez!elvlaszt karaktert hasznlunk, tetsz!leges karakterpozciban, s az
gy meghatrozott mez!kb!l vgunk ki nhnyat.

cut -flista [-dkarakter] [-s] [llomny ...]
A lista lehet vessz!vel elvlasztott felsorols, vagy egy tartomny, vagy a kett!
kombincija. (Pldul 1,3,5-8).
A - llomnynv a standard inputra utal.
Az cut parancs legfontosabb opci
-clista az opcit kvet! lista mondja meg, hogy melyik karakterpozcikat kell
kivgni
-flista az opcit kvet! lista mondja meg, hogy melyik mez!ket kell kivgni.
-dkarakter az opcit kvet! karakter lesz a mez!elvlaszt. Alapesetben, ez a szkz
vagy a tabultor.
-s a mez!elvlaszt karakter nlkli sorokat nem engedi t.
A -c illetve -f opci kzl legalbb egynek kell szerepelnie.
UNIX felhasznli ismeretek
262
date
Feladata, hogy a pontos dtumot s id!t bellthassuk vagy lekrdezhessk.
Szintaktikus alakja
date [ mmddhhpp[yy]][+formtum]
Argumentum nlkl, vagy + jellel kezd!d! argumentum esetn a pontos id!pontot kapjuk
vlaszul. Szmokkal kezd!d! argumentum esetn a szmokkal kezd!d! argumentum esetn a
pontos dtum-id! belltsnak tekinti. A szmokat prosval rtelmezi, a jells alapjn:
mm a hnap; 01-12
dd a nap; 01-31
hh az ra; 00-23
pp a perc; 00-59
yy az vszm utols kt jegye; 00-99
Formtum megadsnl az albbi hivatkozsokat hasznlhatjuk:
m hnap szmokkal kirva
h hnap bet"kkel, Az angol nevek rvidtsvel
d a nap a hnapon belli sorszmmal
w a nap minta a ht napja sorszmmal. Vasrnap=0-ik nap
a a nap mint a ht napja. Az angol nevek rvidtsvel
y az v utols kt szmjegye.
H az ra
M a perc
S a msodperc
D a teljes dtum m/d/y alakban
T a pontos id! H:M:S alakban
r az AM/PM jells
n jsor
t tabultor
A mez!lerkat egy % jellel kell megel!zni. Pldul a Dn%H-%M formtum a kvetkez!
alakban rja ki a vlaszt: (1992 okt 9; 13ra 37 perc)
10/09/92
13-37
dd
Feladata, hogy a megnevezett inputrl a megnevezett outputra msoljon (defaultban
termszetesen a standard input s standard output kztt), s ekzben opcionlisan megadhat
konverzikat hajtson vgre.
Fggelk Mini manual
263
Szintaktikus alakja
dd [ option=value ] ...
A dd parancs legfontosabb opcii
opci rtkek
if=file A bemeneti llomny neve.
of=file A kimeneti llomny neve.
ibs=n A bemenetr!l n bjtos blokkokban olvas (default 512).
obs=n A kimenetre n bjtos blokkokban r (default 512).
bs=n Mind a beviteli, mind a kiviteli blokkmretet n bjtra lltja.
cbs=n A program bels! konverzis buffernek mrete.
skip=n n blokkot tugrik a bemeneten, miel!tt msolni kezd.
seek=n n blokkot el!relp a kimeneti llomnyon, miel!tt msolni kezd.
count=n Csak n blokkot msol.
conv=cvt Az albbiaknak megfelel!en konvertl a bemenet s a kimenet kztt:
ascii EBCDIC kdrl ASCII kdra konvertl.
ebcdic ASCII kdrl EBCDIC kdra konvertl.
ibm IBM kdkszletr!l EBCDIC kdra konvertl.
lcase Nagybet"ket kisbet"kre konvertl.
ucase Kisbet"ket nagybet"kre konvertl.
swab Szavak bjtsorrendjt cserli meg.
noerror Hiba esetn folytatja a feldolgozst.
sync Minden input blokkot ibs szerinti mretre bont illetve kiegszt.
...,... Lehetsges a tbbszrs, vessz!vel elvlasztott opci felsorols.
Alaprtelmezsben a szmparamterek bjtban rtend!ek. A szm utn szerepl! k b vagy w
karakterek 1024, 512, illetve 2 szerinti szorzt jelent (kilobyte, block, word).
diff
Feladata, hogy megmondja egy llomnyrl, hogy miben klnbzik egy msiktl.
Termszetesen ASCII kd llomnyokat kezel. Kvnsgra egy javt llomnyt kpez,
amit az ed editor fel tud dolgozni.
Szintaktikus alakja
diff [-efbh] file1 file2

UNIX felhasznli ismeretek
264
Ha az exit vltoz rtke
0 A kt llomny azonos.
1 A kt llomny klnbz!
2 Hibs, vagy el nem rhet! parancsargumentum.
A diff parancs legfontosabb opcii
-e ed ltal vgrehajthat script-et generl.
-b a sorkezd! s egyb, blank karaktereket tartalmaz stringeket nem veszi
figyelembe sszehasonltskor.
-h gyorsan s nagymret" llomnyokra vgzi az sszehasonltst, de csak
viszonylag kis vltoztatsokat kpes nyomonkvetni. Nem rvnyes alatta
a -e opci.
Fggelk Mini manual
265
echo
Feladata, az argumentumnak kikldse a kperny!re.
Szintaktikus alakja
echo [arg]
Az argumentum egy karakterlnc, ami tartalmazhat krnyezeti vltozt s UNIX parancsot is.
Ezek kirtkelst az idz!jelek hasznlatra vonatkoz szablyok befolysoljk.
Hasznlhat mg egy C nyelvhez hasonl escape szekvencia rendszer is.
expr
Feladata, hogy az argumentumait kifejezsnek vegye s kirtkelje azokat, az eredmnyt
pedig a standard outputra rja.
Szintaktikus alakja
expr arg
Az egyes kifejezselemeket szkzkkel kell elvlasztani. A shell ltal is rtelmezett
metakaraktereket itt is le kell vdeni valamelyik idz!jellel, vagy a backslash karakterrel.
Az expr kulcsszavai s opertorai a kvetkez!ek:
expr1 | expr2 Ha expr1 nem nulla s nem nullstring, akkor azt adja vissza, egybknt
expr2-t.
expr1 & expr2 Ha expr1 nulla, vagy nullstring, azt adja vissza, egybknt expr2-t.
UNIX felhasznli ismeretek
266
expr { =,\>,\>=,... } expr
Ha mindkt kifejezs egsz szm, akkor a megfelel! algebrai, egybknt
pedig a lexiklis sszehasonlts eredmnyt adja vissza.
expr { +,-,\*,/,% } expr
Egsz rtk" argumentumok sszeadsa, kivonsa, szorzsa, osztsa,
illetve maradkos osztsa.
file
Feladata, hogy egy llomny tartalmnak tpust meghatrozza.
Szintaktikus alakja
file [-f nv] [-cL] [-m mll] llomny
A felismert tpusok lehetnek szveg, vgrehajthat, katalgus, archivlt stb. A text tpus
llomnyok esetn, megprblja a programnyelvet azonostani. A parancs kapcsn
megismerkedhetnk a /etc/magic llomnnyal is. Ebben az llomnyban mgikus szmok
vannak felsorolva, s mellettk azok az llomnytpusok, amelyek, jellegzetesen a jelzett
karaktersorozattal kezd!d! llomnyokat hoznak ltre.
A file parancs legfontosabb opcii
-f nv az opci hasznlata esetn a vizsgland llomnyneveket az nv
llomnybl veszi.
-L ha az llomny szimbolikus link, akkor magt az llomnyt vizsglja.
-m mll hasznlja az mll llomnyt az /etc/magic llomny helyett.
Fggelk Mini manual
267
find
Feladata, hogy az els! argumentumban megadott katalgusbl kiindulva, rekurzven
vgigjrva a katalgusokat az opciiban felsorolt tulajdonsg llomnyt megtallja.
Szintaktikus alakja
find tvonal kifejezs[ek]
Mint az albbiakban ltni fogjuk, find egyes opcii mellett szmparamtereket kell adni,
ezen szmparamterek megadsnl a kvetkez! konvencik vonatkoznak: n pontosan n-nek
felel meg, +n minden olyan szmra igaz, amely nagyobb vagy egyenl! n-nl, mg -n minden
olyan szmra igaz, amely kisebb vagy egyenl! mint n. Vannak opcik, amelyek mellett
paramterek llnak, ezek akkor vlnak igazz, ha a vizsglt llomny adott tulajdonsga
megfelel a paramternek. A fontosabb opcik a kvetkez!ek:
A find parancs s legfontosabb opcii
-name file Igaznak rtkel!dik ki, ha file rillik az aktulis llomnynvre. A
szoksos metakarakterek hasznlhatak ( * ? [ - ] ).
[-perm] -onum Akkor igaz, ha az llomny engedlybitjei pontosan megegyeznek az
oktlis szmknt megadott onum-mal. Ha onum mnusz jellel kezd!dik,
akkor kirtkelskor csak az onum-ban belltott engedlybiteket
hasonltja ssze a find az llomny engedlybitjeivel.
-type l Akkor igaz, ha az llomny tpusa bcdpf valamelyike; ezek sorra
megfelelnek a blokkos llomnyoknak, a karakteres kszlkeknek, a
katalgusoknak, a nvvel nevezett pipe-oknak, illetve a norml llom-
nyoknak.
-links n Igaz, ha az llomnynak n darab linkje van.
-user name Igaz, ha az llomny az user nev" felhasznlhoz tartozik. Ha user szm,
s nem szerepel bejelentkezsi nvknt a /etc/passwd llomnyban,
akkor felhasznli azonostknt (uid) rtelmezi.
-group gname Igaz, ha a felhasznl a gname csoporthoz tartozik. Egybknt lsd a -
user opcinl mondottakat.
-size n[c] Igaz, ha az llomny n blokk hossz (512 bjtos blokkok). Ha n utols
karaktere c, akkor a mret karakterben rtend!.
-atime n Igaz, ha az llomnyt valaki n napja hasznlta. (A katalgusok elrsi
idejt maga a find parancs is lltja.)
-mtime n Igaz, ha az llomnyt n napja mdostottk.
-ctime n Igaz, ha az llomnyt n napja vltoztattk.
UNIX felhasznli ismeretek
268
-exec cmd Igaz, ha a vgrehajtott exec parancs visszatrsi rtke zr volt. A cmd
parancsot egy backslash karakterrel, vagy ms mdon levdett, a
parancstl szkzzel elvlasztott ; karakterrel kell lezrni. A cmd-ben sze-
repl! { } karakterpr helyre az aktulis elrsi nv (pathname)
helyettest!dik be.
-ok cmd Ugyanaz mint -exec, azzal az eltrssel, hogy az aktulis llomnynvvel
kigenerlt parancssor el!szr kirdik, s csak a felhasznl meger!stse
(y karakter begpelse) utn hajtdik vgre.
-print Mindig igaz; hatsra az aktulis elrsi nv kirdik.
-newer file Igaz, ha az aktulis llomny frissebben mdostott, mint file.
-depth Mindig igaz; hatsra gy jrja be a find az llomnyrendszert , hogy
els!knt a katalgusban szerepl! llomnyokat keresi meg, s csak utna
magt a katalgusllomnyt. Ennek az az rtelme, hogy az rsi
engedllyel nem rendelkez! knyvtrakbl is ki lehessen msolni cpio-
val az llomnyokat.
-mount Mindig igaz; hatsra csak abban az llomnyrendszerben keres, ahol a
kiindulpontban megadott katalgus fel van mountolva.
-local Igaz, ha az llomny fizikailag a helyi rendszerben helyezkedik el.
\(expr\) Igaz, ha a zrjelezett kifejezs igaz. (A zrjeleket vdeni kell a shell-t!l
egy megel!z! \ karakterrel!)
A kifejezsek kombinlhatak is egymssal, az albbi, cskken! precedencia szerinti
felsorolssal:
1. !neglja expr-t.
2. Az egyms mell rt kifejezsek konkatenldnak, s and kapcsolat
szerint rtkel!dnek ki.
3. or kapcsolat szerint rtkel!dnek ki a -o opertorral felsorolt kifejezsek.
grep
Feladata, hogy egy adott minta el!fordulst keresse a megadott llomnyokban, majd
kinyomtassa mindazokat a sorokat, amelyek tartalmazzk a mintt. A grep az gynevezett
regulris kifejezsek korltozott halmazt hasznlja, ennek felhasznlsval lehet megadni a
keresett mintt. Tbb bemeneti llomny megadsa esetn az llomny neve is kirdik a
tallatok el!tt.
Szintaktikus alakja
grep [-ciln] [file]
Fggelk Mini manual
269
A grep parancs s legfontosabb opcii
-c Csak a mintt tartalmaz sorok szmt rja ki.
-i A nagy- s kisbet"ket azonosknt kezeli.
-l Csak azon llomnyok nevt rja ki (kln-kln sorokba), amelyekben a
minta szerepelt.
-n A tallt sorokat sorszmukkal egytt rja ki.
-v Minden sort kir, ami nem tartalmazza a mintt.
UNIX felhasznli ismeretek
270
login
Feladata, a felhasznl beengedse a rendszerbe.
Szintaktikus alakja
login [-d eszkz] [-h | -r] [nv [krnyezet...]]
A login parancsot a rendszer adja ki, annak hatsra, hogy egy CTRL-D karakter letsvel
a terminl felszabadul. Amennyiben shell parancsknt akarjuk kiadni azt csak az exec login
paranccsal tudjuk megtenni. Amennyiben a login nevet csupa nagybet"vel rjuk, a rendszer
azt a tanulsgot fogja levonni, hogy a terminl csak nagybet"ket tud. Hibs bejelentkezs
esetn a Login incorrect zenet jelentkezik a kperny!n. t egyms utni hibs
bejelentkezsi ksrlet utn, a hibs ksrleteket a rendszer elknyveli, s tbb ksrletet nem
enged. Hasonlan, ha a bejelentkezst egy bizonyos id!n bell nem sikerl befejezni, a
rendszer a terminlt lekapcsolja.
ls
Feladata, hogy katalgusok tartalmt listzza ki, mgpedig gy, hogy ha argumentumknt
katalgusnevet adunk meg, ls a katalgusban szerepl! llomnyok nevt s informciit
listzza ki, az opciknak megfelel!en; ha az argumentum llomnynv, ls az adott
llomnyra vonatkoz informcikat rja ki. Argumentum hinyban az aktulis katalgust
listzza ki.
Szintaktikus alakja
ls [ options ] [ file_or_dir_names ]
Fggelk Mini manual
271
Az ls legfontosabb opcii a kvetkez!k:
Az ls parancsnak nagyon nagyszm opcija van, az albbi lista csak egy tredkes vlogats
a leggyakrabban hasznltakbl.

-R Rekurzven kilistzza az sszes alkatalgust.
-a Minden katalgusbejegyzst kilistz, a ponttal kezd!d!eket is.
-d Ha az argumentum katalgus, csak az ! bejegyzst listzza ki, a benne
szerepl! llomnyokt nem.
-C Tbb hasbban nyomtatja ki a katalgus-bejegyzseket.
-m gynevezett stream-formtum szerint, sorban, egymstl vessz!vel
elvlasztva rja ki az llomnyokat.
-l Rszletes informcikat listz ki, tulajdonos neve, hozzfrsi jogok, link
count s mdostsi id!k stb. szerint.
-r Megfordtja a listzs sorrendjt, ha alfabetikus volt, akkor fordtott bc
sorrendben listz, ha keletkezsi id! szerint volt, akkor a legid!sebbel
fogja kezdeni.
-b A nem nyomtathat karaktereket az oktlis \nnn jells szerint rja ki.
-t Id!rend szerint listz. Ms opcikkal bellthat, hogy az llomny utols
mdostsa, vagy az i-node utols mdostsnak ideje (-c opci) szerint.
-i Az llomny nevek mell az inode szmot is listzza.
mail
Feladata, hogy a parancs rvn zeneteket kldhessnk ms felhasznlknak a rendszerben,
illetve ms rendszerekbe is, ha gpnkn installlva van a megfelel! hlzati szoftver.
UNIX felhasznli ismeretek
272
Szintaktikus alakja
A levl rsakor az albbi szerint kell kiadni a mail parancsot:

mail [ -options ] persons
Levl olvassakor az albbiak szerint kell kiadni a mail parancsot:

mail [ -options ] [ -f file ] [ -F persons ]
ahol persons a cmzettek felsorolsa, bejelentkezsi nevk alapjn.
A mail parancs legfontosabb opcii
Levl rskor:
-w a levl elindtsa utn rgtn kilp, nem kell a remote transfer program
befejez!dsre vrni.
-t a levl el beszr egy To: kezdet" sort, jelezvn a cmzetteket.
Levl olvasskor:
-e Az zeneteket nem nyomtatja ki, hanem 0 rtkkel tr vissza, ha a
felhasznlnak van postja, 1 rtkkel egybknt. Shell programokban
hasznos megolds!
-h Nem a legutols zenetet rja ki, hanem az zenetek fejlct, utna ?
prompttal vr jabb parancsra.
-p Kirja az sszes zenetet s nem vr elhelyezsi parancsot.
-r A berkezett zeneteket id!beli sorrendben nyomtatja, nem a legks!bb
rkezettet els!nek.
-F persons A bejv! zeneteket tirnytja a persons felhasznlknak.
-f file A bejv! zenetet a file nev" llomnyba teszi.
Fggelk Mini manual
273
Hacsak a parancssori opcik mskpp nem rendelkeznek, a mail parancs kirja a
legutolsnak rkezett zenetet, majd a ? prompttal jabb parancsbevitelre vr. A kiadhat
parancsok fontosabbjai:
jsor, +, n A kvetkez! zenetre lp.
d, dp Trli az zenetet s a kvetkez!re lp.
dq Trli az zenetet s kilp mail-b!l.
p Ismt kirja az aktulis zenetet.
- Kirja az el!z! zenetet.
a Kirja a mail-ben tlttt id! alatt rkezett jabb zeneteket.
r Vlaszol az zenet kld!jnek, majd trli a kapott zenetet.
s file(s) Elmenti az zenetet a megnevezett llomny(ok)ban. A default $MAIL.
q, ctrl-d A ki nem olvasott zeneteket elmenti s kilp mail-b!l.
x Minden zenetet vltoztats nlkl hagy s kilp mail-b!l.
? Kirja a rendelkezsre ll parancsokat (help).
mesg
Feladata, hogy engedlyezze, vagy letiltsa egy msik felhasznl ltal write paranccsal
kldtt zenet megjelenst a kperny!n.
Szintaktikus alakja
mesg [-n] [-y]
A parancs opcii
-n a kperny!n a kldtt szveg nem jelenhet meg.
-y a kperny!n a kldtt szveg megjelenhet. Ez az alapeset.
UNIX felhasznli ismeretek
274
mkdir
Feladata j katalgus ltrehozsa.
Szintaktikus alakja
mkdir [opci] nv
A nv katalgus, vagy tvonal/katalgus.
Az mkdir parancs opcii
-mmode Az j katalgus hozzfrsi joga mode rtke.
-p Hozza ltre a kvnt katalgus elrsig a hinyz katalgusokat is.
more
Feladata, hogy egy llomny tartalmbl egy-egy kperny!oldalnyi szveget rjon ki a
terminlra. A kperny! legals sorban egy --More-- zenetet r ki s tovbbi parancsra vr.
Szintaktikus alakja
more [ opciok ] file file2...
A more parancs legfontosabb opcii
-n A default helyett n soros kperny!t hasznl.
-c Az j lapok nyomtatst mindig a kperny! tetejn kezdi.
-f Logikai sorokkal dolgozik, nem kperny!sorokkal, gy lehet!v teszi
kperny!vezrl! karakterszekvencik nyomtatst is.
-s A tbbszrs res sorokbl csak egyet hagy meg.
-r A nem nyomtathat karaktereket ^n formtumban jelenti meg. (A more
alaprtelmezs szerint ezeket a karaktereket figyelmen kvl hagyja.)
-w Az input feldolgozsa utn nem lp ki, hanem jabb parancs bevitelre
vr.
+n Az n-edik sorral kezdi a megjelentst.
+/minta/ A minta kifejezst tartalmaz sor el!tt kett!vel kezdi a megjelentst.
A more szmra a kvetkez! parancsok adhatak meg a lapvltsokkor (a lista nem teljes!):
RETURN egy jabb sort listz ki.
SPACE hatsra egy teljes kperny!nyit halad el!re.
Fggelk Mini manual
275
q,Q Kilptet a more-bl.
= Kirja az aktulis sorszmot.
h vagy ? a more parancsok help szvegt listzza ki.
i/minta A regulris kifejezsknt megadott minta i-edik el!fordulsra ll. Ha
ilyet nem tallt, a pozci vltozatlan marad.
in A legutoljra megadott regulris kifejezs n-edik el!fordulsra ll.
' Arra a pontra ll, ahonnan a legutols keress kezd!dtt, ha ilyen nem
volt, akkor az llomny elejre.
. Megismtli a legutols parancsot.
i:n A parancssorban argumentumknt megadott i-edik llomnyra ugrik, illetve az
utolsra, ha nem volt annyi megadva.
i:p Az i-edik megel!z! llomnyra tr vissza.
nohup
Feladata, hogy megvja a fut folyamatokat a felhasznl kilpsvel kapcsolatos
megszaktstl.
Szintaktikus alakja
nohup parancs [parancsarg]
od
Feladata, hogy llomnyokat, akr binris kdakat is, a kivlasztott formtumban
dumpoljon.
Szintaktikus alakja
od [-bcdosx] [file] [[+] offset [.] [b]]
Amennyiben az llomny neve elmarad, a kitltend!t a standard outputrl vrja. Az offset az
llomny elejr!l elhagyand bjtok szma, mgpedig az albbi kdolsban; ha csak egy
szm, akkor oktlisan rtelmezhet!, ha a szmot kveti egy pont, akkor a szm decimlisan
rtend!, ha a b bet" is jelen van, akkor nem bjtokban, hanem 512 byte hossz blokkokban
kell az offset-et rtelmezni. A + jel elvlaszt karakter arra az esetre, ha az input a standard
input.
Az od parancs legfontosabb opcii
UNIX felhasznli ismeretek
276
Az od az opcii szerint vlaszthat formtumok szerint nyomtatja ki a paramterknt
megadott file tartalmt. Default opcija -o. Az opcik s jelentsk a kvetkez!:

-b Bjtonknt oktlisan rja ki az llomnyt.
-c Bjtonknt karakteres formtumban rja ki az llomnyt. A C nyelvben
definilt vezrl!karaktereket az ott megszokott formtum szerint rja ki
(null=\0, backspace=\b, lapdobs (form-feed)=\f, jsor=\n, reurn=\r,
tabultor=\t), az egyb nem printelhet! karakterek a \nnn formban jelen-
nek meg, ahol nnn adott karakter oktlis rtke.
-d Szavanknt decimlisan rja ki az llomny tartalmt.
-o Szavanknt oktlisan rja ki az llomny tartalmt.
-s Szavanknt, el!jeles decimlis szmknt r ki.
-x Szavanknt, hexadecimlis formban r ki.
Az offset paramter azt adja meg, hogy honnan kezd!dik az llomny listzsa.
Alaprtelmezs szerint a megadott offset rtk oktlisan s bjtokra rtend!. Ha a . karakter
szerepel utna, akkor decimlis az rtk, ha a b karakter szerepel, akkor pedig 512 bjtos
blokkokban rtend!. Ha nem szerepelt az offset bellts el!tt llomnynv argumentum,
akkor az offset el egy + karaktert kell helyezni.
passwd
Feladata, hogy a felhasznl a password-jt s a password attribtumait megvltoztathassa.
Szintaktikus alakja
passwd [lgnv]
passwd [-d|-l] [-f] [-n min] [-w figy] [-x max] lgnv
passwd -s -a
passwd -s lgnv
A hasznlt rvidtsek rtelme:
lgnv loginnv
min a password kt megvltoztatsa kztt legalbb min szm napnak kell
eltelni.
max a password legfeljebb ennyi napig rvnyes.
figy a password lejrta el!tt figy szm nappal a rendszer figyelmezteti a
password tulajdonost a kzelg! esemnyre.
Egyb argumentum hinyban a passwd parancs a parancs kibocstjnak password-jr!l
ad felvilgostst. A password maga, legalbb hat karakter hossz, amib!l legalbb kt
karakter alfabetikus, s legalbb egy szm vagy specilis karakter (pl.: @, & stb.). A
password-nek klnbzni kell a login nvt!l s az el!z! password-t!l, olyan mrtkben, hogy
azokbl ciklikus eltologatssal sem lehessen el!lltani.
Fggelk Mini manual
277
A passwd parancs legfontosabb opcii
-a a password attribtumok lekrdezse minden felhasznlra. Csak a -s
opcival egytt hasznlhat s termszetesen csak szuperuser szmra.
-d trli a login nvhez tartoz password-t.
-f minden belpskor a felhasznlnak cserlni kell a password-jt.
-l zrolja, azaz megvltoztathatatlann teszi a password-t.
-s megmutatja a password attribtumot.
pg
Feladat, egy llomnyt a kperny!r!l olvasni hagyjon. A pg parancs, a more-hoz hasonlan,
szmos plusz szolgltatst is biztost az llomnyok egyszer" megjelentsn kvl, ezek
kzl els!sorban az rdemel figyelmet, hogy htrafele is tud lapozni a megjelentett
llomnyban.
Szintaktikus alakja
pg [-egszszm] [ -p string ] [-cefns] [+sorszm ] [+/minta/] [file,
file2...]
A pg parancs s legfontosabb opcii
-egszszm Mint a more-nl.
-p string Prompt szvegknt a string-et hasznlja. Ha a string tartalmazza a %d
szekvencit, azt az aktulis lapszmra helyettesti be.
-c Mint a more-nl.
-e Az egyes llomnyok vgnl nem ll meg, hanem rgtn nyomtatja a
kvetkez!t, illetve kilp, ha vge az inputnak.
-f Mint a more-nl.
UNIX felhasznli ismeretek
278
-n Nem vr RETURN billenty"re, a beolvasott parancskaraktereket rgtn
vgrehajtja.
+sorszm Mint a more-nl.
+/minta/ Mint a more-nl.
A pg szmra lapvltskor a kvetkez! parancsok adhatk:
n<SPACE>, vagy n<RETURN>
n lappal el!re, illetve htralp.
pr
Feladata, llomnyok nyomtathat lapp trdelse Alapbellts szerint a pr 66 soros
lapformtum szerint nyomtat, ahol 2 res sor utn az egy soros fejlc, majd jra kt res sor,
55 szvegsor, vgl 5 res sor kvetkezik. Az alaprtelmezs szerinti sorhossz 72 karakter. A
lapokat nem form-feed karakterek, hanem megfelel! szm jsor karakterek vlasztjk el.
Kimenetl a standard outputot felttelezi.
Szintaktikus alakja
Ha llomnyokat egyms utn kvnunk nyomtatni:

pr [ [oszlop] [-wszlessg] [-a]] [-eck] [-ick] [-drtfp] [+lap] [-nck] [-
oeltols] [-lhossz] [sszepartor] [-h fejlc] [file...]
Ha egy oldalra, egyms mell tbb llomnyt kvnunk nyomtatni:

pr [ [-m] [-wszlessg] [-a]] [-eck] [-ick] [-drtfp] [+lap] [-nck] [-
oeltols] [-lhossz] [sszepartor] [-h fejlc] file...
Fggelk Mini manual
279
A pr parancs legfontosabb opcii
-oszlop oszlop szm hasbban nyomtat egy llomnyt. Az oszlop szm
alaprtelmezse 1.
-m Tbb llomnyt nyomtat egyms melletti hasbokban. A tl hossz
sorokat levgja.
-wszlessg a sorhosszat szlessg szm karakterre lltja.
-a
-eck A szvegben szerepl! tabultor karaktereket a megfelel! szm szkz
karakterre cserli. A tabultorpozcikat a k-adik pozcikon ttelezi fel
(k+1, 2*k+1, ...). (A default rtk 8.) Tabultorkarakternek c-t tekinti,
defaultja maga a tabultor karakter.
-ick Az el!z! funkci fordtottja: az input szvegben szerepl! szkzket
konvertlja t tabultorokk, ha ez lehetsges.
-d Megduplzza a sorkzt.
-f Laphatrokon form-feed karaktert is nyomtat, nemcsak jsor karaktereket.
-t Nem nyomtat sem fejlcet, sem lapkezd! s lapzr res sorokat.
-p Ha az output a terminl, akkor oldalanknt megll a nyomtats, csenget s
kocsivisszra vr, hogy folytassa.
+lap A kezd! lapsorszm rtke lap.
-nck k szmjegy" sorszmnyomtatst biztost (a default 5). Ha c adott, pr ezt
hasznlja szepartorkarakternek a sorszm s a szveg kztt (defaultja a
tabultor).
-oeltols Minden sort eltols-nyi karakterrel jobbra tolva nyomtat.
-lhossz A lapmretet hossz szm sorra lltja (default 66). A tnylegesen
nyomtatott sorok szma, mint mr lttuk, ennl mindig tzzel kevesebb.
-h fejlc A lapok tetejn az llomnynv helyett a fejlc stringet nyomtatja.
-sszepartor A szepartor egy karakter, ami az egyms melletti oszlopokat elvlasztja.
UNIX felhasznli ismeretek
280
ps
Feladata, hogy a fut folyamatokrl llapotinformcit adjon.
Szintaktikus alakja
ps -[edafl] [ -n nvlista] [-t terminllista] [-p folyamatIDlista] [-u
userIDlista] [-g csoportIDlista]
A parancs folyamatokrl szmos tulajdonsgot kzl, nhny ezek kzl:
UID a tulajdonos azonostja
PID, PPID a folyamat s szl!jnek azonostja
TTY az indt terminl azonostja
STIME az indts ideje (ra perc msodpercben)
TIME a felgylemlett futsi id!
S llapotinformci, az albbi kdolsban
O a folyamat fut
S a folyamat alszik
R a folyamat a futsra vrk kzt ll
I a procesz befejez!dtt
Z elrvult folyamat, lefutott, de a szl!je nem vrta be.
T a folyamatot futst egy signl felfggesztette.
Az ps parancs legfontosabb opcii
-e minden fut folyamatrl kr informcit. Az opci hinyban csak a
parancsot kiad terminlrl elindtott folyamatokrl kapunk jelentst.
-f teljes, minden informcira kiterjed! listt kr.
-a minden gyakran indtott folyamatrl ad informcit, kivve a process
csoport vezet!ket, s a nem terminlrl indthatkat.
-t term csak a term terminlhoz kapcsold folyamatokat sorolja fel
Fggelk Mini manual
281
pwd
Feladata, az aktulis, mskpp munkakatalgus nevnek kirsa.
rm, rmdir
Feladata, llomnyok s katalgusok trlse.
Szintaktikus alakja
rm [-r] [-f] [-i] file... dirname...
rmdir [-p] [-s]
Az rm parancs legfontosabb opcii
-f A felhasznltl val visszakrdezs nlkl trli az llomnyokat, akkor
is, ha rsvdettek. (Ha maga a katalgus rsvdett, s ezrt nem
trlhet!ek az llomnyok, a felhasznl ebben az esetben sem kap
hibazenetet.)
-r Az argumentlistban megadott katalgustl kezdve rekurzven trli az
alatta lv! llomnyokat s alkatalgusokat. (Teht a nem res
katalgusokat trls el!tt, kln zenet nlkl kirti.)
-i Az llomnyok trlse el!tt megkrdezi a felhasznlt.
Az rmdir parancsnl hasznlt opcik:
-p A katalgus trlse utn, a szl! katalgust is trli, ha res, rekurziven. A
standard outputra kld zenetet, arrl, hogy mi maradt a path-bl.
-s A -p opci zenetnek elnyomsa.
UNIX felhasznli ismeretek
282
set, unset
Feladata, hogy segtsgvel loklis s globlis krnyezeti vltozknak rtke adhassunk,
illetve az rtkt trlhessk.
Szintaktikus alakja
set [-l var[=rtk]]...
set [-e var[=rtk]]...
set [-ffile var[=rtk]]...
unset -l var...
unset -fllomny var...
A llomny nevet szkz nlkl, kzvetlen az opci utn kell rni. A -f opcival belltott
vltozkra a tovbbiakban az llomnynvvel egytt kell hivatkozni, pldul
${(llomny)Vltoz}.
A set s unset parancsok opcii
-l az ezzel az opcival belltott vltozt nem fogjk rklni a shell ltal
indtott proceszek.
-e az ezzel az opcival belltott vltozkat minden shell ltal indtott
procesz rklni fogja. Figyelem, ezzel az opcival nem lehet unset-
telni!
-fll az opci hasznlata esetn, az ll llomnyba, ami mr addig is ltezett,
vagy a parancs hozta ltre, bekerlnek a vltoz=rtk alak sorok.
sh, rsh
Feladata, hogy beolvassa, rtelmezze s vgrehajtsa a shell-parancsokat, egyben biztostson
egy krnyezetet azok vgrehajtshoz.
Szintaktikus alakja
sh [-cefhiknrstuvx ] [ arg ]
rsh [-cefhiknrstuvx ] [ arg ]
Az arg helyre a shell-parancsokat rhatjuk. Az rsh parancs egy olyan shell ahol nincs
engedlyezve a cd parancs hasznlata, nem rtelmez!dik a path vagy utastsnevekben a / jel,
nem lehet a standard outputot tirnytani ( azaz nem hasznlhatk a > s >> jelek ), valamint
nem rhat t a PATH krnyezeti vltoz rtke sem.
A sh parancs legfontosabb opcii
-cstring a parancsot a string-b!l olvassa
Fggelk Mini manual
283
-i interaktv shell. (szintn interaktv a shell, ha az inputja s outputja egy
terminlhoz kttt. Az interaktv shell-t nem lehet a kill 0 paranccsal
agyoncsapni.
-r cskkentett lehet!sg", restricted (rsh) shell.
sleep
Feladata, a vgrehajts korltolt idej" felfggesztse.
Szintaktikus alakja
sleep idtartam
Az id!tartam a vrakozs ideje msodpercekben.
sort
Feladata, hogy a megadott llomnyok sorait rendezze.
Szintaktikus alakja
sort [ -cmu ] [ -ooutput ] [ -y[kmem]] [ -zrecsiz ] [ -dfiMnr ] [ -btx ] [
+-m[.n ][ bdfinr]] [ file ]
Az llomnynv megadsnl - a standard inputot jelli, de llomnynv hinyban is a
standard inputrl olvas.
A sort parancs legfontosabb opcii
-c Ellen!rzi, hogy az llomnyok mr rendezve vannak-e.
-m A mr kln-kln rendezett llomnyokat sszefsli (merge).
-u A rendezsnl egyenl!nek tallt sorokbl csak egyet r ki.
-ooutput Standard output helyett output-ba rja a rendezett kimenetet. Azonos is
lehet valamelyik bemeneti llomnnyal!
-d Sztri sorrend: csak a bet"k, szmjegyek, valamint a blank karakterek
(szkz s tabultor) szmtanak.
-f A kisbet"k nagybet"nek szmtanak.
-i Az ASCII tartomnyon kvli karakterek nem szmtanak.
-M Hnapok szerinti hasonlts: a mez! els! hrom karaktere nagybet"v
konvertldik, s az rvnytelen < JAN < FEB < ... szably szerint
rtkel!dik ki.
UNIX felhasznli ismeretek
284
-n Aritmetikai rtkek szerinti hasonlts. A szm lehet el!jeles
tizedespontos szm, amelyet blank karakterek is megel!zhetnek.
-r Fordtott sorrend" rendezs.
-b A rendezsi kulcsbl elmaradnak a blank karakterek.
+m[.n][bdfinr] A rendezs alapjul szolgl hasonltsi kulcs kezd! pozcijt adja meg.
+m.n az m- edik mez! n-edik karaktert jelenti. Tbb rendezsi kulcs is
meg lehet adva, de a msodik s a tbbiek csak akkor kerlnek ki-
rtkelsre, ha az els! alapjn a hasonltott sorok egyenl!nek bizonyultak.
(Kulcs hinyban az egsz sor alapjn rendez. A rendezsi opcik
lehetnek globlisak, ha az egyes mez!kijellsek el!tt lettek megadva, de
kln-kln is megadhatak az egyes kulcsokra.
-tx x lesz a mez!elvlaszt karakter.
-m[.n][bdfinr] A hasonltsi kulcs utols karakternek pozcija.
Fggelk Mini manual
285
split
Feladata, hogy egy text tpus llomnyt sztdaraboljon.
Szintaktikus alakja
split [-n][ llomny [ nv ]]
Ha az llomny hinyzik, vagy egy - jel helyettesti, a standard inputrl veszi az adatokat. A
rszeket tartalmaz llomnyok neveit a nv nvaa-tl nvzz-ig val kiterjesztssel kpezi.
Az split parancs opcija
-n az egy darabban lv! sorok szma. Alaprtelmezs 1000 sor.
stty
Feladata, hogy a aktulisan standard inputknt hasznlt terminl I/O tulajdonsgait a parancs
segtsgvel bellthassuk.
Szintaktikus alakja
stty [-a] [-g] ][opcik]
Ha a parancsot minden argumentum nlkl adjuk ki, a pillanatnyilag rvnyes belltsokat
kapjuk vlaszul. Az opcik ebben az esetben nem a parancsra, hanem a terminlra vonatkoz
opcikat jelentenek. Hrom csoportjuk van, az els! a Control Mode-ra vonatkoz opcik
(pldul parits bellts s ellen!rzs, karaktermret meghatrozs, az adatklds sebessge
baudban stb.). A msodik csoportba az input szablyzsra vonatkoz opcik vannak (pldul
ignorlja vagy sem az berkez! break jelet, megklnbztesse vagy sem a nagybet"ket a
kicsit!l a CR karakternek megfeleltessen-e CR-NL-t stb. ). A harmadik opci csoport
termszetesen az outputra vonatkozik hasonl tartalm opcikkal mint az input csoport. Az
input opcik valamennyien i-bet"vel, az outputok pedig o-bet"vel kezd!dnek. A vagylagosan
rtelmezhet! opcik esetn egy opci bekapcsolsa az opci nevnek lerst, kikapcsolsa a
nevnek lerst megel!zve egy - jellel jelenti.
A stty parancs opcii
-a visszaadja az sszes ltez! opcit, a pillanatnyi belltsukkal.
UNIX felhasznli ismeretek
286
-g visszaadja a kurrens belltst, olyan formtumban, ami egy jabb stty
parancs bemenete lehet.
su
Feladata, hogy kilps s jbli belps nlkl szemlyisget lehessen cserlni, azaz egy
msik felhasznl, engedlyeivel lehessen dolgozni. Az j felhasznli arculat belptetsvel,
a rendszer elindtja az /etc/passwd llomnyban az j felhasznlhoz tartoz login shell-t,
illetve annak hinyban a /bin/sh-t. Termszetesen mindehhez kell tudni a szuperuser
jelszavt, kivve ha a su parancs kibocstja a root. Az EOF jel, (CTRL-D), exit vagy
logout kiadsval trhetnk vissza a hvhoz.
Szintaktikus alakja
su [-] [ nv [arg...]]
Ha semmilyen paramtert nem adunk, automatikusan a root lesz akiv vlunk, feltve ha
tudjuk a root password-jt, egybknt pedig a nv nev" felhasznlkk lehetnk. A tovbbi
arg-okat az indul shell-nek adja t a parancs. Ha a su parancs els! opcija a - jel, az j
felhasznli belps gy indul mintha valban jbl belptnk volna, azaz elindtja a
/etc/profile-t majd a user .profile-t is, ellenkez! esetben ez elmarad.
Fggelk Mini manual
287
tail
Feladata, hogy az llomnybl, elejr!l vagy vgr!l, egy darabot tudjunk levgni.
Szintaktikus alakja
tail [ +-[number][lbc][f]] [ file ]
A tail parancs legfontosabb opcii
+, - A nyomtats az llomny elejt!l (+) vagy vgt!l szmtdjon-e
(alaprtelmezs szerint a vgt!l). number sorokban rt!dik s alaprtke
10.
-lbc A sor, blokk, illetve karakter szerinti megadsra vonatkozik.
-f Az llomny vgigolvassa, illetve a kijellt rszek kirsa utn megnzi,
hogy kzben a bemenet nem b!vlt-e, s az id!kzben a bemeneti llomnyhoz
f"z!dtt sorokat is kirja.
tar
Feladata, valdi archivum ltrehozsa mgnesszalagra. A tar alkalmas arra, hogy katalgus
struktrkat msoljon. A ltrehozott archvumban is mdosthatk a rgi llomnyok, az
jabb verzikkal pedig a rgieket fell lehet rni. A tbbszrsen felfrisstett archvumbl
pedig szelektven beolvashatjuk a szksges llomnyokat. A tar rokona az ar parancsnak.
Szintaktikus alakja
A tar szintaktikus alakja elg bonyolult, taln az albbi alak kzelti meg a legjobban:

tar -kulcs [nevek]
UNIX felhasznli ismeretek
288
Maga a kulcs az albbi alak karakterlnc:

l[mdostk]
A nevek pedig sorrendben az albbiak lehetnek:

eszkz blockmret llomnynevek (vagy katalgusnevek)
A kulcs funkcii (l bet"vel jellve) hatrozzk meg az elvgzend! feladatokat, s a
megengedhet! mdostkat. Ezek alapjn az albbi t alakja lehet a tar utastsnak:

c create: Az rs a szalag elejr!l kezd!dik, s nem az utols felrt egysg
utn. Ez az zemmd magba foglalja a helyettest!, -r, zemmdot.

/usr/bin/tar -c[vwfb[#s]] nevek...

r replace: az llomnyokat az archvum vgre kell tenni (nem keressk a
rgebbi vltozataikat)

/usr/bin/tar -r[vwb[#s]] nevek...

t table: a szalagon el!fordul llomnynevekr!l egy ls -l parancshoz
hasonl listt kell kszteni, valahny esetben a szalagon el!fordulnak.

/usr/bin/tar -t[vf[#s]] nevek

u (update) az llomnyokat az archvumba kell tenni ha mg nincsenek ott
vagy ha az archvumban lv! vltozatuk regebb

/usr/bin/tar -u[vwb[#s]] nevek...]

x (exract) az llomnyokat az archvumbl be kell olvasni, ha nincs
megadva llomnynv akkor az egsz archvumot be kell olvasni

/usr/bin/tar -x[lmovwf[#s]] nevek...]
A mdostk sorrendje nem kzmbs, a lertaknak kell megfelelni.
Fggelk Mini manual
289
A tar legfontosabb mdosti
b (blocking factor) A kvetkez! pozciban egy szm ll, rtke 1-20
terjedhet, ami az archvum blockmretre utal. Alaprtk 1. Csak valdi
mgnesszalagos output esetn igaz. Ha ez a mdost igaz, akkor a nevek
kzt blockmret helyn kell ezt az rtket megadni.
f (file) Ha ez a mdost igaz akkor a nevek kzt az eszkznek rtket kell
adni, s ez lesz az archvum helye. Ez az rtk lehet egy llomnynv, de
ha ezen a helyen egy - ll, az a standard outputot jelli.
l (link) Ha ez a mdost igaz, akkor, s csak akkor a tar hibt jelez, ha
nem tud minden linket feloldani.
o (ownership) Ha ez a mdost igaz a helyrelltott llomny tulajdonos s
csoport azonostja a parancs futtatja lesz, az archvumban feljegyzett
helyett.
w (what) Ha a mdost igaz, akkor minden akcit vgrehajts el!tt jelezzen,
s csak a felhasznl engedlyezse utn indtson.
#s Ez a kt karakter a mgnesszalag egysg azonostjt (#) s sebessgt (s)
jelli. A # helyn egy szm ll, ami az egysg sorszma, az s bet"helyn
az l (low), m (medium), vagy h (high) bet"k egyike.
test
Feladata, hogy a parancs paramtereknt megadott kifejezst kirtkelje, s ha annak logikai
rtke igaz, akkor nulla visszatr! rtkkel terminldikjk, egybknt nem-nulla visszatr!
rtkkel.
Szintaktikus alakja
test expr
Az expr-ben szerepl! opertorok, flag-ek s zrjelek mind szkzkkel elvlasztva kell hogy
szerepeljenek. Egyes esetekben, if parancs feltteleknt, a test szcska elmaradhat egy
szgletes zrjelpr helyettestheti.
A test parancs legfontosabb opcii
-r file Igaz, ha file ltezik s olvashat.
-w file Igaz, ha file ltezik s rhat.
-x file Igaz, ha file ltezik s vgrehajthat.
-f file Igaz, ha file ltezik, s regulris llomny (nem perifria, pipe, vagy
egyb).
-d file Igaz, ha file ltezik, s katalgusllomny.
-c file Igaz, ha file ltezik, s karakteres kszlkllomny.
UNIX felhasznli ismeretek
290
-b file Igaz, ha file ltezik, s blokkos kszlkllomny.
-s file Igaz, ha file ltezik, s mrete nagyobb mint nulla.
-z s1 Igaz, ha az s1 string hossza nulla.
-n s1 Igaz, ha az s1 string hossza nagyobb, mint nulla.
s1 = s2 Igaz, ha s1 s s2 stringek azonosak.
s1 != s2 Igaz, ha s1 s s2 nem azonosak.
s1 Igaz, ha s1 nem null-string (nulla hosszsg, res string).
n1 -eq n2
Igaz, ha az n1 s n2 egszek algebrailag egyenl!ek. Hasznlhatak
tovbb az egyb egyenl!sgi relcikat lefed! -ne, -gt, -ge, -lt s -le
opertorok is.
A fenti elemi kifejezsek kombinlhatak is, az albbi opertorokkal:
! Unris negl opertor.
-a Binris and opertor.
-o Binris or opertor.
( expr ) Zrjelezs a kirtkelsi sorrend megvltoztatshoz. (Ne felejtsk, hogy
a zrjeleket vdeni kell a shell-t!l!)
tr
Feladata, hogy a standard inputjrl a standard outputra msoljon, mikzben a bemeneten
rkez! s a string1-ben megtallhat karaktereket a string2-beli azonos sorszmra cserli.
Ha string2 rvidebb mint string1, akkor az utols karaktere tbbszrz!dik.
Fggelk Mini manual
291
Szintaktikus alakja
tr [ -cds ] [ string1 ][ string2 ]
A tr parancs legfontosabb opcii
-c A string1-et komplementlja a teljes 8 bites ASCII kdkszlet szerint,
azaz azok a karakterek vesznek rszt a tovbbiakban el!rt opercikban,
amelyek nem szerepelnek string1-ben.
-d Trli mindazon karaktereket az inputbl, amelyek szerepelnek string1-
ben.
-s A string2-ben tbbszrsen el!fordul kimeneti karaktereket egyszer rja
csak ki.
Az albbi rvidtsek hasznlhatak karaktertartomnyok, illetve ismtl!d! karakterek
jellsre:

[a-z] Az a s z kzti karakterekb!l ll stringet jelli.
[a*n] Az a karakter n-szeres ismtl!dst jelzi. n alaprtelmezs szerint
decimlis, ha els! szmjegye 0, akkor oktlis. 0 vagy hinyz n rtk a
maximlisnak felel meg; ez a funkci string2 kitltsre alkalmas.
A backslash (\) karakterrel a megszokott mdon vdhet!ek le a shell el!l a specilis
karakterek. A \nnn, ahol nnn egy egy, kt vagy hromjegy" oktlis szm, tetsz!leges ASCII
karakter megadsra hasznlhat.
uniq
Feladata, hogy megkeresse, s ha ms opcit nem krnk trlje az outputrl az input
llomnyban lv! ismtl!d! sorokat.
Szintaktikus alakja
uniq [-[udc]] [-n][+n] [file1 [file2]]
rdekessge, hogy a parancs inputja outputja egyarnt opcionlis, akr a standard input vagy
output, akr egy llomny.
A uniq parancs legfontosabb opcii
UNIX felhasznli ismeretek
292
-u Csak az egyedi sorok jelennek meg a kimeneten.
-d Csak a tbbszrsen el!fordul sorok egy-egy pldnya jelenik meg a
kimeneten.
-c Minden sort egyszer r ki, de kirja el!ttk azt is, hogy hnyszor szerepelt
a szvegben.
-n Az els! n mez!t ignorlja az sszehasonltsnl. Egy mez! nem ms mint
szkzzel vagy tabultorjellel hatrolt nem szkz s nem tabultor
karakterek sorozata.
+n Az els! n karaktert ignorlja az adott mez!ben.
wc
Feladata, hogy a paramterknt megadott llomnyok, illetve azok hinyban a standard
input sorainak, szavainak s karaktereinek szmt adja meg, valamint egy sszestst is ad a
fentiekre az sszes llomny alapjn. A wc sznak tekinti a szkzkkel, tabultorokkal
s/vagy jsor karakterekkel hatrolt karaktersorozatokat.
Szintaktikus alakja
wc [-lwc] [file]
A wc opci nlkl alaprtelmezsben mind a sor- mind a sz-, mind a karakterszmot kirja.
Explicit opcimegads esetn csak a definiltakat rja ki.
A wc parancs opcii
-l A sorok szmt rja ki
-w A szavak szmt rja ki
-c A karakterek szmt rja ki
who, who ami, who amI
Feladata, hogy a krdez! megtudja kik dolgoznak a rendszerben, illetve a msodik kt alak
segtsgvel, megtudhatja, hogy ! maga milyen login nvvel, milyen azonostj terminlon
lpett a rendszerbe.
Fggelk Mini manual
293
Szintaktikus alakja
who [-uTIHqpdbrtas] [llomny]
Az llomny kttt formtum, s a bejelentkezsek kronolgijt tartalmazza.
A vlasz legltalnosabb alakja az albbi: (a szgletes zrjelbe tett lerkat csak egyes opcik
vltjk ki)
name [state] line time [idle] [comment] [exit]
Az egyes mez!k rtelme az albbi:

name login nv
state terminl llapot: ms folyamat mint aki ott lpett a rendszerbe rhatja-e, ha
igen akkor ezen a helyen egy ll, ellenkez! esetben egy -.
line a terminl vonal szma a /dev katalgus alapjn.
time a belps ideje
idle a terminl vonal utols m"kdse ta eltelt id! rban.
pid a felhasznl shell-jnek folyamat azonostja
comment opcinknt vltozik. az /etc/inittab llomnybl kiolvasott valamely
informci
exit a -a opci rja, bizonyos folyamatok exit rtkei.
Az who parancs legfontosabb opcii
-s alaprtelmezs.
-H rjon fejlcet az output el.
-p kilistzza az init program ltal elindtott sszes folyamatot, azokon a
neveken, ahogy azt az init az /etc/inittab-ban tallja.
-l Ez az opci csak azokat a terminlvonalakat sorolja fel, amelyeken a
rendszerbe be lehet jelentkezni, azaz fut rajtuk a getty, megkezdett
bejelentkezs esetn pedig a login processz.
-u csak a bejelentkezett felhasznlkat listzza ki, az opcionlis mez!kb!l
kitlti az idle, a pid s a comment mez!ket. ( Az idle rtke old, ha
boot-ols ta, vagy legalbb 24 rja azt a vonalat nem hasznltk.)
-r az init folyamat pillanatnyi futsi szintjt rja ki. A folyamat befejezskori
sttust az idle mez! alatt, a kilpsi sttust az exit mez! alatt rja ki.
-b az utols betlts (boot-ols) idejt rja ki.
294
FGGELK


HIBAKERESS, TIPPEK
S TRKKK


Ebben a fejezetben gy"jtttk ssze, lehet!leg tmk szerint rendezve, mindazokat a
problmkat, amelyek a kezd! Unix felhasznl lett oly gyakran megkesertik. Az
elhangzottak egy rszre a knyvben mr szerepeltek utalsok, msok a sehova be nem
illeszthet!, mit tegynk ha... kategriba tartoznak. Szerepelnek itt olyan problmk,
amiket a tanfolyamaink hallgatinl tapasztaltunk, msok viszonylag kzismert s gyakran
el!fordul gondok, melyekre ugyan ott szerepelnek a kziknyvekben a megoldsok s blcs
intencik, de ezekre a legritkbb esetben bukkanhatunk r cltudatos keresssel... Mindegy,
me egy csokor az ltalunk legfontosabbaknak tltekb!l; csak buzdtani tudunk mindenkit e
lista sajt b!vtsre, s ha ezt megosztjk velnk a knyv kvetkez! kiadsra, hisszk, hogy
ez mindenki szmra hasznos s gymlcsz! lesz.
Bejelentkezs, terminlkezels
Bejelentkezs utn csupa nagybet"vel r a rendszer, akr kis-, akr nagybet"t is
hasznlunk.
Problmnk gykere valszn"leg abban rejlik, hogy bejelentkezsi nevnk csak nagybet"ket
tartalmaz (vagy vletlenl a CAPSLOCK gombot lenyomtuk); a login program, amelyik a
bejelentkezseket ellen!rzi, ezek utn azt ttelezi fel, hogy olyan terminlon dolgozunk,
amelyik csak a nagybet"ket ismeri (, a h!skor...!) - s a tovbbiakban ehhez is tartja magt,
mindent nagybet"vel r, a tnyleges nagybet"ket rendszerint egy eljk helyezett backslash
karakterrel klnbzteti meg.
Az egyik megolds, ha a CAPSLOCK beragadsa okozta a problmt, a kijelentkezs, s
jbli belps; ha a ellenben a bejelentkezsi nevnk van rosszul megvlasztva, cserltessk
le a rendszergazdval gy, hogy legalbb egy kisbet"t is tartalmazzon, ett!l a login program
szreveszi magt.
Ha valamilyen okbl mgsem akarunk kilpni, az stty parancs megfelel! opciival
prblkozhatunk: az

stty iuclc -olcuc -xcase
Fggelk Hibakeress, tippek s trkkk
295
opcikombinci rendszerint segt a problmn.
Bejelentkezskor (s ha sikeres volt, utna is) id!nknt rtelmetlen karakterek
szerepelnek a jk helyett.
Ha a rossz karakterek rendszeresen, minden msodik, harmadik karakterhelyen fordulnak el!,
valszn"leg a paritskezels van rosszul belltva. Az stty konfigurlst ilyenkor clszer" a
rendszergazdra bzni, ha mgis magunknak kell boldogulni, akkor a parenb parodd
cstopb cs7 cs8 paramterekkel val szisztematikus ksrletezssel lltsuk be a vonali
jellemz!ket.
Ha a hiba kezetes magyar szveg megjelentsekor jelentkezik, valszn"leg az a gond, hogy
terminlunk ht bites zemmdra van lltva. Adjuk ki az

stty cs8 -istrip
parancsot a nyolcbites zemmd belltsra.
UNIX felhasznli ismeretek
296
Fjlkezels, parancsbegpels
A fjlnv egy '-' karakterrel kezd!dik. Hogyan lehet a fjlt tnevezni, vagy kitrlni?
A gond abban rejlik, hogy a '-' karaktert a programok opcikezd! karakternek tekintik, s
ebbli meggy!z!dskr!l elg nehz lebeszlni !ket. Mindazonltal tbb mdon is
megoldhat a problma. A legegyszer"bb, hogy a szban forg fjlnevet tetsz!leges, akr
relatv, akr abszolt elrsi t megadssal nevezzk meg, a lnyeg az, hogy ne a mnusz jel
kezdje a nevt. Ha pldul -xfile a fjl neve, a ./-xfile hivatkozs tkletesen megoldja a
problmt s kezelhet!v teszi a fjlt.
A msik megolds, amit szmos segdprogram elfogad, a '--' opci hasznlata. Ez az opci
ugyanis azt jelenti az adott programnak, hogy a kvetkez! paramterek mr nem tartalmaznak
opcit. gy a fenti flresikerlt nev" fjlt a legtbb program jl kezeli a -- -xfile megadssal.
(Csak a z"rzavar fokozsra emltjk meg, egyes programok, pldul az rm egyes rgebbi
implementcii, az egyetlen mnusz jelet is ilyen rtelemben kezelik, nem a standard bemenet
vagy kimenet jeleknt...)
Specilis karakterek kerltek egy fjlnvbe.
Hogyan lehet a fjlt tnevezni, vagy kitrlni?
A legkzenfekv!bb megolds, hogy keresnk a fjlnvben egy olyan jellemz! rszt, amelyik
ezt s csakis ezt a fjlt jellemzi, majd ezt a mintt a fjlnv behelyettestsi mechanizmus
specilis karaktereit felhasznlva adjuk meg trlsre, valahogy gy:

rm *egyedi_minta*
Ha pontosan nem tudjuk, a specilis karakter hol is kerlt bele a fjlnvbe (s ltalban nem
is tudjuk, hiszen ezek egyben rendszerint nem-nyomtathat karakterek is), akkor az

od -c .
paranccsal krjnk egy listt a munkakatalgusrl. E listban a katalgusfjl tartalma
karakteres formban jelenik meg, a nem nyomtathat karaktereket oktlis formban adja meg.
A lista alapjn egyrtelm"en eldnthet!, hogyan is nz ki valjban a keresend! fjlnevnk, s
hogyan tudjuk elkerlni, hogy az egyedi_minta megadsba bekerljn a galibt okoz
karakter is.
Ha valamilyen oknl fogva a mintaillesztst nem hasznlhatjuk, a fjlkezel! parancsok -i
(interaktv) opcijt hasznlhatjuk, melynek hatsra egyenknt visszaigazolst kr, hogy
vgrehajtsa-e a szbanforg fjlok a krdses m"veletet.
Ha a -i opcival se boldogulunk, dertsk ki a renitens llomny inode szmt (pldul az

ls -il
paranccsal), majd egy clzott find paranccsal, amelyik a kapott inode-hoz tartoz fjlt keresi,
trljk illetve mdostsuk:

Fggelk Hibakeress, tippek s trkkk
297
find . -inum inode_number -ok rm -f {} \;
(A fenti m"veletsor vgrehajtsakor ne felejtkezznk el arrl, hogy az inode-ok csak egy
nll (becsatolhat) llomnyrendszeren bell egyediek, teht mivel az egsz
llomnyrendszerben tbb azonos inode is lehet, vigyzni kell arra, vajon tnyleg a kvnt
llomnyt trljk-e e clbl is clszer"bb a ok opci hasznlata a -exec ellenben.)
Hogyan lehet egy kitrlt fjlt helyrelltani?
A lakonikus vlasz az, hogy sehogy, s ez all bizony kevs kivtel akad. Ha a problmn egy
trls utn kezdnk el gondolkodni, bizony ks! a bnat; a kitrlt fjlok felszabadul
blokkjai az llomnyrendszer szabad blokkjainak listjra f"z!dnek fel, radsul olyan
szerencstlen mdon, hogy minden j helyfoglalsi ignykor a legutoljra felkerlt blokkokat
osztja ki els!knt a rendszer. Egyetlen, hajszlnl is vkonyabb esly csak akkor van, ha akad
a kzelben szakrt! rendszergazda aki azon nyomban lekapcsolja a gpet, majd tbb-
kevsb manulis eszkzkkel visszavadssza a trlt fjlt. A dolog kzel sem trivilis, s a
sikere mg ekkor is igen ktsges.
Egyetlen megolds a megel!zs. Viszonylag knny" s ltalnos megoldst jelent az aliasok
hasznlata (sajnos ezt a mechanizmust nem minden shell ismeri). Ha viszont rendszernkben
hasznlhat, akkor az rm parancsot aliasknt definilhatjuk, az

alias rm 'rm -i'
vagy hasonl formban, s a tovbbiakban az rm parancs meghvsakor az interaktv opci
hatsra rkrdez, hogy tnyleg trlni akarunk-e. A megolds (s minden ms megolds)
htrnya a szles rtelemben vett tvihet!sg s szabvnyossg hinya: ha egy msik Unixos
gp el lnk le, nem biztos, hogy akr ez, akr ms megolds m"kdik a gpen, s
tvedsnkre rendszerint itt is csak az els! trls utn dbbennk r...
'Command not found' vagy hasonl hibazenetet kapunk a shellscriptnk indtsakor, noha
vgrehajthatv van tve s a munkakatalgusunkban van.
Nha, ha j krnyezetben dolgozunk, azt tapasztaljuk, hogy az elindtott program nem indul
el, pedig a munkakatalgusunkban van, s mg vgrehajtsi jogunk is van r. Ekkor jusson
esznkbe, hogy a Unix csak azokat a katalgusokat tudja elrni, amelyek a PATH vltozban
szerepelnek. gy ha az adott krnyezet PATH vltozjbl hinyzik a mindenkori munkakata-
lgus, a prog nev" programot a ./prog paranccsal tudjuk elindtani. (A kurrens katalgus
PATH vltozba illesztst biztonsgi okokbl nem javasoljuk.)
Nincs history szolgltats a csh esetn
lltsuk be .cshrc fjlunkban az albbiakat (a szmrtk termszetesen egyni zls dolga, a
tl kis rtkek az esemnypuffer rtelmt krd!jelezik meg, a nagy puffer pedig a shell
indulst lasstja jelent!sen):

set history=20 # esemnypuffer mrete
set savehist=20 # a kilpskor megrzend puffer mrete
UNIX felhasznli ismeretek
298
Vltoz rtkadsnl a 'var: not found' hibazenetet kapjuk.
A problma oka minden valszn"sg szerint az, (a standard Bourne s a Korn shell
hasznlatt felttelezve), hogy az rtkads '=' karaktert szkzk veszik krl. A shell
ugyanis csak akkor ismeri fel, hogy rtkadsrl van sz, ha az els! szn bell szerepel az
egyenl!sgjel; ha szkz van az egyenl!sgjel krl, a shell a vltoznevet fogja a
vgrehajtand parancs nevnek tekinteni, az egyenl!sgjelet az els!, a vltozrtket pedig a
msodik paramternek. E problma a C shellnl nem merl fel, ott a szkzk meglte vagy
nemlte rdektelen.
A shellscript, amit futtatunk, meg kellene hogy vltoztassa a kurrens
katalgust (shellvltozt), de ez mgsem trtnik meg, a shellscript
lefutsa utn vltozatlan marad.
A magyarzat a Unix tbbfeladatos m"kdsb!l kvetkezik. Amikor egy shellscriptet
elindtunk, a shell egy jabb, gynevezett subshellben indtja el a scriptet. A subshell rkli
szl!je krnyezett, annak egy msolatval dolgozik tovbb, de ebb!l az is kvetkezik, hogy
a shellscript lefutsa s a subshell befejez!dse semmilyen hatst nem gyakorolhat az eredeti
shellvltozkra, hiszen azoktl teljesen fggetlenl kezelte !ket a rendszer.
A problmnak ha nem is megoldst, de megkerlst gy rhetjk el, hogy a futtatand
scriptet nem subshellel futtatjuk, s gy a script ltal mdostott vltozk a kurrens krnyezetet
mdostjk. Bourne s Korn shell esetn a

. shellscript
paranccsal, mg C shell esetn a

source shellscript
paranccsal lehet a kurrens shellben futtatni.
Hogyan tudunk Bourne vagy Korn shellben a csh .logout fjljhoz
hasonlan, kilpskor lefut konfigurcis fjlt ltrehozni?
Ha a fjl az egyszer"sg kedvrt .logout nvre hallgat, akkor a

trap ". .logout" 0
parancs hatsra, amikor a login shell a kilpst jelz! 0 szignlt szleli, vgrehajtja a trap
parancsban definilt parancsot, azaz a .logout fjlban megadott parancsokat.
Segdprogramok furcsasgai
A find parancs a -exec vagy -ok opci hasznlatakor az 'incomplete statement'
hibazenettel reagl.
Fggelk Hibakeress, tippek s trkkk
299
Gyakran kapjuk ezt a hibazenetet, ha a find parancsot a -exec vagy -ok opcikkal hvtuk
meg. A kziknyv ugyan megemlti, hogy az ezen opcik utn berand parancsokat a '\;'
karakterekkel kell lezrni, de azt nem, hogy e karakterek s a velk lezrt parancs kztt
legalbb egy szkzt is el kell helyezni... Teht pldul a

find . -name thisfile -exec ls -l {}\;
megads helytelen, helyette az albbit kell hasznlni:

find . -name thisfile -exec ls -l {} \;
(A problma nem minden find implementciban fordul el!.)
A test beptett parancs rvidtett rsmdja
Gyakran lehet gondunk a test beptett shell parancs rvidtett rsmdjval, amikor e shell
szerkezetet a [] jelekkel rvidtjk. Noha implementcinknt eltrhet a shell reaglsa, sajt
keser" tapasztalataink alapjn forrn javasoljuk mindenkinek, hogy a szgletes zrjelek
mindkt oldaln helyezzen el szkzket. Az albb kvetkez! plda az esetek tbbsgben
szintaktikai hibhoz vezet:

if [-d $dfile];
...
helyesen (pontosabban biztonsgosabban) gy rjuk:

if [ -d $dfile ] ;
UNIX felhasznli ismeretek
300
Hogy tagoljuk a shell vezrlsi szerkezeteit?
Az albbiak inkbb shellscriptek rsa kzben zavarnak, de a megfelel! tanulsg interaktiv
parancsrsra is levonhat. A C nyelvhez szokott felhasznlk a shell vezrl! utastsait gyak-
ran rjk egysorba, elvlaszt pontosvessz! nlkl, valahogy pldul gy:

if date|grep SEPT then echo "Iskolaba megyunk" else echo "szunet van" fi
Biztosak lehetnk benne, hogy a fenti paranccsal jl megzavarjuk a shellt. Ugyanis, amit mi
kulcssznak gondolunk, azt a shell csak adott pozcikban tekinti kulcssznak, ms helyen
csak egy karaktersorozat, amit parancsargumentumknt kezel. A kiemelt helyek, ahol a shell
kulcsszkat keres: a soreleje, valamint a parancselvlaszt pontosvessz! utni pozci. Teht
a fenti parancs egy helyes alakja:

if date | grep SEPT; then echo "Iskolaba megyunk"
else echo "szunet van"; fi
Az ltalnos klszably az, hogy a then, s a do tltelkszavak vonhatak ssze egy
sorba az !ket megel!z! if, for vagy while szintaktikus elemekkel. Az sszevons felttele,
mint a fenti pldn lttuk, a pontosvessz! hasznlata, mert ez parancsszepartorknt a
kivltott jsor karaktert helyettesti. Teht pldul az

if expr; then
while expr; do
for var in wordlist; do
rvidtsek biztonsggal hasznlhatak.
Neglt mintk a grep parancsban
Milyen mintt kell adnunk a grep parancsnak ha egy llomnybl olyan sorokat szeretnnk
kivlasztani,amelyek nem tartalmaznak egy adott karaktert, mondjuk a 9-es szmot? Ez a kr-
ds minden alkalommal megizzasztja a hall-
Fggelk Hibakeress, tippek s trkkk
301
gatkat. Ugyan is, ha olyan sorokat akarunk kivlasztani, amelyekben van 9-es szm, a dol-
gunk egyszer", a minta maga a szm. Ha ennek negltjt adjuk meg mintnak, ([^9]), az meg
fogja tallni az sszes olyan sort, amiben van legalbb egyetlen nem 9-es karakter. A helyes
megolds szavakban gy fogalmazdik meg; keressk azt a sort, amelyben az els!t!l az utols
karakterig nincs 9-es. Jelekben:

grep '^[^9]*$' file(s)
A vi (ed, ex) editor hasznlata kzben lellt a rendszer s elveszett az ppen
szerkesztett fjl.
A vi egy kln knyvtrban biztonsgi msolatokat tart fenn a szerkeszts menetr!l.
Rendszerhiba esetn a vi -r opcival tudjuk megismteltetni a teljes el!z! szerkesztsi
menetet. A visszajtszs befejeztekor mentsk el a fjlt valamilyen nven, s mris
tovbbdolgozhatunk, nagy valszn"sggel csak az utols pr karakter hinyzik munknkbl.
Gyakoribb hibazenetek
Az albbiakban a leggyakrabban el!fordul hibazenetekb!l mazsolzunk, a lehetsges
gyakoribb kivlt okokra rmutatva. Vlogatsunk tbb-kevsb nknyes, hiszen
alapvet!en csak a minden rendszerben felbukkan kzs hibazenetekkel van rtelme itt
foglalkozni.
...arg count
Tlsgosan sok, vagy tlsgosan kevs argumentumot adtunk meg a program ltal vrthoz
kpest. Az adott program manul oldalain nzzk meg a pontos szintaxist, de gyakran a
parancs ltal kirt online 'Usage:' ismertet! is kisegt.
UNIX felhasznli ismeretek
302
Arg list too long
A meghvott programnak tadott argumentumlista tl hossz. Rendszerint nem az ltalunk
begpelt argumentumok okoznak tlcsordulst, hanem a parancssorban szerepl!
fjlbehelyettestsek (egy nagy knyvtrban kiadott * fjlnv stb) (a `...`
parancsbehelyettestsi mechanizmus is szolglhat hossz argumentumlistkkal).
Broken pipe
A pipeline-ba szervezett parancsok kzl valamelyik id!nek el!tte elhalt, mialatt valaki mg
adatokat kldtt neki.
File exists
A futtatott program mr ltez! fjlt akar fellrni.
File not found
A program nem tallja az ltala keresett fjlt. A find paranccsal nzhetnk utna, tnylegesen
hol is tallhatak a keresett fjlok.
File too large
A fjl kimertette a rendelkezsre ll mrethatrt. (Az rtk rendszerenknt vltozhat.) Ilyen
esetben forduljunk a rendszergazdhoz, mert szmos esetben viszonylag knnyen lehet
emelni a felhasznl szmra rendelkezsre ll hatrokat.
Is a directory
A katalgusfjlt gy prbltuk meg rni/olvasni, mintha kznsges fjl volna.
No such file or directory
A megadott fjlnv paramtert (akr katalgust, akr kznsges fjlt) nem tallja a shell.
Ellen!rizzk a megadott fjl- illetve katalgusnevet.
Fggelk Hibakeress, tippek s trkkk
303
Not a directory
Katalgusnevet vr programnak nem katalgusnevet adtunk meg (pldul cd).
Not owner
Olyan fjlt prbltunk meg elrni vagy mdostani, amelyikre nincs meg a megfelel! jogunk.
Ugyanezt a jelzst kapjuk, ha nem ltalunk indtott folyamatot prblunk meg trlni a kill
paranccsal.
Out of memory
Tlsgosan sok folyamat fut s elfogyasztottk a rendelkezsre ll memrit. A ms ltal
indtott folyamatokkal persze nem sokat kezdhetnk, de a ps paranccsal megkereshetjk
esetleges sajt, mr nem szksges processzeinket, s trlhetjk !ket. (Gyakran el!fordul,
hogy egy folyamat szmos ms folyamatot indt el, s ezek id!nknt bentragadnak a
rendszerben, noha mr nem futnak. (Kivltkppen az X Window alap, grafikus
ablakfellettel elltott rendszereken szaporodnak minden mrtken fell.)
Permission denied
Megfelel! jogok hinyban prbltuk meg olvasni, rni vagy vgrehajtani a fjlt.
Too many arguments
Too few arguments
Tlsgosan sok, vagy tlsgosan kevs argumentumot adtunk meg a hvott programnak.
(Pldul egynl tbb argumentum a cd parancsnl, vagy kett!nl kevesebb az mv-nl stb.)
Usage: ...
Szmos program, ha rossz argumentumokkal hvtk meg, kir egy rvid emlkeztet!t, hogy
hogyan is kell helyesen hasznlni. Ha e tjkoztat ltal nyjtott informci nem elg, akr az
online, akr a nyomtatott kziknyv ad rszletesebb informcit.
... Unknown option
UNIX felhasznli ismeretek
304
A programnak tadott opci ismeretlen a program szmra.
Rendszerllapot vltozsai
Disk quota exceeded
Betelt a szmunkra kijellt kvta, mikzben j fjlt akartunk ltrehozni, illetve mr meglv!t
mdostani. A kvtartket csak privilgizlt felhasznl mdosthatja.
Fggelk Hibakeress, tippek s trkkk
305
Read only file system
A fjlrendszer, amin rni prbltunk, rsvdett. nmagban ll, hlzatos kapcsolatok
nlkli rendszeren ez rendszerint akkor fordul el!, ha a CD-ROM-ot, vagy az rsvdett
floppyt az rsvdettsg deklarlsa nlkl prbltuk a mount paranccsal becsatolni.
Hlzaton lv! Unix rendszereknl gyakori, hogy a hlzaton keresztl, az NFS protokollal
hozzfrhet! fjlrendszerek is csak olvashatnak vannak deklarlva.
... write failed, file system is full
File system full
A megnevezett fjlrendszeren nincs tbb szabad hely. Noha ez ltalban tbb felhasznl
szerencss egyttm"kdsnek gymlcse, az esetlegesen ltalunk indtott nagymret"
nyomtatsi feladatok, szemt (junk) fjlok, tmeneti anyagok, core fjlok stb. trlse
segthet a helyzeten. Ha nem, meg kell vrni, amg a rendszergazda helyet nem csinl, illetve
a nyomtatsok befejeztvel a spooler ltal ignyelt hely felszabadul a lemezen.
Segmentation fault
Core dumped
Bus error
Core dumped
Vratlan bels! hiba, rendszerint a program szmra kiosztott memriahatrok megsrtsekor
jelentkezik. Akr sajt programjaink hibs m"kdse, akr valamelyik rendszerprogram
hibja eredmnyezheti. A 'core dumped' zenet jelzi, hogy az esetleges nyomkvets cljaira
egy core nev" llomny keletkezett, amelyik a rendszer memriakpt s egyb
nyomkvetsi informcikat tartalmazza. (Ha nem hasznljuk fel hibakeressre ezeket a
fjlokat, clszer" rendszeresen irtani !ket, mert kivlt a mai terjedelmesebb Unixokban igen
nagy helyet foglalnak el
1
.

1
Szerz nmi dicsekvssel lltja, neki sikerlt mr ht s fl megabjtos core llomnyt is generlnia...
306
14. FEJEZET


FELADATGYJTEMNY

A feladatok megoldsnl a szmozs sorrendjt ajnlatos kvetni, mert a feladatok egymsra
plnek, felhasznljk az elz feladatok eredmnyeit. Megolds kzben a manul hasznlata
nem tilos, st javallott. Egyes feladatok olyan parancsok felhasznlst kvnjk meg,
amelyeket a knyv anyaga nem tartalmaz. Ezeket a parancsokat megjegyzsknt a
feladatokhoz rtuk, hogy az olvas a manulbl knnyen kikereshesse. A feladatok megoldsa
kzben ne felejtsk el, hogy a puding prbja...
Vgl elnzst krnk azrt a pongyolasgrt, hogy a fjlok neveire, ahol az gyis
egyrtelm, nem teljes elrsi nvvel hivatkozunk.
UNIX alapfogalmak
[1] Deklarljunk a sajt alapkatalgusunkban alkatalgusokat az albbi nevekkel: bin,
tmp, box, work, work/store.

[2] Vltoztassuk a fenti katalgusok engedlyeit az albbiakra:
bin: mindenki szmra kereshet-olvashat, s csak a tulajdonos
szmra rhat.
box: mindenki szmra csak rhat, a tulajdonos szmra olvas-
hat is, a csoporttrsak keresni is tudnak benne.

[3] Bvtsk a PATH vltozt gy, hogy a sajt tmp katalgusunkat elbb rje el, mint
brmelyik msik katalgust, ami a PATH vltozban szerepel.

[4] Bvtsk a PATH vltozt gy, hogy a sajt work katalgusunkat ksbb rje el, mint
brmi ms katalgust, ami a PATH vltozban szerepel.

[5] Hova vezet a munkakatalgusban kiadott
cd ../..
parancs?

[6] Ksztsnk (a cat parancs segtsgvel) egy forras nev fjlt az albbi tartalommal:
baba szep baba
abba
alma
Fggelk Feladatgyjtemny
307
eper
szilva
dinnye
6darab

[7] Ksztsk el a forras fjl nyomtatsi tkrkpt (a pr parancs ltal ltrehozott
vltozatt) a temp nev fjlban. Hogyan tudnnk ezt mindjrt kinyomtatni (pr s lp
parancs)?

[8] Ksztsnk msolatokat a forras fjlrl a work, s tmp katalgusokban. Legyen kztk
olyan, amelyben ktszer is benne van az eredeti fjl. (Az j fjlokra a tovbbiakban
forr1 s forr2 nven fogunk hivatkozni.)

[9] Tegyk a tmp katalgusban lv fjlunkat rsvdett.

[10] Az alapkatalgusban lv forras fjlhoz lncoljunk hozz egy forras s egy forras9
nev fjlt a work katalgusban. Nzzk meg az eredeti fjl lncszmt.

[11] Trljk ki a tmp-ben lv forr2 fjlt.

[12] Nzzk meg, work mely fjljainak van egynl nagyobb linkszma.

[13] Nzzk meg, hogy mely fjlnevek tartoznak azonos fjlhoz a work katalguson bell.

[14] Ksztsnk egy egynl nagyobb linkszm s egy pontosan 1 linkszm fjlbl
sszefzve egy j fjlt a munkakatalgusunkban.

[15] Nzzk meg, hogy milyen rejtett fjlok vannak az alapkatalgusban.

[16] Szmoljuk meg, hogy hny elem van a /dev katalgusban.

[17] Listzzuk ki a /dev katalgusbl a ngybets, tty-al kezdd fjlok neveit.

[18] Listzzuk ki a /dev katalgusbl a 't'-vel kezdd, 3-8-as szmok egyikre vgzd
fjlok neveit.

[19] Szmoljuk meg, hogy hny olyan nv van a /dev katalgusban, amelyben az 0..9
szmjegyek egyike szerepel.

[20] Listzzuk ki a /dev katalgusbl a csak egy szmjegyet tartalmaz fjlok neveit.

[21] Nzzk meg, hogy hny vgrehajthat fjl van a /bin katalgusban.

[22] Trjnk vissza a work katalgusba. (Figyelem, a legkevesebb karakter letsvel!)

[23] Olvassuk ki a munkakatalgus tartalmt, de ne a szablyos ls paranccsal (lsd: od)

[24] Mi a klnbsg az albbi parancsok vgrehajtsban?

UNIX felhasznli ismeretek
308
ls
ls -r
ls -F
ls *
ls -R
ls *

[25] rassunk ki az echo paranccsal a kpernyre hrom csillagot. Hnyflekpp tudjuk ezt
megtenni?

[26] Nzzk meg a shell-vltozk rtkeit, majd az exportlt (krnyezeti) shell-vltozkt.

[27] rassuk ki a sajt nevnkkel azonos nev shell-vltoznak a tartalmt.

[28] Ksztsnk magunknak egy tvonalshell-vltozt ami a gyakran ltogatott work,
illetve tmp katalgusba vezet.

[29] Menjnk a /etc katalgusba, s ott olvassuk el (listzzuk ki) a work/forras9 nev
fjlunkat, az elbb definilt tvonalvltoz segtsgvel:
A vi kezelse
A feladatoknak tbb megoldsa is lehet. Trekedjnk minl rvidebb parancs sor
segtsgvel megoldani a feladatokat.
A gyakorlathoz szksges egy legalbb 100 soros szveg fjl. Kivlan alkalmas e clra
valamelyik parancs on-line manuljnak listja, amit egy fjlba irnytottunk t, pldul:
man sh >sh.man
A parancsokat bethelyesen prbltuk megadni, ami persze nehzsgekbe tkzik a nem
nyomtathat karakterek esetn. A parancsbetk kzti szkz csak a tagols kedvrt szerepel,
begpelni ket nem kell! (Ahol tnylegesen a szkzt is be kell gpelni, ott ezt ms mdon,
pldul az egsz karaktersorozat idzjelek kz zrsval gyis jelezzk.) A
vezrlkaraktereket vagy a CTRL-C, vagy a <...> karakterek kzti nvmegadssal jelezzk.

[30] Hozzunk ltre egy j fjlt a vi editorral.

[31] Indtsuk el a vi editort "read only" zemmdban.

[32] Lpjnk ki a vi-bl. Hogyan lehet mentssel, illetve ments nlkl kilpni?

[33] Pozicionljuk a kurzort egy karakternyit le, fl, jobbra, balra. /gyeljnk az aktulis
zemmdra, kurzormozgat nyilak nlkl dolgozzunk!/

Fggelk Feladatgyjtemny
309
[34] Pozicionljuk a kurzort 4 karakternyit le, fl, jobbra, balra. /gyeljnk az aktulis
zemmdra, kurzormozgat nyilak nlkl dolgozzunk!/

[35] Pozicionljuk a kurzort jobbra, balra egy szval, majd az adott soron bell 2-3 szval
jobbra, balra. Mi trtnik akkor, ha az adott sorban (jobbra, balra) kevesebb sz
tallhat a megadottnl?

[36] Pozicionljuk a kurzort a kperny tetejre, kzepre, aljra.

[37] Lapozzunk kt s fl oldalt elre, majd msfl oldalt vissza.

[38] Mozgassuk a kurzort a szveg utols sorra.

[39] Mozgassuk a kurzort a szveg els sorra.

[40] Mozgassuk a kurzort a szveg 20. sorra.

[41] Mozgassuk a kurzort tiz sorral elre, majd vissza.

[42] Mozgassuk a kurzort az utols eltti 6. sorra.

[43] Mozgassuk a kurzort az aktulis sor els karakterre, majd az utolsra.

[44] Mozgassuk a kurzort az aktulis sor tizedik, majd az utols eltti tizedik karakterre.

[45] Mozgassuk a kurzort az aktulis sor msodik majd utols szavra

[46] Indtsuk el gy a vi editort, hogy indts utn az editlt fjl 10. sorra lljon.

[47] rjunk be az utols eltti 5 sor msodik szava el egy tetszleges szveget /pl.: cica
mica/.

[48] rjunk be az 5. sor utols szava mg egy tetszleges szveget /pl.: EZ ITT A SOR
VEGE/.

[49] rjunk be az utols sor els szava el egy tetszleges szveget /pl.: UTOLSO SOR/.

[50] rjunk be az els sor el egy tetszleges szveget /pl.: EZ ITT A HEADER HELYE/.

[51] rjunk be az utols sor mg egy tetszleges szveget /pl.: EZ ITT A FOOTER
HELYE/.

[52] lljunk egy sz kzepre, s mdostsuk a az adott szt /pldul mozdonyfuto ->
mozdonyvezeto).

[53] Mdostsunk egyszerre hrom, egy sorban lev s egyms melletti szt a
szvegnkben.
UNIX felhasznli ismeretek
310

[54] Helyettestsk az adott sor utols ngy szavt.

[55] Mdostsuk az egsz sort.

[56] Trljk ki a kurzortl jobbra es karaktert, majd helyre szrjunk be egy szveget.

[57] Helyettestsk a kurzor alatti karaktert az 'A' betvel.

[58] Helyettestsk kurzor utni karaktereket.

[59] Egyestsk az 5. s 6. sort.

[60] Kis betvel rtuk egy fejezet cmt (bevezeto); mozgassuk a kurzort a sz elejre s
konvertljuk a kisbetket nagybetre, majd rjuk vissza kisbetre.
[61] lljunk egy tetszleges sorra. Trljk ki a kurzortl jobbra es szt.

[62] Trljk ki az adott sor utols ngy szavt.

[63] Trljk ki az adott sor els ngy karaktert.

[64] Szntessk meg, azaz lltsuk vissza az utols trls eltti llapotot.

[65] lltsuk vissza az adott sor eredeti tartalmt /a soron vgzett sszes mdosts
megszntetse/.

[66] Trljk ki az els 5 sort.

[67] Trljk ki az utols 5 sort.

[68] Trljk a kurzor aktulis sora krl elhelyezked sorokat /+- 2 sort/.

[69] Trljk ki az els sort s msoljuk t az utols sorba.

[70] Duplzzuk meg a 9. sort.

[71] Cserljk fel a szveg els s utols t sort.

[72] Keressk meg a szvegnkben lefel a "the" /vagy tetszleges ms/ szt.

[73] Keressk meg a kvetkez elfordulst.

[74] Keressk meg a szvegnkben felfel a "the" /vagy tetszleges ms/ szt.

Fggelk Feladatgyjtemny
311
[75] Keressk meg az editlt szvegben az sszes olyan sort, amely a "UNIX" szval
kezddik.

[76] Keressk meg az editlt szvegben azokat a sorokat, melyek a "able" karakter sorozatra
vgzdnek.
[77] Keressk meg az editlt szvegben azokat a sorokat, melyekben olyan karakter lncok
tallhatk, melyek "a" betvel kezddnek s vgzdnek, valamint ezenkvl "r", "m",
"p", "g" betket tartalmaznak.

[78] Keressk az editlt szvegben a kurzor pozcijtl visszafel azokat a sorokat,
melyekben olyan karakter lncok tallhatk, melyek "a" betvel kezddnek s
vgzdnek, ezenkvl csak "m"-tl "s"-ig terjed karaktereket tartalmaznak.

[79] Keressk az editlt szvegben a kurzor pozcijtl visszafel azokat a sorokat,
melyekben olyan karakter lncok tallhatk, melyek "a" betvel kezddnek s
vgzdnek, valamint a kt "a" kztt tetszleges szm karaktert tartalmaz.

[80] Cserljk le az adott sorban az els "the" szt az "eht"-re.

[81] Cserljk le az adott sorban az sszes "the" szt az "eht"-re.

[82] Cserljk le az adott sorban az sszes "the" szt az "eht"-re, de minden egyes csere
eltt krdezzen r a cserre.

[83] Cserljk le az egsz szvegben a sorok els "the" szavt az "eht"-re.

[84] Cserljk le az egsz szvegben az sszes "the" szt az "eht"-re, rkrdezssel.

[85] Cserljk le a kurzor sorban az els olyan karakter lncot, mely "a" betvel kezddik
s vgzdik, valamint a kt "a" kztt tetszleges szm karaktert tartalmaz a " talalt "-
ra.

[86] Cserljk le a kurzor sorig a szvegben az adott sor els olyan karakter lnct, mely
"a" betvel kezddik s vgzdik, valamint a kt "a" kztt tetszleges szm karaktert
tartalmaz a " talalt "-ra.

:1,.s/a.*a/ talalt / <RETURN>

[87] Cserljk le az egsz szvegben az adott sor els olyan karakter lnct, mely "a"
betvel kezddik s vgzdik, valamint a kt "a" kztt tetszleges szm karaktert
tartalmaz a " talalt "-ra.

[88] Cserljk le az egsz szvegben azokat a sorokat melyekben csak az "EXAMPLES"
szveg tallhat "PELDAK"-ra.

[89] Keressk meg a kurzor sortl +- 5 sorban tallhat, a sor elejn "A"-val kezdd s
szintn "A"-val zrul tetszleges hosszsg karakterlncokat, majd rjuk be el a
"Minta: " szveget.

UNIX felhasznli ismeretek
312
[90] Keressk meg a teljes szvegben azokat a mintkat, melyek "A"-val kezddnek, s
utna tetszleges szm 'l' s 'z' kzti karaktereket tartalmaznak. Az illeszked szveget
tegyk "[]" kz. Minden egyes csere eltt krdezznk r a cserre.

[91] A kurzor sora mg olvassuk be egy msik szvegfjl tartalmt.

[92] A 10. sor mg olvassuk be egy msik szvegfjl tartalmt.

[93] A kurzor sora mg olvassuk be az aktulis katalgus tartalmt.

[94] Az editlt szvegnket rassuk ki egy "filename" nev fjlba.

[95] Az editlt szvegnk els 30 sort rassuk ki egy "filename" nev fjlba.

[96] Trjnk t egy msik ("filename" nev) fjl editlsra.

[97] Indtsuk el a vi editort hrom editland llomnnyal. Prbljuk ki hogyan lehet ttrni
a kvetkez fjlok editlsra. Hogyan lehet tlpni az alternatv fjl editlsra?

[98] Lpjnk t "ex" mdba, majd vissza.

[99] rassuk ki a vi editorral a konfigurcis paramtereit.

[100] lltsuk be az aktulis md kiratst. Figyeljk meg ennek hatst.

[101] lltsunk be sorszm kirst. Figyeljk meg hatst.

[102] lltsuk be az automatikus ments funkcit.

[103] Vltoztassuk meg az jsor nyits margmrett (wrapmargin) 10-re. Nzzk meg
hatst.

[104] lltsuk t a tabultor mrett 8-rl 4-re. Vizsgljuk meg az tllts hatst.

[105] rassuk ki a vi bels paramtereit.

[106] Ksztsnk a vi szmra loklis inicializl fjlt, melyben belltjuk a md kiratst,
automatikus mentst s megvltoztatjuk a tabultor mrett.
A shell s a segdprogramok
[107] rjuk ki a kpernyre:
Most a ...ban vagyok
Fggelk Feladatgyjtemny
313
ahol a pontok helyre a HOME vltoz tartalma kerljn.

[108] Hogyan lehet a kpernyre rni, hogy

A $HOME erteke ...

[109] rjuk ki a kpernyre, hogy

date

Fog valami rdekes ettl trtnni? Hogyan rhet el, hogy az echo a napi dtumot rja
vissza?

[110] Nzzk meg, hogy a forras nev fjlban van-e "e" betvel kezdd sor?

[111] Nzzk meg, hogy a forras nev fjl mely soraiban van "e" bet.

[112] Nzzk meg, hogy a forras nev fjlban hny mssalhangzval kezdd sor van?

[113] Keressnk egyms utni azonos betket a forras fjlban. Hasznljuk a minta
kijellst, s szmllt elfordulst.

[114] Nzzk meg, hogy a forras nev fjlban van-e 6-os szmjegy.

[115] Nzzk meg, hogy a forras nev fjlban van-e olyan sor, amiben nincs 6-es szmjegy.

[116] Nzzk meg, hogy a forras nev fjlban van-e olyan sor ahol a sor utols kt karaktere
azonos az els kettvel?

[117] Nzzk meg, hogy a forras nev fjlban van-e olyan sor amiben van polindrom. (4
bets)

[118] rjuk bele a hnapok neveit, sszevissza sorrendben egy honap nev fjlba.
Hasznljuk a begyazott input ("here document") mechanizmust.

[119] Rendezzk a honap fjl sorait (sort parancs)
bc szerinti sorrendbe;
csinljunk minden betjbl nagybett (tr parancs);
rendezzk a csupa nagybets hnapok fjlt termszetes sorrendbe.

[120] rjuk ki a kpernyre a /etc/passwd fjl tartalmt a bejelentkezsi nevek bc
sorrendje szerint.

[121] rassuk ki, hogy egy fl perc mlva milyen folyamatok futnak a gpen, kzben pedig
vgezznk tetszleges ms tevkenysget (pldul ksztsnk egy fjlt cat utastssal).
(sleep s httrben futtats)

UNIX felhasznli ismeretek
314
[122] rjunk egy lscim nev fggvnyt, ami az ls parancs kiadsa eltt kirja a kilistzott
katalgus nevt.
Shell programozs
Az albbi feladatok arra is pldt szeretnnek mutatni, hogy hogyan egszthetjk ki az
utastskszletnket ltalunk gyakran hasznlt, sajt kszts segdprogramokkal.
rdemes erre figyelnnk, mert sok munkt, gy idt is takarthatunk meg velk.

[123] rassuk ki, s szmoljuk meg, hogy egy script indtsa utn hny shell fut.

[124] Nzzk meg, hogy egy bizonyos felhasznl dolgozik-e, s fut-e pp folyamata.

[125] Csinljunk egy programot, ami semmi mst nem tesz, mint visszaadja a kapott
argumentumokat, amiket azonban klnbz mdokon fejt ki. Prblgassuk klnbz
argumentumokkal meghvni. (Pldul 1 2 3, "1 2" 3, 1 '2 3' stb.).

[126] rjunk egy modv nev script-et ami a tulajdonos s a vele egy csoportban lv
szmra vgrehajthatv tesz egy programot, majd tteszi a /$HOME/bin katalgusba.
Hajtassuk vgre sajt magn.

[127] rjunk bresztrt ami egsz rakor zenetet kld a kpernyre. Tegyk
vgrehajthatv, msoljuk a /$HOME/bin katalgusba s indtsuk el a httrben. (date
parancs)

[128] rjunk egy fejlec nev programot, ami C nyelv vagy shell parancsokbl ll
programok els sorba az aktulis dtumot rja kommentknt. Tegyk vgrehajthatv
s msoljuk be a /$HOME/bin katalgusba.

[129] Hozzunk ltre egy sorsz nev programot, ami az f1 fjl sorainak szmozsval lltja
el az f2 llomnyt. Tegyk vgrehajthatv s msoljuk be a $HOME/bin
katalgusba.

[130] Van-e ebben az vben htfvel kezdd hnap? Ha tallunk ilyet, rjuk ki betkkel a
hnap nevt. (cal parancs)

[131] rjunk olyan script-et, ami ugyanazt a levelet ($2) elkldi a fjlban megnevezett ($1)
felhasznlknak.

[132] Hogyan llapthatjuk meg, hogy milyen shell alatt dolgozunk?
Ments, visszallts
Fggelk Feladatgyjtemny
315
Sajnos ez az a rsz, ahol elkerlhetetlenl beletkznk az eltr fjl- s perifrianevek
problmjba. A sajt gpnkn hasznlt neveket krdezzk meg a rendszergazdtl s
helyettestsk be a pldinkban szereplk helyre. Az albb kvetkez gyakorlatokban a
hajlkonylemezes egysget (floppy) s a streamer kazettt hasznljuk, ezeket a /dev/rfd0,
illetve a /dev/rst0 nven szerepeltetjk.
A feladatoknak tbb megoldsa is lehet.
Trekedjnk minl rvidebb parancs sor segtsgvel megoldani a feladatokat.
A fjl nv megadsakor mindig relatv elrsi neveket hasznljunk.
A gyakorlathoz szksges 2-3 fjl (pl.: pro1, pro2, pro3).
Pldk a dd hasznlatra
[133] rjuk ki a floppy-ra a pro1 fjlt a dd segtsgvel. lltsuk be az input-output blokk
mretet 9 kilobyte-ra.

[134] Olvassuk vissza a floppy-ra kirt pro1 fjlt a dd segtsgvel pro1.dd nven.
Hasonltsuk ssze az eredetivel.

[135] rjuk ki a floppy-ra a pro2 fjlt a dd segtsgvel. lltsuk be az input-output blokk
mretet 4 kilobyte-ra, valamint vgeztessnk kisbet konverzit.

[136] Olvassuk vissza a floppy-ra kirt pro2 fjlt a dd segtsgvel pro2.dd nven.
Hasonltsuk ssze az eredetivel.

[137] rjuk ki az rst0-ra (magnetic tape) a pro3 fjlt a dd segtsgvel. lltsuk be az input-
output blokk mretet 800 byte-ra.

[138] Olvassuk vissza az rst0-ra kirt pro3 fjlt a dd segtsgvel pro3.dd nven.
Hasonltsuk ssze az eredetivel.

[139] rjuk ki a rst0-ra a pro2 fjlt a dd segtsgvel. lltsuk be az input blokk mretet 80
byte-ra, az output blokk mretet 800 byte-ra, valamint vgeztessnk ASCII =>
EBCDIC konverzit.

[140] Olvassuk vissza a rst0-ra kirt pro2 fjlt a dd segtsgvel pro2.dd nven. Hasonltsuk
ssze az eredetivel. Majd dd segtsgvel lltsuk vissza az ASCII tblt. Hasonltsuk
ssze az eredetivel.
Pldk a cpio hasznlatra
[141] Mentsk el az aktulis katalgus tartalmt cpio segtsgvel a /dev/rfd0c-re.
UNIX felhasznli ismeretek
316

[142] lltsuk vissza a ments tartalmt a tmp katalgusban.

[143] Mentsk el a bin katalgus tartalmt cpio segtsgvel a /dev/rst0-ra.

[144] lltsuk vissza a ments tartalmbl a ".out"-ra vgzd fjlokat a tmp katalgusban.

[145] Mentsk el az work katalgus tartalmbl a ".c"-re, illetve ".h"-ra vgzd fjlokat
cpio segtsgvel a tmp/sources.cpio fjlba.

[146] lltsuk vissza a ments tartalmbl a nem ".h"-ra vgzd fjlokat a tmp
katalgusban.

[147] lltsuk vissza a ments tartalmbl azokat a fjlokat, melyek nevben szerepel a
"main" sz.

[148] Mentsk el azokat a fjlokat melyek nevben szerepel a "user" sz. A cpio ltal
ltrehozott backup fjl tmp/users.cpio legyen.

[149] Mentsk el cpio segtsgvel az egsz munkaterletnket. A cpio ltal ltrehozott
backup fjl tmp/backup.cpio legyen.
Pldk a tar hasznlatra
[150] Mentsk el tar segtsgvel az egsz munkaterletnket a /dev/rfd0c-re (azaz a
floppyra). A ments sorn alkalmazzunk olyan opcit, melynek hatsra a tar
kilistzza az elmentett fjlok neveit.

[151] lltsuk vissza tar segtsgvel az egsz munkaterletnket a /dev/rfd0c-rl a tmp
katalgusba. A visszallts sorn alkalmazzunk olyan opcit, melynek hatsra a tar
kilistzza a visszalltott fjlok neveit.

[152] Mentsk el tar segtsgvel a doc katalgusbl a ".txt"-re vgzd fjljainkat a
/dev/rst0-ra (azaz a szalagra). A ments sorn alkalmazzunk olyan opcit, melynek
hatsra a tar kilistzza az elmentett fjlok neveit, valamint a blokk faktort
vltoztassuk meg 126-ra.

[153] Listztassuk ki a tar programmal a korbban elmentett fjlokat a /dev/rst0-rl.

[154] lltsuk vissza a tmp katalgusban a bevezet.txt nev fjlt (vagy tetszleges, ltez
fjlt) a tmp katalgusba.

[155] Msoljuk le tar segtsgvel a work katalgus sszes ".c" vgzds fjljait a tmp
katalgus al.
Fggelk Feladatgyjtemny
317

[156] Mentsk el a munkaterletnket a "server" gpen lev floppy egysgbe rakott
floppyra. (rsh parancs)

[157] lltsuk vissza a "server" gp floppy egysgrl a tar-ral mentett llomnyainkat a
tmp katalgus al.

[158] Mentsk el tar segtsgvel az egsz munkaterletnket a tmp/home.tar nev fjlba.
A ments utn szelektven lltsuk vissza a ".c"-re vgzd fjlokat a tmp katalgus
al.
Pldk a compress, uncompress, zcat hasznlatra
[159] A compress segtsgvel tmrtsk a work/main.c nev fjlt. Tmrts utn
vizsgljuk meg a work katalgus tartalmt.

[160] Az uncompress segtsgvel lltsuk vissza a work/main.c nev fjlt. Visszallts
utn vizsgljuk meg a work katalgus tartalmt.

[161] A compress segtsgvel tmrtsk a work katalgus sszes ".c", ".h" vgzds
fjljait. Tmrts utn vizsgljuk meg a work katalgus tartalmt. Hasznljunk olyan
opcit, melynek hatsra a compress kirja az aktulis mvelett.

[162] Az uncompress segtsgvel lltsuk vissza a work katalgus sszes ".c", ".h"
vgzds fjljait. A visszallts utn vizsgljuk meg a work katalgus tartalmt.
Hasznljunk olyan opcit, melynek hatsra a compress kirja az aktulis mvelett.

[163] A compress segtsgvel tmrtsk a doc/project.doc fjlt. Tmrts utn
vizsgljuk meg a work katalgus tartalmt. Hasznljunk olyan opcit, melynek
hatsra a compress kirja az aktulis mvelett, s nem rja fell az eredeti fjlt,
hanem helyette ltrehozza a doc/doc.Z fjlt.

[164] Msoljuk le a doc/doc.Z fjlt a proj.doc.Z fjlba. Hajtsuk vgre azokat az
utastsokat, melyek sorn a doc/doc.Z tmrtett fjl visszalltsa sorn megmarad,
mg a doc/proj.doc.Z fjl helyettestdik a doc/proj.doc llomnnyal.

[165] lltsuk vissza az elbbiekben elksztett archivumot a tmp katalgus al.

[166] Mentsk el cpio segtsgvel az egsz munkaterletnket. Tmrtsk a cpio ltal
elksztett archivumot. A tmrtett fjl neve: tmp/home.cpio.Z legyen. (I/O
tirnyts)

[167] lltsuk vissza az elbbiekben elksztett archivumot a tmp katalgus al.

UNIX felhasznli ismeretek
318
[168] Mentsk el tar segtsgvel az egsz munkaterletnket. Tmrtsk a tar ltal
elksztett archivumot. A tmrtett fjl neve: tmp/home.tar.Z legyen. (I/O
tirnyts)

[169] lltsuk vissza az elbbiekben elksztett archivumot a tmp katalgus al.
UNIX felhasznli ismeretek
319
FELADATOK MEGOLDSA
UNIX alapfogalmak
[1] Deklarljunk a sajt alapkatalgusunkban alkatalgusokat az albbi nevekkel: bin,
tmp, box, work, work/store.

$ cd
$ mkdir -p bin tmp box work/store

A mkdir egyetlen opcija segtsgvel tbb, egymsbl szrmaztatott katalgust is
lehet csinlni.

[2] Vltoztassuk a fenti katalgusok engedlyeit az albbiakra:
bin: mindenki szmra kereshet-olvashat, s csak a tulajdonos
szmra rhat.
box: mindenki szmra csak rhat, a tulajdonos szmra olvas-
hat is, a csoporttrsak keresni is tudnak benne.
Menjnk az alapkatalgusunkba, ha mg nem voltunk ott, s nzzk meg, hogy
jelenleg milyen jogok rvnyesek a katalgusainkra:
$ cd; ls -l
A kvetkez vltoztatsokat hajtsuk vgre:
$ chmod a-w bin # senki sem rhat
$ chmod +rx bin # mindenki kereshet s olvashat
$ chmod u+w bin # mostmr a tulajdonos rhat is

Ms mdon is tllthatjuk az engedlyeket:
$ chmod 622 pbox

[3] Bvtsk a PATH vltozt gy, hogy a sajt tmp katalgusunkat elbb rje el, mint
brmelyik msik katalgust, ami a PATH vltozban szerepel.
$ PATH=$HOME/temp:$PATH
$ echo $PATH

Azaz a PATH vltoz rtke az j elrsi utat s a vltoz rgi rtkt is tartalmazza.
[4] Bvtsk a PATH vltozt gy, hogy a sajt work katalgusunkat ksbb rje el, mint
brmi ms katalgust, ami a PATH vltozban szerepel.

$ PATH=$PATH:$HOME/work
$ echo $PATH

A kt plda egytt azt hivatott megmutatni, hogy a krnyezeti vltozk tartalma egy
string, amit egy msik stringgel egyesteni (konkatenlni) lehet.

[5] Hova vezet a munkakatalgusban kiadott
cd ../..
UNIX felhasznli ismeretek
320
parancs?

A cd ../.. parancs kt katalgussal feljebb vezet a katalgus fban.

[6] Ksztsnk (a cat parancs segtsgvel) egy forras nev fjlt az albbi tartalommal:
baba szep baba
abba
alma
eper
szilva
dinnye
6darab

$ cat >forras
baba szep baba
abba
alma
eper
szilva
dinnye
6darab
^d

Fggelk Feladatgyjtemny
321
[7] Ksztsk el a forras fjl nyomtatsi tkrkpt (a pr parancs ltal ltrehozott
vltozatt) a temp nev fjlban. Hogyan tudnnk ezt mindjrt kinyomtatni (pr s lp
parancs)?

$ pr forras > temp; lp temp

Ha a pr parancs outputjt pipe-oljuk a nyomtathoz:

$ pr forras | lp

Nem prtoland de ilyen megolds is mkdik:

$ pr forras>/dev/lpn

ahol /dev/lpn a konkrt perifriameghajt neve.

[8] Ksztsnk msolatokat a forras fjlrl a work, s tmp katalgusokban. Legyen kztk
olyan, amelyben ktszer is benne van az eredeti fjl. (Az j fjlokra a tovbbiakban
forr1 s forr2 nven fogunk hivatkozni.)

$ cat forras >work/forr1
$ cat forras forras >tmp/forr2

[9] Tegyk a tmp katalgusban lv fjlunkat rsvdett.

$ chmod -w ../tmp/forr2

[10] Az alapkatalgusban lv forras fjlhoz lncoljunk hozz egy forras s egy forras9
nev fjlt a work katalgusban. Nzzk meg az eredeti fjl lncszmt.

$ cd; ln forras ../work/forras; ln forras work/forras9
$ ls -l forras

[11] Trljk ki a tmp-ben lv forr2 fjlt.

$ rm $HOME/tmp/forr2

A UNIX komolyan veszi az rs-olvassi jogokat. Ezrt gy a trls nem sikerlhet,
mert a fjl rsvdett. Elbb a tulajdonosnak, azaz neknk, rhatv kell tenni. (Ezt
elrhetjk a chmod paranccsal trtn visszalltssal, de gy is, hogy az rm
parancsot a -f opcival hvjuk meg, ami rsvdelem esetn is trli a fjlt - feltve,
hogy a mi tulajdonunkban van!)

Hasonl meglepetsek rhetik a felhasznlt, ha egy szmra rsvdett katalgusba
akarna valamit belemsolni.

Teht a megolds:

$ cd $HOME/tmp; chmod u+w forr2
$ rm forr2

vagy:

$ rm -f $HOME/tmp/forr2

UNIX felhasznli ismeretek
322
[12] Nzzk meg, work mely fjljainak van egynl nagyobb linkszma.

$ ls -l work

[13] Nzzk meg, hogy mely fjlnevek tartoznak azonos fjlhoz a work katalguson bell.

$ ls -li work

Az azonos fjlhoz tartoz linkek i-node szma azonos.

[14] Ksztsnk egy egynl nagyobb linkszm s egy pontosan 1 linkszm fjlbl
sszefzve egy j fjlt a munkakatalgusunkban.

$ cd; cat tmp/forr1 forras >forr3

[15] Nzzk meg, hogy milyen rejtett fjlok vannak az alapkatalgusban.

$ cd; ls -a

[16] Szmoljuk meg, hogy hny elem van a /dev katalgusban.

$ ls /dev | wc -l

Az ls parancs soronknti kimenett fzzk a wc parancshoz.

[17] Listzzuk ki a /dev katalgusbl a ngybets, tty-al kezdd fjlok neveit.

$ ls /dev/tty?

A shell a '?' karakter helyre egyetlen, de tetszleges karaktert helyettest.
[18] Listzzuk ki a /dev katalgusbl a 't'-vel kezdd, 3-8-as szmok egyikre vgzd
fjlok neveit.

$ ls /dev/t*[3-8]

[19] Szmoljuk meg, hogy hny olyan nv van a /dev katalgusban, amelyben az 0..9
szmjegyek egyike szerepel.

$ ls /dev/*[0-9]* | wc -l

Itt is a shell mintaillesztsrl van sz. Megcsinlhattuk volna mskpp is:

$ ls /dev | grep '.*[0-9].*' | wc -l

[20] Listzzuk ki a /dev katalgusbl a csak egy szmjegyet tartalmaz fjlok neveit.

$ ls | grep '^[^1-9]*[1-9][^1-9]*$' | wc -l

Az elz pldval egytt a mintailleszts szablyaiban rejl rdekessgeket mutatja.

[21] Nzzk meg, hogy hny vgrehajthat fjl van a /bin katalgusban.

$ ls -l /bin | grep '^-..x' | wc -l

Itt nem hasznlhatjuk a shell mintaillesztsi mechanizmust, mert az csak a fjlnevekre
illeszt.

[22] Trjnk vissza a work katalgusba. (Figyelem, a legkevesebb karakter letsvel!)
Fggelk Feladatgyjtemny
323

cd; cd work

[23] Olvassuk ki a munkakatalgus tartalmt, de ne a szablyos ls paranccsal (lsd: od)

od -c .

UNIX felhasznli ismeretek
324
[24] Mi a klnbsg az albbi parancsok vgrehajtsban?

ls
ls -r
ls -F
ls *
ls -R
ls *

Az ls kilistzza a fjl s katalgusneveket.
Az ls -r csak a kirt nevek sorrendjt fordtja meg az elzhz kpest.
Az ls -F a nevek vgn jelzi, hogy katalgus, kznsges, vagy vgrehajthat fjlrl
van-e sz.
Az ls * hatsra a kurrens katalgusban lv sszes fjl, illetve a kurrens katalgusban
lv alkatalgusok fjljainak nevt rja ki.
Az ls -R rekurzivan kirja a kurrens katalgus alatti teljes llomnyft, nem csak kt
szintjt, mint az ls *.

[25] rassunk ki az echo paranccsal a kpernyre hrom csillagot. Hnyflekpp tudjuk ezt
megtenni?

$ echo "***"
$ echo '***'
$ echo \*\*\*

Mindhrom esetben a csillag specilis jelentst kellett feloldani.

[26] Nzzk meg a shell-vltozk rtkeit, majd az exportlt (krnyezeti) shell-vltozkt.

$ set

Az argumentumok nlkl kiadott set parancs kirja az sszes shell-vltozt, s
belltott rtkeiket.

$ env

Az argumentumok nlkl kiadott env parancs kirja az sszes krnyezeti vltozt, s
belltott rtkeiket.

Fggelk Feladatgyjtemny
325
[27] rassuk ki a sajt nevnkkel azonos nev shell-vltoznak a tartalmt.

$ echo $demo

(Emberi szmts szerint ilyen nev shell-vltozt mg senki nem hozott ltre, ezrt a
tartalma res.)

[28] Ksztsnk magunknak egy tvonalshell-vltozt ami a gyakran ltogatott work,
illetve tmp katalgusba vezet.

$ wdir=$HOME/work
$ tdir=$HOME/tmp

[29] Menjnk a /etc katalgusba, s ott olvassuk el (listzzuk ki) a work/forras9 nev
fjlunkat, az elbb definilt tvonalvltoz segtsgvel:

$ cd /etc; cat $wdir/forras9
A vi kezelse
[30] Hozzunk ltre egy j fjlt a vi editorral.

1; vi s :w filename
2; vi filename

[31] Indtsuk el a vi editort "read only" zemmdban.

1; vi -R filename
2; view filename

[32] Lpjnk ki a vi-bl. Hogyan lehet mentssel, illetve ments nlkl kilpni?

1; ZZ
2; :wq <RETURN>
3; :q! <RETURN>
4; :q <RETURN>

[33] Pozicionljuk a kurzort egy karakternyit le, fl, jobbra, balra. /gyeljnk az aktulis
zemmdra, kurzormozgat nyilak nlkl dolgozzunk!/

hjkl

[34] Pozicionljuk a kurzort 4 karakternyit le, fl, jobbra, balra. /gyeljnk az aktulis
zemmdra, kurzormozgat nyilak nlkl dolgozzunk!/

4h4j4k4l

[35] Pozicionljuk a kurzort jobbra, balra egy szval, majd az adott soron bell 2-3 szval
jobbra, balra. Mi trtnik akkor, ha az adott sorban (jobbra, balra) kevesebb sz
tallhat a megadottnl?

UNIX felhasznli ismeretek
326
a; w b
b; 2b 3w
c; 10w 20b

[36] Pozicionljuk a kurzort a kperny tetejre, kzepre, aljra.

HML

[37] Lapozzunk kt s fl oldalt elre, majd msfl oldalt vissza.

CTRL-F, CTRL-F, CTRL-D, CTRL-B, CTRL-U

[38] Mozgassuk a kurzort a szveg utols sorra.

1; G
2; :$ <RETURN>

[39] Mozgassuk a kurzort a szveg els sorra.

1; 1G
2; :1 <RETURN>

[40] Mozgassuk a kurzort a szveg 20. sorra.

1; 20G
2; :20 <RETURN>

[41] Mozgassuk a kurzort tiz sorral elre, majd vissza.

a; :.+10 <RETURN>
b; :.-10 <RETURN>
[42] Mozgassuk a kurzort az utols eltti 6. sorra.

:$-6 <RETURN>

[43] Mozgassuk a kurzort az aktulis sor els karakterre, majd az utolsra.

a; 0
b; $

[44] Mozgassuk a kurzort az aktulis sor tizedik, majd az utols eltti tizedik karakterre.

a; 0 10l
b; $ 10h

[45] Mozgassuk a kurzort az aktulis sor msodik majd utols szavra

a; 0 2w
b; $ b

[46] Indtsuk el gy a vi editort, hogy indts utn az editlt fjl 10. sorra lljon.

vi +10 filename

[47] rjunk be az utols eltti 5 sor msodik szava el egy tetszleges szveget /pl.: cica
mica/.
Fggelk Feladatgyjtemny
327

G5kwicica mica<ESC>

[48] rjunk be az 5. sor utols szava mg egy tetszleges szveget /pl.: EZ ITT A SOR
VEGE/.

1; 5G$aEZ ITT A SOR VEGE<ESC>
2; 5GAEZ ITT A SOR VEGE<ESC>

[49] rjunk be az utols sor els szava el egy tetszleges szveget /pl.: UTOLSO SOR/.

1; GIUTOLSO SOR<ESC>
2; GiUTOLSO SOR<ESC>

UNIX felhasznli ismeretek
328
[50] rjunk be az els sor el egy tetszleges szveget /pl.: EZ ITT A HEADER HELYE/.

1; 1GOEZ ITT A HEADER HELYE<ESC>
2; :1 <RETURN> OEZ ITT A HEADER HELYE<ESC>
3; :1 <RETURN> 0 iEZ ITT A HEADER HELYE<RETURN><ESC>
4; 1GIEZ ITT A HEADER HELYE<RETURN><ESC>

[51] rjunk be az utols sor mg egy tetszleges szveget /pl.: EZ ITT A FOOTER
HELYE/.

1; GoEZ ITT A FOOTER HELYE<ESC>
2; :$<RETURN>oEZ ITT A FOOTER HELYE<ESC>
3; :$<RETURN>$aEZ ITT A FOOTER HELYE<RETURN><ESC>
4; GA<RETURN>EZ ITT A FOOTER HELYE<RETURN><ESC>

[52] lljunk egy sz kzepre, s mdostsuk a az adott szt /pldul mozdonyfuto ->
mozdonyvezeto).

ff cwvezeto<ESC>

[53] Mdostsunk egyszerre hrom, egy sorban lev s egyms melletti szt a
szvegnkben.

1; 3cwEZZEL A SZOVEGGEL<ESC>
2; c3wEZZEL A SZOVEGGEL<ESC>

[54] Helyettestsk az adott sor utols ngy szavt.

1; $4b4cwITT A SOR VEGE<ESC>
2; $4bc$ITT A SOR VEGE<ESC>
3; $4bCITT A SOR VEGE<ESC>

[55] Mdostsuk az egsz sort.

1; 0c$EZ LETT A SORBOL<ESC>
2; ccEZ LETT A SORBOL<ESC>

[56] Trljk ki a kurzortl jobbra es karaktert, majd helyre szrjunk be egy szveget.

1; lxiEZT JOL BESZURTUK<ESC>
2; sEZT JOL BESZURTUK<ESC>

[57] Helyettestsk a kurzor alatti karaktert az 'A' betvel.

1; xiA<ESC>
2; rA

[58] Helyettestsk kurzor utni karaktereket.

REZ LETT HELYETTESITVE<ESC>

[59] Egyestsk az 5. s 6. sort.

5GJ

Fggelk Feladatgyjtemny
329
[60] Kis betvel rtuk egy fejezet cmt (bevezeto); mozgassuk a kurzort a sz elejre s
konvertljuk a kisbetket nagybetre, majd rjuk vissza kisbetre.

8~b8~

[61] lljunk egy tetszleges sorra. Trljk ki a kurzortl jobbra es szt.

dw

[62] Trljk ki az adott sor utols ngy szavt.

1; $4b4dw
2; $4bd$
2; $4bD

[63] Trljk ki az adott sor els ngy karaktert.

04x

[64] Szntessk meg, azaz lltsuk vissza az utols trls eltti llapotot.

u

[65] lltsuk vissza az adott sor eredeti tartalmt /a soron vgzett sszes mdosts
megszntetse/.

1; U
2; :u <RETURN>

[66] Trljk ki az els 5 sort.

:1,5 d <RETURN>
[67] Trljk ki az utols 5 sort.
:$,$-5 d <RETURN>

[68] Trljk a kurzor aktulis sora krl elhelyezked sorokat /+- 2 sort/.
:.-2,.+2 d <RETURN>

[69] Trljk ki az els sort s msoljuk t az utols sorba.
1; 1GddGP
2; :1,1 m $ <RETURN>

[70] Duplzzuk meg a 9. sort.
1; 9GYp
2; 9Gyyp
3; 9GddPP
4; :9,9 co 9 <RETURN>

[71] Cserljk fel a szveg els s utols t sort.
a; :1,5 m $-5 <RETURN>
b; :$-5,$ m 0 <RETURN>
UNIX felhasznli ismeretek
330

[72] Keressk meg a szvegnkben lefel a "the" /vagy tetszleges ms/ szt.
1; /the<RETURN>
2; :/the/<RETURN>

[73] Keressk meg a kvetkez elfordulst.
1; n
2; / <RETURN>

[74] Keressk meg a szvegnkben felfel a "the" /vagy tetszleges ms/ szt.
1; ?the<RETURN>
2; :?the?<RETURN>

[75] Keressk meg az editlt szvegben az sszes olyan sort, amely a "UNIX" szval
kezddik.
/^UNIX <RETURN> els elforduls
n kvetkez elforduls
[76] Keressk meg az editlt szvegben azokat a sorokat, melyek a "able" karakter sorozatra
vgzdnek.

/able$ <RETURN> els elforduls
n kvetkez elforduls

[77] Keressk meg az editlt szvegben azokat a sorokat, melyekben olyan karakter lncok
tallhatk, melyek "a" betvel kezddnek s vgzdnek, valamint ezenkvl "r", "m",
"p", "g" betket tartalmaznak.

/a[rmpg]*a <RETURN> els elforduls
n kvetkez elforduls

[78] Keressk az editlt szvegben a kurzor pozcijtl visszafel azokat a sorokat,
melyekben olyan karakter lncok tallhatk, melyek "a" betvel kezddnek s
vgzdnek, ezenkvl csak "m"-tl "s"-ig terjed karaktereket tartalmaznak.

?a[m-s]*a <RETURN> els elforduls
n visszafele kvetkez elforduls

[79] Keressk az editlt szvegben a kurzor pozcijtl visszafel azokat a sorokat,
melyekben olyan karakter lncok tallhatk, melyek "a" betvel kezddnek s
vgzdnek, valamint a kt "a" kztt tetszleges szm karaktert tartalmaz.

?a.*a <RETURN> els elforduls
n visszafele kvetkez elforduls

[80] Cserljk le az adott sorban az els "the" szt az "eht"-re.

:s/the/eht/ <RETURN>

[81] Cserljk le az adott sorban az sszes "the" szt az "eht"-re.

:s/the/eht/g <RETURN>

Fggelk Feladatgyjtemny
331
[82] Cserljk le az adott sorban az sszes "the" szt az "eht"-re, de minden egyes csere
eltt krdezzen r a cserre.

:s/the/eht/gc <RETURN>

[83] Cserljk le az egsz szvegben a sorok els "the" szavt az "eht"-re.

1; :1,$s/the/eht/ <RETURN>
2; :g/the/s//eht/ <RETURN>
[84] Cserljk le az egsz szvegben az sszes "the" szt az "eht"-re, rkrdezssel.

1; :1,$s/the/eht/gc <RETURN>
2; :g/the/s//eht/gc <RETURN>

[85] Cserljk le a kurzor sorban az els olyan karakter lncot, mely "a" betvel kezddik
s vgzdik, valamint a kt "a" kztt tetszleges szm karaktert tartalmaz a " talalt "-
ra.

:s/a.*a/ talalt / <RETURN>

[86] Cserljk le a kurzor sorig a szvegben az adott sor els olyan karakter lnct, mely
"a" betvel kezddik s vgzdik, valamint a kt "a" kztt tetszleges szm karaktert
tartalmaz a " talalt "-ra.

:1,.s/a.*a/ talalt / <RETURN>

[87] Cserljk le az egsz szvegben az adott sor els olyan karakter lnct, mely "a"
betvel kezddik s vgzdik, valamint a kt "a" kztt tetszleges szm karaktert
tartalmaz a " talalt "-ra.

:g/a.*a/s// talalt / <RETURN>
:1,$s/a.*a/ talalt / <RETURN>

[88] Cserljk le az egsz szvegben azokat a sorokat melyekben csak az "EXAMPLES"
szveg tallhat "PELDAK"-ra.

:1,$s/^EXAMPLES$/PELDAK/ <RETURN>
:g/^EXAMPLES$/s//PELDAK/ <RETURN>

[89] Keressk meg a kurzor sortl +- 5 sorban tallhat, a sor elejn "A"-val kezdd s
szintn "A"-val zrul tetszleges hosszsg karakterlncokat, majd rjuk be el a
"Minta: " szveget.

:.-5,$+5s/^A.*A/Minta: &/ <RETURN>

[90] Keressk meg a teljes szvegben azokat a mintkat, melyek "A"-val kezddnek, s
utna tetszleges szm 'l' s 'z' kzti karaktereket tartalmaznak. Az illeszked szveget
tegyk "[]" kz. Minden egyes csere eltt krdezznk r a cserre.

:g/A[l-z]*/s//\[&\]/gc <RETURN>

[91] A kurzor sora mg olvassuk be egy msik szvegfjl tartalmt.

:r filename <RETURN>
UNIX felhasznli ismeretek
332

[92] A 10. sor mg olvassuk be egy msik szvegfjl tartalmt.

:10 r filename <RETURN>

[93] A kurzor sora mg olvassuk be az aktulis katalgus tartalmt.

:r !ls -la <RETURN>

[94] Az editlt szvegnket rassuk ki egy "filename" nev fjlba.

:w filename <RETURN>

[95] Az editlt szvegnk els 30 sort rassuk ki egy "filename" nev fjlba.

:1,30 w filename <RETURN>

[96] Trjnk t egy msik ("filename" nev) fjl editlsra.

:e filename <RETURN>

[97] Indtsuk el a vi editort hrom editland llomnnyal. Prbljuk ki hogyan lehet ttrni
a kvetkez fjlok editlsra. Hogyan lehet tlpni az alternatv fjl editlsra?

vi file1 file2 file3
:n <RETURN>
:n <RETURN>
CTRL-^
:e # <RETURN>

[98] Lpjnk t "ex" mdba, majd vissza.

Q ex md
:vi <RETURN> vi md

[99] rassuk ki a vi editorral a konfigurcis paramtereit.

:set <RETURN>

Fggelk Feladatgyjtemny
333
[100] lltsuk be az aktulis md kiratst. Figyeljk meg ennek hatst.
:set showmode <RETURN>

[101] lltsunk be sorszm kirst. Figyeljk meg hatst.
:set number <RETURN>
:set nonumber <RETURN>

[102] lltsuk be az automatikus ments funkcit.
:set autowrite <RETURN>

[103] Vltoztassuk meg az jsor nyits margmrett (wrapmargin) 10-re. Nzzk meg
hatst.
:set wrapmargin=10 <RETURN>

[104] lltsuk t a tabultor mrett 8-rl 4-re. Vizsgljuk meg az tllts hatst.
:set tabstop=4 <RETURN>

[105] rassuk ki a vi bels paramtereit.
:set all <RETURN>

[106] Ksztsnk a vi szmra loklis inicializl fjlt, melyben belltjuk a md kiratst,
automatikus mentst s megvltoztatjuk a tabultor mrett.
cd $home
vi .exrc
iset showmode<RETURN>
set autowrite<RETURN>
set tabstop=4<RETURN><ESC>ZZ
A shell s a segdprogramok
[107] rjuk ki a kpernyre:
Most a ...ban vagyok
ahol a pontok helyre a HOME vltoz tartalma kerljn.
$ echo "Most a ${HOME}ban vagyok"
$ echo Most a ${HOME}ban vagyok
A gyakorlatnak kt tanulsga is van:
Az idzjelben lv s az idzjel nlkli stringet a shell egyarnt kielemzi abbl a
szempontbl, hogy be kell-e helyettestenie egy shell-vltoz rtkt, azaz a
vltoznv behelyettests ellen a dupla aposztrf nem vd.
A kapcsos zrjel jelezte a shell-vltoz nevnek hatrait. Ha nem hasznljuk, egyes
esetekben, hasonl nev shell-vltozk esetn ktrtelm lenne a vltoznv rtkelse
(ha pldul ltezne egy HOMEban nev shell-vltoz, annak rtke rdott volna ki;
shell implementcitl fggen az is lehetsges, hogy ha HOMEban nev vltoz
nincs, akkor az res stringet rja ki.) Mindezek miatt ersen tancsoljuk, hogy mindig
zrjelezzk a vltozneveket!
UNIX felhasznli ismeretek
334

[108] Hogyan lehet a kpernyre rni, hogy

A $HOME erteke ...

$ echo "A \$HOME rtke $HOME"

A \ jel feloldja a $ jel specilis jelentst.

[109] rjuk ki a kpernyre, hogy

date

Fog valami rdekes ettl trtnni? Hogyan rhet el, hogy az echo a napi dtumot rja
vissza?

$ echo date

Kirja hogy date, ebben a stringben semmi nem jelzi, hogy UNIX parancs.

$ echo `date`
$ echo "`date`"

Mindkt esetben az les-kezet pr jelzi a shell-nek, hogy UNIX parancs eredmnye
kerl az argumentumlistba.

$ echo '`date`'

Az egyszeres idzjel elnyomja az les kezet hatst.

Fggelk Feladatgyjtemny
335
[110] Nzzk meg, hogy a forras nev fjlban van-e "e" betvel kezdd sor?
$ grep '^e.*' forras

Csak a sor elejn lv "e" betre illeszkedik a minta.

[111] Nzzk meg, hogy a forras nev fjl mely soraiban van "e" bet.
$ grep e forras

A sorban brhol elfordul "e" betre illeszkedik a minta.

[112] Nzzk meg, hogy a forras nev fjlban hny mssalhangzval kezdd sor van?
$ grep '^[^aeiouAEIOU]' |wc -l

A magnhangzkat knnyebb felsorolni.

[113] Keressnk egyms utni azonos betket a forras fjlban. Hasznljuk a minta
kijellst, s szmllt elfordulst.
$ grep '(\(.\)\1\{1,80\})' forras

[114] Nzzk meg, hogy a forras nev fjlban van-e 6-os szmjegy.
$ grep 6 forras

[115] Nzzk meg, hogy a forras nev fjlban van-e olyan sor, amiben nincs 6-es szmjegy.
$ grep '^[^6]*$' forras

vagy:
$ grep -v '6' forras

[116] Nzzk meg, hogy a forras nev fjlban van-e olyan sor ahol a sor utols kt karaktere
azonos az els kettvel?
$ grep '^\(..\).*\1$' forras

[117] Nzzk meg, hogy a forras nev fjlban van-e olyan sor amiben van polindrom. (4
bets)
$ grep '^\(.\)\(.\).*\2\1$' forras

Mindkt pldban egy elzleg megjellt mintra hivatkozunk.
[118] rjuk bele a hnapok neveit, sszevissza sorrendben egy honap nev fjlba.
Hasznljuk a begyazott input ("here document") mechanizmust.
$ cat >honap<<"ev vege"
dec
marc
.
.
Jun
"ev vege"
$ cat honap

[119] Rendezzk a honap fjl sorait (sort parancs)
UNIX felhasznli ismeretek
336
bc szerinti sorrendbe;
csinljunk minden betjbl nagybett (tr parancs);
rendezzk a csupa nagybets hnapok fjlt termszetes sorrendbe.
$ sort honap
$ tr -c "[A-Z]" "[a-z]" <honap >month
$ sort -M month ev

[120] rjuk ki a kpernyre a /etc/passwd fjl tartalmt a bejelentkezsi nevek bc
sorrendje szerint.
$ sort /etc/passwd

[121] rassuk ki, hogy egy fl perc mlva milyen folyamatok futnak a gpen, kzben pedig
vgezznk tetszleges ms tevkenysget (pldul ksztsnk egy fjlt cat utastssal).
(sleep s httrben futtats)
$ (sleep 30;ps)&
$ cat > akarmi
idohuzas
^d

[122] rjunk egy lscim nev fggvnyt, ami az ls parancs kiadsa eltt kirja a kilistzott
katalgus nevt.
$ lscim
{
echo "A munkakatalgusunk $PWD"
ls $1
}

Hogyan lehetne tbb paramter feldolgozsra alkalmass tenni e fggvnyt? (bels
ciklus, $@)
Shell programozs
[123] rassuk ki, s szmoljuk meg, hogy egy script indtsa utn hny shell fut.
$ cat >shellek
ps | grep sh >$HOME/tmp/tmp
echo "a futo sh szama `cat $HOME/tmp/tmp | wc -l`"
echo "megpedig az alabbiak \n `cat $HOME/tmp/tmp`"

[124] Nzzk meg, hogy egy bizonyos felhasznl dolgozik-e, s fut-e pp folyamata.
$ cat >dolgozik
if who | grep $1 >/dev/null; then
echo "$1 dolgozik"
if ps -ef | grep $1; then
echo "ezek a folyamatok tartoznak hozza"
fi
else echo "Ejnye, a $1 meg lustalkodik"
fi

Fggelk Feladatgyjtemny
337
[125] Csinljunk egy programot, ami semmi mst nem tesz, mint visszaadja a kapott
argumentumokat, amiket azonban klnbz mdokon fejt ki. Prblgassuk klnbz
argumentumokkal meghvni. (Pldul 1 2 3, "1 2" 3, 1 '2 3' stb.).
Az albbi script-et hozzuk ltre, mondjuk argprob nven:
echo 'A $* -os valtozat'
echo $*
echo 'A "$*" -os valtozat'
echo "$*"
echo 'A $@ -os valtozat'
echo $@
echo 'A "$@" -os valtozat'
echo "$@"

[126] rjunk egy modv nev script-et ami a tulajdonos s a vele egy csoportban lv
szmra vgrehajthatv tesz egy programot, majd tteszi a /$HOME/bin katalgusba.
Hajtassuk vgre sajt magn.
chmod ug+x $1
mv $1 $HOME/bin
Ezekutn hajtsuk vgre elszr sajt magn.
$ sh modv modv

[127] rjunk bresztrt ami egsz rakor zenetet kld a kpernyre. Tegyk
vgrehajthatv, msoljuk a /$HOME/bin katalgusba s indtsuk el a httrben. (date
parancs)
Mindenek eltt figyeljk meg, hogy a date parancs milyen formtumban adja az
eredmnyt, majd a grep paranccsal kerestessnk alkalmas mintt.
until date | grep ':00:'>/dev/null
do
sleep 30
done
echo Ido van!!!

$ modv alarm
$ alarm &
$

Mi a htultje ennek a megoldsnak?

[128] rjunk egy fejlec nev programot, ami C nyelv vagy shell parancsokbl ll programok
els sorba az aktulis dtumot rja kommentknt. Tegyk vgrehajthatv s msoljuk
be a /$HOME/bin katalgusba.
A fejlec programot hrom vagy ngy argumentummal lehet majd hvni, azaz
fejlec f1 f2 c1 c2
ahol f1 a kiindul, f2 az eredmny fjl, c1 a komment sor elejt, c2 a komment sor
vgt jell string.
$ cat >fejlec
if test $# ge 3; then
case $# in
UNIX felhasznli ismeretek
338
3) vege=$3 ;;
4) vege=$4 ;;
esac
echo $3 `date` $vege>$2
cat $1>>$2
else echo Keves az argumentum!
fi
^d
$ modv fejlec
[129] Hozzunk ltre egy sorsz nev programot, ami az f1 fjl sorainak szmozsval lltja
el az f2 llomnyt. Tegyk vgrehajthatv s msoljuk be a $HOME/bin
katalgusba.

Elszr ksztsnk egy segdprogramot.

$ cat >srsz
k=1
while sor=`line`; do
echo $k $sor
k=`expr $k + 1`
done
^d
$ modv srsz
$ cat >sorszam
$ cat $1 | srsz > $2
^d
$ modv sorszam

[130] Van-e ebben az vben htfvel kezdd hnap? Ha tallunk ilyet, rjuk ki betkkel a
hnap nevt. (cal parancs)

Nzzk meg a cal parancs outputjt!

$ cat >hetfo
k=ures
p=elso
for i in 1 2 3 4 5 6 7 8 9 10 11 12; do
if cal $i $1 | grep ' 6$' > /dev/null
then
k=nemures
case $i in
1)ho=januar;;
2)ho=februar;;
3)ho=marcius;;
4)ho=majus;;
5)ho=junius;;
6)ho=julius;;
7)ho=augusztus;;
8)ho=szeptember;;
9)ho=oktober;;
11)ho=november;;
12)ho=december;;
Fggelk Feladatgyjtemny
339
fi
if test $k='nemures'; then
if test $p='elso'; then
echo Az $1 evben hetfovel kezdodik
p=masod
fi
echo $ho
k=ures
fi
done
if test $p = 'elso'; then
echo Az $1. evben nincs hetfovel kezdodo honap
fi
^d
$ chmod u+x hetfo
$ hetfo 1993

[131] rjunk olyan script-et, ami ugyanazt a levelet ($2) elkldi a fjlban megnevezett ($1)
felhasznlknak.

$ cat >postas
mail `cat $1` $2
^d
$ modv postas

[132] Hogyan llapthatjuk meg, hogy milyen shell alatt dolgozunk?

Tbb md is van r:
1. Esetleg a prompt is eligazt, de legalbbis tmpontot adhat.

2. Megnzzk a fut folyamatok kztt a ps paranccsal, hogy melyik shell-t indtottk
utoljra (a legmagasabb folyamatazonostval rendelkezt).
3. Megnzzk a /etc/passwd fjlban, hogy a bejelentkezsi nevnkhz milyen shell
kapcsoldik. Ez azonban csak akkor helyes, ha biztosak lehetnk, hogy nem
indtottunk el j shell-t a belps ta.
UNIX felhasznli ismeretek
340
Ments, visszallts
Pldk a dd hasznlatra
[133] rjuk ki a floppy-ra a pro1 fjlt a dd segtsgvel. lltsuk be az input-output blokk
mretet 9 kilobyte-ra.

1; dd if=pro1 of=/dev/rfd0c ibs=9k obs=9k conv=sync
2; dd if=pro1 of=/dev/rfd0c bs=9k conv=sync

[134] Olvassuk vissza a floppy-ra kirt pro1 fjlt a dd segtsgvel pro1.dd nven.
Hasonltsuk ssze az eredetivel.

1; dd if=/dev/rfd0c of=pro1.dd ibs=9k obs=9k conv=sync
2; dd if=/dev/rfd0c of=pro1.dd bs=9k conv=sync
diff pro1 pro1.dd

[135] rjuk ki a floppy-ra a pro2 fjlt a dd segtsgvel. lltsuk be az input-output blokk
mretet 4 kilobyte-ra, valamint vgeztessnk kisbet konverzit.

1; dd if=pro2 of=/dev/rfd0c ibs=4k obs=4k conv=lcase,sync
2; dd if=pro2 of=/dev/rfd0c bs=4k conv=lcase,sync

[136] Olvassuk vissza a floppy-ra kirt pro2 fjlt a dd segtsgvel pro2.dd nven.
Hasonltsuk ssze az eredetivel.

1; dd if=/dev/rfd0c of=pro2.dd ibs=4k obs=4k
2; dd if=/dev/rfd0c of=pro2.dd bs=4k
diff pro2 pro2.dd

[137] rjuk ki az rst0-ra (magnetic tape) a pro3 fjlt a dd segtsgvel. lltsuk be az input-
output blokk mretet 800 byte-ra.

1; dd if=pro3 of=/dev/rst0 ibs=800 obs=800
2; dd if=pro3 of=/dev/rst0 bs=800

Fggelk Feladatgyjtemny
341
[138] Olvassuk vissza az rst0-ra kirt pro3 fjlt a dd segtsgvel pro3.dd nven.
Hasonltsuk ssze az eredetivel.

1; dd if=/dev/rst0 of=pro3.dd ibs=800 obs=800
2; dd if=/dev/rst0 of=pro3.dd bs=800
diff pro3 pro3.dd

[139] rjuk ki a rst0-ra a pro2 fjlt a dd segtsgvel. lltsuk be az input blokk mretet 80
byte-ra, az output blokk mretet 800 byte-ra, valamint vgeztessnk ASCII =>
EBCDIC konverzit.

dd if=pro2 of=/dev/rst0 ibs=80 obs=800 conv=ebcdic

[140] Olvassuk vissza a rst0-ra kirt pro2 fjlt a dd segtsgvel pro2.dd nven. Hasonltsuk
ssze az eredetivel. Majd dd segtsgvel lltsuk vissza az ASCII tblt. Hasonltsuk
ssze az eredetivel.

1; dd if=/dev/rst0 of=pro2.dd ibs=800 obs=80
diff pro2 pro2.dd
dd if=pro2.dd of=pro2.dd.ascii conv=ascii
diff pro2 pro2.dd.ascii
Pldk a cpio hasznlatra
[141] Mentsk el az aktulis katalgus tartalmt cpio segtsgvel a /dev/rfd0c-re.

cd $home
ls | cpio -ocv > /dev/rfd0c

[142] lltsuk vissza a ments tartalmt a tmp katalgusban.

cd $home/tmp;
cpio -icvd < /dev/rfd0c

[143] Mentsk el a bin katalgus tartalmt cpio segtsgvel a /dev/rst0-ra.

cd $home
ls bin | cpio -ocv > /dev/rst0

UNIX felhasznli ismeretek
342
[144] lltsuk vissza a ments tartalmbl a ".out"-ra vgzd fjlokat a tmp katalgusban.
cd $home/tmp;
cpio -icvd "*.out" < /dev/rst0

[145] Mentsk el az work katalgus tartalmbl a ".c"-re, illetve ".h"-ra vgzd fjlokat
cpio segtsgvel a tmp/sources.cpio fjlba.
cd $home
ls work/*.h work/*.c | cpio -ocv > tmp/sources.cpio

[146] lltsuk vissza a ments tartalmbl a nem ".h"-ra vgzd fjlokat a tmp
katalgusban.
cd $home/tmp;
cpio -icvdf "*.h" < sources.cpio

[147] lltsuk vissza a ments tartalmbl azokat a fjlokat, melyek nevben szerepel a
"main" sz.
cd $home/tmp;
cpio -icvd `cpio -itc < sources.cpio | grep main` < sources.cpio

[148] Mentsk el azokat a fjlokat melyek nevben szerepel a "user" sz. A cpio ltal
ltrehozott backup fjl tmp/users.cpio legyen.
cd $home
find . -name "*user*" -cpio tmp/USERS.cpio

[149] Mentsk el cpio segtsgvel az egsz munkaterletnket. A cpio ltal ltrehozott
backup fjl tmp/backup.cpio legyen.
cd $home
find . -depth -print | cpio -ocv tmp/backup.cpio
Pldk a tar hasznlatra
[150] Mentsk el tar segtsgvel az egsz munkaterletnket a /dev/rfd0c-re (azaz a
floppyra). A ments sorn alkalmazzunk olyan opcit, melynek hatsra a tar
kilistzza az elmentett fjlok neveit.
cd $home
tar -cvf /dev/rfd0c .
[151] lltsuk vissza tar segtsgvel az egsz munkaterletnket a /dev/rfd0c-rl a tmp
katalgusba. A visszallts sorn alkalmazzunk olyan opcit, melynek hatsra a tar
kilistzza a visszalltott fjlok neveit.
cd $home/tmp
tar -xvf /dev/rfd0c

[152] Mentsk el tar segtsgvel a doc katalgusbl a ".txt"-re vgzd fjljainkat a
/dev/rst0-ra (azaz a szalagra). A ments sorn alkalmazzunk olyan opcit, melynek
Fggelk Feladatgyjtemny
343
hatsra a tar kilistzza az elmentett fjlok neveit, valamint a blokk faktort
vltoztassuk meg 126-ra.
cd $home
tar -cvbf 126 /dev/rst0 doc/*.txt

[153] Listztassuk ki a tar programmal a korbban elmentett fjlokat a /dev/rst0-rl.
tar -tbf 126 /dev/rst0

[154] lltsuk vissza a tmp katalgusban a bevezet.txt nev fjlt (vagy tetszleges, ltez
fjlt) a tmp katalgusba.
cd $home/tmp
tar -xvbf 126 /dev/rst0 bevezeto.txt

[155] Msoljuk le tar segtsgvel a work katalgus sszes ".c" vgzds fjljait a tmp
katalgus al.
cd $home
tar -cf - work/*.c | (cd tmp; tar -xfBp -)

[156] Mentsk el a munkaterletnket a "server" gpen lev floppy egysgbe rakott
floppyra. (rsh parancs)
cd $home
tar -cvf - ./* | rsh server dd of=/dev/rfd0c obs=9k conv=sync

[157] lltsuk vissza a "server" gp floppy egysgrl a tar-ral mentett llomnyainkat a
tmp katalgus al.
cd $home/tmp
rsh server dd if=/dev/rfd0c obs=9k conv=sync) | tar -tfB -
[158] Mentsk el tar segtsgvel az egsz munkaterletnket a tmp/home.tar nev fjlba.
A ments utn szelektven lltsuk vissza a ".c"-re vgzd fjlokat a tmp katalgus
al.

cd $home
tar cvf tmp/home.tar ./*
cd $home/tmp
tar xvf home.tar `tar tf home.tar | grep '*.c'`
Pldk a compress, uncompress, zcat hasznlatra
[159] A compress segtsgvel tmrtsk a work/main.c nev fjlt. Tmrts utn
vizsgljuk meg a work katalgus tartalmt.

cd $home/work
compress main.c
ls -la

UNIX felhasznli ismeretek
344
[160] Az uncompress segtsgvel lltsuk vissza a work/main.c nev fjlt. Visszallts
utn vizsgljuk meg a work katalgus tartalmt.
cd $home/work
uncompress main.c
ls -la

[161] A compress segtsgvel tmrtsk a work katalgus sszes ".c", ".h" vgzds
fjljait. Tmrts utn vizsgljuk meg a work katalgus tartalmt. Hasznljunk olyan
opcit, melynek hatsra a compress kirja az aktulis mvelett.
cd $home/work
compress -v *.c *.h
ls -la

[162] Az uncompress segtsgvel lltsuk vissza a work katalgus sszes ".c", ".h"
vgzds fjljait. A visszallts utn vizsgljuk meg a work katalgus tartalmt.
Hasznljunk olyan opcit, melynek hatsra a compress kirja az aktulis mvelett.
cd $home/work
uncompress -v *.Z
ls -la
[163] A compress segtsgvel tmrtsk a doc/project.doc fjlt. Tmrts utn
vizsgljuk meg a work katalgus tartalmt. Hasznljunk olyan opcit, melynek
hatsra a compress kirja az aktulis mvelett, s nem rja fell az eredeti fjlt,
hanem helyette ltrehozza a doc/doc.Z fjlt.
cd $home/doc
compress -cv project.doc > doc.Z
ls -la

[164] Msoljuk le a doc/doc.Z fjlt a proj.doc.Z fjlba. Hajtsuk vgre azokat az
utastsokat, melyek sorn a doc/doc.Z tmrtett fjl visszalltsa sorn megmarad,
mg a doc/proj.doc.Z fjl helyettestdik a doc/proj.doc llomnnyal.
cd $home/doc
cp doc.Z proj.doc.Z
uncompress -cv doc.Z > doc
uncompress -v proj.doc.Z
ls -la

[165] lltsuk vissza az elbbiekben elksztett archivumot a tmp katalgus al.

cd $home/tmp
uncompress -cv home.dump | restore -xvf -

[166] Mentsk el cpio segtsgvel az egsz munkaterletnket. Tmrtsk a cpio ltal
elksztett archivumot. A tmrtett fjl neve: tmp/home.cpio.Z legyen. (I/O
tirnyts)

cd $home
find . -depth -cpio - | compress -cv > tmp/home.cpio.Z

[167] lltsuk vissza az elbbiekben elksztett archivumot a tmp katalgus al.
Fggelk Feladatgyjtemny
345

cd $home/tmp
uncompress -cv home.cpio | cpio -id

UNIX felhasznli ismeretek
346
[168] Mentsk el tar segtsgvel az egsz munkaterletnket. Tmrtsk a tar ltal
elksztett archivumot. A tmrtett fjl neve: tmp/home.tar.Z legyen. (I/O
tirnyts)

cd $home
tar -cvf - . | compress -cv > tmp/home.tar.Z

[169] lltsuk vissza az elbbiekben elksztett archivumot a tmp katalgus al.

cd $home/tmp
uncompress -cv home.tar.Z | tar -xvfB -

347
TRGYMUTAT

UNIX felhasznli ismeretek
348
aktulis katalgus current directory
aktulis katalgus megadsa pwd parancs
alapkatalgus 48
alapknyvtr home directory
alias 219; 220; 240; 262; 263
llomny fjl
llomnyok lncolsa ln parancs
llomnyok oldaltrdelt listzsa pg parancs
llomnyrendszer 48; 49; 293
argumentumok lptetse shift utasts
aritmetikai kirtkels expr parancs
at parancs 79; 90; 93; 94; 100; 216
tirnyts 55; 56
background process httrfolyamat
behelyettests (fjlnv, parancsnv, paramter) 130;
131; 139; 164; 250
bert szveg visszajelzse echo parancs
bejelentkezs login parancs
bejelentkezett felhasznll listja who parancs
bejelentkezsi nv 42
bekezds 146; 152
belps ms felhasznlknt su parancs
binris fjlok listzsa od parancs
blank characters fehr karakterek
blokk 50; 82; 288
Bourne shell sh parancs
BSD 18; 19; 20; 21; 29; 64; 76; 92; 94; 105; 197; 205;
275; 278; 279; 284
buffer puffer
burok shell
C shell csh parancs
cancel parancs 282
cat parancs 27; 28; 29; 55; 56; 57; 85; 89; 90; 100;
110; 122; 123; 160; 169; 170; 173; 174; 175;
176; 188; 189; 194; 196; 198; 200; 202; 203;
207; 208; 211; 215; 252; 255; 256; 262; 265
cd parancs 50; 51; 65; 70; 103; 104; 202; 218; 219;
220; 229; 230; 243; 251; 258; 263; 292
CDE Common Desktop Environment
chgrp parancs 72
chmod parancs 70; 71; 72; 101; 107
chown parancs 72
cmkk 137
cmtartomny 129; 130; 131; 132; 133; 138; 139; 159
cmp parancs 172; 173; 175
comm parancs 172; 173
command Unix parancs
command prompt promptjel
Common Desktop Environment 22
cp parancs 58; 59; 64; 65; 70
cpio parancs 286; 287; 288; 289
CR karakter 46; 148; 161; 294
current directory 48; 49; 51; 251
cut parancs 170; 171; 252; 265
csh C shell
csh parancs 40; 41; 47; 77; 205; 206; 207; 209; 210;
211; 213; 214; 215; 216; 218; 219; 220; 221;
223; 225; 226; 227; 228; 229; 230; 232; 233;
235; 236; 237; 240; 241; 242; 248; 250; 251
csoportazonost 42; 168
csoportazonost mdostsa chgrp parancs
cs!hlzat 169
cs!vezetk 57; 69; 86; 87; 88; 166; 175; 191; 222;
237; 254; 255; 256
daemon 34; 38
date parancs 83; 84; 88; 89; 160; 162; 191; 192; 194;
252; 261; 265
dtum megadsa date parancs
dd parancs, fjlok mentse 145; 147; 152; 176; 177;
286; 292; 293
dmon daemon
device driver 26; 69
diff parancs 172; 173; 174; 175
directory ld katalgus
DOS 18; 24; 25; 43; 45; 47; 49; 52; 55; 58; 59; 81; 87;
98; 105; 161; 164; 166; 218; 219; 249; 251; 266;
269; 293; 294
dos2unix parancs 294
duplex pipe ktirny cs!hlzat
echo parancs 29; 55; 85; 93; 94; 98; 99; 100; 103;
106; 107; 109; 110; 123; 175; 181; 182; 183;
185; 191; 192; 196; 197; 198; 200; 202; 203;
211; 212; 219; 224; 225; 228; 229; 232; 243;
252; 254; 255; 256; 257; 258; 259; 260; 261;
262; 264; 265; 267; 273; 276
ed editor 55; 56; 70; 79; 80; 83; 100; 109; 111; 115;
116; 117; 118; 119; 121; 122; 123; 124; 125;
128; 129; 141; 159; 164; 173; 174; 175; 187;
188; 189; 194; 210; 213; 228; 263
egrep parancs 170
egyfeladatos m"kds 24
egyfelhasznls m"kds 24; 59
elektronikus levelek kldse mail parancs
elrsi t 50; 95; 253; 287; 291
env parancs 211
escape karakter 79; 222
esemnybehelyettests 240
eszkzmeghajt program ld device driver
exit vltoz 106; 166; 182; 190; 193; 197; 198; 199;
200; 203; 206; 211; 230; 236; 243; 250; 252; 253
Trgymutat
349
export utasts 75
expr parancs 179; 181; 182; 183; 196; 197; 237; 239;
243; 244; 247; 248
fjl 17; 26; 28; 29; 37; 41; 42; 43; 49; 50; 52; 53; 54;
55; 56; 57; 58; 59; 60; 61; 62; 65; 66; 67; 68; 69;
70; 71; 72; 73; 74; 80; 82; 84; 85; 87; 94; 95; 96;
97; 100; 101; 104; 105; 107; 109; 110; 111; 119;
120; 124; 125; 126; 127; 128; 130; 133; 143;
144; 145; 151; 152; 153; 154; 158; 159; 160;
162; 168; 174; 176; 184; 186; 187; 191; 202;
203; 206; 207; 208; 210; 212; 214; 217; 219;
221; 222; 226; 230; 231; 232; 233; 236; 238;
240; 241; 244; 245; 247; 248; 250; 253; 262;
266; 267; 269; 278; 279; 280; 281; 282; 284;
287; 288; 289; 290; 291; 293
fjller 187
fjlnv 52; 56; 62; 97; 134; 287; 291
fjlok tnevezse, mozgatsa mv parancs
fjlok azonos rszeinek sz"rse uniq parancs
fjlok binris sszehasonltsa cmp parancs
fjlok elejnek listzsa head parancs
fjlok feldarabolsa split parancs
fjlok formzott listzsa pr parancs
fjlok keresse az elrsi ton whereis parancs
fjlok keresse find parancs
fjlok listzsa cat parancs
fjlok msolsa cp parancs
fjlok mentse cpio parancs
fjlok mentse tar parancs
fjlok oldaltrdelt listzsa more parancs
fjlok sszehasonltsa diff parancs
fjlok sszeolvassa join parancs
fjlok rendezse sort parancs
fjlok tpusnak meghatrozsa file parancs
fjlok trlse rm parancs
fjlok vgnek listzsa tail parancs
fjlok vgrehajthatsga 38; 43; 64; 65; 70; 71; 75;
180; 181; 293
fjlrendszer 34; 41; 42; 47; 48; 60; 63; 66; 293; 294
fjlrendszer becsatolsa mount parancs
fjlrendszerek lecsatolsa umount parancs
feladat 27; 37; 38; 93; 115; 241; 242; 243; 244; 245;
246; 247; 248; 249; 253; 265; 278; 282; 284;
285; 286
felhasznli azonost 42; 168
felhasznl azonostsa who am i parancs
felttelvizsglat a shellprogramokban test parancs
fgrep parancs 170
file descriptor fjller
file fjl
file parancs 28; 29; 41; 53; 54; 67; 70; 71; 84; 85; 95;
96; 97; 100; 107; 110; 119; 120; 130; 133; 143;
152; 153; 158; 159; 176; 187; 202; 203; 214;
219; 236; 262; 279; 282; 284; 288; 289; 290; 291
filter sz"r!
find parancs 166; 179; 180; 198; 200; 201; 203; 241;
242; 288
folder katalgus
folyamat 32; 37; 38; 89; 90; 91; 137
folyamatazonost 90; 91; 92; 197
fut folyamat kilvsnek megakadlyozsa nohup
parancs
fut folyamat prioritsnak mdostsa nice parancs
fut folyamatok kilistzsa ps parancs
GID csoportazonost
grep parancs 87; 90; 111; 169; 170; 171; 191; 255;
256; 265
group id 42
gykrkatalgus 47; 48; 49
hard link merev lncols
httrfolyamat 37; 90
hj shell
here document begyazott input
hidden file rejtett fjl
history parancs 53; 180; 207; 211; 212; 213; 214; 218;
220; 221; 227; 230; 231; 244; 249; 253; 266; 267
home directory 48; 53; 75; 164; 233
hozzfrsi jog 43; 50; 68; 69; 70; 72; 73; 287; 291
hozzfrsi jogok mdostsa chmod parancs
ideiglenes troltr 137
i-bg inode
i-node inode
inittab fjl 76
inode 60; 61; 62; 64; 65; 66; 67; 72
interpreter elv" m"kds 39
jegyzk katalgus
jelsz 29; 33; 46; 47; 73; 168
jelz!pont 120; 121; 122
job feladat
join parancs 120; 175
karakterek, szavak s sorok szma a fjlban wc
parancs
karakterkonverzi fjlokban tr parancs
katalgus 29; 42; 47; 48; 49; 50; 51; 53; 54; 57; 58;
59; 60; 62; 64; 65; 66; 68; 69; 70; 75; 233; 251;
287; 292
katalgus listzsa ls parancs
katalgus vlts cd parancs
katalgusok trlse rmdir parancs
kernel 17; 24; 26; 75; 175; 240; 241; 255; 294
UNIX felhasznli ismeretek
350
kszlkmeghajt program device driver
kziknyvek 27; 29
kziknyv megjelentse man parancs
kiindulsi katalgus home directory
kijelentkezs logout parancs
kilps 32; 53; 80; 92; 110; 186; 206; 208; 230; 245;
250; 252
kill parancs, vezrl!karakter 79; 91; 110; 208; 241;
242; 245; 266; 270; 273; 274
konfigurcis fjl 72; 164; 263; 269; 276
konzol 35
korltozott jogosultsg parancsvgrehajts rsh
parancs
Korn shell ksh parancs
krnyezet 17
kzs rszek keresse comm parancs
ksh parancs 40; 41; 47; 77; 172; 205; 210; 218; 226;
228; 249; 250; 252; 254; 255; 256; 257; 258;
266; 278
lncols link
lncolsi szm link count
lncszm 50; 62; 66
link 50; 59; 60; 62; 65; 66; 68; 69
link count 50; 60
ln parancs 59; 60; 64; 65; 67; 70; 195; 196
login name 33; 46
login parancs 33; 45; 46; 47; 53; 80; 91; 92; 115; 184;
185; 206; 207; 208; 211; 230; 245; 252; 259;
269; 282; 283
logout kilps
logout parancs 53; 80; 110; 206; 208; 230; 245; 250;
252
lpq parancs 284; 285
lpr parancs 278; 284; 285
lprm parancs 284; 286
lpstat parancs 282
ls parancs 27; 49; 50; 53; 54; 57; 58; 60; 61; 65; 69;
70; 71; 72; 74; 82; 85; 95; 96; 97; 100; 101; 107;
126; 169; 184; 195; 198; 199; 200; 201; 202;
203; 204; 214; 218; 219; 232; 233; 255; 258;
263; 265; 267; 289
Mach opercis rendszer 21
mag 42; 202; 263
mail parancs 47; 76; 86; 103; 104; 107; 185; 186; 208;
213; 227; 230; 291
MAIL vltoz 103; 104; 208; 227
makr 162
man parancs 28; 29; 76; 98; 103; 107; 186; 206; 227;
291
manul kziknyvek
marker jelz!pont
msodlagos prompt, csoport 72; 73; 168
merev lncols 65; 66; 68
mesg parancs 185
metakarakter 130; 131
mintakeress fjlokban egrep parancs
mintakeress fjlokban fgrep parancs
mintakeress fjlokban grep parancs
mintakeress stringben expr parancs
mintatr 126; 127; 130; 133; 134; 135; 136; 137; 138
mkdir parancs 53; 54; 70; 202
mondat 146; 147; 152
more parancs 57; 166; 200; 201; 208
Motif ablakkezel! rendszer 22
mount parancs 29; 66
multitasking tbbfeladatos m"kds
multiuser tbbfelhasznls m"kds
munkakatalgus 48; 287
mv parancs 28; 57; 58; 59; 64; 65; 70; 198; 217
nevestett puffer 155
nvtkzs
feloldsa szimblikus linkkel 64
newgrp parancs 73
nice parancs 245
nohup parancs 92; 93
nyomtats 76; 269; 278; 280; 282; 284
nyomtats: indtsa lpr parancs
nyomtats: job trlse lprm parancs
nyomtats: sor kezelse lpq parancs
nyomtats:llapotlista lpstat parancs
nyomtatsi feladat trlse cancel parancs
od parancs 176
opci 50; 53; 59; 64; 128; 165; 167; 168; 171; 177;
179; 266; 270; 275; 278; 281; 282; 283; 287;
288; 289; 290
OSF/1 opercis rendszer 21
paragrafus bekezds
parancsrtelmez! 25; 38; 40; 43
parancsmd 115
parancsvgrehajts ksleltetse sleep parancs
password jelsz
passwd (file, parancs) 34; 73; 74; 168; 171; 172; 175;
199; 230; 258
path 207; 227; 228; 229; 231; 240; 246
PATH vltoz 64; 102; 103; 104; 105; 110; 227; 228;
229; 231; 263; 275
pattern 126; 150; 170; 183; 191; 192; 222; 238; 248;
287
pattern space mintatr
pldaprogramok
Trgymutat
351
bell 196; 201
bundle 201; 202; 203; 204
exch 197; 198; 201
same_nm 198; 199; 200; 201; 202; 203; 204
updt 195; 199; 200; 201
perifria 191; 288; 290; 292
permission hozzfrsi jog
permutlt index 27; 28
pg parancs 57; 103; 110
PID folyamatazonost
pipe cs!vezetk
pipeline cs!hlzat
pozicionlis paramter
shell vltoz 102; 106; 107; 193; 195; 196; 199; 200;
226; 258; 262
pozicionl parancs 144; 146; 147
pr parancs 74; 82; 87; 88; 177; 178; 194; 195; 203;
285
privilgizlt felhasznl 34; 47; 93; 94; 95; 245; 248;
282; 286; 287; 293
process id folyamatazonost
process folyamat
programfuts megszaktsa intr karakter
programok id!ztett vgrehajtsa at parancs
program 17; 28; 29; 33; 34; 37; 38; 39; 40; 45; 46; 53;
64; 73; 74; 75; 83; 87; 97; 107; 129; 186; 202;
281; 289
prompt 33; 34; 46; 47; 81; 99; 102; 104; 207; 209;
210; 212; 227; 231; 239; 241; 251; 263
promptjel 47
prototyping 39; 165
ps parancs 91; 92; 167; 267
PS1 vltoz 102; 103; 104; 110; 251; 263
PS2 vltoz 102; 103; 104; 110; 251; 263
puffer 117; 118; 119; 120; 121; 124; 147; 149; 155;
156; 157; 272
pwd parancs 48; 49; 51; 102; 103; 158; 183; 251; 258;
267
read parancs 69; 119; 133; 181; 255; 256
regular expression regulris kifejezs
regulris kifejezs 120; 128; 130; 131; 159; 170; 183
(regulris kifejezs, fjlnv) minta 120; 121; 127; 129;
130; 136; 137; 138; 150; 170; 183; 189
rejtett fjl 53
rendszergazda 33; 34; 35; 46; 47; 48; 53; 61; 67; 73;
74; 83; 86; 87; 88; 94; 199; 214; 219; 270; 276;
293
rendszermag kernel
rendszerterminl konzol
rm parancs 54; 59; 70; 83; 180; 200
rmdir parancs 54; 70
root rendszergazda
root directory gykrkatalgus
root (directory, felhasznl) 34; 47; 48; 53; 61; 67; 73;
74; 83; 86; 87; 88; 94; 199; 214; 219; 293
rsh parancs 64; 292
secondary (prompt) 99
sed parancs, editor 111; 125; 126; 127; 128; 129; 130;
131; 132; 133; 134; 135; 137; 138; 139; 159; 160
segdprogram 24; 26; 27; 40; 165; 166; 186
set parancs 74; 84; 102; 108; 144; 163; 164; 207; 208;
211; 212; 223; 224; 225; 227; 228; 229; 230;
232; 247; 252; 253; 259; 266; 270; 281; 293
sh parancs 40; 41; 53; 64; 77; 92; 93; 94; 101; 103;
106; 107; 109; 110; 180; 202; 203; 204; 205;
206; 209; 210; 215; 216; 221; 222; 223; 224;
228; 232; 233; 238; 241; 246; 249; 250; 251;
254; 256; 259; 260; 261; 262; 264; 265; 266
shell 25; 26; 28; 29; 37; 38; 39; 40; 41; 43; 47; 52; 64;
70; 77; 78; 79; 80; 81; 83; 90; 91; 94; 95; 96; 97;
98; 99; 100; 101; 102; 103; 104; 105; 106; 107;
108; 109; 111; 121; 139; 158; 165; 166; 168;
170; 175; 177; 181; 182; 187; 189; 190; 192;
193; 194; 195; 196; 197; 199; 200; 202; 204;
205; 206; 207; 208; 209; 210; 211; 212; 213;
214; 215; 216; 218; 219; 220; 221; 222; 223;
224; 225; 226; 227; 228; 229; 230; 231; 232;
233; 234; 235; 236; 237; 238; 239; 240; 241;
242; 243; 244; 245; 246; 247; 248; 249; 250;
251; 252; 253; 254; 255; 256; 257; 258; 259;
260; 261; 262; 263; 264; 265; 266; 267; 277;
278; 280; 284; 285; 286; 287; 290; 293
shell script 41; 100; 104; 107; 125; 126; 127; 128;
132; 133; 134; 135; 136; 137; 138; 139; 231;
246; 255; 256; 264; 293
shell krnyezet kilistzsa env parancs
shell vltoz 64; 102; 107; 226; 253
shell vltozk belltsa set parancs
shell variable shell vltoz
shift utasts 200; 247
single user egyfelhasznls m"kds
single-tasking egyfeladatos m"kds
sleep parancs 192; 194; 196; 265
soremels 132; 139; 146; 161; 273
sor olvassa a bemenetr!l read parancs
sort parancs 39; 81; 86; 87; 89; 117; 118; 119; 121;
122; 124; 127; 128; 131; 133; 135; 136; 137;
138; 145; 147; 150; 151; 152; 154; 156; 157;
160; 162; 163; 165; 166; 167; 168; 171; 172;
UNIX felhasznli ismeretek
352
173; 175; 181; 188; 192; 210; 226; 251; 254;
261; 263; 265; 266; 267; 285
sortrls kill karakter
specilis jelents elnyomsa escape karakter
specilis karakter
eof 80; 110; 206; 208; 210; 250; 273
erase 78; 110; 208; 273; 274
specilis karaktere, soremels 161; 272; 273; 276; 294
specilis karakterek
sorvge 46; 55; 56; 57; 78; 81; 86; 157; 272; 273; 276;
288; 289
specilis karakterek, backslash karakter 132; 180; 183;
271
split parancs 186
spooling 278; 285
standard bemenet 55; 57; 84; 125; 127; 167; 275; 279;
284; 287; 292
standard error standard hibacsatorna
standard hibacsatorna 84
standard input standard bemenet
standard kimenet 55; 84; 125; 127; 167; 181; 275;
287; 288; 292
standard kimenet megkett!zse tee parancs
standard out standard kimenet
stderr standard hibacsatorna
stdin standard bemenet
stdout standard kimenet
stty parancs 110; 208; 265; 270; 271; 275; 276; 278
su parancs 231
SunOS opercis rendszer 28; 65; 75; 76; 294
supervisor rendszergazda
superuser 34; 53; 64; 74; 91
SVID 19; 20
SVR4 20; 21; 52; 75; 161; 275; 278; 279; 294
symbolic link 65; 66; 69
System V 20; 21; 64; 76; 92; 105
szerszmoslda filozfia 39
szignl 250
szoftver megszakts szignl
szoftver megszaktskezels trap utasts
szvegmez!k sz"rse cut parancs
szvegszerkeszt! 122
szuperblokk 60
sz"r! 56; 281; 285
tail parancs 172
tar parancs 27; 42; 43; 56; 60; 78; 81; 82; 84; 85; 90;
95; 96; 97; 101; 102; 105; 106; 109; 111; 113;
117; 118; 120; 122; 124; 169; 170; 171; 172;
175; 176; 186; 188; 191; 192; 195; 197; 199;
205; 206; 208; 211; 212; 218; 219; 221; 222;
223; 228; 229; 230; 231; 232; 238; 239; 240;
241; 243; 244; 252; 255; 257; 258; 260; 263;
264; 265; 266; 267; 280; 286; 289; 290; 291; 292
tvoli parancsvgrehajts rsh parancs
tee parancs 89; 92; 174; 175
telnet parancs 45; 212; 215
TERM vltoz 103; 104; 105; 227; 228; 242; 245;
246; 277
terminl azonostsa tty parancs
terminlbelltsok stty parancs
terminlbelltsok tput parancs
test parancs 139; 181; 182; 196; 199; 200; 201; 252
tbbfeladatos m"kds 24; 31; 37
tbbfelhasznls m"kds 18; 24; 25; 31; 32; 33
tput parancs 270; 277
tr parancs 132; 178; 179; 255
trap utasts 110; 246; 250
tulajdonos mdostsa chown parancs
UID felhasznli azonost
j felhasznli csoportba lps newgrp parancs
j katalgus ltrehozsa mkdir parancs
jsor karakter 135; 137; 139; 154; 157; 158; 162; 289
uniq parancs 171; 172
Unix-DOS fjlkonverzi dos2unix parancs
UnixDOS fjlkonverzi unix2dos parancs
Unix parancs 27; 28; 29; 33; 34; 37; 48; 49; 50; 51;
53; 54; 55; 56; 57; 58; 59; 60; 64; 70; 71; 72; 73;
74; 89; 93; 94; 107;
Trgymutat
353
109; 116; 117; 126; 127; 128; 129; 130; 131;
132; 133; 134; 135; 137; 138; 139; 144; 145;
146; 147; 148; 150; 151; 152; 153; 154; 155;
156; 157; 158; 159; 160; 162; 163; 167; 168;
170; 174; 178; 179; 180; 181; 182; 183; 186;
188; 190; 191; 192; 193; 194; 220; 236; 245;
250; 251; 253; 266; 269; 270; 275; 277; 278;
279; 282; 284; 285; 286; 287; 288; 289; 291;
292; 293; 294
unix2dos parancs 294
user id 42
utility segdprogram
zenetklds terminlra wall parancs
zenetklds terminlra write parancs
vltozk rktse export utasts
vezrl!karakter 272; 275
vi parancs, editor 24; 43; 55; 68; 77; 79; 80; 81; 82;
84; 86; 87; 88; 92; 97; 98; 99; 101; 110; 111;
112; 115; 116; 117; 125; 141; 142; 143; 144;
145; 146; 147; 148; 149; 151; 153; 154; 155;
158; 159; 160; 161; 162; 163; 164; 181; 190;
192; 195; 196; 197; 199; 201; 205; 206; 212;
215; 218; 224; 225; 228; 230; 235; 237; 239;
241; 243; 246; 250; 253; 254; 255; 257; 258;
260; 266; 267; 289; 293
vi zemmdok
beviteli md 56; 115; 116; 144; 145; 150; 152; 162;
164
parancsmd 115
wall parancs 185
wc parancs 87; 88; 89; 100; 107; 109
whereis parancs 29
who parancs 71; 83; 84; 86; 87; 88; 89; 109; 194; 261;
263
working directory munkakatalgus
write parancs 56; 69; 119; 120; 133; 184; 185
X/Open 21
Xenix opercis rendszer 18; 19; 21

You might also like