Vous êtes sur la page 1sur 38

Szemethy Tivadar

Unix ismertet

Tartalomjegyzk
3.3.3. Mg pr sz az ls parancsrl 3.3.4. A file-tpusok 3.3.5. A hozzfrsi jogosultsgok 3.3.6. A file-okhoz tartoz egyb informcik 3.3.7. Unix parancsok paramterezse

1. Unix? Linux! 1.1. Pr sz a Unix vilgrl 1.2. A Unix rvid trtnete 1.3. Hogy kerl ide a Linux?
1.3.1. A lehetsg 1.3.2. Linus Torvalds opercis rendszert r 1.3.3. Az Internet kzssge felkarolja a fejlesztst

3.4. Mg nhny alapvet file-kezel parancs 3.5. File-ok tulajdonsgainak manipulcija


3.5.1. File attribtumok 3.5.2. File-ok tulajdonjognak lltsa

1.4. Kernelek, disztribcik, verzik


1.4.1. Folyamatosan fejld szoftver 1.4.2. A kernel verziszmrl 1.4.3. A disztribcikrl

3.6. Egy gyakran hasznlt parancs: a man 3.7. I/O tirnyts a Unixban
3.7.1. A standard file-lerk 3.7.2. Programok sszektse

2. Hogyan mkdik? 2.1. Memriakezels, tbbfeladatos mkds 2.2. Automatikus diszk-gyorsttr 2.3. Fejlett memriakezelsi technikk
2.3.1 A demand paging mdszer 2.3.2. Megosztott programknyvtrak 2.3.3. A copy-on-write mechanizmus

3.8. A szrkrl (filters) 3.9. A shell tovbbi lehetsgei


3.9.1. Metakarakterek, file-nv helyettests 3.9.2 Specilis karakterek semlegestse 3.9.3. Programok csoportostsa zrjelezssel

3.10. Folyamatok, processzek


3.10.1. Folyamatok a httrben 3.10.2. Sokig fut vagy idztett folyamatok 3.10.3. Folyamataink listzsa: a ps parancs 3.10.4. zenetek a processzeknek: szignlok 3.10.5. Folyamatok prioritsa, a nice parancs

2.4. A folyamatok temezse 2.5. Tbbfelhasznls mkds


2.5.1. A terminl koncepci 2.5.2. Az egyes felhasznlk megklnbztetse

2.6. A file-okrl
2.6.1. A Unix file koncepci 2.6.2. A file-rendszer struktrja 2.6.3. Tbbfle file-rendszer kezelse 2.6.4. Tovbbi rdekessgek a file-rendszerrl. A link

3.11. rintkezs ms felhasznlkkal


3.11.1. A tbbi felhasznl 3.11.2. Kommunikci a tbbiekkel: write, talk, mail 3.11.3. Hlzatban

3. Hogyan hasznljuk? 3.1. Jelentkezznk be! 3.2. A parancsrtelmez, avagy shell


3.2.1. Mirt van r szksg? 3.2.2. Milyen shellek vannak? 3.2.3. Krnyezeti vltozk 3.2.4. Klnbsgek az egyes shellek kztt 3.2.5. Nhny hasznos ismeret a bash-rl

3.12. Adatok a rendszer egszrl 3.13. Linux specialitsok


3.13.1. A virtulis konzol (virtual console) 3.13.2. Specilis billentyzetkombincik

3.3. Parancsok futtatsa


3.3.1. Az ls parancs 3.3.2. Ismt pr sz a krnyezeti vltozkrl

4. A Unix (Linux) file-szerkezete 4.1. Knyvtr struktra 4.2. A /dev alknyvtr 4.3. A filesystem-ekrl 4.4. File-elnevezsi konvencik 4.5. az mtools: DOS-os floppyk kezelse

1. Unix? Linux!

1.1. Pr sz a Unix vilgrl A Unix nem egy j opercis rendszer. Elg rgta (informatikai mrtkkel mrve nagyon rgta) stabilan s egyre nvekv arnyban jelen van a szmtstechnikai vilgban. Hossz ideig az egyetemi, kutati szfrban volt egyeduralkod, s mostanban egyre jabb s jabb terleteket (banki, vllalati, adatfeldolgoz szfra) hdt meg. Legfbb ereje dinamikussgban, alkalmazkodkpessgben rejlik: kpes ugyanazt a krnyezetet nyjtani mind a multiprocesszoros mainframe, mind az otthoni 386-os PC-je eltt l felhasznlnak. Manapsg, amikor az otthoni szmtgpek teljestmnye, illetve a velk szemben tmasztott ignyek, a vgzend feladatok mr egyre kzelebb kerlnek a egykori nagygpek szintjhez, egyre inkbb szksg van egy olyan krnyezetre, amely kpes hardvertl, platformtl fggetlenl mindenhol ugyanazt nyjtani: a szmtstechnikai vilg utolrte a Unix-ot. 1.2. A Unix rvid trtnete Mert a Unix meglehetsen rgi dolog. Els vltozatt 1969-ben ksztette Ken Thomson s Dennis Ritchie az AT&T Bell Laboratriumban egy PDP-7 tpus szmtgpre. A rendszer magjt 1973-ban trtk C nyelvre - ennek ksznheti a Unix mind a mai napig legnagyobb elnyt, a knny hordozhatsgot. Az AT&T kezdetben ingyen az amerikai egyetemek rendelkezsre bocstotta a Unix forrskdjt, gy tz ven bell szzezer fl emelkedett a mkd Unix rendszerek szma (ne felejtsk, ez mg a hskorszakban volt - a 80-as vek elejn szzezer szmtgp mg hatalmas nagy szm volt). A gyors terjedsnek azonban jelentkeztek a htulti is: nem volt egysges ellenrzse senkinek sem a forrskd, a rendszer egysge felett, gy szmos (helyi mdostsokon alapul) vltozat alakult ki, amelyek kzl a kt legjelentsebb a Berkeley egyetemen kifejlesztett BSD Unix, amely jelenleg a 4.4-es verzinl tart, illetve az AT&T hivatalos vltozata a System V (System Five, amely a 4. Release-nl tart, rvidtve SVR4), amelyet a Unix System Laboratories fejleszt tovbb. (Az USL-t egybknt a Novell vsrolta fel a kzelmltban). Ezen f vltozatok mellett szmos kisebb-nagyobb alvltozat van forgalomban mg napjainkban is. Amint a Unix egyre npszerbb kezdett vlni a kereskedelmi szfrban, egyre tbb cg ismerte fel egy egysges Unix szabvny fontossgt, s tbb egysgest, szabvnyost bizottsg s csoportosuls kezdett dolgozni. Az USL kr tmrl cgek az SVR4 mg sorakoztak fel, a BSD irnybl rkezk pedig az OSF (Open Systems Foundation) ajnlst, az OSF/1-et tmogatjk. Idkzben fggetlen (nem az rdekelt cgek tmogatsval ltrejtt) bizottsgok is prbltk valamennyire egysgesteni a BSD s System V ajnlsokat, s az IEEE kidolgozta (az ANSI s az ISO tmogatsval) a POSIX (Portable Operating System Interface (x)) ajnlst, amely igyekszik egyesteni a kt f szabvnyt. Vgl 1993-ban a Novell truhzta a UNIX vdjeggyel kapcsolatos jogait az X/Open konzorciumra, amely lnyegben a vilg sszes jelentsebb gyrt s felhasznl szervezett tmrti, gy tulajdonkppen tbbkevsb fggetlennek mondhat. Fontos megjegyezni a UNIX s a Unix terminolgia kztti klnbsget: a szakmban meghonosodott szoks szerint UNIX-szal jellik az igazi, az USL licensszel rendelkez, USL forrskdbl szrmaz rendszereket, mg a Unix jells ltalban jell mindenfle
3

Unix tpus rendszert, amelyek a jzan sz alapjn Unixnak mondhatk, fggetlenl attl, hogy van-e valami kzk az USL-hez vagy sem. jabban lehetv vlt, hogy brmely gyrt fggetlenl attl, hogy USL forrsbl szrmazik-e a rendszere vagy sem - krje az X/Open-t, hogy egy szoftver-specifikci s teszt alapjn (ezt nevezik SPEC 11.70-nek) minstse termkt igazi UNIX-nak, a UNIX vdjegy viselsre jogosultnak, azonban ez a specifikci annyira j mg, hogy mindezidig egy cg sem krt ilyen minstst. A kzeljvben azonban, amint a cgek befejezik termkeik hozzigaztst a specifikcihoz, tmegesen vrhat az egysges szabvnynak megfelel UNIX rendszerek megjelense. Termszetesen, mivel a Unix nagyon knnyen hordozhat, mr elg korn megszlettek az Intel-PC-alap Unixok is, elszr csak oktatsi clokra (pl. a mr 286-oson mkd XENIX), majd megjelentek a mr komoly munkra is kpes PC-s Unix verzik, melyeknek kereskedelmi ra 500 s 2000 $ kztt van. 1.3. Hogy kerl ide a Linux? 1.3.1. A lehetsg Amikor a Unix mg csak az egyetemi s akadmiai szfrban volt kzismert, kialakult krltte egy hatalmas programkrnyezet: minden egyetem, kutatintzet elksztette sajt megoldsait felmerl szmtstechnikai problmira (a szvegszerkesztstl, tblzatkezelstl kezdve a mindenfle apr utility-n keresztl a klnbz fordtprogramokig), s mivel ezek az intzmnyek non-profit szervezetek voltak, elkszlt szoftvereiket publikuss tettk. Forrskdban, C nyelven adtk kzre ezeket a programokat, egyre inkbb a tereblyesed Hlzat segtsgvel, s a C nyelv s az egysges krnyezet miatt minden Unix felhasznl lefordthatta, hasznlhatta, mdosthatta s tovbbfejleszthette ket szinte teljes szabadsggal. Ennek a folyamatnak az eredmnyeknt alakult meg Richard Stallman kezdemnyezsre az FSF (Free Software Foundation) alaptvny, melynek clja egy szabadon (forrskdban is) ingyen hozzfrhet szoftverkrnyezet biztostsa brki szmra, illetve ennek rszeknt a GNU project (GNU is Not UNIX), amely pedig egy minl teljesebb Unix rendszert kvn ltrehozni s biztostani. Ennek jogi megfogalmazsa a GPL (GNU General Public License). GPL al es szoftvert brki kszthet, amennyiben megfelel bizonyos feltteleknek, s jogi (copyright) problma esetn szmthat az FSF segtsgre. GPL al es szoftvert brki hasznlhat, st mdosthatja is azt, amennyiben amikor a szoftvert tovbbadja, tovbbadja annak teljes forrskdjt is, esetleges mdostsai feltntetsvel. GPL szoftverrt pnzt krni nem szabad, viszont fel lehet szmtani a msolssal, terjesztssel, installlssal konfigurlssal stb. kapcsolatos kltsgeket. A szoftver mdostsrt sem szabad pnzt krni - GPL forrs mdostva is GPL forrs marad. 1.3.2. Linus Torvalds opercis rendszert r Megvolt teht a GNU krnyezet: fordtk, segdprogramok, s a szabadon terjeszthet XFree grafikus fellet, egy olyan opercis rendszer mag hinyzott csak, amely bizonytottan szabad (nem tartalmaz copyright al es USL vagy BSD kdot). Ennek megrst kezdte el helsinki egyetemista korban Linus Torvalds, hogy aztn tbb szz segtjvel egytt ltrehozza azt, amit ma Linuxknt ismernk: egy teljes, szabad opercis rendszert brki 386-os PC-jre. Br Linus Torvalds egyedl kezdett hozz opercis rendszere elksztshez, ma mr a Linux oly sokfel gazott s akkorra ntt (ma mr taln ez a legtbb PC-s hardvert tmogat szoftver,

s trsa ms architektrkra - Sun, MIPS, DEC Alpha, 68000 stb. - folyamatban van), hogy Linus maga mr leginkbb csak koordinlja a fejlesztseket. A Linux jogi rtelemben nem UNIX teht, leghelyesebb volna Unix-klnnak nevezni, s nem is kveti szigoran egyik szabvnyt sem: sok BSD-s s SYSV jellemvonst egyest magban. Legkzelebb a fggetlen POSIX-hoz ll, mind a mai napig a Linux tekinthet a legteljesebb POSIX implementcinak. Maga a Linux, illetve a Linuxon fut szoftverek legnagyobb rsze a GPL al esik. 1.3.3. Az Internet kzssge felkarolja a fejlesztst Szt kell itt mg ejtennk mg egy fontos dologrl, ami nlkl a Linux opercis rendszer nem szlethetett volna meg: ez pedig az Internet vilghlzat, amely sszekttte a fejlesztket, s amelyen mindig brki szmra ingyen hozzfrhetk az egyes Linux vltozatok. A Unix s az Internet mindig is szorosan ktdtt egymshoz: az els IP (Internet Protocol) implementcikat BSD Unix rendszerekre ksztettk, a Unixot nyltsga, jl bvthetsge miatt vlasztottk a fejlesztk. Az Internetbe kttt gpek legnagyobb rsze Unix alatt fut, az Internet szolgltatsait maximlisan csak Unix alatt tudjuk kihasznlni. Manapsg taln ez a Unix (Linux) rendszerek gyors terjedsnek f oka. A Linux az Interneten szletett: br tmogat ms hlzati protokollokat is, igazn egyszeren Internetes krnyezetbe illeszthet. A Linux folyamatosan fejld rendszer. Gyors fejldsnek s terjedsnek egyik oka az, hogy a fejlesztk mr a munkaverzikat elrhetv tettk (s teszik jelenleg is) brki szmra, akrki kiprblhatta (kiprblhatja) a fejleszts brmely stdiumban. Teljesen tipikus eset - mert a teljes forrskd mindig hozzfrhet -, hogy az nkntes (njellt) tesztelk a megtallt hibkat mr a javtssal egytt kldtk vissza a fejlesztknek - az Interneten. 1.4. Kernelek, disztribcik, verzik 1.4.1. Folyamatosan fejld szoftver Mivel a Linux rendkvl gyorsan fejldik, (hetente, de nha kt-hrom naponta is jelenik meg j verzi), szksges taln mr itt az elejn kis rendet tenni a verziszmok dzsungelben. Legelszr is jegyezzk meg, hogy ha stabil verzirl beszlnk, akkor is csak sajt felelssgnkre hasznlhatjuk a Linuxot: mivel nem ll mgtte kereskedelmi cg, nincs aki a megbzhat mkdsrt garancit vllaljon. (Ha hajlandk vagyunk ldozni r, vsrolhatunk support-ot valamely erre szakosodott cgtl - br Linuxra szakosodott cgek jelenleg leginkbb csak az USA-ban mkdnek - az ingyenes Linuxhoz azonban nem jr garancia.) Ha lefagy, s fontos adataink vesznek el, csak magunkra szmthatunk - azonban a tbb szzezer Linux felhasznl tansga szerint a Linuxnak nem igazn szoksa lefagyni. Megjegyzend egybknt, hogy szoftvereik hibamentessgre gyakran nagy szoftvercgek sem vllalnak garancit. 1.4.2. A kernel verziszmrl Linux verziszm alatt az n. kernel, az opercis rendszer mag verziszmt rtjk, ez a tulajdonkppeni Linux, azonban mint minden opercis rendszer esetn, nmagban ez nem j semmire: arra val, hogy ms (felhasznli) programokat futtassunk vele (rajta). A kernel verzi-szmozsa a kvetkez: x.y.z, ahol az x a f verziszm, ez jelenleg 1 (s mg sokig

az is marad), az y, a kzps szm az al-verziszm, amely ha pros, akkor az egy stabil bta-verzit jelent, s ha pratlan, akkor pedig alfa-verzit, amely tnyleg teljesen fejleszti vltozat. A harmadik szm, a z pedig az n. patch-level: az aprbb vltoztatsokat sorszmozzk ezzel. E sorok rsa idejn a legutols stabil, bta llapot verzi szma 1.2.11 volt, a fejleszti verzi pedig 1.3.10. 1.4.3. A disztribcikrl Szoks mg az n. disztribci verziszmrl is beszlni: a disztribci egy Linux kernelen alapul teljes (mkdkpes) Unix rendszer, segdprogramokkal, alkalmazsokkal egytt. Egy disztribci elksztse tulajdonkppen a C forrsban meglv utility-k, programok lefordtsbl, knyvtrstruktrba helyezsbl s sszekonfigurlsbl ll. Sokfle disztribci ltezik, ingyenesek is s kereskedelmiek is - a tovbbiakban mi a legjobban elterjedt Slackware disztribcit fogjuk ismertetni, amely ingyenes s az Internetrl sok helyrl letlthet. Elhangzott, hogy lteznek kereskedelmi (nem ingyenes) disztribcik is - taln ez furcsa lehet egy szabad szoftver esetn, azonban mint azt mr a GPL ismertetsekor lttuk, ezek a cgek nem a Linux-rt krnek pnzt, hanem a disztribci sszelltsrt, illetve esetleg a disztribciban lv, Linux alatt fut, de nem ingyenes szoftverek hasznlatrt.

2. Hogyan mkdik?

2.1. Memriakezels, tbbfeladatos mkds A Linux - a DOS-tl eltren - valdi tbbfeladatos (multitask) opercis rendszer. Kihasznlva az Intel 80386 processzor nyjtotta fejlett tr s taszkkezelsi lehetsgeket, valdi idosztsos krnyezetet biztost. A 386-os processzor tbbfle zemmdjai kzl a Linux a supervisor zemmdot hasznlja a kernel, az opercis rendszer mag futtatsra, ebben az zemmdban a kernelnek hozzfrse van a gp sszes fizikai erforrshoz, a felhasznli folyamatok (processzek) pedig n. user zemmdban futnak. A 386-os processzoron lehetsg van tbb, egymstl fggetlen user md n. taszk definilsra, amelyek egymstl vdettek, nem tudjk egyms s a felgyel kernel memria-terlett kiolvasni vagy mdostani, s a gp kzvetlen hardver erforrsaihoz sincs hozzfrsk (a valsgban ez gy mkdik, hogy user mdban csak a processzor utastskszletnek egy rsze hajthat vgre, nem megengedett utasts vgrehajtsnak ksrletekor vagy nem megengedett memriacmre hivatkozskor a vezrls hibazenettel visszakerl a supervisor mdban fut felgyel programhoz, vagyis a kernelhez). gy biztosthat az egyes felhasznli programok egymstl val vdelme. Mivel az egyes folyamatoknak a gp fizikai erforrsaihoz (pl. winchester, kperny) sincs kzvetlen hozzfrsk, brmilyen perifriamveletet csak a kernel meghvsa tjn vgezhetnek, gy md nylik pldul biztonsgos file-rendszer megvalstsra is. Nincs az a trkk, amivel az egyik felhasznl el tudna olvasni olyan adatot, amihez nincs engedlyezett hozzfrse - amennyiben persze a biztonsgi rendszerben nincsenek programozi hibk s a rendszer konfigurcija megfelel. Az emberi gyarlsgot nem tekintve a Linux biztonsgos tbbfelhasznls opercis rendszernek tekinthet. A kernel teljes mrtkben, fizikai szinten hozzfr a gp erforrsaihoz. Fizikai, a lehet legalacsonyabb szinten kezeli is a hardvert, a legnagyobb teljestmny elrse rdekben. A boot-olst (rendszer betltst) kivve egyltaln nem hasznlja a BIOS-t: ennek oka, hogy a BIOS programja a DOS figyelembevtelvel kszlt, s nem alkalmas multitaszk opercis rendszer futtatsra. Memriakezelsben szintn kihasznlja a 386 ltal nyjtott lehetsgeket: lapozsos virtulis memriakezelst hasznl, ahol a fizikai memrit kiegszthetjk a winchesterrl vett virtulis memrival (page vagy swap terlet). A teljes memrit lapokra osztja, ezen virtulis lapokat rendeli hozz az egyes folyamatokhoz, s gondoskodik rla, hogy az ppen szksges lapok a fizikai memriban legyenek. Itt kell megemlteni, hogy a Linux hasznlja a virtulis trkezels mindkt (gyakran sszekevert) fajtjt, a lapozst (paging) s a trcsert (swapping) is. Lapozsnl folyamatoktl fggetlenl, a rendszer arra gyel, hogy a szksges lapok a fizikai memriban legyenek, ha azok esetleg diszken vannak, akkor gondoskodik memriba olvassukrl, illetve ha a fizikai memria teli van, akkor a ritkbban hasznlt lapokat a diszkre rja. Trcsernl pedig a rendszer figyelemmel ksri az egyes folyamatok aktivitst is, s ha szabad memrira van szksg, egy inaktv folyamat egszt httrtrra rja, felszabadtva ezzel a folyamat ltal hasznlt sszes fizikai memrit. A Linux a kt mdszer keverkt hasznlja: amg bvben van a memrinak, csak egyes lapokat lapoz ki/be, de pldul ha gy ltja, hogy egy folyamat hossz ideje inaktv, s nem csak egy-kt lapnyi memrira van szksg, akkor az adott folyamathoz tartoz sszes fizikai lapot diszkre menti.

2.2. Automatikus diszk-gyorsttr Szorosan kapcsoldik a memria-lapkezels mechanizmushoz a Linux buffer cache kezelsi mdszere: a buffer cache a Unix rendszerek diszk-elrshez hasznlt gyorsttrja, amelyet a kernel kezel, mivel minden folyamat csak s kizrlag a kernel meghvsval vgezhet diszkmveletet. Linuxban a buffer cache mrete dinamikusan, a rendszer-terhelstl fggen vltozik: mindig az ppen szabad fizikai memria egszt erre a clra hasznlja. A diszk-rsok is a buffer cache-n keresztl trtnnek: minden rs elszr a cache memriba kerl, s vagy egy megadott id elteltvel rdik ki diszkre, vagy pedig akkor, ha a rendszer szmra elegend kirnival sszegylt. Ezrt fontos az, hogy a megfelel shutdown procedra (a rendszer lelvse, lelltsa) vgrehajtsa nlkl soha ne kapcsoljuk ki a gpet: kikapcsols eltt mindig szksges a diszk tartalmnak szinkronizlsa a memriban lv llapottal, a nyitott file-ok lezrsa - ezen lpsek elmulasztsa esetn kikapcsolskor a diszk tartalma helytelen lehet, informcik, egsz file-ok veszhetnek el. Ugyanez trtnhet persze ramsznet vagy ms hiba esetn is: ez az az r, amit a Unix file-rendszer ltal nyjtott nagyobb teljestmnyrt fizetnnk kell. A Unix-ok ltalban (gy a Linux is) rendelkeznek funkcikkal az esetleges informciveszts minimalizlsra, illetve a korrekt file-rendszer visszalltsra tulajdonkppen egy tlagos Linux rendszerben vratlan rendszersszeomlskor maximum csak a legutbbi 30 msodperc munkja veszhet el - nagyon kicsi valsznsg extrm esetektl eltekintve. De az ilyen adatveszts veszlye minden, a diszk-rst bufferel rendszerben fennll. 2.3. Fejlett memriakezelsi technikk 2.3.1 A demand paging mdszer A fejlett memriakezels lehetv teszi tovbbi, a teljestmnyt nvel megoldsok hasznlatt is: ezek egyike az n. demand paging, ami azt jelenti, hogy egy futtathat file vgrehajtsakor nem az egsz file tltdik be a memriba, hanem mindig csak azok a lapjai, amelyekre a vgrehajts sorn ppen szksg van: gondoljunk csak bele, minden programnak vannak olyan rszei (inicializls, hibakezel rszek), amelyek csak egyszer, vagy ppensggel egyszer sem futnak le - ezeket aztn vagy soha be sem tlti a rendszer a memriba, vagy pedig miutn lefutottak, rgtn fel is szabadtja az ltaluk elfoglalt terletet. 2.3.2. Megosztott programknyvtrak Tbbfeladatos mkds esetn, amikor egyszerre tbb program tartzkodik a fizikai memriban, hasznos a Linuxban szintn hasznlt osztott knyvtr (shared library) mechanizmus, vagy ms nven a dinamikus (futsidej) programsszefzs (link). Alaptlete az, hogy mivel mindegyik program C-ben rdott s ugyanabban a krnyezetben fordult le, ezrt valsznleg lesz egy csom olyan fggvny (pldul a kpernykezel knyvtri fggvnyek), amelyeknek kdja minden programban ugyanaz, s felesleges minden programmal egytt a memriba tlteni ket, elg csak egyszer - csak a programok tudjk, hol keressk a memriban ezeket a fggvnyeket. gy minden programba elg egy csonk-nak (stub) nevezett programrszlet beptse, amelyik a dinamikus linker segtsgvel gondoskodik a megfelel fggvny megtallsrl illetve memriba tltsrl, amennyiben az mg nem lenne betltve.

2.3.3. A copy-on-write mechanizmus Mg egy memriakezelsi finomsg van, amelyet Unix rendszerekben elszeretettel hasznlnak: ez pedig az gynevezett copy-on-write (rsnl msold) mechanizmus, amely a kvetkezkppen mkdik: multitaszkos opercis rendszerben gyakran lehet arra szksg, hogy bizonyos memria-lapokat tbb folyamat kztt megosszunk, vagy a legtipikusabb plda: Unix-ban j folyamat ltrehozsa mindig egy msik folyamat memrijnak lemsolsval trtnik. Mivel viszont egy memrialapra tbbfell, tbb folyamat memriatrkpbl tudunk hivatkozni, nem is kell azt a lapot lemsolni, csak elhelyezni az ugyanarra a lapra mutat hivatkozsokat a megfelel helyeken. Mivel a memriamsols meglehetsen idignyes dolog, ezzel kritikus helyen (a felhasznl szemszgbl holtidnek szmt folyamatltrehozskor) sok idt takarthatunk meg, s most mr csak arra kell vigyznunk, hogy ha az ugyanarra a lapra hivatkoz tbb folyamat kzl valamelyik mdostani akarja a lapot, (mivel mindegyik folyamat azt hiszi, a memrialap csak az v) akkor ksztsnk csak annak a folyamatnak a szmra msolatot, amelyet aztn mdosthat kedve szerint. 2.4. A folyamatok temezse Mivel egy processzoron kell konkurrensen tbb feladatot vgrehajtania az opercis rendszernek, ezrt valamilyen formban meg kell osztania a rendelkezse ll CPU idt az egyes folyamatok kztt. A Unix rendszerek (gy a Linux is) a preemptv idosztsos temezs mdszert alkalmazzk, ami azt jelenti, hogy a rendelkezsre ll idt felosztja egyenl rszekre, s ezekbl az egyenl idszeletekbl juttat - a folyamat prioritsnak megfelelen - tbbet vagy kevesebbet az adott folyamatnak. Az egyes folyamatok prioritsa termszetesen llthat. Az temezs preemptv volta annyit jelent, hogy amikor az adott folyamat szmra kijellt idszelet letelt, a kernel megszaktja a folyamat futst s ms folyamatnak adja t a vezrlst nincs teht md arra, hogy egy folyamat a vgtelensgig magnl tartsa a vezrlst, s megakadlyozza a tbbi folyamat futst. Linuxban az temezs alapegysge az 1/100 msodperc. Nem szabad azonban egy fontos dologrl megfeledkeznnk: A Unix nem vals-idej (realtime) opercis rendszer, ami annyit jelent, hogy ha tbb folyamat fut egyszerre, s az egyiktl elkerl a vezrls, akkor valamekkora (rendszerint nagyon rvid) id mlva vissza is fogja majd kapni - a kt aktv (fut) llapot kzti idre azonban nincs szigor fels korlt. Az esetek 99.9999999 szzalkban ez az id (mg egy leterhelt - de nem indokolatlanul tlterhelt rendszeren is) pr tized msodperc - azonban soha nem mondhatjuk, hogy biztosan csak ennyi. Ezt a tnyt pontos s rvid idztseket hasznl programoknl nem rt szem eltt tartani. 2.5. Tbbfelhasznls mkds 2.5.1. A terminl koncepci A Linux, eltren a PC-n eddig megszokott opercis rendszerektl, nemcsak tbbfeladatos, ahol egy felhasznl egyidejleg tbb programot futtathat (mint pldul az MS-Windows s az OS/2), hanem tbbfelhasznls is, vagyis egyidejleg tbb felhasznl hasznlhatja ugyanazt a rendszert, s mindegyikk akr tbb programot is futtathat. Ennek megvalstshoz azonban szksg van nhny j fogalom, koncepci bevezetsre: Rgtn els problmaknt jelentkezik az, hogy egy PC-nek csak egy billentyzete, s (kevs kivteltl eltekintve) csak egy monitora van, amit rtelemszeren egyszerre csak egyvalaki hasznlhat. A Unix filozfia
9

minden egyes bejelentkezett felhasznlhoz hozzrendel egy-egy gynevezett terminlt: egy terminl pedig egy billentyzet + megjelent egysg (leggyakrabban szveges display) egyttest jelenti. Az adott Unixos gphez legkzvetlenebbl csatolt terminlt (Linux esetn a gp sajt billentyzett s monitort) konzol terminlnak (console terminal) nevezzk, ez abbl a szempontbl kitntetett, hogy bizonyos rendszeradminisztrcis feladatok csak innt hajthatk vgre. Tovbbi terminlok csatolhatk mg a gphez soros vonalon (ez a legsibb Unixos megolds, egy terminlemulcis szoftver s egy soros kbel segtsgvel akr kidoband XT-inket is egyszeren soros terminll alakthatjuk, illetve direkt erre a clra kszlt terminlokhoz manapsg mr fillrekrt hozzjuthatunk). De kthetnk soros vonalra modemet is: ekkor a felhasznli terminl a telefonvonal tls vgn lesz, tvolrl is elrhetv tve rendszernket. A hlzaton vagy grafikus felleten keresztl bejelentkezett felhasznlkhoz n. pszeudoterminlokat rendel a rendszer, ahol is a billentyzet s a kperny annak a gpnek a billentyzethez s kpernyjhez rendeldik, amely eltt a felhasznl l. A terminlok megnevezse a szakzsargonban tty (angolul betzve ejtik), illetve a pszeudo-terminlok pty vagy ttyp, a Linux ez utbbi megnevezst hasznlja. Minden Unix rendszer tbbfle, kpessgeik alapjn osztlyozhat terminlt kpes kezelni: mivel nem alakult ki egysges szabvny, s a nagygpek hskorban sokfle gyrt sokfle terminlt gyrtott, ezrt a Unix rendszereket ltalban felksztik a sornyomtat tpus, sorzemmd, kurzor-cmzsre nem kpes terminloktl kezdve a modernebb, sznkezelsre s akr ANSI grafikra kpes terminlokig bezrlag sokfle terminltpus kezelsre. Az egyes terminlokat gyrt s tpusra utal megnevezssel azonostjk: Amennyiben csak konzolrl hasznljuk gpnket, elg annyit tudni, hogy a konzol terminl azonostja console. 2.5.2. Az egyes felhasznlk megklnbztetse Az egyes felhasznlk azonostsra a login nv (account, tmaszm) rendszert hasznlja a Unix: minden felhasznlnak van egy (maximum 8 karakter hossz, konvenci szerint kisbetvel rott) azonostja, s ehhez tartozik a maximum 8-16 karakter hossz jelsz. A finomabb hozzfrs-hierarchia kialaktsa rdekben a felhasznlkat csoportokba (groups) oszthatjuk: minden felhasznlnak van egy elsdleges csoportja (pl. student), s ezenkvl tartozhat mg ms csoportokhoz is (pl. texusers). A csoportneveket is konvenci szerint kisbetvel rjk. Belsleg a rendszer minden egyes felhasznlhoz az egyedi felhasznl-nven kvl mg egy numerikus felhasznl- s (esetleg tbb) csoport-azonostt rendel (UID - user identification s GID - group identification). Lteznek kitntetett felhasznlnevek is, illetve legalbb egy, amelyik minden rendszeren megvan: ez a root felhasznl, a rendszergazda azonostja, aki felels az adott rendszer karbantartsrt s zemeltetsrt, s akinek a rendszeren mindent szabad: az, akinek a rendszer egszhez hozzfrse van. Fel kell itt hvni a figyelmet egy kialakult, de elkerlend rossz gyakorlatra: sokan, akik csak egyedl hasznljk Linuxos gpket, minden tevkenysgket root hozzfrsi jogokkal vgzik, mondvn, hogy gy jobban hozzfrnek a rendszerhez, nem kell mindenfle korltozsokkal veszdnik. Nem rdemes ezt a gyakorlatot folytatni, mert egy jl bekonfigurlt rendszerben norml (nem privilegizlt) felhasznlkent is knyelmesen elrhetnk minden szolgltatst, amire htkznapi felhasznls sorn szksgnk lehet - viszont figyelmetlensggel vagy elgpelssel sokkal kisebb krt tudunk okozni. Egy root jogokkal kiadott hibs vagy t nem gondolt utasts egy pillanat alatt az egsz rendszernket jvtehetetlenl tnkreteheti. Megjegyzend mg, hogy root-tal ekvivalens felhasznlt akr tbbet is hozhatunk ltre, az sszes olyan felhasznl, akinek UID-je 0 (felhasznl ltrehozsakor ezt megadhatjuk) root-tal ekvivalens

10

lesz, de ltalban nem rdemes ezt tennnk: egy rendszeren ppen elg egy darab teljhatalm felhasznl. 2.6. A file-okrl 2.6.1. A Unix file koncepci Mieltt tovbblpnnk, felttlenl szksges megismerkednnk mg egy, az egsz rendszert that szervez elvvel: ez pedig a file koncepci. Unixban ugyanis (tlzs nlkl) az gvilgon minden file. Definci szerint (kiss tudomnyosan) a file olyan kommunikcis vgpont, ahova vagy byte-folyamot (byte stream) tudunk rni, vagy byte-folyamot tudunk onnt olvasni (esetleg mindkettt). File-knt kezelhet teht a billentyzet (csak olvashat), a szveges kperny (csak rhat), a nyomtat, de mg a fizikai memria tartalma is (!). A gpben lv winchester szektorait (ha nem csak egyes file-okat akarunk elrni) is egy specilis file olvassval illetve rsval rhetjk el, ugyangy a hlzati eszkzket is a file-kezels szablyainak megfelelen hasznlhatjuk. Ez utbbi hrom esetben persze szksg van a megfelel jogosultsgokra: a fizikai memria tartalmt vagy direktben a winchester szektorait mezei felhasznl nem lthatja. Ezt a file-orientlt szervezsmdot (amely tulajdonkppen egy Unix rendszer f szervez ereje) folyamatosan rdemes szben tartanunk: ha egyszer kellen tlttuk logikjt, sok addig bonyolultnak, lehetetlennek tartott mvelet roppant egyszerv vlik. 2.6.2. A file-rendszer struktrja A Unix file rendszere a DOS-hoz hasonl knyvtr rendszer (helyesebben szlva a DOS hasonlt a Unixhoz), azzal a klnbsggel, hogy itt nincsenek klnbz meghajtk, hanem a rendszerben lv minden file-t egy gykrknyvtrbl kiindulva (ennek jellse / knyvtr) elrhetnk. Fontos klnbsg mg, hogy a Unix file-nevek nem a DOS-bl ismert 8+3 szably szerint formldnak: egy file-nv max. 255 karakter hossz lehet, s tetszleges karaktert tartalmazhat. (Vigyzat, tartalmazhat nem nyomtathat, nem gpelhet karaktereket is! Gonoszul elnevezett file-okkal sok bosszsgot okozhatunk magunknak s felhasznltrsainknak.) Fontos klnbsg tovbb, hogy a Unix (nemcsak a file-nevekben, mindenhol) klnbsget tesz kis- s nagybet kztt (case sensitive). Az ALMA, Alma, alma, almA teht mind-mind klnbz file-okat jelentenek. Mivel file-nvben pont is lehet, ezrt Unixban is adhatunk kiterjesztseket a file-oknak: ezek azonban a rendszer szmra semmilyen jelentssel nem brnak: csak a felhasznlk eligazodst segti el, ha betartjuk a megfelel file-elnevezsi konvencikat. Azt sem a file-nvbl tudja meg a rendszer, hogy pldul az adott file futtathate vagy sem: a kvetkez rszben ltni fogjuk, mibl is derl ez ki. Eltte azonban mg egy fontos dolgot tisztznunk kell: hogyan valsul meg az, hogy a gpben tbb fizikai eszkz van (floppy, esetleg tbb winchester), s mgis az sszes file-t egy knyvtrstruktrban ltjuk? gy trtnik, hogy van egy kitntetett diszk (vagy partci, esetleg ramdisk) amelyen a gykr knyvtr ( / knyvtr) tallhat, s a tbbi gynevezett filesystem-et (filesystem-nek Unix alatt az egy diszken, partcin, egy rendszerbe szervezett file-ok sszessgt nevezzk) pedig a filerendszer valamely alknyvtrba lehet beilleszteni (mounting, igazn j magyar terminolgia mindezidig nem szletett r). Teht ha van pldul egy /mnt/floppy alknyvtrunk a rendszerben, s van egy floppy diszknk, amelyen lv filesystem-ben a /alma, /narancs s a /alma/starking knyvtrak vagy file-ok vannak, akkor a floppy felmount-olsa utn a /mnt/floppy/alma, /mnt/floppy/narancs s a /mnt/floppy/alma/starking knyvtrakat vagy file-

11

okat fogjuk ltni. Lttuk azt is, hogy Unixban az egyes knyvtrak szeparlsra a DOS \ (backslash) karaktervel ellenttben a /-t (slash) hasznljk. Nem rdemes eltveszteni, mert amint ksbb ltni fogjuk, a backslash karakternek is megvan a sajt szerepe. Unixban ktflekppen adhatunk meg file elrsi tvonalat, ez hasonlt a DOS-nl megszokottra: abszolt mdon, a gykrknyvtrbl indulva, amikor az elrsi t neve /-rel kezddik, vagy relatv mdon, pldul ../../alma/starking, ami azt jelenti, hogy az aktulis knyvtrbl lpjnk felfel kettt, s onnt lpjnk az alma knyvtrba, ha a starking-ot akarjuk megtallni. 2.6.3. Tbbfle file-rendszer kezelse A Linux kpes arra, hogy tbbfle fizikai s logikai szervezs filesystem-et egy knyvtrszerkezetben kezeljen: tmogatja tbbfle Unix-os filesystem formtum mellett a DOS FAT filerendszert, tudja olvasni az OS/2 HPFS file-okat, ismeri a CD-s file-formtumokat, s tudja kezelni a TCP/IP hlzat felett mkd hlzati file-rendszert, az NFS-t is. 2.6.4. Tovbbi rdekessgek a file-rendszerrl. A link Mg kt Unix-os specialitsrl kell beszlnnk: az egyik az, hogy abbl hogy /mnt/floppy/narancs, nem derl ki, hogy ez a narancs egy knyvtr-e vagy egy file - ennek eldntshez a file neve egyedl nem elg. A msik specialits ismertetshez kicsit jobban bele fogunk mszni a Unix file-rendszerek rejtelmeibe. A trgyalt sajtossg a link, az a tulajdonsg, hogy egy file-nak egyszerre tbb neve is lehet: tbb nven is tudunk ugyanarra a file-ra hivatkozni (pl. megcsinlhatjuk, hogy a /gyumolcs/alma s a /holnap/reggeli file-nevek fizikailag ugyanarra a file-ra mutassanak). Ez pedig gy lehetsges, hogy egy Unix filesystemben minden egyes file-hoz tartozik egy inode-nak nevezett rekord, amely tartalmazza a file nevt, ltrehozsnak dtumt s minden egyb, a file-lal kapcsolatos adatot, kivve a file tartalmt - tbbek kztt azt az informcit is, hogy fizikailag a diszk melyik szektorban kezddik az a file. Ltrehozhatunk egy jabb inode-ot, amelyben a file neve ms, de a kezd szektor szma azonos: s mris kt helyrl hivatkozhatunk ugyanarra a file-ra. Trlskor pedig mindaddig csak az inode-okat trljk, amg el nem rnk az utolshoz, amikor mr csak egy darab inode cmzi meg a file-t: ennek trlsekor szabadtjuk fel a file ltal elfoglalt diszkhelyet. Az ilyen tpus linket hard link-nek nevezzk, s van egy htrnya: csak ugyanazon a diszken illetve partcin lv file-ra tudunk ilyet ltrehozni, mert az inode-on bell nem tudunk mondjuk egy cserlhet floppy vagy CD-ROM szektorszmaira hivatkozni - egy msik diszkrl. Ezrt talltk ki az n. szimbolikus vagy soft link-et, amely szintn egy link, de gy mkdik, hogy a link maga egy specilis file, amiben a hivatkozott file neve van. Itt ltalban rdemes relatv nevekkel dolgozni, gy ksbb egsz knyvtrszerkezetek, rszfk msolsakor, mozgatsakor kevesebb problmba tkznk. Mozgats alatt az is rtend, ha az adott filesystem-et a knyvtrstruktra egy ms pontjra illesztjk be! Lthattuk, hogy a .. itt is a szl knyvtrra hivatkozs, a . pedig logikusan az aktulis knyvtrra utal. Unixban (mint minden), a knyvtrak is file-knt jelennek meg - ennek az is az elnye, hogy a knyvtr neve, a knyvtrban lv . file s a knyvtr kzvetlen alknyvtraiban lv .. hivatkozsok mind-mind ugyanarra az inode-ra, a knyvtr inode-jra mutat hard linkek. Ugye milyen logikus? Ennyi elmleti alapozs utn mr ppen itt az ideje, hogy billentyzetet ragadjunk, s elkezdjk egy Linux rendszer felfedezst a gyakorlatban is!

12

3. Hogyan hasznljuk?

3.1. Jelentkezznk be! Most mr (elmletben) elg jl ismerjk a rendszer felptst: kezdjk el hasznlni is. Egy Linux gp terminlja el lve valami hasonlt lthatunk:
Welcome to Linux 1.3.10 claudius login:

Ez a gpen fut kernel verzija, illetve a gp neve (a Unix-os gpeknek nevk van!), valamint a login: prompt jelzi azt, hogy a terminl ksz a bejelentkezs fogadsra. (Ezek a bejelentkezs eltti zenetek termszetesen konfigurlhatk). Gpeljk be teht a user-nevnket s a jelszavunkat, s pr sor jabb zenet utn (pl. hogy mikor jelentkeztnk be ezeltt utoljra), megkapjuk a parancsrtelmez prompt-jt, jelen esetben:
claudius:~$

Jelentse: legelszr ll a gp neve, utna kettsponttal elvlasztva az aktulis knyvtr (a tilde jel egy rvidts - a felhasznl n. home knyvtrt jelenti, amirl mindjrt megtudjuk mi is az), a prompt vgt pedig egy $ karakter jelzi. Ha root privilgiumokkal jelentkeztnk volna be, a prompt vgn egy # karaktert ltnnk - a rendszer ezzel is figyelmeztet klnleges hatalmunkra. A home knyvtrrl: a rendszeren minden felhasznlnak van egy otthona, ahova bejelentkezskor a rendszer az aktulis knyvtrat (current working directory) lltja: ez a knyvtr a felhasznl tulajdonban van, itt tartja file-jait, ide dolgozik, s ha akarja, el is rejtheti a knyvtr tartalmt a tbbi felhasznl kvncsi szeme ell. Ez Linuxokon ltalban a /home/felhasznalo_nev vagy ritkbban a /usr/users/felhasznalo_nev nev knyvtr. Rvidtve mint mr lttuk - a ~ jellel hivatkozhatunk r. 3.2. A parancsrtelmez, avagy shell 3.2.1. Mirt van r szksg? Egy Unix rendszermag szigoran vve nem tartalmaz felhasznl-interakcit: a kernel csupn arra kpes, hogy futtasson ms programokat, illetve hozzfrst biztostson a rendszer erforrsaihoz - ezen szolgltatsait azonban programozi szinten, n. rendszerhvsok (system calls, vagy rviden syscalls) formjban knlja. Mr a rendszer indtsakor szksg van teht egy (illetve tbb) programra, amely biztostja a bejelentkezs lehetsgt, illetve bejelentkezskor is minden felhasznl szmra el kell indtani egy programot, amely lehetv teszi a felhasznl szmra, hogy a rendszerrel kommunikljon, ms programokat indtson el stb. Ez a program a parancsrtelmez vagy shell (szoks - elg szerencstlenl - burokprogramnak is fordtani), amely nem csinl mst, minthogy olvassa a felhasznl billentyzetrl rkez parancsokat, s ezeket a kernel szmra emszthet rendszerhvsokk alaktja, a vgeredmnyrl pedig a kpernyn tjkoztatja a felhasznlt. Fontos megjegyezni, hogy ilyen szempontbl a shell semmifle specilis tulajdonsggal nem br: tulajdonkppen brmely programot megadhatunk n. default shell-nek (cifra magyarsggal alaprtelmezs szerinti parancsrtelmez). Ha azt akarjuk, hogy valamely felhasznl csak a vi szvegszerkesztt legyen kpes futtatni, lltsuk be szmra default shell-knt a vi programot: ekkor bejelentkezs
13

utn rgtn a vi indul el, a szvegszerkeszts befejezse (a vi-bl kilps) utn pedig a felhasznl visszakerl a login: prompthoz. St, olyan programot is megadhatunk default shellnek, amely egyltaln nem olvas a billentyzetrl s nem r a kpernyre - br szegny felhasznl szmra a bejelentkezsek nem lesznek tl rdekfesztek - a program lefutst is csak onnt veszi szre, hogy visszakerlt a login: prompthoz. Egy hasznos informci: a rendszerbl kilpni a shell promptnl a logout paranccsal lehet. Hasonl az exit parancs is, azonban ez csak az els, a login shell utn indtott shellekbl lptet ki, a rendszerbl teljesen kilpni logout-tal kell. 3.2.2. Milyen shellek vannak? ltalban persze nem valamilyen clprogramokat adnak meg shell-knt, illetve clprogramokat: shell clprogramokat, amelyek f clja, hogy a felhasznlt segtsk a rendszer hasznlatban (ami ms programok indtst jelenti). A Unix hossz trtnete sorn a sokfle fejleszt s felhasznl zlst tkrzvn, tbbfle shell program alakult ki: a legelterjedtebbek: a legels, az si sh, a Bourne ltal megrt shell, amely egyfajta kzs nevezt jelent, mert minden Unix rendszer tartalmazza, aztn az sh tovbbfejlesztett s C programozk zlsvilghoz igaztott vltozata a csh, a sokfle funkcit magban foglal Korn shell, a ksh, valamint a csh knyelmi s kiterjesztett funkcikkal jl megpakolt vltozata a tcsh, s vgl a Linux rendszereken ltalnosan hasznlt bash, a Bourne Again SHell, amely az sh egy alaposan tovbbfejlesztett vltozata. A shell lehetsgei nem merlnek ki csupn interaktv parancs-futtatsban: mindegyik shell-nek egy sajt kis programnyelve van, amelyben interpretlt kis programocskkat (n. shell script-eket) rhatunk. A shell script programozssal ksbb rszletesen foglalkozunk majd. 3.2.3. Krnyezeti vltozk Fontos tulajdonsga mg a shellnek, hogy definilhatunk benne (a DOS-hoz hasonl) n. krnyezeti vltozkat (enviroment variables), amelyek kzl a fontosabbak: a PATH vltoz, amely megmondja, mely knyvtrakban keresse a rendszer a futtathat file-okat, a HOME vltoz, amely a home knyvtr tvonalt tartalmazza, a LOGNAME s a HOSTNAME vltozk, amelyek a login nevet illetve a gp nevt tartalmazzk, illetve a TERM vltoz, amely a hasznlt terminl tpust azonostja. 3.2.4. Klnbsgek az egyes shellek kztt Alapvet vonsaiban minden shell azonos: programot elindtani mindegyikben a programnv begpelsvel lehet, mindegyik azonosan rtelmezi a file-nv metakaraktereket, s vgl is amit egyik shellben meg tudunk csinlni, az tbb-kevesebb nehzsggel egy msikban is elrhetjk br nha eltr szintaktikval. Pldul a krnyezeti vltozk lltsa mr nem ugyanazzal a szintaktikval trtnik az egyes shellekben, az elrt hats azonban ugyanaz. Lnyegi klnbsg nincs igazn a shellek kztt, taln csak annyi, hogy az jabbakban sok olyan - gpelst megtakart, gyorst - funkci van amelyek a rgebbi shellekben mg nem voltak meg. A tovbbiakban bash-ban fogunk dolgozni, mert - br ltezik Linuxra az sszes emltett shell mgis a Linux vilgban ez a legelterjedtebb. Trjnk teht vissza gpnk promptjhoz, amelyrl most mr tudjuk, hogy a shell rja ki (a ~ rvidtst is a shell rtelmezi).

14

3.2.5. Nhny hasznos ismeret a bash-rl A bash szmos knyelmi funkcija kzl nhny: Az elzleg begpelt parancsokat visszahvhatjuk a felfel nyllal, a parancssort szabadon szerkeszthetjk (mozogni a nylbillentykkel lehet). Elz parancsot visszahvni mg a felkiltjellel is lehet: a ! mg rvid sztringet rva megkeresi a legutbbi olyan parancsot, amely azzal a sztringgel kezddtt, s azt futtatja le. A ! hasznlatval elhvott parancs egybknt mdosthat, t is szerkeszthet. File-nv kiegsztst a Tab-bal krhetnk: ennek hatsra a shell megprblja kiegszteni az eddig begpelt file-nv kezdemnyt. Ha ez egyrtelmen lehetsges, berja a file-nevet, ha nem, spol egyet, s a Tab jbli megnyomsra megkapjuk a lehetsges file-nevek listjt. A file-nv kiegszts valamennyire intelligens: sor elejn (els szban) csak futtathat file-okra, parancsok nevre egszt ki (viszont a PATH-ot is vgignzi), argumentumoknl viszont az aktulis knyvtr (vagy a megkezdett file-nvnek megfelel knyvtr) sszes file-jra mkdik. Mg kt, a bash-hoz tartoz file-rl rdemes beszlnnk, mindkett a home knyvtrunkban van, s shell parancsokat tartalmaz, amelyeket a bash bizonyos krlmnyek kztt vgrehajt. Az els a .profile, amelyet bejelentkezskor hajt vgre a rendszer, a msik pedig a .bashrc, amelyet minden bash indtskor (teht akkor is, ha mr bejelentkeznk s jabb shellt indtunk). A .profile-ban szoks pldul a PATH s ms globlis vltozk rtkt sajt zlsnk szerint konfigurlni, a .bashrc-ben pedig pldul alias-okat definilhatunk: alias-ok segtsgvel parancsoknak ms neveket adhatunk, hossz parancsoknak rvideket vagy nehezen megjegyezhet neveknek valami memorizlhatbbat. DOS mnikusok pldul rhatjk a kvetkezt:
claudius:~$ alias dir='ls -l'

Ezutn a dir parancs jelentse ls -l lesz. Az eddig (vagy elre) definilt alias-okat a paramterek nlkl kiadott alias paranccsal nzhetjk meg, egy alias-t kitrlni pedig az unalias alias_nev paranccsal lehet. Folytathat alias-t (ahol az alias helyettestse utn az alias nv utn rt szavakat is tovbbviszi a shell), az alias vgre rt $* szimblummal definilhatunk. 3.3. Parancsok futtatsa 3.3.1. Az ls parancs Mr tudjuk, hogy programot indtani nevnek begpelsvel lehet. Ha csak a file-nevet adtuk meg, akkor a rendszer vgignzi a PATH vltozban szerepl knyvtrakat, s ha valamelyikben megtallja a file-t s ha az futtathat, akkor elindtja. Vigyzat! Az aktulis knyvtrban csak akkor nzi meg, ha a PATH-ban meg van adva a . is, mint knyvtr. Ha a file-nevet tvonallal egytt adtuk meg, akkor csak az adott helyen lv file-ot prblja meg vgrehajtani (pl. /bin/ls, vagy hivatkozs az aktulis knyvtrban lv file-ra: ./ls). Futtassuk teht az ominzus ls parancsot, amely hasonlan a DOS dir parancshoz, kilistzza az adott knyvtrban lv file-ok neveit:
claudius:~$ ls LaTeX/ Mail/ News/ WWW/ ch-1-k.ps egyeb/ hun.kbd linuxmop-0.01.README linuxmop-0.01.tar.gz lx-1.3.tgz pi* xtermdos.zip yp-clients-1.5.patch

15

A parancs a file-neveket abc rendben rja ki. A file-nv mgtt lv / azt jelenti, hogy egy alknyvtrrl van sz, a * pedig futtathat file-t jelez. Ezeknek az informciknak a jelzshez az ls-t kln paramterezni kell: alaprtelmezs szerint csak a file-ok neveit rn ki. 3.3.2. Ismt pr sz a krnyezeti vltozkrl Ezek a paramterek elre be vannak lltva munkakrnyezetnkben: az ls parancs opciknt hasznlja az LS_OPTIONS krnyezeti vltozban belltott sztringet. Nzzk meg:
claudius:~$ echo $LS_OPTIONS --8bit --color=tty -F -T 0

Az egyes opcik jelentsvel nem kell most trdnnk - elg azt ltni, hogy krnyezeti vltoz rtkt az echo paranccsal rathatjuk ki, a vltoz neve el egy $ jelet rva (krnyezeti vltozk esetn a vltoz neve el rt $-ral rhetjk el, hogy a vltoz neve mint sztring helybe a shell helyettestse a vltoz tartalmt). Nzzk meg nhny tovbbi vltoz rtkt:
claudius:~$ echo $HOME /usr/users/tiv claudius:~$ echo $LOGNAME tiv claudius:~$ echo $PATH /usr/local/bin:/bin:/usr/bin:.:/usr/X11/bin:/usr/andrew/bin: /usr/openwin/bin:/usr/games:.:/usr/TeX/bin

Az echo paranccsal egybknt nemcsak krnyezeti vltozk rtkt rathatjuk ki: a parancs ugyanis nem csinl mst, minthogy az argumentumknt kapott sztringe(ke)t egyszeren kirja esetnkben is a vltoz-helyettestst a shell vgzi. Krnyezeti vltoznak rtket adni a valtozo_nev=ertek utastssal lehet. Pldul:
claudius:~$ valtozo=valami claudius:~$ echo $valtozo valami

Megklnbztetnk n. loklis (csak az ppen fut shell alatt rvnyes) vltozkat, illetve globlis, egsz bejelentkezsnk ideje alatt minden indtott programban rvnyes vltozkat (pldul a PATH-nak ilyennek kell lennie). Krnyezeti vltozt globliss az export utastssal tehetnk. Egy knyvtr hozzadsa a PATH-hoz:
claudius:~$ PATH=/alma/jonatan:$PATH claudius:~$ export PATH

Vagy akr ssze is vonhatjuk:


claudius:~$ export PATH=/alma/jonatan:$PATH

Mint lthat, a PATH-ban az egyes knyvtrnevek kettsponttal vannak elvlasztva. Ha a behelyettestend krnyezeti vltoz utn rgtn szveget akarunk rni (mondjuk a krnyezeti vltoz egy sztring rsze), akkor a ${valtozo_nev} szintakszist hasznljuk, ezzel vilgosan el lehet klnteni a vltoz nevt a krlvev egyb karakterektl. Az ppen definilt sszes krnyezeti vltoz nevt s rtkt az env paranccsal rathatjuk ki.

16

3.3.3. Mg pr sz az ls parancsrl Trjnk most vissza az ls parancshoz! Az ls tipikus Unix parancs, amennyiben egy kis, rvid nll futtathat program, amelynek argumentumokat s opcikat adhatunk meg, s futsa vgeredmnyt a kimenetre (jelen esetben ez a kperny) rja. Nzznk meg nhny gyakran hasznlt opcit:
claudius:~$ ls -a ./ Mail/ pi* ../ News/ xtermdos.zip .bash_history WWW/ yp-clients-1.5.patch .elm/ ch-1-k.ps .netrc egyeb/ .newsrc hun.kbd .profile* linuxmop-0.01.README .rhosts linuxmop-0.01.tar.gz LaTeX/ lx-1.3.tgz

Most az elzeken kvl kirt mg egy csom ponttal kezdd nev file-t is: ezek a file-ok az elbb is ott voltak a knyvtrban, csak az ls alaprtelmezs szerint nem rja ket ki: konvenci szerint ezen file-ok legtbbje n. inicializl file, amelyekre norml munknk sorn ltalban nem vagyunk kvncsiak. Pldul a .profile egy olyan file, amelybe azokat az utastsokat rjuk, amelyeket szeretnnk hogy minden bejelentkezskor vgrehajtson a rendszer: tudjuk hogy ez a file ott van, de nem szeretnnk, hogy minden egyes ls kiadsakor foglalja a kpernyn a helyet. Hasonl a helyzet a tbbi ponttal kezdd file esetn is. Mg egy fontos ls opci:
claudius:~$ ls -l
drwxr-xr-x drwx-----drwx-----drwxr-xr-x -rw-r--r-drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r--rw-r--r-lrwxrwxrwx -rw-rw-r--rw------2 2 2 3 1 2 1 1 1 1 1 1 1 tiv tiv tiv tiv tiv tiv tiv tiv tiv tiv tiv tiv tiv users users users users users users users users users users users users users 1024 Jun 10 11:10 LaTex/ 1024 Jul 18 23:27 Mail/ 2048 Jun 30 11:24 News/ 1024 May 15 14:56 WWW/ 203839 Jun 5 13:31 ch-1-k.ps 1024 Jan 15 1995 egyeb/ 613 Apr 2 15:52 hun.kbd 136 Jun 29 17:39 linuxmop-0.01.README 159303 Jun 29 17:37 linuxmop-0.01.tar.gz 1374657 Jun 21 15:08 lx-1.3.tgz 17 Jul 20 09:01 vmessages -> /var/adm/messages 276578 May 25 09:10 xtermdos.zip 577 Feb 8 14:31 yp-clients-1.5.patch

3.3.4. A file-tpusok -l-lel (long listing) minden egyes file-rl b (verbose) informcit kaphatunk. Az egyes mezk jelentse: A legels karakter a file tpusra utal: d ha a file egy knyvtr (directory) b ha a file block tpus specilis file c ha a file karakter tpus specilis file l ha a file szimbolikus link s ha a file socket - ha a file egyszer (plain) file (A b,c,s tpus file-okat ksbb majd trgyaljuk: egyelre fogadjuk el, hogy ilyenek is vannak).
17

3.3.5. A hozzfrsi jogosultsgok A kvetkez 3*3 karakter a file hozzfrsi jogosultsgait adja meg: az els hrom karakter jelenti, hogy a file tulajdonosa mit tehet a file-lal: r w x ha olvashatja(read) ha rhatja(write) ha vgrehajthatja (execute) ha az adott jog nincs szmra megadva

A kvetkez hrom karakter ugyanilyen formban jelenti a file-tulajdonos csoport (group) jogait, vagyis hogy a file tulajdonos csoportba tartoz felhasznlk mit tehetnek az adott filelal, az utols hrom karakter pedig a klvilg (others), az egyb felhasznlk jogait jelenti. A file tulajdonosa termszetesen tetszs szerint megadhatja a hozzfrsi jogokat, nemsokra ltni fogjuk hogyan. Azt teht, hogy egy file futtathat-e (az opercis rendszer megksrelheti-e futtatni) Unix alatt nem kiterjeszts, vagy ms egyb file-nvbe olvasztott informci dnti el, hanem a megfelel x attribtum. Az is igaz, hogy ha egy file-ra csak x jogunk van, akkor csak futtatni fogjuk tudni azt a file-t, olvasni nem - teht nem fogjuk tudni lemsolni sem! Mint mr lttuk, szveges file is lehet futtathat: a shell parancsokat tartalmaz shell script-ek is egyszer szveges file-ok, belltott x attribtummal. Ha egy ilyen file-t indtunk el, a shell egyszeren soronknt olvassa s hajtja vgre a belert utastsokat, hasonlan a DOS-os .BAT file-okhoz. A vgrehajtsi jog (x) knyvtrak esetn a knyvtrban val keress jogt jelenti. Ha valamely mveletnk megfelel jogosultsgok hinyban meghisul, a sokat tkozott Permission denied. hibazenetet lthatjuk. 3.3.6. A file-okhoz tartoz egyb informcik A jogok utn kvetkez mez a sorban az gynevezett link szmll (link count): megadja, hogy az adott filesystem-en hny hard link mutat az adott file-ra (tulajdonkppen megmondja, hogy hny nven hivatkozhatunk a file-ra). Ez a szmll csak a hard linkek szmt mutatja szimbolikus linkek szmolsra nincs lehetsg. A kvetkez mez a file tulajdonos user-neve (jelen esetben tiv), a kvetkez pedig a tulajdonos csoport azonostja (users). Ezutn a file hossza kvetkezik byte-okban, majd az n. mtime mez, a file utols mdostsnak dtuma. Legvgl a file neve lthat. Szimbolikus linkeknl (a fenti pldban a vmessages file ilyen) a -l opci hatsra egy -> nyl utn az ls kirja, melyik msik file-ra mutat a szimbolikus link. 3.3.7. Unix parancsok paramterezse Az ls parancsnak azt is megadhatjuk, melyik knyvtrat listzza (ha nem adunk meg semmit, az aktulis knyvtr tartalmt rja ki). A gykr-knyvtr s mondjuk a /usr/users/tiv/ch-1-k.ps file lehet legteljesebb listzsa gy nzhet ki:
claudius:~$ ls -la / /usr/users/ch-1-k.ps

Argumentumknt akr tbb file- vagy knyvtrnevet is megadhatunk, s amint lttuk, az opcikat sszevonhatjuk. ltalnossgban, egy tipikus Unix parancs hvsi formja a kvetkez:
parancsnv [opci(k)] [argumentum(ok)]

Ha egy paramtereket ignyl parancsot paramterek nlkl, vagy nyilvnvalan hibs paramterezssel hvunk meg, ltalban a parancs rvid segtsget r ki a helyes paramterezsrl.

18

3.4. Mg nhny alapvet file-kezel parancs Aktulis knyvtrat a cd paranccsal vlthatunk - a DOS-tl eltren argumentumok nlkl kiadva azonban nem az aktulis knyvtrat rja ki, hanem visszavisz bennnket a home knyvtrunkba. Az aktulis knyvtr nevt a pwd (print working directory) paranccsal krdezhetjk le:
claudius:~$ pwd /usr/users/tiv claudius:~$ cd /usr/local claudius:/usr/local$ cd ../.. claudius:/$ pwd / claudius:/$ cd claudius:~$ pwd /usr/users/tiv

File-ot msolni a cp (copy) paranccsal tudunk, (cp [opcik] mit hova szintaktikval). Hasznos opcii a -r (rekurzv msols) illetve a -i (interactive) amely ha mr ltezik a cl-file, fellrsa eltt rkrdez, biztosak vagyunk-e a dolgunkban. File mozgatsa illetve tnevezse az mv (move) paranccsal lehetsges: az argumentumok sorrendje ugyanolyan mint a cp-nl. A mv parancs hasznlhat egsz knyvtrstruktrk mozgatsra is, de csak egy filesystem-en bell. Knyvtrat ltrehozni a mkdir dir_nev utastssal lehet, letrlni pedig az rmdir dir_nev paranccsal. Trlni csak res knyvtrat lehet. Linkeket az ln [-s] letezo_filenev uj_filenev paranccsal hozhatunk ltre - ha megadjuk a -s opcit, szimbolikus link keletkezik, ha nem akkor hard link. File-okat trlni az rm (remove) utastssal lehet. Figyelem! Unix rendszerekben letrlt file visszalltsra NINCS LEHETSG, legfeljebb biztonsgi msolatbl. Ezrt az rm hasznlata eltt mindig ktszer gondoljuk meg, valban meg akarunk-e szabadulni attl a filetl. Hirtelenkez felhasznlknak talltk ki az rm -i opcit, amely minden egyes file letrlse eltt mg egyszer visszakrdez. Megfelel nbizalommal rendelkezk hasznlhatjk a -f opcit: ez viszont nem krdez semmit, st ha esetleg nem lenne jogunk a file trlsre, akkor sem szl vissza: amit tud, letrl csendben, amit nem, azt ott hagyja. Amennyiben egy file a mi tulajdonunkban ll, de (taln elvigyzatossgbl?) levettk rla a w jogot (rs - ennek szmt a trls is), a sima rm nem trli le a file-t, hanem megkrdezi, fellbrlja-e a trlsi jog hinyt (sajt file esetn ezt megtehet). A -f opci viszont nem krdez semmit: tlltja a jogokat s trl sz nlkl (amennyiben persze teheti). Az rm, mkdir, rmdir parancsoknak tbb file-nevet is megadhatunk argumentumknt: az rm a b c mindhrom file-t trli. Ez veszlyes is lehet: az rm a* utasts trli az sszes a-val kezdd nev file-t (a metakarakterekrl bvebben majd ksbb), a gpelsi hiba folytn keletkezett rm a * parancs pedig elszr trli az a nev file-t (ha van ilyen), aztn pedig az aktulis knyvtrban lv sszes tbbit... (a * minden file-nvre illeszkedik). Van az rm-nek mg egy gyakran hasznlt, de nagyon veszlyes opcija, ez pedig a -r (rekurzv trls). Egsz knyvtrstruktrkat trlhetnk vele pillanatok alatt. s - ezt nem lehet elgszer hangslyozni: ha egyszer valamit letrltnk, nincs visszat!

19

3.5. File-ok tulajdonsgainak manipulcija 3.5.1. File attribtumok File-attribtumok megvltoztatsa, tovbbi attribtumok: Mint emltettk, a file tulajdonosa tetszs szerint bellthatja a file vdelmi attribtumait: erre szolgl a chmod parancs, melynek formtuma:
chmod [opcik] [ugoa...][+-=][rwx...] file_nev

(Az opcik kzl most a -R rdemel emltst: ezzel a parancs mkdse a knyvtrstruktrban rekurzvv tehet.) Az egyes betk jelentse: u g o a user: a file tulajdonosra vonatkoz jogok group: a csoportjogok other: mindenki ms jogai all: mindhrom csoportra vonatkoz mvelet

A mveletek: + jog (attribtum) megadsa - a jog megvonsa = az attribtumok legyenek a maszk-kal pontosan egyenlk Ezutn pedig az attribtumokbl kpzett maszk kvetkezik. Nhny plda:
claudius:~$ ls -l alma -rw-r--r-- 1 tiv users 5 Jul 20 10:14 alma claudius:~$ chmod u-w alma claudius:~$ ls -l alma -r--r--r-- 1 tiv users 5 Jul 20 10:14 alma claudius:~$ chmod g=rwx alma -r--rwxr-- 1 tiv users 5 Jul 20 10:14 alma* claudius:~$ chmod a=r alma claudius:~$ ls -l alma -r--r--r-- 1 tiv users 5 Jul 20 10:14 alma claudius:~$ chmod u+w alma claudius:~$ ls -l alma -rw-r--r-- 1 tiv users 5 Jul 20 10:14 alma

Mg kt (pontosabban hrom) attribtumot fontos itt megemltennk: az els az n. sticky attribtum (jele t), amely futtathat file esetn azt jelenti, hogy a program lefutsa utn az opercis rendszer a program kdjt megprblja a memriban tartani, gy legkzelebbi indtskor nem kell megvrni a program betltdst. Ezt a funkcit azonban nem minden Unixban valstottk meg, s napjainkban a demand paging technikk miatt egyre inkbb jelentsgt veszti. Legjobb tudomsom szerint ez a funkci Linuxban sincs implementlva. Ha a t attribtum knyvtrra van kiadva, azt jelenti, hogy hiba van az egsz knyvtrra rsi jogom, mgis csak a sajt tulajdonomban lv file-okat trlhetem le. Amennyiben ugyanis egy knyvtrra rsi jogom van, ebbl a knyvtrbl trlhetem a msok ltal ltrehozott file-okat is, mg akkor is, ha magukra a file-okra nincs rsi jogom. Viszont ha a sticky bit be van
20

lltva, csak a sajt file-jaimat pusztthatom. A msik kt fontos attribtum mg a set-UID s a set-GID bitek: jelentsk, hogy (futtathat programnl van rtelme hasznlni ket) a fut program a program file tulajdonos felhasznl vagy csoport jogaival fog rendelkezni (de csak a futs idejre!) fggetlenl attl, ki is indtotta el. Hogy mire j ez? Kpzeljk el, hogy valaki meg akarja vltoztatni a jelszavt (amire a passwd parancs val)! Ekkor t kell rni a csak root ltal rhat kdolt jelszfile-ban a felhasznl jelszavt - de hogy ezt brmelyik felhasznl megtehesse, s ne kelljen minden jelszvltskor a rendszergazdt felkeresni, a passwd programnak root jogokkal kell futnia. Termszetesen a passwd programba bele vannak ptve a megfelel biztonsgi mechanizmusok arra, hogy mindenki csak a sajt jelszavt legyen kpes mdostani. A rendszer belsleg ezeket a file attribtumokat (file permission bits) numerikusan trolja, s a chmod parancsnak is megadhatjuk numerikusan, mgpedig oktlis szm formjban. Pldul:
claudius:~$ chmod 467 alma claudius:~$ ls -l alma -r--rw-rwx 1 tiv users 5 Jul 20 10:14 alma

Amibl szrevehetjk, hogy az egyes szmjegyek jelentik az egyes felhasznl(csoport)ra vonatkoz engedlyeket, kiszmtsuk pedig: x = 1, w = 2, r = 4, s az egyes szmjegyekbe a kvnt mdok sszegt kell rni. 3.5.2. File-ok tulajdonjognak lltsa File-ok tulajdonjogt a chown [-R] user file paranccsal llthatjuk, (ezt csak a root teheti meg, sajt magunk nem adhatunk t file-t msoknak), a csoport tulajdonjogot pedig a chgrp [R] group file utastssal llthatjuk. Ezt az utastst felhasznlk is hasznlhatjk, amennyiben mindkt csoport tagjai, s a file tulajdonosai is egyben. 3.6. Egy gyakran hasznlt parancs: a man Unix alatt is rendelkezsre ll egy on-line help rendszer, amelyet a man (manual pages kziknyv) utastssal hvhatunk el. Ez, mint egy valdi kziknyv, nem arra szolgl, hogy ebbl sajttsuk el a Unix hasznlatt - sokkal inkbb referencia jelleg, az egyes parancsok, fggvnyek, file-formtumok rvid, de pontos ismertetsvel. Ha tudjuk, hogy knyvtr tartalmt az ls paranccsal listzhatjuk ki, de nem emlksznk melyik opcijval kaphatjuk meg a b (long) listt, csak gpeljk be: man ls s mris megkapjuk a ls parancs teljes s minden opcira kiterjed lerst. A manual, mint egy rendes kziknyv, fejezetekre van osztva, s ha esetleg elfordul kt azonos cmsz, a fejezetszm megadsval tehetjk krdsnket egyrtelmv. Az egyes fejezetek:

A shell-bl, tlagfelhasznl szmra hasznlhat parancsok (segdprogramok, utility-k, mint az ls s a chgrp) A kernel rendszerhvsai, C szintakszis szerint megadva - programozk szmra rdekes A rendszerknyvtrakban (programknyvtrakrl - libraries - van sz) tallhat knyvtri fggvnyek lersai, szintn C programozknak A rendszer nhny fontosabb llomnynak formtuma

21

Szintn llomny- s adatformtumok A rendszeren tallhat jtkprogramok lersai Perifriallomnyok, specilis file-ok formtumainak specifikcija, a klnbz perifriavezrl parancsok lersa. Rendszerprogramozk szmra emszthet formban. A rendszeradminisztrtor szmra futtathat parancsok.

Nhny fejezet alfejezetekkel is rendelkezik, pl. 3x, 3tcl ahol is ezek a jellsek az egyes programcsoportok kzti jobb eligazodst segtik. Fejezetre hivatkozni a man parancsban a krt lap (manual page) el rt fejezetszmmal lehet: ltezik pldul a chown utasts mellett chown rendszerhvs is: az utastsrl a man 1 chown paranccsal, mg a rendszerhvsrl a man 2 chown-nal kaphatunk segtsget. A man parancs kimenete valamilyen trdelprogram segtsgvel kulturltan, kpernyoldalakra trdelve jelenik meg - ltalban a space billentyvel lapozhatunk elre egy kpernyoldalnyit, b-vel lapozhatunk vissza, Enter-rel grgethetnk csak egy sort, s q-val lphetnk ki. A h-val a lapoz program parancsairl krhetnk gyors segtsget. Minden manual oldalnak van egy egysoros cme, ezekben keresglhetnk is a man -k sz paranccsal: ekkor kilistzdnak azok a manual oldalcmek, amelyek tartalmazzk a keresett szt - elszr a cmhez tartoz cmszt, aztn zrjelben a fejezet szmt, vgl az oldal rvid lerst kapjuk meg. Tancsos minden eddig emltett s ezutn emltend parancsot, s file formtumot megnznnk a man-ban: az itt csak megemltett lehetsgekrl rszletes magyarzatot, az alkalmazshoz tovbbi pldkat tallhatunk. 3.7. I/O tirnyts a Unixban 3.7.1. A standard file-lerk A Unix rendszer file-orientlt szervezse a parancsok futtatsakor is megmutatkozik: minden egyes fut parancshoz hozzrendeldik hrom file: a standard input (stdin) a standard output (stdout) s a standard error (stderr) Alaprtelmezs szerint ezen file-ok hozzrendelse a kvetkez: a standard input a terminl billentyzethez van rendelve, a standard output s a standard error pedig a kpernyhz. Egy tipikus program pedig a kvetkezkppen fut: olvassa a bemenett a standard inputrl, ebbl elllt valamilyen eredmnyt, amelyet a standard outputra r, az esetlegesen elfordul hibkat pedig a standard error file-ba rja. Ezeket a standard file-hozzrendelseket a shell segtsgvel knnyen megvltoztathatjuk, pldul ha azt akarjuk, hogy az ls parancs ne a kpernyre, hanem mondjuk a lista nev file-ba rja a kimenett, hasznljuk a ls >lista parancsot! Ekkor, ha mr ltezett lista nev file, az fellrdik: ha a kimenetet az eddigi file-hoz hozz akarjuk fzni, hasznljuk a ls >>lista formult. A standard input megvltoztatsa hasonlan egyszer: a parancs <bemenet hatsra a parancs program a bemenet nev file-bl fogja venni inputjt. A standard hiba tirnytsa: program 2>hiba, ennek hatsra a hibakimenet a hiba file-ba kerl. Termszetesen lehetsg van egyszerre tbbfle tirnytsra is: akr a parancs <bemenet >>kimenet 2>hiba utastsnak is van rtelme. St, mg azt is megcsinlhatjuk, hogy a standard error-t egybeirnytjuk a standard outputtal, s a kettt egy kzs file-ba rjuk: parancs >file_nev 2>&1. Ezek a dolgok (standard file-ok tirnytsa,
22

standard file redirection) mr ersen shellfgg szintaktikjak: br mindegyik shellben meg tudjuk ugyanezeket csinlni, az itt ismertetett szintakszis csak a bash-ben mkdik. Mire lehet ezeket a lehetsgeket hasznlni? Van pldul a Unixban egy more nev programocska, amely annyit tesz, hogy olvassa a standard inputjt, s az olvasottakat kpernynknt trdelve rja ki a kimenetre, minden kpernyvlts kztt egy space-letst vrva. (A morebl a q letsvel lphetnk ki). A man-nl mr tallkozhattunk is vele. Tegyk fel, hogy sok-sok file van a knyvtrunkban, s szeretnnk ket alaposan vgignzni, de az ls parancs kimenete mindig kifut a kpernyrl. Tehetjk a kvetkezt:
claudius:~$ ls -l >tmpfile claudius:~$ more <tmpfile [nzelds] claudius:~$ rm tmpfile

Egy sorba tbb parancsot pontosvesszvel elvlasztva rhatunk, teht a fentieket sszevonhatjuk:
claudius:~$ ls -l >tmpfile ; more <tmpfile ; rm tmpfile

Ekkor a shell megvrja az elz parancs lefutst, s utna indtja a pontosvessz utni parancsot. De ez a megolds mg mindig borzasztan esetlen, Unixban pedig minden olyan egyszer s kzenfekv: biztos lehet ezt egyszerbben is csinlni! 3.7.2. Programok sszektse Erre talltk fel a pipe (csvezetk) intzmnyt, amely nem csinl mst, mint a pipe bal oldaln ll program standard outputjt hozzkti a pipe jobb oldaln lv program standard inputjhoz:
claudius:~$ ls -l | more

Fontos klnbsg, hogy itt a shell egyszerre elindtja mind a kt programot, teht nem az trtnik, mint az elbb, hogy elszr lefut az ls, s aztn rja ki a valahol eltrolt kimenetet a more: itt az ls futsa kzben, amint megjelenik valami kimenet, a more rgtn megkapja azt s akciba lp. A pipe kapcsn mg egy hasznos parancsot rdemes megemltennk (br ez mr inkbb a kvetkez rszbe, a szrk kz tartozik: a tee parancsot, amellyel standard output elgaztatst rhetnk el: a tee parancs a standard inputjt a standard outputra valamint a paramtereknt magadott file-ba msolja. Leginkbb programkvetskor, belvskor hasznos, amikor nyomon szeretnnk kvetni a pipe belsejben zajl trtnseket. 3.8. A szrkrl (filters) A Unix parancsok j rsze nem csinl mst (a more-hoz hasonlan), minthogy olvassa standard inputjt (jellemzen szvegsor-orientltan) a beolvasott inputtal valamit csinl, majd az inputot, esetleg annak egy rszt, vagy valamely, az inputtl fgg mennyisget, adatot a standard outputra r. A programok ezen csoportjt nevezzk szrknek (filters). A szrk ltalnos tulajdonsga tovbb, hogy els argumentumknt egy file-nevet megadva standard inputjukat abbl a file-bl veszik, teht a more <hosszu_file s a more hosszu_file parancsok tulajdonkppen ekvivalensek: a klnbsg annyi, hogy az els esetben a more-nak mint programnak nincs egy argumentuma sem, az input-tirnytst a shell vgzi, a msodik
23

esetben pedig a more parancs tudja, hogy argumentummal indtottuk el, s maga intzi gy, hogy a bemenetet a megadott file-bl olvassa. A tovbbiakban nhny hasznos szrt nznk meg, a teljessg ignye nlkl. Kzs jellemzjk, hogy apr, nll segdprogram mindegyik, amelyekbl a shell segtsgvel bonyolult feladatokra kpes programfzrek rakhatk ssze. A legegyszerbb szr a cat, amely nem tesz mst, mint a standard inputjt soronknt tmsolja a standard outputra. Pldul:
claudius:~$ cat >proba Ez egy proba. Igen. ^D

Az utols sorban szerepl karakter a Control-D, rvid jellssel ^D, amely a shell szmra filevg karaktert jelent (hasonlan a DOS Ctrl-Z karakterhez). Meg is nzhetjk jonnan gyrtott file-unkat:
claudius:~$ cat proba Ez egy proba. Igen.

Emlkeztetl: rhattunk volna cat <proba-t is, a vgeredmny ugyanaz lenne. jabb filter a wc (word count), amely az inputjn rkez sorokat, szavakat s karaktereket szmolja meg, s a vgeredmnyt kirja:
claudius:~$ cat proba | wc 2420

(A wc proba ugyanezt eredmnyezte volna.) Az egyik leghasznosabb szr a (ksbb rszletesen ismertetend) grep, amellyel mintaillesztst vgezhetnk:
claudius:~$ cat proba | grep gen Igen.

A grep csak azokat a sorokat engedi tovbb kimenetre, amely(ek)ben szerepel a megadott (karakter)minta. Tovbbi gyakran hasznlatos szr mg: a sort, amely a standard inputon olvasott sorokat valamilyen szempont szerint rendezve rja ki a kimenetre, opcik nlkl indtva egyszeren alfabetikusan rendez, a -r hatsra pedig megfordtja a rendezsi sorrendet:
claudius:~$ sort -r proba Igen. Ez egy proba.

Vagyis a file tartalma soronknt fordtott abc rendben jelent meg. A sort egybknt kpes numerikusan rendezni, vagy akr a sor mezi szerint is: nzzk csak meg a man-ban, mennyi mindenre kpes.

24

Srn hasznljk mg a cut-ot is, amely nevhez mltan horizontlis darabokat kpes az inputknt adott sorokbl kivgni, pl. ha minden sor 3.-9. karakterre vagyunk kvncsiak:
claudius:~$ cut -c3-9 proba egy pr en.

Nemsokra, a shell mg nhny lehetsgnek megismerse utn majd ltni fogjuk, hogyan tudunk ezekbl a szrkbl igazn hatkony programfzreket pteni. 3.9. A shell tovbbi lehetsgei 3.9.1. Metakarakterek, file-nv helyettests File-nv helyettestsre (mint a DOS-ban) Unixban is hasznlhatunk klnbz metakaraktereket, st, itt sokkal tbb lehetsgnk van. Egy nagyon lnyeges klnbsg van azonban: a metakarakterek behelyettestst a shell vgzi, a kiadott parancs meghvsa eltt, a parancsot mr a megfelelen behelyettestett file-nevekkel hvja meg. Szemlletesen lthatjuk ezt, ha meggondoljuk, (s kiprbljuk), hogy az echo * parancs tulajdonkppen az ls-sel ekvivalens. Pldul, ha az aktulis knyvtrban a malac, marha, tehenke file-ok vannak, a cat m*a* parancs a cat-ot mr kt argumentummal hvja meg, gy mintha a cat malac marha parancsot rtuk volna be. A leggyakrabban hasznlt metakarakter (mint lttuk) a *, jelentse: 0 vagy tbb tetszleges karakter. A file nvben brhol hasznlhat, akr *a*b* formban is, aminek jelentse: olyan file-nv, amelyben valahol egy a bet van, utna pedig valahol egy b. A msik gyakori metakarakter a ?, amellyel egy darab, tetszleges bett helyettesthetnk. Megadhatunk halmazokat is: a ?[afu]? az olyan 3 bets file-nevekre illeszkedik, amelyek kzps karaktere a vagy f vagy u . A [0-9A-Z] halmaz olyan karakterre illeszkedik, amely vagy szm vagy nagybet. A nyit szgletes zrjel utn tett ^ karakter pedig a halmaz komplementumt jelenti: a shell azokra a karakterekre fog illeszteni, amelyek nincsenek a szgletes zrjelek kztt felsorolva. 3.9.2 Specilis karakterek semlegestse Idnknt szksg lehet arra, hogy bizonyos karaktereket a shell helyettest hatstl megvjunk: egyes karaktert a karakter el rt \ (backslash)-szel vdhetnk meg. Ha teszem azt valami oknl fogva olyan file-be akarunk rni, amelynek nevben a * karakter szerepel, ezt pldul a kvetkezkppen tehetjk meg: cat >ab\*c. Hosszabb sztringet a shell behelyetteststl megvdeni a ' egyszeres idzjellel lehet, ez akkor lehet hasznos, ha pldul a grep szrvel szkzt is tartalmaz kifejezsre szeretnnk illeszteni. Ha egyszeren bernnk a parancssorba a szkzt tartalmaz szveget, a shell gy rtelmezn, mintha tbb argumentumot adtunk volna meg. Az ls '? *' utasts pldul az (elgg extrm) krdjel szkz csillag nev file-ot listzza ki, ha van ilyen az aktulis knyvtrban, nem pedig elszr az egybets file-neveket keresi, aztn pedig az sszes file-nevet listzza. Hasonl szerepet tlt be a " (ketts aposztrf vagy dupla idzjel), azzal a klnbsggel, hogy az aposztrfban lv sztringben a krnyezeti-vltoz helyettestsek kivtelvel vd meg mindent. Egy bonyolult plda: az ls "${HOME}/*" azt nzi meg, van-e a home knyvtrunkban * nev file.

25

A Unix hasznlja a harmadikfle idzjelet is, a ` -t, (a legtbb billentyzeten a bal fels sarokban tallhat), elg rdekes szerepkrben: az ilyen fajta idzjelbe rt szveget a shell parancsknt rtelmezi, a parancsot vgrehajtja, s annak kimenett (standard output) helyettesti az idzjeles kifejezs helyre. Az egyb metakarakterek helyettestse normlisan trtnik. Pldul:
claudius:~$ echo Ebben a konyvtarban `ls | wc | cut -c6-12` db file van. Ebben a konyvtarban 36 db file van.

Gondoljuk t alaposan a fenti sor tartalmt! Emlkeztetl annyit, hogy a cut szr -c opcija a megadott pozcij karaktereket vgja ki a sorbl. 3.9.3. Programok csoportostsa zrjelezssel Lehetsgnk van futtatand programjaink csoportostsra a ( shell-parancs ) szintakszis segtsgvel: ez tulajdonkppen annyit tesz, hogy a zrjelbe tett (leggyakrabban komplex, kettspontot s pipe-ot tartalmaz) shell parancsot egy utastsknt kezelhetjk: pldul a ( cat file1 ; ls ) | wc paranccsal megtudhatjuk a file1-ben lv sorok s az aktulis knyvtrban lv file-ok szmnak sszegt. Vagy egy msik alkalmazs: cat file1 | ( echo Most tortenik a file iras ; cat >file2 ) parancs a file2-be trtn rs megkezdse eltt kirja az zenetet. 3.10. Folyamatok, processzek 3.10.1. Folyamatok a httrben Unix alatt egy felhasznl akr tbb folyamatot is elindthat - lnyegben minden fut program kln folyamatknt fut. Egyszerre azonban csak egy folyamattal tudunk kommuniklni (az egy darab billentyzet miatt), ezt eltr (foreground) folyamatnak nevezzk, a tbbi fut folyamatunkat pedig httr (background) processzeknek. Pl. a Windows-tl eltren, az eltrben fut folyamat semmilyen szempontbl nincs kitntetett helyzetben, nem lvez nagyobb prioritst - tulajdonkppen a futtat kernel nem is tudja, melyik folyamat van eltrben, hiszen az nzpontjbl mindegyik folyamat ugyanolyan file-mveleteket vgez. Folyamatot a program neve utn rt & jellel indthatunk a httrben: az gy indtott folyamatnak nem lesz standard inputja (megll s vrakozik, ha a program bemenetrl akar olvasni), a standard outputja pedig a shell standard outputja (vagyis a kpernynk) lesz. Prbljuk is ki:
claudius:~$ cat & [1] 1103

A szgletes zrjelben lv 1-es a folyamat n. job-azonostja, a msik szm pedig a folyamat processz-azonostja. A job azonostt a shell rendeli az elindtott programhoz, azrt hogy a felhasznlnak ne kelljen a gyakran 5 szmjegy processz-azonostt (PID) megjegyeznie. Ha ezutn kiadunk egy jabb parancsot:
claudius:~$ ls valami valami [1]+ Stopped (tty input) cat

26

A kvetkez parancs lefutsa utn a shell szreveszi, hogy az 1-es sorszm job terminl inputra vr. Httrfolyamatot eltrbe hozni a
claudius:~$ fg %1 cat

fg paranccsal tudunk. Ekkor a folyamatot gy hasznlhatjuk, mintha a & jel nlkl indtottuk volna el. Ha egy msik programmal szeretnnk foglalkozni, de azt akarjuk hogy az eltrben lv folyamat tovbb fusson a httrben, a ^Z (Control-Z) billentykombincival megllthatjuk (ekkor vrakoz, stopped llapotba kerl), majd httrbe helyezni a bg %jobazonosit paranccsal tudjuk. Ha a folyamat futskpes, (nem vr mondjuk terminl inputra) akkor a httrben tovbb fog futni. Kilpskor, ha vannak mg httrben fut vagy vrakoz folyamataink, a rendszer erre figyelmeztet a You have running jobs. vagy You have stopped jobs. zenettel: ha kzvetlenl ez utn mg egyszer berjuk a logout parancsot, a shell kiirtja a httrfolyamatokat s kilptet bennnket a rendszerbl. Ha fg s bg parancsokat argumentum nlkl hasznljuk, mindig a legutoljra hivatkozott folyamatra vonatkoznak. Ha tbb folyamat is fut, amelynek kimenete a kperny, a shell nem vlogatja szt az egyes parancsok outputjait: mlesztve kapunk meg mindent. Ha programfuttats kzben zenetet kapunk (a rendszertl vagy msik felhasznltl), akkor ez is egyszeren kirdik a kpernyre, esetleg jl sszekeveredve az ppen fut program kimenetvel. Ezrt erre mindig rdemes odafigyelni: ha ltszlag rtelmetlen szveg jelenik meg a kpernyn, nzzk meg, nincs-e sszekeveredve kt program kimenete. Az ilyen esetek nagy rszt azrt elkerlhetjk a httrben fut programok kimenetnek file-ba irnytsval. Unix alatt a folyamatok hierarchikus rendszerbe szervezettek: minden folyamatnak van szlje. Folyamat csak msik folyamat gyermekeknt jhet lre (az egyetlen specilis, rendszerindtskor keletkez init kivtelvel). Gyermekfolyamat ltrehozsa a szl folyamat lemsolsval trtnik, a mr megismert copy-on-write mechanizmus hasznlatval. A gyermek folyamat ezrt rkli a szl minden tulajdonsgt, jellemzjt - mg nyitott file-jait is! Ez az oka annak, hogy idnknt a shell s az ltala indtott folyamatok (az gyermekei) output-ja sszekeveredik: ugyanazt a nyitott file-t rjk, s kzs file-pozci mutatt hasznlnak. Kilpskor a gyermek folyamatok szljknek adjk vissza visszatrsi rtkket. Egy mkd Unix rendszerben sok olyan folyamat fut mg, amely nem tartozik egyik felhasznlhoz sem: root-knt futnak, a rendszer indtsakor (boot-olskor) indulnak, s a rendszer mkdsrt felelsek. Ezeket a folyamatokat daemon processzeknek nevezzk. Tipikus daemon processz pldul az update, amely azrt felels, hogy a buffer cache tartalma bizonyos idkznknt (ltalban 30 msodperc) szinkronizldjon a diszk fizikai tartalmval. (Magyarul fl percenknt kirja a diszkre az addig mg ki nem rt vltoztatsokat). Ezt egybknt a sync paranccsal brmikor mi is megtehetjk. A daemon folyamatok tipikusan valami esemny bekvetkeztre vrakoznak, s az esemny bekvetkeztekor aktivizldnak. 3.10.2. Sokig fut vagy idztett folyamatok Lehetsgnk van azonban arra is, hogy egy folyamatot immuniss tegynk kilpsnkre: hosszan, tbb rig, tbb napig fut programokat a nohup paranccsal indthatunk. Pldul:
claudius:~$ nohup program >outputfile <inputfile & [1] 88

27

Ekkor a program kilpsnk utn is tovbb fut, s amint lttuk, gondoskodtunk arrl, hogy a programfuts eredmnyei az outputfile-ban megrzdjenek. Egyes shell-ekben a nohup-pal indtott parancsok kimenete automatikusan a nohup.out file-ba kerl. Ha fut a gpnkn a cron nev program (ltalban minden Unixon fut) akkor lehetsgnk van idztett programindtsra is az at paranccsal:
claudius:~$ at 3am program & [3] 116

Ennek hatsra a program parancs hajnali hromkor elindul. Termszetesen itt is rdemes a futsi eredmnyt megfelel file-ba menteni. 3.10.3. Folyamataink listzsa: a ps parancs A rendszerben aktulisan lv folyamatokrl a ps (processes) paranccsal krhetnk informcit. Alaprtelmezs szerint csak az ltalunk indtott folyamatokat listzza ki:
claudius:~$ ps PID TTY STAT TIME COMMAND 79 pp0 S 0:00 -bash 129 pp0 R 0:00 ps

Ami azt jelenti, hogy ebben a pillanatban kt processzel rendelkeznk: az els a shell, a msodik pedig maga a ps parancs. Az egyes mezk jelentse: PID a folyamat azonostja TTY a vezrl terminl azonostja, jelen esetben ez a ttyp0 STAT a folyamat llapota, bvebben lsd a man ps alatt TIME a processz ltal eddig elhasznlt processzor id A rendszerben fut sszes folyamatot, a legbvebb informcikkal Linux alatt a ps -aux opcikkal krhetjk le. Ekkor az processzekrl megtudjuk mg tulajdonosukat, az idpontot, amikor elindultak, valamint klnfle erforrs hasznlati informcikat (CPU, memria hasznlat, a program mrete a memriban). Hasznos segdprogram mg a top, amellyel hasonl informcikat kaphatunk, plusz mg statisztikkat a rendszer egszrl. A top folyamatosan fut, s 5 msodpercenknt frissti a megjelentett informcikat. Kilpni a q megnyomsval lehet. 3.10.4. zenetek a processzeknek: szignlok A Unix rendszer a folyamatok vezrlst a folyamatoknak kldtt n. szignlok (signals) segtsgvel vgzi: a ^Z billenty pldul egy STOP szignlt kld az eltrben fut processznek. Processzt kilni szintn szignl(ok) segtsgvel lehet: az eltrben fut program a ^C (Ctrl-c) megnyomsra egy INT szignlt kap, amely rendszerint a program elhallozst vonja maga utn. Httrben fut folyamatainkat a kill paranccsal irthatjuk ki: alaprtelmezs szerint a kill egy TERM (terminate) szignlt kld a megadott folyamatnak:
claudius:~$ sleep 60 & [1] 332 claudius:~$ ps

28

PID TTY STAT TIME COMMAND 310 pp0 S 0:00 -bash 332 pp0 S 0:00 sleep 60 333 pp0 R 0:00 ps claudius:~$ kill %1 claudius:~$ ps PID TTY STAT TIME COMMAND 310 pp0 S 0:00 -bash 334 pp0 R 0:00 ps [1]+ Terminated sleep 60

A sleep utasts egybknt vrakozik a megadott szm msodpercig (elaltatja a folyamatot). A kill %1 helyett termszetesen rhattunk volna kill 332-t is. Ha ms (nem TERM) szignlt akarunk kldeni, a kill parancsot megfelelen paramterezni kell, pldul a STOP szignlhoz: kill -STOP pid. Ennek ugyanolyan hatsa van, mintha az a folyamat az eltrben futna, s a ^Z-t nyomtuk volna meg: a folyamat felfggesztett llapotba kerl. Folyamatot meglni mg a HUP (hangup) s a KILL szignlokkal is lehet. (Az elbb ltott nohup parancs ezen HUP szignl ellen teszi immuniss a folyamatot.) A sokfle ltszlag azonos hats szignl oka, hogy korntsem azonos hatsak: pldul a HUP s a TERM szignlokat a folyamat fellbrlhatja, sajt szignl-kezel rutint llthat be (gy van ez az INT szignlnl is). Ezeket a szignlokat a folyamat kapja meg, s alaprtelmezs szerinti kezel rutinjuk lp ki. A KILL szignl hatsra viszont a kernel li meg a folyamatot, annak megkrdezse nlkl. Ezrt nem problma Unixban, ha egy folyamat lefagy, vgtelen ciklusba kerl: egy KILL szignl mindig megoldja a problmt. Szignlt csak sajt processzeinknek kldhetnk (kivve a root-ot, aki brmely processzel rendelkezhet). Az eddig felsoroltakon kvl mg szmos egyb szignl van, megemltjk mg az ALARM szignlt: a rendszert megkrhetjk, hogy megadott id mlva kldjn egyet. Ezt hasznljk idztsi clokra, tbbek kztt a sleep utasts is gy mkdik. De szignlokat hasznl a rendszer sok ms egyb, a folyamatot rint rendszerinformci kzlsre is, de ezek fleg programozk szmra rdekesek. 3.10.5. Folyamatok prioritsa, a nice parancs Mr korbban sz volt a folyamatok prioritsrl (egy folyamat prioritst megnzni legegyszerbben a top paranccsal lehet, vagy a ps parancs -l opcijval a PRI oszlopban). Ez a priorits (szoks mg temezsi - scheduling - prioritsnak is nevezni) azt szabja meg, hogy ha tbb folyamat is van egyszerre futkpes llapotban (tbb folyamat verseng az egyetlen CPU erforrsrt), akkor a kernel milyen arnyban ossza meg a rendelkezsre ll CPU idt az egyes processzek kztt. Unixban a priorits szmszer rtke minl kisebb, annl tbb CPU idt fog kapni a folyamat. Priorits rtke negatv is lehet: negatvabb rtk magasabb prioritst jelent. Minden folyamat hrom prioritssal rendelkezik: egy alapprioritssal (base priority), amely lland, egy temezsi prioritssal (sceduling priority), amely a program futsakor n, s egy n. nice prioritssal, amely (bizonyos hatrok kztt) felhasznl ltal vltoztathat. temezskor e hrom rtk bizonyos szablyok szerint kpzett sszegt hasznlja a rendszer: az temez algoritmus dntsi pontjn mindig a legalacsonyabb sszeggel rendelkez processz
29

kapja meg a vezrlst (ezrt kell ebbe az sszegbe az elhasznlt CPU idvel nvekv tagot is tenni: egybknt mindig csak a legmagasabb priorits folyamat futna). A nice -n nvekmny parancs szolgl arra, hogy a parancs-ot a megnvelt nice priorits rtkkel futtassuk. (Vagyis effektve a folyamat prioritst cskkentsk). Erre akkor lehet szksg, ha valami szmtsignyes, hosszan fut programot indtunk, de nem akarjuk jelentsen lasstani az interaktvan dolgozk munkjt. Ezt a nice rtket egybknt a top r parancsval is megvltoztathatjuk. Nem privilegizlt felhasznl csak nvelni tudja folyamatai nice rtkt (illetve a visszacskkentskor nem tudja az indul rtk al cskkenteni), a root tetszlegesen llthat prioritst. 3.11. rintkezs ms felhasznlkkal 3.11.1. A tbbi felhasznl Azt, hogy jelenleg kik hasznljk rendszernket, a who paranccsal krdezhetjk le:
claudius:~$ who tiv ttyp2 Jul 21 14:37 (euromath.vma.bme)

Ami azt mutatja, hogy a tiv nev felhasznl, a 2-es sorszm pszeudo-terminlon dolgozik, a bejelentkezs idpontja lthat mg, illetve az, hogy (pszeudo-terminlrl lvn sz) a bejelentkezs hlzaton keresztl trtnt, s hogy mi a tvoli lloms neve. Lthat az is, hogy tiv jelenleg az egyetlen felhasznl. Ennl bvebb informcit kaphatunk a w paranccsal:
claudius:~$ w 4:19pm up 6:09, 1 user, load average: 0.00, 0.00, 0.00 User tty from login@ idle JCPU PCPU what tiv ttyp2 euromath.vma.bme 2:37pm w

Ahol a legels sorban az egsz rendszerre vonatkoz informcik lthatk, a felhasznlrl szl sorokban pedig az, ami a who-nl is ltszott, kiegsztve azzal, hogy mennyi ideje nem nylt az illet a billentyzethez (idle time), illetve hogy mennyire CPU ignyes munkt folytat (JCPU, PCPU), valamint hogy mely parancsot futtatja ppen (what mez). Mg egy hasznos parancs: a last. Ezzel a paranccsal megnzhetjk a bejelentkezseket idben visszafel haladva, illetve argumentumknt egy user-nevet megadva csak annak a felhasznlnak a bejelentkezseit. Opciknt azt adhatjuk meg, hogy hny adatra vagyunk kvncsiak: a last -1 user_nev megadja az adott felhasznl utols bejelentkezsnek dtumt, azt hogy melyik terminlrl jelentkezett be, illetve hogy mennyi idt tlttt bejelentkezve. 3.11.2. Kommunikci a tbbiekkel: write, talk, mail Az ppen bejelentkezett felhasznlknak a write paranccsal kldhetnk rvid zenetet: write [tty] user_nev utn gpelhetjk az zenetnket, (ha a partner idkzben vlaszol, az is megjelenik), majd ^D-vel fejezhetjk be. A terminl azonost megadsra akkor van szksg, ha a keresett felhasznl tbb pldnyban is be van jelentkezve a rendszerre. (Ez egy grafikusablakozs krnyezetben mint az X Windows knnyen megtrtnhet.) Ha nem akarjuk, hogy msok neknk zenetet kldjenek, a mesg n zenet hasznljuk. zenetek fogadsnak jraengedlyezshez hasznljuk a mesg y parancsot. Mivel a write utasts gy mkdik,
30

hogy zenetnket a msik felhasznl terminljt reprezentl file-ba rja, ezek az utastsok tulajdonkppen ennek a specilis file-nak a hozzfrsi jogosultsgait lltjk. Kulturltabb kommunikcis lehetsget jelent a talk program: a talk user_nev [tty] paranccsal. Erre a felhvott flnek vlaszolnia kell (szintn a talk paranccsal, csak az user_nev helybe a hv nevt rva). A kapcsolat megteremtse utn a talk program kettosztja a kpernyt: a fels rszben azt lthatjuk, amit mi gpelnk, az als rszben pedig azt, amit beszlgetpartnernk. Hasznos billentyk: ^L-lel jrafrissthetjk a kperny tartalmt (ha valamilyen ms program belersa miatt sszezavarodna), s a beszlgets vgn (termszetesen az ill bcszkods utn) a ^C-vel lphetnk ki. A mesg parancs hatsa a talk-ra is rvnyes. Nem interaktv zenetet a mail paranccsal hagyhatunk valakinek: ennek legegyszerbb mdja a mail user_nev parancs: ekkor a Subject: krdsre rjuk be levelnk trgyt, majd gpeljk be a levelet! Befejezni egy, csak a . karaktert tartalmaz sorral lehet. Az utna megjelen Cc: (Carbon Copy) krdsre tovbbi cmeket (felhasznl neveket) adhatunk meg, akik a levlbl msolatot kapnak. Ha 'Enter'-t tnk, a levelet csak az els cmzett (akit a mail utn rtunk) kapja meg. Ha levelnk rkezett, ezt a rendszer rgtn bejelentkezskor kirja: a You have mail., vagy You have new mail. zenetek valamelyikvel, illetve bejelentkezs utn a shell is folyamatosan ellenrzi, hogy rkezett-e j levl, s kirja, ha rkezett. Leveleinket elolvasni szintn a mail programmal lehet:
claudius:~$ mail Mail version 5.5 6/1/90. Type ? for help. "/var/spool/mail/tiv": 1 message > 1 VARKONYI@bme-eik.eik Thu Jul 20 09:03 40/1996 "DECnet routing" &

Itt a lthat, hogy jelen pillanatban 1 levelnk van: az els mez a levl sorszma, a msodik felad neve, a levl dtuma, majd a sor vgn a levl trgya (subject) jelenik meg. Levelet elolvasni a mail program & promptja utn rt levlsorszmmal lehet, trlni pedig a d levelsorszam paranccsal. Kilpni a mail programbl a q paranccsal lehet. Lehetsg van tovbb a levl file-ba vagy n. mail-folder-be (levl dosszi) mentsre a s file_nev paranccsal. Levelek fogadst letiltani nem lehet. A gyakorlatban ritkn hasznljl levelezsre a mail programot: a legtbb rendszeren sokkal knyelmesebben hasznlhat (teljeskpernys menvezrelt, llthat szvegszerkeszts) levelezprogramok is vannak (pldul az elm vagy a pine) - ezek ismertetsre sajnos terjedelmi okbl nincs lehetsgnk. 3.11.3. Hlzatban Amennyiben gpnk rsze az Internet hlzatnak, illetve IP (Internet protocol) tpus hlzatba van ktve ms gpekkel, ez utbbi kt paranccsal (talk, mail) ms gpek felhasznlival is kommuniklhatunk: csupn user-nv helyett a user_nev@internet.gep.cim formtum cmet kell megadnunk. Hlzatban msik gpre bejelentkezni a telnet gep_nev paranccsal lehet: a telnet a hlzati terminl szoftver. Sajnos a hlzati (Internet) szolgltatsok rszletes ismertetsre itt nincs bvebb lehetsgem.

31

3.12. Adatok a rendszer egszrl Mr lttuk, hogy (pldul a top, vagy a w parancsokkal) adatokat kaphatunk a rendszer egszrl: nzzk most ezeket meg rszletesebben! Pldul a top egy kimenetnek fels pr sora:
10:38am up 1 day, 27 min, 1 user, load average: 0.00, 0.00, 0.00 20 processes: 19 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 1.3% user, 1.1% system, 0.0% nice, 97.6% idle Mem: 15176K av, 13484K used, 1692K free, 4484K shrd, 8888K buff Swap: 16392K av, 0K used, 16392K free

A legfels sorban az id, aztn a gp n. uptime rtke (mennyi id telt el reboot ta), a bejelentkezett felhasznlk szma, illetve a hrom load average (tlag terhels) lthat. Ezek jelentse: tlagosan hny futkpes (CPU-t ignyl) folyamat tartzkodik az temezben. A hrom rtk kzl az els az utols pr (ltalban 5) msodpercre vonatkoztatott terhelstlag, a kzps az elmlt pr percre vonatkozik, a harmadik pedig az elmlt fl rra vettett tlag. Jelen esetben mindhrom rtk nulla: a gpen egy felhasznl dolgozik csak, aki leginkbb csak a shell-t futtatja: a rendszer ideje legnagyobb rszben vrakozik. A kvetkez sorban processz-statisztikt lthatjuk: a rendszeren jelenleg 20 folyamat fut, ebbl 19 alszik (sleeping - vrakozik valamilyen esemnyre, ltalban inputra), 1 fut (running jelen esetben ez a top), 0 zombie (zombie-nek a mr halott, de mg a rendszerbl el nem tnt folyamatokat nevezik: akkor lehetsges ez, ha a gyermek folyamat mr kilpett, de a szl mg nem fogadta a gyermek visszatrsi rtkt - mg nem vett tudomst gyermeke hallrl), illetve 0 darab STOP szignllal meglltott folyamat van. A kvetkez sorban (CPU states) a processzor kihasznltsgot olvashatjuk le: idejnek 1.3%t tlti a processzor felhasznli folyamatok futtatsval, 1.1%-ot fut a kernel (rendszerfeladatok), 0%-ban foglalkozik cskkentett priorits folyamatokkal, s idejnek 97.6%-t henylssel tlti (idle). Ezt az informcit (CPU hasznlat statisztika) egybknt a time paranccsal kaphatjuk meg egyes programokra: a time parancs utasts elszr lefuttatja az utastst, majd sokfle rendszer-statisztikt kzl a futtatsrl. Az utols eltti sorban a fizikai memria kihasznltsgt lthatjuk: av: sszes rendelkezsre ll (itt nem szmolja bele a kernel s a rendszeradatok ltal elfoglaltat), used: hasznlt, free: szabad, shrd: a memriban lv osztott knyvtrak (shared libraries) ltal elfoglalt terlet, s buff: a buffer cache aktulis mrete. Az utols sorban pedig a virtulis memria adatai vannak: mennyi swap memrival rendelkezik a rendszer, s ebbl mennyi szabad mg. Ezeket a (memria foglaltsgi) informcikat egybknt mg a free paranccsal is megkaphatjuk. 3.13. Linux specialitsok 3.13.1. A virtulis konzol (virtual console) Azon a problmn, hogy egy gphez csak egy monitor s egy billentyzet tartozik, gy prbl a Linux segteni, hogy tbb n. virtulis konzolt hasznlhatunk, amelyek mindegyike gy viselkedik, mintha a rendszer konzol terminlja lenne. A virtulis konzolok szmt a rendszergazda konfigurlhatja, kzttk a bal Alt+funkcibillentykkel illetve a bal Alt+jobbra/balra nyl billentykkel vlthatunk.

32

3.13.2. Specilis billentyzetkombincik Nagyon hasznos funkci a Shift+PageUp/PageDown, amellyel - virtulis konzolon - pr oldalnyi szveget grgethetnk oda-vissza. Az ppen fut processzt a Print Screen megnyomsval is kilhetjk, ha az esetleg a ^C-re nem reaglna. Az opercis rendszert jraindthatjuk a jl ismert Ctrl-Alt-Del kombincival (termszetesen csak konzolrl!) - ezt shutdown procedraknt, a gp kikapcsolsa eltt is hasznlhatjuk, ugyanis gondoskodik a bufferek diszkre rsrl, a folyamatok kulturlt lezrsrl stb.

33

4. A Unix (Linux) file-szerkezete

4.1. Knyvtr struktra Unix alatt az idk sorn kialakult egy konvencionlis knyvtr-struktra: ez ugyan (kevs kivteltl eltekintve) nem ktelez rvny, de ha mshogy alaktjuk gpnk knyvtrszerkezett, ltalban csak sajt dolgunkat neheztjk vele. Kisebb eltrsek persze mindig akadnak: mi, amint eddig is tettk, a Slackware nev Linux disztribci konvenciit kvetjk. Minden a / (root, vagyis gykr) knyvtrbl indul. Els knyvtr a /bin, ahol a rendszer futtatshoz, a rendszer felllshoz legszksgesebb futtathat llomnyok vannak: a bash, a cat, a ps s gy tovbb. Linux sajtossg a /boot knyvtr, ahol a Linux boot-vezrl program, a LILO (Linux Loader) adatfile-jai kaptak helyet. Kvetkez a /dev, ahol a rendszer erforrsait reprezentl specilis n. eszkz (device) specifikus file-okat tallhatjuk. A /etc alatt helyezkednek el a rendszer-konfigurcis file-ok, illetve Linux alatt az /etc/rc.d knyvtrban vannak a rendszer indulsakor automatikusan lefut file-ok. Az /etc/skel knyvtr egy skeleton (csontvz) knyvtr a ltrehozand felhasznlk szmra: ha a standard, Slackware-hez mellkelt programokkal hozunk ltre j account-okat a gpen, ennek a knyvtrnak a tartalma msoldik be a home knyvtrukba. A /home knyvtr alatt tallhatk a felhasznlk home knyvtrai, az eddigi pldkban szerepelt /usr/users rgi, BSD rendszerekbl szrmaz cskevny. A kvetkez knyvtr a /lib: Linux alatt itt tallhat a dinamikus programknyvtrak nagy rsze. Minden Unix filesystem-en tallhat egy /lost+found alknyvtr: ha a filesystem megsrl, s a helyrellt program olyan file-okat tall rajta, amelyeknek knyvtrstruktrba helyezshez nincs elg informcija, ide teszi ket. Rendszerint van mg egy /mnt alknyvtr is: ltalban ide szoks az ideiglenes (pldul floppy, CD-ROM) filesystem-eket illeszteni (mount). Szintn Linux sajtossg (illetve ms, jabb Unix-okban is elfordul mr) a /proc alknyvtr: itt nem igazi file-ok vannak, hanem a rendszer, a folyamatok llapott reprezentl lfile-ok. Pldul a /proc/meminfo kiolvassval (cat /proc/meminfo) a free parancshoz hasonl kimenetet kaphatunk. A /root knyvtr Slackware-ben a rendszergazda home-knyvtra. Kvetkez fontos knyvtr a /sbin: ebben a rendszergazda szmra fontos, rendszeradminisztrlshoz szksges futtathat file-okat talljuk. A /tmp knyvtr az, ahova mindenkinek van rsjoga, ideiglenes file-ok trolsra val. Mivel Unix alatt nagyon sok program hasznlja a /tmp knyvtrat ideiglenes file-jainak trolsra, mindig gyeljnk arra, hogy itt legyen szabad hely, klnben egsz alapvet programok nem lesznek kpesek futni, s nagyon furcsa dolgok trtnhetnek. A /usr knyvtr alatt Unix-okban tradicionlisan a rendszer futtatshoz nem felttlenl szksges, minden egyb file helyezkedik el: a /usr alatt is van /usr/bin, /usr/lib, /usr/etc, /usr/sbin knyvtr, ahol a klnbz installlt szoftverek futtathat s adatfile-jai helyezkednek el. (Adatfile-ok rendszerint a /usr/lib alatt.) A /usr/man alatt tallhatk a man parancs
34

adatfile-jai, a /usr/include alatt pedig a rendszer C header file-jai kaptak helyet. A /usr/X* knyvtrakban az XFree grafikus rendszer file-jai tallhatk. A /usr/local alatt ltalban megismtldik egy, a /usr-hez hasonl knyvtrstruktra: mivel a /usr/bin-ben lv programok rendszerint az opercis rendszerrel egytt rkeznek, tgabb rtelemben vve annak rszeinek tekinthetk, ezrt a rendszergazdk nem szvesen keverik kzjk a loklisan (rendszerint forrsbl) felinstalllt programokat - s a /usr/local al helyezik ket. gy van ez Linux alatt is. Emltst rdemel mg a /usr/src knyvtr is: rtelemszeren programforrsokat szoks ide tenni, Linux alatt pedig mindig megtallhat itt a kernel (teht maga a Linux) forrsa is. A fknyvtrbl nylik mg a /var alknyvtr, amely mindenfle, a rendszer mkdsvel kapcsolatos aktulis file-t trol: pldul a /var/adm knyvtrban vannak a klnfle napl (log) file-ok, amelyek a rendszer esemnyeit rgztik. A /var/spool alatt pedig tbbek kztt a nyomtatkezel s a levelez alrendszer ideiglenes file-jai tallhatk meg. A /var alatt lv fileok a rendszergazdnak (vagy mg neki sem, rendszerprogramoknak) szlnak, tlag felhasznl nem sok rdekeset tallhat itt. Vgezetl, a gykrknyvtrban tallhat mg a /vmlinuz, vagy /zImage, vagy /vmunix nev file, ami a kernelt tartalmazza: innt tltdik be boot-olskor. 4.2. A /dev alknyvtr A /dev (devices - eszkzk) alknyvtrban tallhatk a rendszer- erforrsokat reprezentl specilis file-ok. Ezek teremtik meg a kapcsolatot a kernel device driver-nek (eszkzmeghajt) nevezett, az egyes fizikai eszkzk kezelsrt felels komponensei s a rendszer egyb rszei kztt. Ktfle eszkzmeghajtt klnbztetnk meg: a karakteres (c) s a blokkos (b) tpust, annak megfelelen, hogy az ltala reprezentlt eszkz milyen szervezs. Egy winchester, vagy floppy eszkzmeghajtja blokkos, mg pldul egy soros vonalat, vagy terminlt reprezentl file-hoz tartoz eszkzmeghajt karakteres tpus. Lssuk rviden a fbb file-csoportokat a /dev alatt, illetve egy-kt pldn keresztl azt, hogyan hasznlhatjuk ket:

/dev/audio Ha valamilyen hangkrtya vagy ms zajkelt szerkezet van a kernelbe konfigurlva, akkor a .au formtum file-okat ide kirva meghallgathatjuk ket. Plda: cat x.au >/dev/audio Ha a hangkrtya digitalizlsra is kpes, ez a file olvashat is. /dev/cdrom Ez ltalban egy link a bonyolultabb nev, valdi CD-ROM specilis file-ra. Hasonlan hasznlhat mint egy winchester specilis file. /dev/cua* A soros vonala(ka)t jelent specilis file-ok. rsuk vagy olvassuk kldst/vtelt jelent a megfelel vonalon. /dev/fd* A floppy diszkeket reprezentljk. A fd0 kezdet file-ok az A floppyra vonatkoznak, a fd1 kezdetek a B-re. Mount-olsnl kell ezeket a neveket hasznlnunk, vagy pedig akkor, ha a floppy-n lv image-t (sszes szektort) egy file-ba akarjuk olvasni. Erre hasznlhatjuk pldul a cat floppyimage parancsot. Blokkos eszkzk rsa-/olvassakor rdemesebb a cat helyett a dd parancsot hasznlni: mkdse hasonl, csak bvebben paramterezhet, s blokk-mveletekre optimalizlhat. Pldul: az elz file visszarsa az 1.44MB-s B lemezre: dd bs=512 /dev/fd1H1440. (bs=block size)
35

/dev/hd* A rendszerben lv AT buszos winchesterek: a /dev/hda az els winchestert jelenti, /dev/hdb a msodikat. Ha a gpben kt IDE vezrl vagy egy EIDE vezrl van, akkor a tbbi diszkhez a /dev/hd1[ab] nven frhetnk hozz. Ha ezeket a file-neveket szmokkal folytatjuk, az egyes diszkeken lv partcikhoz jutunk, pldul /dev/hda1,/dev/hda2 /dev/midi, mixer Hangkrtyhoz tartoz file-ok, a /dev/midi rtelemszeren midi file-ok kezelsre. /dev/mouse, modem ltalban ezek linkek valamely soros portra. /dev/pty* Pszeudo-terminl vonalakat reprezentl specilis file-ok. /dev/sd* SCSI diszkek. /dev/tty* A (virtulis) konzol terminlvonalai. /dev/ttyS* Soros vonali terminlok. /dev/null Ez egy igen rdekes file: minden belert adatot elnyel, s olvasskor mindig filevge-jelet ad. Akkor hasznos, ha egy parancs kimenett el akarjuk nyomni. Pldul, ha nem akarjuk a hibazeneteket ltni: parancs 2>/dev/null. /dev/zero Az elzhz hasonl file, azzal a klnbsggel, hogy olvasskor vgtelen sok 0 rtk byte-ot ad vissza. A dd 10kfile bs=1k count=10 utastssal pldul ltrehozhatunk egy 10Kbyte hossz, 10kfile nev csupa 0-bl ll file-t.

4.3. A filesystem-ekrl Mint mr korbban sz volt rla, a Linux tbbfle file-rendszer-formtumot is tmogat. Tbbfle Unix-os filesystem-et:

minix amelyet egy rgebbi Unix implementcitl rklt, ext (extended) filesystem formtumot, amely az elz tovbbfejlesztse ext2 second extended, amely szintn az elz tovbbfejlesztse, jelenleg ez a legnagyobb teljestmny Linuxos filesystem formtum, szinte minden Linux rendszeren ezt hasznljk xiafs amely egy, Frank Xia ltal kifejlesztett filesystem: mra az ext2 mr teljesen kiszortotta /proc amely file-rendszerknt van implementlva, az egysgesebb kezels rdekben

36

Ezek a filesystem formtumok fleg teljestmnyben (sebessg, maximlis mret, ltrehozhat maximlis file-mret, maximlis file-nv hossz stb.) trnek el egymstl: jelenleg a legjobb az ext2, amelyet Remy Card fejlesztett ki (s fejleszt tovbb folyamatosan). Tovbbi, Linux ltal tmogatott filesystem formtumok:

msdos MS-DOS-os, FAT formtum partcik, floppy-k kezelsre umsdos specilis filesystem, segtsgvel DOS-os, FAT filesystem-en hozhatunk ltre igazi Unixos file-rendszert. (Vagyis biztostja a file-okhoz tartoz Unix-os plusz informci kezelst.) NFS Network File System: TCP/IP hlzati krnyezetben elosztott hlzati file-rendszert hozhatunk ltre segtsgvel. ISO9660 a CD-ROM-ok file formtuma HPFS (egyelre csak olvashat) OS/2 HPFS file-rendszer SYSV/Coherent egy jabb Unix-os file-rendszer.

Az itt felsorolt formtumok a standard Linux kernel rszei: kiegsztsek (n. patch-ek) formjban ltezik mg sok ms, ritkbban hasznlt filesystem formtum tmogatsa is (tovbbi Unix-os file-rendszerek, pldul BSD ufs, illetve lteznek Linuxra is rptmrt szoftverek). Nem Unix-os file-rendszereket csak ltszlag tudunk Unix-osknt kezelni: msdos filesystemen nem tudunk pldul linket ltrehozni, file-tulajdonost vltani stb. File-okat rni, olvasni vgrehajtani azonban ugyangy lehet. Hossz file-neveket szintn nem tudunk annak kezelsre alkalmatlan filesystem-eken ltrehozni. Filesystem-et ltrehozni (formzni) a mkfs utasts csalddal lehet: ext2 file-rendszert a b winchester msodik partcijra pldul a mke2fs /dev/hdb2 paranccsal tudunk. A mkfs parancsok nem kpesek alacsony szint (fizikai) formzst vgezni: winchesterek esetn ezt a BIOS Setup-bl kell megtennnk, floppy-kat pedig az fdformat paranccsal formzhatunk alacsony szinten. Filesystem-ek beillesztse: ha az elbb ltrehozott filesystem-et szeretnnk beilleszteni a /mnt knyvtr al: mount -t /dev/hdb2 /mnt. Az illesztst megszntetni az umount /mnt paranccsal lehet, ez azonban csak akkor lehetsges, ha az sszes file le van zrva az adott filesystem-en, s nincs a rendszerben olyan folyamat, amelynek aktulis knyvtra valahova a filesystem terletre mutat. Ha egy filesystem valamilyen okbl kifolylag (ltalban ramsznet, vletlen kikapcsols) logikailag meghibsodik, az fsck utasts-csald valamely tagjval prblhatjuk megjavtani (ext2 filesystem esetn hasznljuk az e2fsck- t). Ezt a parancsot mindig hasznlaton kvli (nem beillesztett, vagy vgs esetben read-only - csak olvashat - mdon beillesztett) filesystem-en futtassuk: az fsck direkt diszk-blokkokkal dolgozik s azokat javtja meg, a buffer cache-ben azonban a hibs blokkok marad(hat)nak benn, amelyeket az update visszarhat a diszkre.
37

4.4. File-elnevezsi konvencik Br nem ktelez Unix alatt file-nv kiterjesztst (extension) hasznlni, mgis - a knnyebb eligazods vgett - szoks. Futtathat file-oknak ltalban nem adnak kiterjesztst. A gyakoribb kiterjesztsek: .c,.h .cpp .s,.S .o .a .conf,.cf .so.* .[1-9] .sh,.csh .tar .gz .tgz .Z .tex .dvi .ps .au,.wav C forrsfile-ok C++ forrs Assembly forrs trgykd (object) file-ok statikus programknyvtrak konfigurcis file-ok dinamikus programknyvtrak (szm kiterjeszts): az egyes manual page file-ok (nem mindig) a script file mely shell al kszlt a tar archivlval kszlt file a gzip (GNU zip) tmrtvel tmrtett file .tar.gz rvidtse (a tar nem tmrt) a compress (rgebbi) tmrtvel pakolt file TeX vagy LaTeX forrsfile DVI (Device Independent) szveges-grafikus file formtum PostScript (oldaller, nyomtatkezel nyelv) file Hangmintkat tartalmaz file-ok

Ha egy file nevrl nem tudjuk kitallni, mi is lehet benne, megprblkozhatunk a file file_nev paranccsal: a file utasts beleolvas s megprblja kitallni, milyen file is az. Az ltalban ismert file-formtumokra meglepen jl mkdik. 4.5. az mtools: DOS-os floppyk kezelse Mivel leggyakrabban DOS al formzott mgneslemezekkel tallkozhatunk, ltrehoztak Unix al egy programgyjtemnyt, amely ezen floppyk kezelst knnyti meg: a megszokott DOS szintakszist hasznlhatjuk floppy- mveleteknl. Pldul egy file bemsolsa az A: floppyrl az aktulis knyvtrba:
claudius:~$ mcopy "a:\file.xxx" .

Az sszes m parancs felsorolsrt nzzk meg a mtools man page-t! Figyelmeztets: hasznlhatunk DOS-os metakaraktereket is a file-nevekben, ezeket azonban mindig rdemes a shelltl idzjellel megvdeni, az eltr rtelmezs miatt. (Az mtools helyesen rtelmezi a DOS-os metakaraktereket, csak gondoskodnunk kell arrl, hogy ezek a metakarakterek el is jussanak hozz.) Vge. Egyelre...

38

Vous aimerez peut-être aussi