Operációs rendszerek Gyakorlat
Általános tudnivalók
Rólam ●
Vakulya Gergely
●
A gyakorlati oó raó t eó n fogom tartani
●
Tegezoő djuü nk!
●
[email protected]
●
I eó puü let IX. emelet, 919-es iroda
Operációs rendszerek gyakorlat
3
Aláírás feltételek ●
1db ZH (csak elmeó let) ● ● ●
●
Haó zi feladatok ● ● ● ●
●
Go / No go Az utolsó, vagy az utolsó előtti órán Pótlási lehetőség a vizsgaidőszakban Csak gyakorlat Minden gyakorlati óra után egy házi feladat Legalább 60%-os eredmény http://glomer.dcs.uni-pannon.hu
Az eloő zoő eó vi alaó íóraó sok nem vihetoő k aó t!
Operációs rendszerek gyakorlat
4
Vizsga ●
Beugroó ● ● ● ●
●
A gyakorlati anyagból Két feladat Helyben történő ellenőrzés Go / No go
IÍraó sbeli vizsga ● ●
Csak elmélet Hasonló a ZH-hoz
Operációs rendszerek gyakorlat
5
Megajánlott jegy ●
Legalaó bb 80-90%-os haó zi feladat
●
Legalaó bb 80-90%-os ZH
●
A megajaó nlott feltételes, vagyis mindenkeó ppen be kell ugrani!
Operációs rendszerek gyakorlat
6
A tananyagról
Miről fogunk tanulni? ●
A Linux/Unix rendszerek egyik leggyakoribb parancseó rtelmezoő jeó nek (a Bash-nek) hasznaó lataó roó l ● ● ●
●
Fontosabb parancsok „Egysoros programok” Shell scriptek (héjprogramok)
A Perl programozaó si nyelvroő l ● ●
Alapvető szintaxis Fontos függvények
Operációs rendszerek gyakorlat
8
Miért kell ez nekünk? ●
●
●
●
(Azon kíóvuü l, hogy ebboő l van a haó zi eó s a beugroó ...) Sokkal toü bb Linux/Unix rendszer uü zemel, mint sokan hinneó k. Bizonyos dolgok csak terminaó lboó l oldhatoó k meg. Ezekbe eloő bb-utoó bb belefuthatunk. A terminaó l mindennapi feladatokra is igen hateó kony tud lenni. Flexibilis koü rnyezet, sok feladatra igen toü moü r megoldaó st tud adni. Egyszer hasznaó latos programok íóraó saó ra, rendszeradminisztraó cioó ra...
Operációs rendszerek gyakorlat
9
Bash
Hol tudunk gyakorolni? ●
A legtoü bb rendszer megfelel, ahol a Bash parancssor eleó rhetoő ●
● ●
●
A Glomer – ahol a házi feladatokat és a beugrót kell majd megoldani Saját Linux rendszer – más tárgyakhoz is ajánlot Virtuális gép – ha „elrontjuk”, nem okozunk kárt a gazda rendszerben Live rendszer – ezzel akár egy kölcsön gépen is nyomtalanul gyakorolhatunk
Operációs rendszerek gyakorlat
11
Interaktív bash
Belépés egy Unix* rendszerbe ●
AÍ ltalaó ban ● ● ●
●
A felhasznaó loó k egymaó stoó l el vannak vaó lasztva ●
●
Loginnév + jelszó párossal történik Egy időben több felhasználó is beléphet Egyszerre több „példányban” is beléphetünk Pl. külön „home” könyvtár
Grafikus, vagy szoü veges feluü letet kapunk. A grafikus feluü leten indíótott terminaó l egyeneó rteó kuő a valoó di szoü veges terminaó llal
Operációs rendszerek gyakorlat
13
Parancsok bevitele ●
A parancsokat a prompt utaó n tudjuk beíórni ● ●
●
●
●
A prompt végét $ vagy # jel jelzi A beírt parancsok a szokásos módon bal és jobb nyíl, backspace, delete, stb. billentyűkkel szerkeszthetők. A fel és le nyilakkal az előzőleg kiadot parancsokat hozhatjuk elő. A Ctrl-R kombinációval keresni tudunk régebbi parancsok közöt, ha emlékszünk a parancs egy részére A history parancs sorszámozva kiírja az eddigi parancsokat ● ●
!12 Végrehajtja a 12-es számú parancsot history -c Törli a historyt.
Operációs rendszerek gyakorlat
14
Egyéb hasznos billentyűparancsok ●
●
●
●
A Ctrl-C leloü vi a jelenleg futoó programot. (Nem mindig muő koü dik.) A Ctrl-L toü rli a keó pernyoő t. Az eó ppen szerkeszteó s alatt aó lloó parancs megmarad. A tabulaó tor megproó baó lja kiegeó szíóteni a parancsot Ha nem tudja teljesen kiegeó szíóteni, akkor egy uó jabb tabulaó tort nyomva megmutatja a lehetoő seó geket.
Operációs rendszerek gyakorlat
15
A Unix* fájlrendszer ●
●
Fa struktuó ra egy koü zoü s gyoü keó r koü nyvaó rral (nincsenek meghajtoó betuő jelek) Minden entitaó s faó jl. Toü bb faó jl tíópus van: ● ● ●
Hagyományos (regular) fájl Könyvtár (speciális fájl) Egyéb speciális fájlok ● ● ● ●
Hard link Soft link Karakteres és blokk eszköz Fifo
Operációs rendszerek gyakorlat
16
Elérési utak ●
A gyoü keó r koü nyvtaó r jele: /
●
Az egymaó sboó l nyíóloó koü nyvtaó rakat is / jel vaó lasztja el. ●
IÍgy megadhatoó k abszoluó t uó tvonalak: ● ● ●
●
/bin /usr/bin/perl /home/antiemes/proba/olvassel.txt
Illetve relatíóv uó tvonalak: ●
proba/olvassel.txt
Operációs rendszerek gyakorlat
17
Speciális elérési utak ●
. (pont): Aktuaó lis koü nyvtaó r
●
.. (keó t pont): Egy szinttel feljebb levoő koü nyvtaó r
●
●
~ (hullaó mvonal): Az aktuaó lis felhasznaó loó home koü nyvtaó ra Peó ldaó ul: ● ● ●
./elso.sh Az aktuális könyvtárban levő elso.sh fájl ../doksi.txt Az egy szintel feljebb levő doksi.txt fájl ../../kep/szep.jpg A két szintel feljebb levő kep könyvtárban levő szep.jpg
Operációs rendszerek gyakorlat
18
Mozgás a könyvtárak között ●
A cd parancssal toü rteó nik: ●
●
cd elérési_út
Peó ldaó ul: ● ● ●
●
●
cd / visszavisz a főkönyvtárba cd .. egy szintel feljebb visz cd /ez/az/amaz belép a gyökérkönyvtárból indulva az ez/az/amaz-ba cd ez/az/amaz belép az aktuális könyvtárból indulva az ez/az/amaz-ba cd ~/ez/az/amaz belép a saját home könyvtárunkból indulva az ez/az/amaz-ba
Operációs rendszerek gyakorlat
19
Az aktuális könyvtár ●
●
A pwd (print working directory) paranccsal keó rdezhetoő le. Az aktuaó lis koü nyvtaó r aó ltalaó ban a promptban is megjelenik. ● ●
[antiemes] [Flow] [/mnt/proj/OS_new] [$] It a /mnt/proj/OS_new az aktuális könyvtár
Operációs rendszerek gyakorlat
20
Könyvtárak tartalmának listázása ●
●
Az ls parancssal toü rteó nik. Az ls parancs rengeteg parameó tert tud fogadni, amivel meg tudjuk mondani, hogy: ● ●
●
●
Mit listázzon: elérési utakkal Hogyan listázzon: kapcsolókkal
Ha nem adunk meg parameó tert, akkor egy egyszeruő listaó t kapunk az aktuaó lis koü nyvtaó rroó l Egy, vagy toü bb eleó reó si uó ttal (lehetnek faó jl, vagy koü nyvtaó rnevek is) azokat listaó zza
Operációs rendszerek gyakorlat
21
Az ls parancs kapcsolói – I. ●
-l (long)
hosszuó lista, minden adattal
●
-a (all)
rejtett bejegyzeó seket is listaó zza
●
-h (human) „emberi” meó rteó kegyseó gek a faó jl meó rethez
●
-1
●
-R (recursive)rekurzíóvan listaó z
●
●
csak egy oszlopot hasznaó l
-d (direcory) a megadott koü nyvtaó rnak nem a tartalmaó t, hanem magaó t a koü nyvtaó r bejegyzeó st íórja ki Ezeken kíóvuü l meó g rengeteg egyeó b lehetseó ges opcioó
Operációs rendszerek gyakorlat
22
Az ls parancs kapcsolói – II. ●
A kapcsoloó k keverhetoő k is: ● ● ●
●
-a -l Hosszú lista, rejtetek is -al Így is írhatjuk -alh Ugyanaz, csak emberi mértékegységekkel
A kapcsoloó mellett megadhatunk egy, vagy toü bb eleó reó si utat is: ● ●
ls -l / A gyökérkönyvtárról hosszú lista ls -R /home/antiemes/stuff A megadot könyvtárról rekurzív lista
Operációs rendszerek gyakorlat
23
Az ls hosszú listája ●
Egy peó lda: total 16 -rw-r--r-- 1 antiemes users 2650 Feb BlinkAppC.nc
6 16:45
-rw-r--r-- 1 antiemes users 2924 Feb
6 16:45 BlinkC.nc
drwxr-xr-x 3 antiemes users
60 Feb
6 16:45 build
-rw-r--r-- 1 antiemes users
42 Feb
6 16:45 Makefile
-rw-r--r-- 1 antiemes users
678 Feb
6 16:45 README.txt
●
Elsoő sor: az oü sszes elfoglalt hely blokkban
●
Ezt koü vetoő en 7 oszlop
Operációs rendszerek gyakorlat
24
Az ls -l hét oszlopa ●
Tíópus eó s jogosultsaó gok (keó soő bb lesz roó la szoó )
●
Link counter (keó soő bb lesz roó la szoó )
●
Tulajdonos
●
Tulajdonos csoport
●
Meó ret byte-ban (aó taó llíóthatoó )
●
Daó tum (az utolsoó moó dosíótaó s az alapeó rtelmezett)
●
Neó v
Operációs rendszerek gyakorlat
25
Bejegyzés típusa ●
●
Egy karakter a tíópus, majd 3 haó rmas csoportban a jogok Tíópusok: ● ● ● ● ● ● ●
d l c b c p
sima fájl könyvtár soft link (erről majd később) karakteres eszköz * blokk eszköz * socket * fifo * *: csak a teljesség kedvéért
Operációs rendszerek gyakorlat
26
Jogosultságok ●
3db haó rmas csoport: tulajdonos, csoport eó s maó sok jogai ● ● ● ● ●
●
r: olvasási jog w: írási jog x: végrehajtási jog -: az adot jog nem engedélyezet Egyéb betűk is lehetségesek, ezekkel nem foglalkozunk
A veó grehajtaó si jog koü nyvtaó raknaó l speciaó lis jelenteó suő : beleó peó si jogok jelent.
Operációs rendszerek gyakorlat
27
Belső dokumentáció ●
man (manual) parancs ● ●
●
man [fejezet] parancs_vagy_tema A man kimenetét a less (vagy a more) program teszi kereshetővé, oda-vissza görgethetővé
A programok utaó n íórt -h, -help, --help kapcsoloó k is sok esetben szolgaó lnak informaó cioó val.
●
A man oldalakat az Interneten is megtalaó ljuk
●
Peó ldaó ul ● ● ●
man ls man man man 7 regex
Operációs rendszerek gyakorlat
28
Könyvtár létrehozása (mkdir) ●
mkdir elérési_út ●
●
●
Ha az elérési út csak egy könyvtár, akkor az aktuális könyvtárban hozza létre. Ha összetet elérési utat adunk meg, akkor csak akkor hozza létre, ha az útvonal „eleje” már létezik. -p kapcsolóval az összes hiányzó könyvtárt létrehozza. Több könyvtár is megadható egymás után
Operációs rendszerek gyakorlat
29
Fájl létrehozása tartalom nélkül (touch) ●
touch név1 [név2 [név3 … ] ]
●
A nem leó tezoő faó jlok uü res tartalommal leó trejoü nnek
●
●
Ha nem adunk meg eleó reó si utat, akkor az aktuaó lis koü nyvtaó rba keruü lnek, egyeó bkeó nt oda, ahova megadtuk A maó r leó tezoő faó jlokat nem íórja feluü l, de az utolsoó moó dosíótaó s daó tuma frissuü l
Operációs rendszerek gyakorlat
30
Másolás (cp) – I. ●
cp [kapcsoloó k] forraó s ceó l ● ● ●
Sokféle működési eset van, de a logika hasonló A forrást másolja a cél helyre Forrás: létező fájl, cél: nem létező fájl ● ●
●
Forrás: létező fájl, cél: létező fájl ●
●
Az eddig nem létező fájl létrejön és megkapja a régi tartalmát. Megadhatunk elérési utakat is. Ha nem adunk meg, akkor az alapértelmezet az aktuális könyvtár. Mint az előző eset, de a cél fájl felülíródik.
Forrás: létező fájl(ok), cél: létező könyvtár ● ●
A forrás fájlokat átmásolja a cél könyvtárba. Ha már volt ot valami, azt felülírja.
Operációs rendszerek gyakorlat
31
Másolás (cp) – II. ●
Maó solhatunk koü nyvtaó rakat is, ilyenkor a -r kapcsoloó t kell megadni. ● ●
●
r: recursive A könyvtárak tartalmát is másolja
A forraó s megjeloü leó seó neó l hasznaó lhatunk Joker karaktereket is (shell mintaó kat) ● ● ● ●
● ●
cp *.txt konyvtar A .txt-re végződőeket másolja cp *ab* konyvtar Azokat másolja, aminek a nevében van ab cp vala* konyvtar Azokat másolja, ami vala-val kezdődik cp *a*a* konyvtar Azokat másolja, amiknek a nevében van 2db „a” betű De itt nem az történik, amit gondolunk! A cp it is egy fájl (vagy könyvtár) listát kap, ugyanúgy, mint amikor mi kézzel megadtuk, hogy mit másoljon
Operációs rendszerek gyakorlat
32
Szöveg kiírása (echo) – I. ●
●
●
echo szoveg
A szoü veg simaó n kiíóroó dik
echo ez tobb szavas A toü bb szavas szoü veg is kiíóroó dik echo itt sok space van Csak egy space-t íór ki
●
Magyaraó zat ● ●
●
Ahány szót adunk meg, az echo annyi paramétert kap. A paramétereket szóközzel elválasztva írja ki.
Megoldaó s: ideó zoő jel ●
Echo ”it sok space van” Egyben fogja tartani a szavakat, az echo egy paramétert kap, így megmarad a sok space.
Operációs rendszerek gyakorlat
33
Szöveg kiírása (echo) – II. ●
●
Az echo automatikusan sort emel a szoü veg veó geó n. A soremeleó s -n kapcsoloó val melloő zhetoő . Escape szekvenciaó k eó rtelmezeó se -e kapcsoloó val lehetseó ges. ● ●
echo -e ”Ezt\tszepen\ttabulalva\tirja\tki.” echo -e ”Minden\nszot\nuj\nsorba\nteszunk.”
Operációs rendszerek gyakorlat
34
Shell minták... ●
echo * ●
●
●
●
Nem egy * karaktert fog kiírni, hanem az ot szereplő fájlok (és könyvtárak) listáját A shell a * helyére behelyetesíti azokat fájlokat és könyvtárakat, amik illenek a mintára. A cp és társai esetében is ugyanúgy működik. Nem shell mintát kapnak, hanem fájl listát
A feloldaó s ellen escape-eleó ssel lehet veó dekezni ● ● ●
echo ”*” echo '*' echo \*
Operációs rendszerek gyakorlat
35
Törlés (rm) ●
rm [kapcsoloó k] faó jl_eó s_koü nyvtaó r_lista ● ●
● ●
●
A remove szóból jön. A lista ugyanúgy megadható abszolút, vagy relatív elérési útal is. Egyéb esetben a jelenlegi könyvtárból töröl. Shell minta is megadható. Könyvtár a -r (recursive) kapcsolóval törölhető. Ekkor a könyvtár teljes tartalma is törlődik. A csak olvasható fájlok esetén rákérdez, egyébként kérdés nélkül töröl. ● ●
-f megadása esetén soha nincs kérdés -i esetén mindig van kérdés
Operációs rendszerek gyakorlat
36
Könyvtár törlése (rmdir) ●
rmdir koü nyvtaó r [koü nyvtaó r2 [koü nyvtaó r3 … ]] ● ●
Csak üres könyvtárt töröl It is használhatunk relatív, vagy abszolút elérési utakat, illetve shell mintákat ●
Pl. az rmdir * minden üres könyvtárt töröl. A többi tartalmat meghagyja.
Operációs rendszerek gyakorlat
37
Átnevezés, áthelyetés (mv) ●
mv forrásfájl célfájl ●
● ●
●
Ha a forrás és a cél ugyanabban a könyvtárban van, akkor átnevezi a fájlt. Ha a két könyvtár eltér, akkor áthelyezés is történik. Ha a célfájl létezik, akkor felülírja azt.
mv forrásfájlok és könyvtárak célkönyvtár ●
●
Ebben az esetben a megadot fájlok és könyvtárak a cél könyvtárba kerülnek. Shell mintákat ebben az esetben is használhatunk.
Operációs rendszerek gyakorlat
38
Tartalom kiírása (cat) ●
cat fájl1 [fájl2 [fájl3 … ]]
●
A concatenate szoó boó l joü n. (AÍ llíótoó lag...)
●
A faó jlok tartalmaó t egymaó s utaó n kiíórja.
●
●
Meó g ennek az egyszeruő programnak is szaó mos kapcsoloó ja van (pl. meg tudja szaó mozni a sorokat...) Parameó terek neó lkuü l a standard bemenetroő l veszi az inputot. ●
A bevitel végét Ctrl-D-vel jelezzük.
Operációs rendszerek gyakorlat
39
Tartalom lapozott kiírása (less, more) ●
less fájl ● ●
●
A man-hoz hasonlóan a fájl fel-le görgethető, kereshető, stb. A man is ezt a programot használja.
more fájl ● ●
A less-hez hasonló. Kicsit butább.
Operációs rendszerek gyakorlat
40
Kimenet átirányítása ●
A legtoü bb program a keó pernyoő re kiíór valamit. Ezt aó t tudjuk iraó nyíótani egy faó jlba is, a > jellel. ● ●
●
●
A kimenetet hozzaó is tudjuk fuő zni egy faó jlhoz a >> jellel ●
●
ls -l > fajl ls -R > fajl Mindkét esetben a képernyő helyet a fajl fájlba kerül a kimenet Ha volt már ot fájl, akkor felülíródik! cat a*txt >> asok Az ”a”-val kezdődő, txt-re végződő fájlok tartalmát az ”asok” fájlhoz fűzi hozzá
cat > program.sh ● ●
Be tudjuk gépelni a tartalmát (legvégső megoldás). Be tudunk illeszteni egy szöveget a vágólapról (nagyon hasznos!).
Operációs rendszerek gyakorlat
41
Bemenet átirányítása ●
● ●
Sok program a billentyuő zetroő l vaó r inputot. A standard bemenetet is aó tiraó nyíóthatjuk uó gy, hogy a program a billentyuő zet helyett egy faó jlboó l vegye az adatokat. program < fájl Hasznos alkalmazaó s amikor egy sajaó t programot teszteluü nk. ●
./pelda < bemenet
Operációs rendszerek gyakorlat
42
Fájlok linkelése – I. ●
Soft link ●
●
Egy olyan speciális fájl, ami egy másik fájl elérési útját tartalmazza. Ha hivatkozunk erre a fájlra (vagy könyvtárra), akkor (általában) egyenértékű a másikra való hivatkozással ●
●
Létrehozása: ln -s létező_fájl [cél könyvtár vagy cél fájl] ● ●
●
Kivétel pl. az átnevezés, törlés Ha a cél egy fájl, akkor azon a néven jön létre a link Ha a cél egy könyvtár, akkor a régi néven jön létre a kijelölt könyvtárban
Mivel a link csak egy hivatkozás, az eredeti fájl törlése esetén a tartalom el fog veszni.
Operációs rendszerek gyakorlat
43
Fájlok linkelése – II. ●
Hard link ● ● ● ●
● ●
Ugyanahhoz a tartalomhoz két fájl bejegyzés ln létező_fájl új_fájl Ha az egyiket töröljük, a tartalom megmarad. A link counter mutatja, hogy hány hivatkozás van az adot tartalomra. Csak egy fájlrendszeren belül hozhatunk létre hard linket. Könyvtárra nem lehet hard linket létrehozni.
Operációs rendszerek gyakorlat
44
Jogosultságok módosítása – I. ●
chmod módosítás fájl1 [fájl2 [fájl3 … ]]
●
A moó dosíótaó s lehet kinek[+-]mit alakuó ●
Kinek: ● ● ● ●
●
Mit: ● ● ●
●
u: user (tulajdonos) g: group (csoport) o: others (mások) a: all (mindenki) r: read (olvasási jog) w: write (írási jog) x: execute (végrehajtási/belépési jog)
+: megad, -: elvesz
Operációs rendszerek gyakorlat
45
Jogosultságok módosítása – II. ●
Peó ldaó ul: ● ● ● ●
●
u+x ug+w a+x go-rwx
A tulajdonosnak futatási jogot adunk A tulajdonosnak és a csoportnak írási jogot adunk Mindenkinek adunk futatási jogot Mindenkitől elveszünk minden jogot, kivéve magunktól.
A jogosultsaó gok nem csak vaó ltoztathatoó k, hanem egy leó peó sben be is aó llíóthatoó k ● ● ●
●
A 3db hármas csoportot 3db oktális számmal jelöljük x: 1-esek, w: 2-esek, r: 4-esek. chmod 640 doksi.txt A tulajdonos írhatja és olvashatja, a csoport olvashatja, másoknak nincs semmilyen joga. chmod 777 pelda.sh Mindenki minden műveletet elvégezhet a fájllal
Operációs rendszerek gyakorlat
46
Tulajdonos megváltoztatása ●
chown uj_tulaj fájl1 [fájl2 [fájl3 … ]] ●
●
chown uj_tulaj:uj_csoport fájl1 [fájl2 [fájl3 … ]] ●
●
●
A tulajdonos az uj_tulaj, a csoport az uj_csoport lesz.
chgrp uj_csoport fájl1 [fájl2 [fájl3 … ]] ●
●
A tulajdonos a továbbiakban az uj_tulaj lesz.
A csoport az uj_csoport lesz.
A -R kapcsoloó val rekurzíóvan muő koü dik, tehaó t az alkoü nyvtaó rakba is belemegy. Ehhez a muő velethez rendszergazdai jogosultsaó g kell.
Operációs rendszerek gyakorlat
47
Fájl eleje és vége ●
head [-n szaó m] faó jl1 [faó jl2 [faó jl3 …]] ●
●
●
tail [-n szaó m] faó jl1 [faó jl2 [faó jl3 …]] ● ●
●
Hasonló, csak az utolsó „szám” sort fogja kiírni. Shell minta mindkét programnál használható.
Pl.: ● ●
●
A fájl első „szám” sorát írja ki. Ha nincs megadva ez a paraméter, akkor 10 sor az alapértelmezet. Kiírja a fájl nevét is (-q kapcsolóval eltüntethető).
head -n 8 leiras.txt A leiras.txt első 8 sorának kiírása. tail readme A readme utolsó 10 sorának kiírása.
Ha nem adunk meg faó jlt, akkor a standard inputroó l olvas.
Operációs rendszerek gyakorlat
48
A pipe – I. ●
A standard outputra íóroó eó s a standard inputroó l olvasoó programok oü sszekoü thetoő ek. ●
●
ls -l | tail -n 5 Az ls -l által adot tartalomnak az utolsó 5 sorát adja vissza. cat olvassel.txt | head -n 5 Az olvassel.txt első 5 sorát adja vissza. ● ●
Ugyanazt csinálja, mint a head -n 5 readme.txt, de csak majdnem. A pipe használata esetén a head nem tudja, hogy honnan jönnek az adatok, így a fájlnevet sem. Így nem tudja kiírni.
●
Operációs rendszerek gyakorlat
49
A pipe – II. ●
Toü bb programot is oü ssze lehet fuő zni: ●
cat pelda.txt | head -n 20 | tail -n 1 ● ● ●
●
Először vesszük a pelda.txt első 20 sorát. Majd ennek a listának az utolsó sorát. Az eredmény a pelda.txt 20. sora.
ls -l | head -n 6 | tail -n 1 ● ●
Hasonló, mint az előző, csak az ls kimeletével operál. Az ls -l kimenetének 6. sorát adja vissza.
Operációs rendszerek gyakorlat
50
Sorok, szavak, karakterek száma (wc) ●
●
wc: word count (de a sorokat eó s a karaktereket is szaó molja) Kapcsoloó kkal mondjuk meg, hogy mit szaó moljon ● ● ● ●
●
-l sorok száma -w szavak száma -c karakterek száma A kapcsolók kombinálhatók is (pl. -wl a szavakat és a sorokat számolja meg). Az alapértelmezet működés mindhárom szám kiírása.
Operációs rendszerek gyakorlat
51
wc – II. ●
Toü bbfeó le muő koü deó si moó d ●
Pipe ● ● ●
●
A paraméter 1 fájl ● ●
●
wc -c pelda.txt (a pelda.txt sorainak számlálása) A szám(ok) után a program a fájlnevet is kiírja.
A paraméter több fájl ●
●
●
ls -1 | wc -l (fájl/könyvtár bejegyések számlálása) cat pelda.txt | wc -w (a pelda.txt szavainak számlálása) A program csak a számot, vagy számokat írja ki, a fájl nevét (ha van) nem.
Egyenként minden fájl sorainak (szavainak, ...) számát kiírja, utána az adot fájl nevét is. A lista végén egy összesítet számot is kapunk.
Shell minták természetesen it is használhatóak.
Operációs rendszerek gyakorlat
52
Mezők vágása (cut) – I. ●
Karakterenkeó nt, vagy mezoő nkeó nt tudunk vele vaó gni
●
Karakterenkeó nt: ●
●
●
●
cut -c kezdő-vég A [kezdő, vég] intervallum által meghatározot karaktert adja vissza minden sorban cut -c sorszám1,sorszám2,sorszám3 A kijelölt 3 karaktert adja vissza cut -c sorszám1,kezdő1-vég1,sorszám2 A fenti kető kombinálható is (Egy kiválasztot karakter, egy intervallum, majd még egy kiválasztot karakter)
Pl.: ●
ls -l | cut -c 2-10
Operációs rendszerek gyakorlat
A jogokat adja vissza. 53
Mezők vágása (cut) – II. ●
Mezoő nkeó nt ●
●
cat /etc/passwd | cut -d: -f 1,5 A passwd fájl ketőspontokkal határolt mezőket tartalmaz. Ebből az 1. és 5. mezőt írja ki. cat lista_nagy.txt | cut -f 1,3 A lista_nagy fájl tabulátorokkal határolt mezőket tartalmaz, ebből az 1. és 3. mezőt írja ki a parancs. (Ha nem adunk meg mezőhatárolót, akkor a tabulátor az alapértelmezet.)
Operációs rendszerek gyakorlat
54
Rendezés (sort) ●
A sort paranccsal sorokat tudunk rendezni ● ●
●
Megadhatjuk, hogy melyik mezoő szerinte rendezzen ●
●
ls -l | sort -k 3
A tulajdonos szerint rendez.
Numerikus rendezeó s ● ●
●
cat nevek.txt | sortABC sorrendben rendezi a neveket. sort nevek.txt Pipe nélkül is használható.
ls -l | sort -k 5 ls -l | sort -k 5 -r
Méret szerint rendez. Visszafelé is rendezhetünk.
Egy oü sszetettebb peó lda ●
ls -l | sort -k 5 -n | tail -n 1 A leghosszabb fájl adatai.
Operációs rendszerek gyakorlat
55
Egyező sorok törlése (uniq) ●
●
Ha toü bbszoü r szerepel a bemenetben ugyanaz a sor egymaó s utaó n, akkor csak egyet hagy meg. Rendezeó s utaó n hasznos ● ●
cat nevek.txt | sort | uniq Ebben az esetben a sort -u is használható (ugyanazt csinálja)
Operációs rendszerek gyakorlat
56
Szűrés (grep) – I. ●
●
●
●
Azokat a sorokat kapjuk vissza, amik illeszkednek egy regulaó ris kifejezeó sre. (A regulaó ris kifejezeó sek egy keó soő bbi diaó n vannak reó szletezve.) A talaó latok kiíóraó sa neó lkuü l is megtudhatjuk, hogy a bemenetben szerepel-e az adott minta, vagy nem. A kereseó s kis-nagy betuő eó rzeó keny. Ez a -i kapcsoloó val kikapcsolhatoó . Ha a bemenet pipe: ●
●
parancs | grep kapcsolók minta
Ha a bemenet faó jl: ●
grep kapcsolók minta fájl
Operációs rendszerek gyakorlat
57
Szűrés (grep) – II. ●
Szintaxisok ●
Alap reguláris kifejezés szintaxis ●
●
Extended szintaxis ● ● ●
●
A ?, +, {, |, (, és ) karakterek normál karakterként működnek. Metakarakterként a \?, \+, stb. használható. Egy kicsit többet tud A ?, +, stb. szerepe fordítot. erep -E, vagy egrep parancs
Perl szintaxis ● ●
Még egy kicsivel többet tud (pl. \w, \d, \s) Az újabb grep implementációkban a -P kapcsolóval használható
Operációs rendszerek gyakorlat
58
Szűrés (grep) – III. ●
Tovaó bbi hasznos kapcsoloó k ●
●
● ● ●
●
-v Inverz keresés. Azok a sorok maradnak meg, amelyekre nem illeszkedik a minta. -e minta A grep a mintát veszi reguláris kifejezésnek. (Nem fogja pl. azt hinni, hogy az egy kapcsoló, ha pl. a minta - jellel kezdődik) -A szám A talált sor után még szám db sor kiíródik -B szám A talált sor előt még szám db sor kiíródik -q Nem íródik ki semmi, csak a grep visszatérési értéke lesz beállítva. (Az if paranccsal együt lesz majd hasznos.)
Megkapott faó jlnevek ●
A grep pipe-pal használva, vagy egy megadot fájl esetén a fájlnevet nem írja ki. Több fájlnévnél minden sor elején megjelenik a fájlnév is. -H kapcsolóval kikényszeríthető, -h kapcsolóval tiltható a fájlnevek kiírása.
Operációs rendszerek gyakorlat
59
Processek és jobok – I. ●
A /proc alatt egy virtuaó lis faó jlrendszert talaó lhatoó . ●
Számmal jelzet könyvtárak. Minden processhez (folyamathoz) tartozik egy, a szám a folyamat azonosító (PID). It az adot folyamatal kapcsolatos információkat találunk: ● ● ● ●
●
Nyitot fájlok Memória és CPU idő statisztika Tulajdonos Egyéb állapot információk
Egyéb könyvtárak és fájlok, ahol egyéb, rendszerszintű dolgokat lehet lekérdezni, vagy beállítani.
Operációs rendszerek gyakorlat
60
Processek és jobok – II. ●
A ps parancs a folyamatokroó l tud listaó t eó s informaó cioó kat adni ● ●
A /proc alapján dolgozik Kapcsolók: ●
●
●
●
aux (Ez 3 kapcsoló egymás után írva.) Minden folyamatot listáz, minden információval. w, ww Széles formátumot használ, kiírja az egész folyamatnevet és a paramétereket. f Fa struktúrát jelenít meg a szülő-gyerek leszármazási reláció alapján
A listában megjelenik a folyamat tulajdonosa, PID-je, CPU és memória használata, állapota, neve és még néhány egyéb információ.
Operációs rendszerek gyakorlat
61
Processek és jobok – III. ●
kill parancs ● ●
kill [-signal_szám | -signal_név] PID Egy üzenetet küld a folyamatnak, amit a signal_szám határoz meg. Mindegyik számhoz egy név is tartozik. Például: ●
●
● ●
●
15 (TERM) A programot megkérjük, hogy lépjen ki. (Nem kötelező kilépnie.) 9 (KILL) A programtól elveszünk minden további processzoridőt és kiléptetjük. 17, 19, 23 (STOP) A programot egy időre felfüggesztjük. 19, 18, 25 (CONT) A programot aktiváljuk.
Killall [-signal_szám | -signal_név] folyamatnév ●
PID helyet folyamatnevet is használhatunk, ekkor a parancs kikeresi a megfelelő folyamatokat és mindegyiknek elküldi a kijelölt signal-t.
Operációs rendszerek gyakorlat
62
Processek és jobok – IV. ●
A terminaó lban egyszerre toü bb programot is futtathatunk, kuü loü n jobkeó nt. Ezek koü zuü l mindig legfeljebb egy van eloő teó rben. ● ●
●
●
jobs Listázza az aktuális jobokat bg [szám] Az aktuális, vagy egy kijelölt számú jobot hátérbe helyezi. fg [szám] Az aktuális, vagy egy kijelölt számú jobot előtérbe helyezi. kill %szám A PID helyet a job azonosítót is megadhatjuk, % jel után.
Operációs rendszerek gyakorlat
63
Processek és jobok – V. ●
Egy programot a haó tteó rben is el tudunk indíótani, pl: ●
●
xterm &
Az aktíóv folyamatot meg tudjuk aó llíótani a Ctrl-Z paranccsal ●
●
Ezután az fg, vagy a bg paranccsal előtérbe, vagy hátérbe tudjuk helyezni. Van olyan program, ami ezt a fajta működést letiltja.
Operációs rendszerek gyakorlat
64
Keresés (find) – I. ●
Faó jlok eó s koü nyvtaó rak kereseó se ● ● ●
●
Név alapján (lehet shell minta, vagy reguláris kifejezés) Típus alapján (fájl, könyvtár) Méret és egyéb tulajdonságok alapján
A talaó latok ● ●
Szimpla listázása Valamilyen parancs végrehajtása rajtuk
Operációs rendszerek gyakorlat
65
Keresés (find) – II. ●
Szintaxis ●
●
Koü nyvtaó r ● ●
●
find könyvtár kapcsolók It fog keresni. A lista elején ez a könyvtár jelenik meg (kivéve a ~).
Kapcsoloó k ● ●
●
● ●
-name, -iname -regex, -iregex sensitive). -type f, -type d keres) -size -exec
Kereső minta, shell minta (a -iname nem case sensitive). Kereső minta, regex alakban (a -iregex nem case Fájl típusa (f: sima fájl, d: könyvtár, default: mindketőre A fájl mérete (legalább, legfeljebb) mekkora Minden találaton egy parancs végrehajtása (erről később)
Operációs rendszerek gyakorlat
66
Keresés (find) – III. ●
UÍ tvonalak eó s tíópusok ●
● ● ●
●
find Paraméterek nélkül az aktuális könyvtárban keres, sima fájlt és könyvtárt egyaránt, minden találatot kiír. find . A . paramétert megadva ugyanezt teszi. find proba A proba könyvtárban keres. find proba -type f A proba könyvtárban keres sima fájlokat find proba -type d A proba könyvtárba keres könyvtárakat.
Operációs rendszerek gyakorlat
67
Keresés (find) – IV. ●
Shell mintaó k ●
●
●
●
●
find -name ”*.txt” A .txt-re végződő bejegyzések keresése. A kereső mintát célszerű idézőjelbe tenni. find -name ”*.sh” -type f A .sh-ra végződő sima fájlok keresése find -name ”fe*t” -type f A fe-vel kezdődő, t-re végződő fájlok keresése find -name ”*a*m*” -type f Azok a fájlok, amik nevében van a és m betű (ebben a sorrendben). find -name ”*[xyz]*” -type f Azok a fájlok, amik nevében van x, y, vagy z
Operációs rendszerek gyakorlat
68
Keresés (find) – V. ●
●
A talaó latokat nem csak listaó zni tudjuk, hanem valamilyen parancsot is veó gre tudunk rajtuk hajtani. find [egyéb paraméterek] -exec parancs ”{}” \; ● ● ●
●
A parancs fog majd lefutni. A ”{}” helyére helyetesítődik be a talált fájl/könyvtár. A \; arra való, hogy a -exec paraméterlistáját lezárja.
A -exec utaó n a legtoü bb tanult parancs valami eó rtelmeset fog csinaó lni.
Operációs rendszerek gyakorlat
69
Keresés (find) – VI. ●
Peó ldaó k a find -exec-re ● ● ● ● ● ●
● ● ● ●
●
●
-exec ls -l ”{}” \; Minden megtalált elem listázása hosszan. -exec ls -ld ”{}” \; Ugyanaz, de a könyvtáraknál nem a tartalom látszik. -exec head -n 5 ”{}” \; Minden megtalált fájl első 5 sorának kiírása. -exec tail -n 8 ”{}” \; Minden megtalált fájl utolsó 8 sorának kiírása. -exec cat ”{}” \; Minden megtalált fájl tartalmának kiírása -exec wc -l ”{}” \; Minden megtalált fájl sorainak megszámolása. Ki fogja írni a fájlneveket is. (A -w, -c kapcsolókkal is használható.) -exec grep minta ”{}” \; A mintára illeszkedő sorokat írja ki minden fájlból -exec rm ”{}” \; A megtalált fájlok törlése -exec cp ”{}” konyvtar \; A megtalált fájlok másolása a konyvtar könyvtárba. -exec sort ”{}” \; A megtalált fájlok tartalmát egyenként rendezve kiírja. -exec mv ”{}” ”{}”.old \; A megtalált fájlokat átnevezi. (A végére teszi hogy .old.) A {} jel többször is használható. -exec chmod a+x ”{}” \; Minden fájlra futási jogot ad.
Operációs rendszerek gyakorlat
70
Keresés (find) – V. ●
A find utaó n hasznaó lhatunk pipe-ot is, peó ldaó ul ha a talaó latokat meg akarjuk szaó molni, vagy rendezni... ● ●
● ●
●
●
●
find … | wc -l Megszámolja, hogy hány találat van. find … -exec cat ”{}” \; | wc -l Megszámolja, hogy összesen hány sor van az illeszkedő fájlokban. find … -exec cat ”{}” \; | sort Az illeszkedő sorokat rendezi. find … -exec cat ”{}” \; | grep minta | sort Az illeszkedő sorokban megkeres egy mintát, majd rendezi a sorokat. find … -exec ls -l ”{}” \; | awk '{print $9 ”\t” $5}' | sort -k 2 -n A leghosszabb fájlt keresi meg (rekurzívan). find … -exec head -n 1 ”{}” \; | sort A megtalált fájlok első sorait rendezi. find … -exec wc -l ”{}” \; | sort -n A megtalált fájlokat aszerint rendezi, hogy hány sorból állnak.
Operációs rendszerek gyakorlat
71
Keresés (find) – VI. ●
●
●
A find a -exet utaó ni programot minden talaó latra lefuttatja, ami lassuó lehet. A xargs paranccsal ez gyorsíóthatoó . A xargs a standard bemenetroő l vett adatokboó l a megadott program szaó maó ra parameó terlistaó t keó szíót. Minden megtalaó lt faó jl toü rleó se ●
● ●
find … -exec rm ”{}” \; Az rm minden alkalommal elindul. find … | xargs rm Az rm egyszer fog futni. find … -print0 | xargs -0 rm Minden fájlnevet biztosan helyesen fog kezelni.
Operációs rendszerek gyakorlat
72
Keresés (find) – VII. ●
Pipe eó s -exec ●
●
find … -exec head -n 3 ”{}” | tail -n 1 \; A fájlok 3. sorát írná ki, de ez így nem működik. find … -exec sh -c 'head -n 3 ”{}” | tail -n 1' \; Indítunk egy belső shellt (sh), aminek megadjuk, hogy milyen parancsot futasson (-c). Így pipe-os parancsot is tudunk futatni az exec paramétereként.
Operációs rendszerek gyakorlat
73
Keresés (find) – VIII. ●
Kereseó s tartalom alapjaó n ●
●
●
find . -name "*.conf" -exec sh -c 'if grep -q minta "{}" ; then echo "{}" ; fi' \; A grep -q nem írja ki az illeszkedő sort, csak a visszatérési értékét állítja be aszerint, hogy volt-e találat, vagy nem. Az if majd egy későbbi anyagban lesz részletesen tárgyalva.
Operációs rendszerek gyakorlat
74
Shell scriptek
Áttekintés ●
●
●
●
A shell script a parancseó rtelmezoő (esetuü nkben Bash) sajaó t programnyelve. Hasznaó lataó val roü vid, toü moü r megoldaó sok adhatoó k szaó mos feladatra. A shell scriptek szoü veges faó jlok, amik a program forraó skoó djaó t tartalmazzaó k. Fordíótaó sra nincs szuü kseó g, a shell magaó t a forraó skoó dot eó rtelmezi. A normaó l szoü vegfaó jloktoó l abban teó r el, hogy rendelkezik futaó si joggal. (Laó sd chmod parancs.) A kitejeszteó s aó ltalaó ban .sh, de ez csak konvencioó .
Operációs rendszerek gyakorlat
76
Általános formátum és futtatás ●
A shell script kezdete: ●
●
●
#!/bin/bash Az első sorban a shell elérési útját adjuk meg, ami majd értelmezni fogja a programot. A programot a parancsértelmező egy másik példánya (egy új folyamat) fogja futatni.
A shell script indíótaó sa: ●
A script elérési útjának beírásával történik. ./elso.sh /home/antiemes/proba/elso.sh
Operációs rendszerek gyakorlat
77
A shell script létrehozása ●
A cat parancs faó jlba iraó nyíótaó saó val ●
●
●
cat > elso.sh Amit beírunk, az lesz majd a fájlban. A bevitel végét Ctrl-D-vel jelezzük. Akkor hasznos, ha a vágólapon van a program, így egy fájlba tudjuk másolni a vágólap tartalmát.
Szoü vegszerkesztoő vel mcedit elso.sh vi elso.sh
Operációs rendszerek gyakorlat
78
Az mcedit ●
Egyszeruő en hasznaó lhatoó szoü vegszerkesztoő .
●
Fontosabb funkcioó k: ● ● ● ●
Mentés: F2 (Esc 2 kombinációval helyetesíthető) Kilépés: F10 (Esc 0 kombinációval helyetesíthető) Visszavonás: Ctrl-U Másolás: ● ● ● ●
a másolandó szöveg elejére állunk, majd F3 a másolandó szöveg végére állunk, majd újra F3 a kijelölt szöveg beszúrása a kurzor után: F5 A kijelölt szöveg törlése: F8 (ha nincs kijelölve semmi, akkor az aktuális sort törli)
Operációs rendszerek gyakorlat
79
Sourcing ●
A programok uó gy is futtathatoó k, mintha azokat most íórnaó nk be
● ●
source elso.sh . elso.sh . /home/antiemes/proba/elso.sh Ilyenkor nem indul új parancsértelmező (új folyamat). Többek közt a változók kezelése eltérő.
Operációs rendszerek gyakorlat
80
Változók – I. ●
●
●
A legtoü bb programnyelvhez hasonloó an itt is hasznaó lhatunk vaó ltozoó kat. A vaó ltozoó k tíópus neó lkuü liek. Tartalmazhatnak szoü veget, szaó mot... A vaó ltozoó kat nem kell deklaraó lni.
Operációs rendszerek gyakorlat
81
Változók – II. ●
EÍ rteó kadaó s ● ● ● ● ●
●
●
valtozo=ertek Alapvető szintaxis szoveg=hello Egy egyszerű példa fnev=valami.txt A tartalom egy fájlnév sz1=”Ebben a szovegben van szokoz” Dupla idézőjel sz2='Egy masik szoveg' Szimpla idézőjel
A szimpla ideó zoő jel a tartalmat teljesen szoó szerint veó ve adja aó t. A dupla ideó zoő jel majdnem mindent szoó szerint ad aó t. (A reó szletekroő l keó soő bb.)
Operációs rendszerek gyakorlat
82
Változók – III. ●
A vaó ltozoó eó rteó keó nek lekeó rdezeó se ●
●
$valtozo alakban történik. echo $szoveg cat $fnev A változónév esetleg összefolyhat egy, a változónevet követő stringgel. Ezt a ${valtozo} alakkal tudjuk elkerülni ●
●
echo $szoveghello A shell a szoveghello nevű változót keresi echo ${szoveg}hello A shell a szoveg nevű változót keresi és a hello-t stringként kezeli.
Operációs rendszerek gyakorlat
83
Változók – IV. ●
A $valtozo kifejezeó s a vaó ltozoó eó rteó keó re csereó loő dik. Ez a legtoü bb esetben megfeleloő muő koü deó st biztosíót, de a vaó ltozoó felhasznaó laó sakor is ceó lszeruő dupla ideó zoő jelet hasznaó lni, vagyis a $valtozo helyett a ”$valtozo” alakot. A dupla ideó zoő jel a vaó ltozoó kat feloldja, de minden maó st szoó szerint hagy.
Operációs rendszerek gyakorlat
84
Változók – V. ●
Toü bb vaó ltozoó t, illetve stringet egymaó s utaó n íórva azok tartalma oü sszefuő zhetoő . A vaó ltozoó t el kell vaó lasztani az utaó na íórt stringtoő l ● ●
●
●
●
echo $valt1$valt2$valt3 Alapeset. echo ”$valt1$valt2$valt3” Felkészülünk arra, hogy lehetnek a változókban speciális karakterek is. echo ${valt1}szoveg$valt3 Csak az összefolyás ellen védekezünk. echo ”$valt1”szoveg”$valt3” A két változót külön idézőjelezzük, ami egyben el is választjat őket a stringtől. echo ”${valt1}szoveg${valt3}” Az összefolyás ellen is védekezünk és a speciális karakterekre is figyelünk.
Operációs rendszerek gyakorlat
85
Parancssori argumentumok – I. ●
●
Az eddigi parancsok parameó tereihez hasonloó an a sajaó t programunk is fogadhat parancssori parameó tereket. Argumentumok aó tadaó sa: ●
●
●
./elso.sh elso_argumentum masodik_argumentum
Az argumentumok vaó ltozoó k formaó jaó ban eó rhetoő k el a programon beluü l. Az elsoő argumentum a $1 vaó ltozoó ban taó roloó dik, a maó sodik a $2-ben, stb. Ezeket a vaó ltozoó kat is ceó lszeruő ”$1”, ”$2”, stb. alakban hasznaó lni.
Operációs rendszerek gyakorlat
86
Parancssori argumentumok – II. ●
IÍrjuk ki az elsoő parameó tert echo ”$1”
●
IÍrjuk bele az elsoő parameó terben megadott stringet a maó sodik parameó terben megadott faó jlba echo ”$1” > ”$2”
●
Maó soljuk az elsoő parameó terben megadott faó jlt a maó sodik parameó terben megadott koü nyvtaó rba cp ”$1” ”$2”
Operációs rendszerek gyakorlat
87
Parancssori argumentumok – III. ●
Feladat: Keressünk az 1. paraméterben megadot könyvtárban olyan fájlokat, amik illeszkednek a 2. paraméterben megadot mintára, szűrjük a fájlok tartalmát a 3. paraméterben megadot mintával majd ezt irányítsuk át a 4. paraméterben megadot könyvtárban levő, 5. paraméterben megadot nevű fájlba
●
Megoldaó s: find ”$1” -type f -name ”$2” -exec grep ”$3” > ”$4/$5”
Operációs rendszerek gyakorlat
88
Parancssori argumentumok – IV. ●
Feladat: ●
●
●
Az 1. paraméterben megadot fájl 2. paraméterben megadot sorszámú sorát (tehát azt az egy sort) írjuk ki a képernyőre. Számoljuk meg, hogy a 3. paraméterben megadot könyvtárban .txt fájloknak összesen hány sorában szerepel a 4. paraméterben megadot szó és ezt fűzzük hozzá az 5. paraméterben megadot fájlhoz.
Megoldaó s: head -n $2 ”$1” | tail -n 1 find ”$3” -type f -name ”*.txt” -exec grep ”$4” ”{}” \; >> ”$5”
Operációs rendszerek gyakorlat
89
Változók átadása – I. ●
Ha a programunk indíótaó sa eloő tt egy vaó ltozoó nak eó rteó ket adunk, ● ●
●
azt a program nem fogja tudni kiolvasni, illetve nem fogja tudni módosítani.
Az export paranccsal a vaó ltozoó t exportaó lhatjuk, ● ●
így a program ki fogja tudni olvasni, megváltoztatni viszont csak a programon belüli lokális másolatot tudja.
Operációs rendszerek gyakorlat
90
Változók átadása – II. ●
Feladat: ●
●
Adjunk értéket a DIR1, DIR2, F1, F2, SZ változóknak, majd hozzuk létre a DIR1, azon belül a DIR2 könyvtárakat, a DIR2-n belül az F1 fájlt, amibe az SZ szöveg kerüljön, és az F2 fájlt, amibe egy rekurzív hosszú lista kerüljön a DIR1-ből indulva.
Megoldaó s: export DIR1=egyik #Hasonlóan a többivel is, de a programon kívül! A program csak olvasni fogja ezeket a változókat! mkdir -p ”$DIR1/$DIR2” echo ”$SZ” > ”$DIR1/$DIR2/$F1” ls -lR ”$DIR1” > ”$DIR1/$DIR2/$F2”
Operációs rendszerek gyakorlat
91
Programok visszatérési értéke – I. ●
A C programok main fuü ggveó nyeó nek return utasíótaó sa a program visszateó reó si eó rteó keó t aó llíótja be. ● ● ●
●
Hibátlan esetben 0. Hiba esetén hibakód. A program futatása után a $? speciális változóban kapjuk meg ezt a számot. ls van_ilyen_file ls nincs_ilyen_file echo $? echo $? 0 2 Az ls parancs a nem létező fájlra egy 2-es hibakódot adot vissza.
Operációs rendszerek gyakorlat
93
Programok visszatérési értéke – II. ●
●
A 0 jelenti a helyes lefutaó st, vagyis az igaz eó rteó ket Baó rmely nem 0 valamilyen hibaó t jelent, tehaó t hamis eó rteó ket.
●
true parancs: A visszateó reó si eó rteó ke mind 0
●
false parancs: A visszateó reó si eó rteó ke mindig 1
Operációs rendszerek gyakorlat
94
Elágazás (if) – I. ●
A visszateó reó si eó rteó k alapjaó n a program el tud aó gazni.
●
Szintaxis:
●
●
if parancs ; then parancs_igaz [; else parancs_hamis ] ; fi A ; helyet újsor is írható. (És ez ajánlot is.)
Muő koü deó s: ● ●
●
Lefut a parancs. Ha a visszatérési értéke 0 (igaz), akkor a parancs_igaz hajtódik végre. Egyébként a parancs_hamis.
Operációs rendszerek gyakorlat
95
Elágazás (if) – II. ●
Feladat: ●
●
Írjuk ki, hogy egy fájlban szerepel-e egy adot minta, vagy nem:
Megoldaó s: if grep -q minta fájl then echo szerepel else echo nem szerepel fi
Operációs rendszerek gyakorlat
96
A test utasítás – I. ●
A test utasíótaó s meg tudja vizsgaó lni, hogy: ● ● ● ● ● ●
●
●
Egy string hossza 0-e. Egy fájl létezik-e. Egy fájl milyen típusú (sima fájl, könyvtár, link, stb.). Milyenek a fájl jogai. Két szám egyenlő-e, illetve melyik a nagyobb. Két string egyenlő-e.
Ezekre a vaó laszt a visszateó reó si eó rteó kben adja meg (0: igen, 1: nem). A test az if utasíótaó ssal egyuü tt hasznaó lhatoó hateó konyan
Operációs rendszerek gyakorlat
97
A test utasítás – II. ●
Feladat: ●
●
Nézzük meg, hogy a bejegyzés létezik-e.
Megoldaó s: if test -e file_name then echo Letezik else echo Nem letezik fi
Operációs rendszerek gyakorlat
98
A test utasítás – III. ●
Feladat: ●
●
Bővítsük ki az előző feladatot úgy, hogy vizsgálja meg, hogy a bejegyzés könyvtár-e, vagy nem
Megoldaó s if test -e file_name then echo Letezik if test -d file_name then echo Es konyvtar else echo Es nem konyvtar fi else echo Nem letezik fi
Operációs rendszerek gyakorlat
99
A test utasítás – IV. ●
●
A test utasíótaó s helyett hasznaó lhatoó a [ is, de ilyenkor a ] hasznaó lata is szuü kseó ges Feladat: ●
●
Döntsük el, hogy a $1, vagy a $2 a nagyobb szám.
Megoldaó s: if [ ”$1” -gt ”$2” ] then echo Az elso nagyobb. else echo A masodik a nagyobb. fi
●
Fontos, hogy a szintaktikai elemeket legalaó bb egy szoó koü zzel vaó lasszuk el egymaó stoó l.
Operációs rendszerek gyakorlat
100
Többszörös elágazás (case) – I. ●
●
Egy kifejezeó s (aó ltalaó ban vaó ltozoó ) lehetseó ges eó rteó keire tudunk eseteket felsorolni eó s aszerint toü bbfeó le muő koü deó st eloő íórni. Szintaxis:
●
case kifejezes in minta1) parancsok1 ;; minta2) parancsok2 ;; *) parancsok_egyeb ;; esac Ha a kifejezés a minta1-gyel egyezik meg, akkor a parancsok1 blokk fog végrehajtódni. Ha a minta2-vel egyeik meg, akkor parancsok2 blokk (stb.), egyébként a parancsok_egyeb blokk. Utóbbi opcionália.
Operációs rendszerek gyakorlat
101
Többszörös elágazás (case) – II. ●
Feladat: ●
●
A hét napjainak kiírása szám alapján
Megoldaó s: case napszam in 0) echo hetfo ;; 1) echo kedd ;; #Analóg módon a többi napot is felsorolhatjuk... esac
Operációs rendszerek gyakorlat
102
Többszörös elágazás (case) – III. ●
Feladat ●
●
Decimális-bináris konverzió (kis számokra)
Megoldaó s ●
case decszam in 0) binszam=”000” ;; 1) binszam=”001” ;; 2) binszam=”010” ;; 3) binszam=”011” ;; esac
Operációs rendszerek gyakorlat
103
Többszörös elágazás (case) – IV. ●
Feladat: ●
●
Készítsünk a case segítségével menüt.
Megoldaó s: case menu in egyik) #Az egyik tipusu mukodes... ;; masik) #A masik tipusu mukodes... ;; kilep) echo Viszlat\! ;; *) echo Nincs ilyen menupont. ;; esac
Operációs rendszerek gyakorlat
104
Szöveg bekérése ●
Szintaxis: ●
●
●
read valtozo1 [ valtozo2 [ … ] ]
Egy sor szoü veget olvas be, amit szavankeó nt a megadott vaó ltozoó kba tesz. Az utolsoó vaó ltozoó ba a sor veó geó ig bekeruü l az oü sszes tartalom. Peó lda ●
●
read x y z Az első szó az x-be, a második szó az y-ba, a sor összes többi része a z-be kerül. read a Az egész sort az a-ba teszi.
Operációs rendszerek gyakorlat
105
For ciklus – I. ●
●
Maó s nyelvekhez hasonloó an itt is hasznaó lhatunk for ciklust. Itt megadott eó rteó keken tudunk veó gigmenni. Szintaxis: for valtozo in ertek1 [ ertek2 […]] do utasítások done
●
A valtozo egyenkeó nt felveszi a megadott eó rteó keket. ●
for nap in hetfo kedd szerda csutortok pentek szombat vasarnap do echo $nap done
Operációs rendszerek gyakorlat
106
For ciklus – II. ●
●
Az elemek felsorolaó sa nem tuó l rugalmas, de szerencseó re a shell a shell mintaó kat be tudja helyettesíóteni. Peó lda: Menjuü nk veó gig az oü sszes faó jlon eó s mindegyik faó jlt maó soljuk be egy koü nyvtaó rba, aminek a neveó t eloő zoő leg bekeó rtuü k. Az uó j faó jlok neve legyen .bak-kal kiegeó szíótve. read konyvtar mkdir $konyvtar for file in * do cp $file ”$konyvtar/$file”.bak done
Operációs rendszerek gyakorlat
107
For ciklus – III. ●
A shell minta lehet oü sszetettebb is, illetve toü bb mintaó t is hasznaó lhatunk. Minden a-val kezdoő doő .sh, vagy .pl faó jl sorait szaó moljuk meg. (Kuü loü n.) for file in a*.sh a*.pl do wc -l ”$file” done
Operációs rendszerek gyakorlat
108
For ciklus – IV. ●
A for ciklust a C-ben megszokotthoz hasonloó an is hasznaó lhatjuk for ((i=0; i<10; i++)) do utasítások done
●
●
Fontos, hogy dupla zaó roó jelet hasznaó lunk. Szinteó n fontos, hogy a dupla zaó roó jelen beluü l nem kell $ jel.
Operációs rendszerek gyakorlat
109
For ciklus – V. ●
Rajzoljunk ki egy teó glalapot. A szeó lesseó get eó s a magassaó got a billentyuő zetroő l keó rjuü k be. read szeles read magas for ((y=0; y<magas; y++)) do for ((x=0; x<magas; x++)) do echo -n ”*” done echo done
Operációs rendszerek gyakorlat
110
C-hez hasonló szintaxis ●
●
Nem csak a for ciklus kezelhetoő a C-ben megszokotthoz hasonloó an. Aritmetikai muő veletek: ((z=x+y)) ((i++))
●
Aritmetikai muő veletek, ha az eredmeó nyt le akarjuk keó rdezni echo $((x+5))
●
Logikai kifejezeó sek az if utasíótaó s felteó telekeó nt if ((x<6))
Operációs rendszerek gyakorlat
111
Parancs-behelyettesítés (backtick) ●
●
●
Az eddig megismert ideó zoő jeleken (' eó s ”) kíóvuü l van egy harmadik is, ez a backtick (`). Ha keó t ` jel koü zeó íórunk valamit, azt a shell lefuttatja eó s a kifejezeó st arra csereó li le, amit a lefuttatott parancs kiíórt. Szintaxis: `futtatandó parancs`
●
Illetve: $(futtatandó parancs)
Operációs rendszerek gyakorlat
112
Az expr parancs ●
Az expr paranccsal aritmetikai eó s logikai kifejezeó seket eó rteó kelhetuü nk ki. Ismeri a neó gy alapmuő veletet, a zaó roó jeleket, illetve neó haó ny logikai muő veletet is: expr 3 + 2 5-öt ír ki. Figyeljünk rá, hogy mindegyik tokent lealább egy szóközzel elválasszuk. expr 9 / 2 4-et ír ki. Lefelé kerekít, illetve csak az egészeket ismeri. expr 5 \* 3 A *-ot a shell behelyetesítené, ha nem használnánk \-t. expr \( 2 + 5 \) \* 6 A zárójelnél is kell a \.
Operációs rendszerek gyakorlat
113
Elöltesztelős ciklus (while) – I. ●
Szintaxis: while feltétel do utasítások done
●
A felteó tel itt is egy parancs (mint az ifneó l). A ciklus addig muő koü dik, amíóg a felteó tel igaz (tehaó t a parancs visszateó reó si eó rteó ke 0).
Operációs rendszerek gyakorlat
114
Elöltesztelős ciklus (while) – II. ●
Egyszeruő naptaó r/oó ra while true do clear date done
●
UÍ j parancsok: ● ●
clear Törli a képernyőt date Kiírja vagy beállítja a dátumot. A dátum kiírását sokféleképpen formázhatjuk.
Operációs rendszerek gyakorlat
115
Elöltesztelős ciklus (while) – III. ●
Olvassunk be sorokat a billentyuő zetroő l addig, amíóg lehet: while read sor do utasítások, amikben a sor változót feldolgozzuk done
●
Olvassunk be egy faó jlboó l minden sort eó s dolgozzuk fel a sorokat: while read sor do utasítások, amikben a sor változót feldolgozzuk done < $file
Operációs rendszerek gyakorlat
116
Elöltesztelős ciklus (while) – IV. ●
Szaó moljuk meg az a-val kezdoő doő , a b-vel kezdoő doő eó s az egyeó b sorokat az 1. parameó terben megadott faó jlban. aval=0; bvel=0; egyeb=0 while read sor do if echo ”$sor” | grep -q ^a then ((aval++)) elif echo ”$sor” | grep -q ^b then ((bvel++)) else ((egyeb++)) fi done < ”$1” echo $aval $bvel $egyeb
Operációs rendszerek gyakorlat
117
Illeszkedik-e egy sor egy regexpre? ●
A peó ldaó ban a grepet hasznaó ltuk: if echo ”$sor” | grep -q ^a
●
De az expr is tudja ugyanezt: if expr ”$sor” : ^a > /dev/null
●
Vagy kombinaó lva a C szintaxist a backtick-kel: if (($(expr ”$sor” : ^a)))
Operációs rendszerek gyakorlat
118
Tetszőleges mennyiségű paraméter – I. ●
A parameó terek szaó maó t egy speciaó lis vaó ltozoó taó rolja: echo A programnak $# darab parametert adtal at.
●
●
Az oü sszes parameó terhez is tartozik egy speciaó lis vaó ltozoó : $@ A parameó tereken for ciklussal tudunk veó gigmenni: for p in ”$@” do echo Atadot parameter: ”$p” done
Operációs rendszerek gyakorlat
119
Tetszőleges mennyiségű paraméter – II. ●
A shift parancs segíótseó geó vel is feldolgozhatjuk a parameó tereket. A shift levaó gja a parameó terlista elejeó roő l az elsoő parameó tert, a toü bbit pedig eggyel eloő reó bb csuó sztatja. Opcionaó lisan egy szaó m is megadhatoó a shiftnek, akkor annyi parameó tert fog kicsuó sztatni. while [ $# -ne 0 ] do echo Az aktualis parameter: $1 shift done
Operációs rendszerek gyakorlat
120
A tr parancs ●
A tr paranccsal megadott karaktereket maó sik karakterekre csereó lhetuü nk: tr ”[a-z]” ”[A-Z]” A kisbetűket nagybetűre cseréli. tr ”[A-Za-z]” ”[N-ZA-Mn-za-m]” rot13 kódolás.
●
Megadott karaktereket toü roü lhetuü nk is: tr -d [aouei]
●
Minden magánhangzót töröl.
A megadott karakterek koü zuü l csak az ismeó tloő deó seket toü rli: tr -s [A-Z] marad.
Operációs rendszerek gyakorlat
Minden ismételt nagybetűből csak egy
121
Basename és dirname ●
A basename az parameó terkeó nt megadott eleó reó si uó tboó l csak az utolsoó elemet hagyja meg. basename /home/antiemes/proj proj
●
A dirname a parameó terkeó nt megadott eleó reó si uó tboó l az utolsoó elemet levaó gja. dirname /home/antiemes/proj /home/antiemes
Operációs rendszerek gyakorlat
122
Függvények – I. ●
Bash-ben a fuü ggveó nyek hasonloó an muő koü dnek, mint a programok: ● ●
●
●
A függvény nevével tudjuk meghívni. Paramétereket tudunk neki átadni a függvény neve után felsorolva. A paramétereket a $1, $2, … változókon keresztül érhetjük el.
Szintaxis: function fuggveny_neve { utasítások }
Operációs rendszerek gyakorlat
123
Függvények – II. ●
Valoó síótsuk meg a rot13 fuü ggveó nyt eó s az 1. parameó terben megadott faó jlt koó doljuk, majd íórjuk bele a 2. parameó terben megadott faó jlba eó s a keó pernyoő re is. Majd koó doljuk is vissza a keó pernyoő re. function rot13 { tr ”[A-Za-z]” ”[N-ZA-Mn-za-m]” } cat ”$1” | rot13 | tee ”$2” cat ”$2” | rot13
Operációs rendszerek gyakorlat
124
A sed (stream editor) – I. ●
A sed segíótseó geó vel szoü vegeket lehet eloő re megadott moó don szerkeszteni.
●
Hataó skoü roü k (pl): ● ● ● ●
●
Muő veletek ● ●
●
●
első n, utolsó n, intervallum páros, vagy páratlan sorok bizonyos mintára illeszkedő sorok egy mintára illeszkedő sortól egy másik mintára illeszkedő sorig Bizonyos sorok elhagyása, vagy kiírása A sorokon átalakítások elvégzése
Egy soros Sed parancsok (sed oneliners) gyuő jtemeó nye: http://www.catonmat.net/blog/wpcontent/uploads/2008/09/sed1line.txt A sed gyakorlatilag univerzaó lis programnyelvnek tekinthetoő
EÍ rdekesseó g: Sed-ben íórt jaó teó kok, pl. Sokoban: http://sed.sourceforge.net/local/games/ Operációs rendszerek gyakorlat ●
125
A sed (stream editor) – II. ●
A sed-et azonban 99%-ban csereó re hasznaó ljaó k: ● ● ● ●
●
sed 's/mit/mire/' s: substitution, vagyis csere mit: regexp, amire keresünk mire: amire kicseréljük A / jel helyet bármilyen más karakter is megadható. Olyat célszerű választani, ami nem szerepel a mintában. Az utolsó / után megadható még néhány kapcsoló is: ● ●
g: Globális csere, vagyis nem áll meg az első lehetőségnél i: Kis-nagybetű-nem-érzékeny csere
Operációs rendszerek gyakorlat
126
Egy hosszabb példa: Thumbnailek – I. ●
●
●
Egy small nevuő koü nyvtaó rba keó szíótsuü k el az aktuaó lis koü nyvtaó rban levoő jpg keó pek kicsinyíótett verzioó jaó t (thumbnail-jeó t). Pl. a foo.jpg thumbnail-je legyen foosmall.jpg A kicsinyíóteó shez a convert hasznaó ljuk (imagemagick csomag) Kuü loü n fuü ggveó nybe tegyuü k ● ●
a -small utótagú név előállítását, és a kicsinyítést.
Operációs rendszerek gyakorlat
127
Egy hosszabb példa: Thumbnailek – II. ●
A -small utoó tag: function small { echo ”$1” | sed 's,.jpg$,-small.jpg,i' }
●
●
A faó jl neve az elsoő parameó terben eó rkezik. A faó jlneó v veó geó n levoő .jpg veó gzoő deó st lecsereó ljuü k a -small.jpg-re.
Operációs rendszerek gyakorlat
128
Egy hosszabb példa: Thumbnailek – III. ●
A kicsinyíóteó s: function thumb { convert ”$1” -resize \>128x128 small/”$(small ”$1”)” }
●
●
●
A convert parancs 1. parameó tere a kicsinyíótendoő faó jl neve. A 2. parameó ter mondja meg, hogy mit tegyen a keó ppel (aó tmeó retezeó s), a 3. parameó ter jelenteó se: toü ltsuü nk ki egy 128x128-as neó gyzetet az eredeti araó nyok megtartaó saó val. A 4. parameó ter a kimeneti faó jl neve.
Operációs rendszerek gyakorlat
129
Egy hosszabb példa: Thumbnailek – IV. ●
Vizsgaó ljuk meg, hogy leó tezik-e a small bejegyzeó s. ● ● ●
Ha nincs, hozzuk létre. Ha könyvtár, akkor használjuk. Ha valami más, akkor adjunk hibaüzenetet. if [ -e small ] then if [ -d small ] then echo A konyvtar mar letezik else echo Van mar valami mas itt small neven exit 1 fi # az if [ -d small ] vege else mkdir small fi # az if [ -e small ] vege
Operációs rendszerek gyakorlat
130
Egy hosszabb példa: Thumbnailek – V. ●
Majd a fuü ggveó nyek hasznaó lataó val koü vetkezik a teó nyleges munka: for file in *.[jJ][pP][gG] do thumb ”$file” done
●
A [jJ][pP][gG] minta a jpg, JPG, Jpg, stb-re illeszkedik.
Operációs rendszerek gyakorlat
131
Beugró feladatok – I F. ●
Feladat: ●
●
Írjon sorszam.sh néven Bash scriptet, ami az aktuális könyvtárból indulva rekurzívan megkeresi azon fájlokat, amelyek kiterjesztése .txt, majd kiírja, hogy ezek egyenként hány sort tartalmaznak, valamint azt is, hogy összesen hány sort tartalmaznak.
Peó lda: $ ./sorszam.sh 23 ./almafa.txt 45 ./kortefa.txt 12 ./kert/szilva.txt 80
Operációs rendszerek gyakorlat
132
Beugró feladatok – I M. ●
Megoldaó s #!/bin/bash find . -name ”*.txt” -exec wc -l ”{}” \; find . -name ”*.txt” -exec cat ”{}” \; | wc -l
Operációs rendszerek gyakorlat
133
Beugró feladatok – II F. ●
Feladat: ●
●
Írjon leghosszabb.sh néven Bash scriptet, ami az aktuális könyvtárból indulva rekurzívan megkeresi a leghosszabb fájlt (vagy az egyik leghosszabbat) és kiírja ennek adatait.
Peó lda: $ ./leghosszabb.sh -rw-r--r-- 1 root root 5290 Mar 25 18:23 ./bcd/libreoffice.sh
Operációs rendszerek gyakorlat
134
Beugró feladatok – II M. ●
Megoldaó s: #!/bin/bash find . -type f -exec ls -l ”{}” \; | sort -n -k 5 | tail -n 1
Operációs rendszerek gyakorlat
135
Beugró feladatok – III F. ●
Feladat: ●
Írjon vegennev.sh néven Bash scriptet, ami az aktuális könyvtárból kiindulva rekurzívan az összes fájlban megkeresi és kiírja a tetszőleges névre végződő sorokat. Minden név kétagú és tagjaik nagybetűvel kezdődnek
Operációs rendszerek gyakorlat
136
Beugró feladatok – III M. ●
Megoldaó s: #!/bin/bash find . -type f -exec cat ”{}” \; | grep -E '[A-Z][a-z]+ [A-Z][a-z]+$'
Operációs rendszerek gyakorlat
137
Beugró feladatok – IV F. ●
Feladat: ●
●
Írjon Bash héjprogramot etlapok.sh néven, mely kiírja az összes lehetséges főétel-köret párosítást az alábbi módon: Az első paraméterben megadot könyvtárban levő fájlok nevei a lehetséges főételek, a második paraméterben megadot könyvtárban levő fájlok nevei pedig a lehetséges köretek
Peó lda: $ ./etlapok.sh foetelek koretek porkolt – csigateszta porkolt – hasabburgonya porkolt – rizs rantotthus – csigateszta rantotthus – hasabburgonya rantotthus – rizs
Operációs rendszerek gyakorlat
138
Beugró feladatok – IV M. ●
Megoldaó s: #!/bin/bash for f in $1/* do for k in $2/* do echo $(basename $f) - $(basename $k) done done
Operációs rendszerek gyakorlat
139
Beugró feladatok – V F. ●
Feladat: ●
Írjon bash scriptet, amely a paraméterként megadot fájlok paraméterként megadot sorszámú sorát listázza ki a példában megadot formátumban. ● ●
●
Első paraméter: a fájlok hányadik sorát írja ki A többi (tetszőleges számú) paraméter: fájlok nevei
Peó lda: ./sorlistaz.sh 4 alma.txt korte* A(z) alma.txt 4. sora: zoldseg gyumolcs A(z) korte.txt 4. sora: szep szinarany botjat A(z) kortefa.doc 4. sora: Sor vagy nem sor, ez itt a kerdes...
Operációs rendszerek gyakorlat
140
Beugró feladatok – V M. ●
Megoldaó s: ●
#!/bin/bash n=$1 shift while [ $# -gt 0 ] do echo 'A(z) '”$1 $n. sora:” head -n $n $1 | tail -n 1 shift done
Operációs rendszerek gyakorlat
141
Perl
A Perl nyelvről – I. ●
Script nyelv ● ●
●
●
●
A programot egy interpreter értelmezi. A forráskód egyben a futatható is, tehát a forráskódot nem kell lefordítanunk. Futási jog viszont kell! A forráskód első sorában it is meg kell adni az interpretert: #!/usr/bin/perl Javasolt kiterjesztés: .pl, de a házikat .sh néven kell majd beadni!
Eredeti ceó lja ●
●
A Perl nyelvet szöveges adatok feldolgozására és az adatokból információ kinyerésére fejleszteték ki: „Practical extraction and report language”. Ennek megfelelően a Perl nagyon erős a szövegfeldolgozást segítő reguláris kifejezésekben. A reguláris kifejezéshez kapcsolódó műveletek nyelvi elemként, nagyon flexibilisen használhatóak.
Operációs rendszerek gyakorlat
143
A Perl nyelvről – II. ●
Mire hasznaó lhatoó most? Az eredeti ceó l mellett gyakorlatilag baó rmire: ● ● ● ● ●
●
GUI (kapcsolódási lehetőség a legtöbb GUI toolkithez) Sokféle fájlformátum feldolgozása (képek, hangok, XML) GCI programozás (többféle template engine) Hálózati kommunikáció Jól használható OOP támogatás
Szintaxis ● ●
Nagyon hasonlít a C-hez (vezérlési szerkezetek, stb.) Szabad szintaxis: Egy dologra sokféle alternatíva
Operációs rendszerek gyakorlat
144
Néhány egyszerű példa – I. ●
Hello world! :) #!/usr/bin/perl print ”Hello world!\n”;
●
Magyaraó zat: ● ●
A print egy függvény, ami az utána írt kifejezés értékét kiírja. A ”Hello world!\n” egy string literál. A string literálokat szimpla, vagy dupla idézőjelbe tehetjük. ● ●
●
●
Szimpla idézőjel: Mindent szó szerint vesz. Dupla idézőjel: Az escape szekvenciákat és a változókat behelyetesíti.
A print függvénynek egy paramétert adtunk át. Ebben az esetben nem kötelező a zárójel. (Szabad szintaxis.) A print nem tör sort. Az utasításokat pontosvessző zárja.
Operációs rendszerek gyakorlat
145
Néhány egyszerű példa – II. ●
String oü sszefuő zoő operaó tor (. – pont) print ”Egyik string”.'másik string'.6.”\n”;
●
Magyaraó zat: ●
●
A . (pont) operátorral három stringet és egy számot fűztünk össze. Az egyik string szimpla idézőjelben van, a másik kető duplában.
Operációs rendszerek gyakorlat
146
Néhány egyszerű példa – III. ●
String toü bbszoü roü zoő operaó tor (x) print ”almafa”x18;
●
Magyaraó zat: ●
●
Az x operátor bal oldali operandusa a többszörözendő string, a jobb oldali pedig a mennyiség (ahányszor meg szeretnénk ismételni a stringet). Ez a kiírás nem fog sort törni.
Operációs rendszerek gyakorlat
147
Néhány egyszerű példa – IV. ●
Toü rjuü k el a sort! print ”almafa”x18.”\n”;
●
Ez nem muő koü dik, mert az x-nek alacsonyabb a precedenciaó ja, mint a .-nak. Zaó roó jelezzuü nk! print (”almafa”x18).”\n”;
●
Ez sem megy. A print ugyanis azt hiszi, hogy az oő parameó tere a zaó roó jelben levoő kifejezeó s. IÍgy maó r menni fog: print ((”almafa”x18).”\n”);
Operációs rendszerek gyakorlat
148
Warningok ●
Az egy zaó roó jeles peó lda nem azt csinaó lta, mint amit mi szerettuü nk volna. Toü bbek koü zt az ilyen „gyanuó s” esetek felderíóteó seó re hasznos a warningok bekapcsolaó sa. Ezt az elsoő sorban a -w kapcsoloó val tehetjuü k meg: #!/usr/bin/perl -w
●
A Perl szoó lni fog, ha ●
●
Egy vaó ltozoó t nem hasznaó lunk fel. String oü sszefuő zeó sneó l nem definiaó lt eó rteó ket proó baó lunk meg oü sszefuő zni.
●
Valamelyik koó dreó szlet feó lreeó rthetoő .
●
EÍ s meó g sok maó s esetben.
Operációs rendszerek gyakorlat
149
Változók – I. ●
●
●
A Perl tíópus neó lkuü li nyelv, ami azt jelenti, hogy a vaó ltozoó knak nincs koü toü tt tíópusuk. A vaó ltozoó k deklaraó laó sa eó s inicializaó laó sa nem szuü kseó ges A Perlben haó romfeó le vaó ltozoó alaptíópus van ●
Skalár ●
● ●
Számot (egészeket és lebegőpontos értékeket), szöveget, illetve logikai értéket tárolhatunk benne. Jelölése: $azonosito Inicializálatlan esetben számként kiértékelve 0, stringként kiértékelve üres string az értéke.
Operációs rendszerek gyakorlat
150
Változók – II. ●
Tömb (lista): ● ● ●
●
●
Hash (asszociatív tömb, hasítótömb, kivonat): ● ●
●
●
Skalárokat, vagy referenciákat* tárolhat. A tömb indexelése 0-tól kezdődik. Az indexeknek nem feltétlenül kell folytonosnak lenniük. Lehetnek „lyukak”. Jelölése: @azonosito Kulcs-érték párokat tud tárolni. Egy olyan tömbként képzelhető el, amiben az indexek nem feltétlenül számok, hanem stringek is lehetnek. Jelölése: %azonosito
A tömbökről és a hash-ekről részletesebben kicsit később...
Operációs rendszerek gyakorlat
151
Környezetek ●
A Perlben leó tezik egy környezet nevuő fogalom. A koü rnyezet a kifejezeó sek kieó rteó keleó seó t befolyaó solja. ●
● ●
●
Pl. ha egy tömböt teszünk olyan helyre, ahol skalár lenne a logikus, akkor azt mondjuk, hogy a tömb skalár környezetben van. Létezik skalár, lista, stb. környezet Ha valamit a saját típusától eltérő környezetbe helyezünk, akkor nincs általános szabály arra, hogy hogy értékelődik ki. Számos különböző eset van. Az egyes környezeteket forszírozni is lehet. Leggyakoribb ha valamit skalár környezetben szeretnénk kiértékelni. Ezt a scalar kulcsszóval tehetjük meg.
Operációs rendszerek gyakorlat
152
Aritmetika – I. ●
A szokaó sos muő veletek muő koü deó se azonos a megszokottal: ● ● ● ● ● ● ●
● ●
Alapműveletek (+, –, *, /) Osztási maradék (%) Rendezési relációk (<, >) Egyenlőség (==) Zárójelezés Logikai vagy, és, illetve tagadás (||, &&, !) Bitenkénti műveletek (vagy, és, negálás, shift jobbra és balra) (|, &, ~, >>, <<) Növelés, csökkentés (++, --) Műveletek rövidítet alakja (+=, -=, *=, /=, stb.)
Operációs rendszerek gyakorlat
153
Aritmetika – II. ●
Neó haó ny uó j muő velet ● ●
Hatványozás (**), pl: 2**8 (2 a 8-adikon) Űrhajó operátor (<=>) ● ● ● ●
Alakja: szam1 <=> szam2 Ha a szam1 a kisebb, akkor az értéke -1. Ha a szam2 a kisebb, akkor az értéke 1. Ha egyenlőek, akkor az értéke 0.
Operációs rendszerek gyakorlat
154
String műveletek ●
A maó r tanultak ● ●
●
OÖ sszehasonlíótaó s ● ● ●
●
. Összefűzés x Többszörözés string1 eq string2 Egyenlőség vizsgálata string1 lt string2 A string1 előbb van-e az ABC-ben string1 gt string2 A string1 később van-e az ABC-ben
Regexp operaó torok ● ● ●
=~/minta/ és =~m/minta/ Mintaillesztés =~s/// Csere Ezekről kicsit később.
Operációs rendszerek gyakorlat
155
Tömbök – I. ●
Kezdoő eó rteó k megadaó sa: @szamok=(1, 23, 89, 16); @vegyes=(3, 'valami', ”uj\nsor”, 118, 3.14159265);
●
Toü mboü k oü sszefuő zeó se: ●
●
@merge=(@szamok, @vegyes); Ilyenkor a tömbök tartalma fűződik össze, nem pedig egy 2db tömböt tartalmazó tömb készül.
Toü mb elemeihez valoó hozzaó feó reó s:
●
$merge[3]=92; print $merge[0]; A $ nem elírás, hiszen maga a tömbelem már skalár.
Operációs rendszerek gyakorlat
156
Tömbök – II. ●
Negatíóv toü mbindex: ● ●
●
Az utolsó elem Az utolsó előtti elem. (Stb.)
Toü mb elemszaó ma: ● ●
●
$vegyes[-1] $vegyes[-2]
$#vegyes A tömb utolsó indexét adja meg $hossz=@vegyes vagy $hossz=scalar @vegyes Skaláris környezetben a tömb a hosszát fogja visszaadni
A toü mb kuü loü nboü zoő koü rnyezetekben: ● ●
print @vegyes; A tömb elemeit írja ki egymás után. print @vegyes.”\n”; A tömb elemszámát és egy sortörést ír ki, mert it skaláris környezetbe tetük.
Operációs rendszerek gyakorlat
157
Vezérlési szerkezetek – I. ●
Elaó gazaó s (if) ●
Szintaxis: if (feltétel) { utasítások } elsif (feltétel) { utasítások } else { utasítások }
●
A működése a C-ben megszokotal azonos.
Operációs rendszerek gyakorlat
158
Vezérlési szerkezetek – II. ●
●
●
Fordíótott elaó gazaó s (unless) Az if ellenteó te, tehaó t pontosan akkor fognak a blokkban levoő utasíótaó sok lefutni, ha a felteó tel nem igaz. Szintaxis: unless (feltétel) { utasítások }
Operációs rendszerek gyakorlat
159
Vezérlési szerkezetek – III. ●
For ciklus
● ●
for (inicializálás; bennmaradási feltétel; iteráció) { utasítások } A for ciklus működése a C-s megfelelővel azonos. A ciklus működését két utasítással tudjuk befolyásolni: ● ●
next: Az aktuális iteráció visszalévő részét kihagyja last: Kilép a ciklusból
Operációs rendszerek gyakorlat
160
Vezérlési szerkezetek – IV. ●
While ciklus
● ●
while (bennmaradási feltétel) { utasítások } A while ciklus működése is azonos a C-s while cikluséval. It is használható a next és a last utasítás.
Operációs rendszerek gyakorlat
161
Adatok bekérése – I. ●
Az adatok bekeó reó se a <> operaó torral toü rteó nik.
●
Formaó i: ● ● ●
●
●
Egy fájl handlerről olvas be. <STDIN> Az STDIN egy speciális fájl handler. <> A standard bemenetről, vagy a paraméterben megadot fájlból olvas be.
A beolvasaó s alapesetben soronkeó nt halad (de ez szabaó lyozhatoó ). A beolvasott sor veó geó n a sorveó gjel is ott marad. Ezt a chomp fuü ggveó nnyel taó volíóthatjuk el.
Operációs rendszerek gyakorlat
162
Adatok bekérése – II. ●
Egy sor bekeó reó se: $sor=<>; chomp($sor); print ”Ezt irtad be: --”.$sor.”--\n”;
●
Az oü sszes sor bekeó reó se: @sorok=<>; chomp(@sorok); print scalar @sorok; print ” sort irtal be\n”; print ”elso elem: ”.$sorok[0].” utolso elem: ”.$sorok[-1].”\n”;
Operációs rendszerek gyakorlat
163
Adatok bekérése – III. ●
While ciklussal: $i=0; while ($sor=<>) { chomp($sor); $tomb[$i]=$sor; $i++; }
●
Egy kicsit maó skeó pp: while ($sor=<>) { chomp($sor); push(@tomb, $sor); } ●
A push a toü mb veó geó hez ad hozzaó egy uó jabb elemet.
Operációs rendszerek gyakorlat
164
Adatok kinyerése – I. ●
A hagyomaó nyos moó d:
●
●
for ($i=0; $i<=$#tomb; $i++) { print ”A tomb ”.$i.”. eleme:\n”; print $tomb[$i].”\n”; } A $# az utolsó indexet adja; ahhoz, hogy ezt az értéket is felvegye az $i, <= kell.
Ugyanez, pepitaó ban: ●
●
for ($i=0; $i<@tomb; $i++) { ... } A tömbváltozó skalár környezetben a tömb elemszámát adja.
Operációs rendszerek gyakorlat
165
Adatok kinyerése – II. ●
Foreach ciklussal:
●
●
foreach $elem (@tomb) { ... } A foreach segítségével a tömb elemein tudunk végigmenni.
A pop utasíótaó ssal eó s while ciklussal:
●
while (@tomb) { $elem=pop(@tomb); print $elem.”\n”; } A pop mindig a legutoljára betet elemet veszi ki a tömbből és törli is onnan.
Operációs rendszerek gyakorlat
166
Példák – I. ●
Olvassunk be sorokat amíóg lehet, majd íórjunk ki mindent fordíótott sorrendben. A sorok elejeó t eó s veó geó t jeloü ljuü k meg!
●
@sorok=<>; chomp(@sorok); while(@sorok) { $sor=pop(@sorok); print ”==>”.$sor.”<==\n”; } Az egész bemenetet egyben beolvastuk.
Operációs rendszerek gyakorlat
167
Példák – II. ●
Olvassunk be sorokat amíóg lehet eó s íórjunk ki minden sort, ami legalaó bb 20 karakter hosszuó saó guó . Minden sor eloő tt íórjuk ki a hosszt is, zaó roó jelben!
● ●
while($sor=<>) { chomp($sor); if (length($sor)>=20) { $h=length($sor); print ”(”.$h.”)”.$sor.”\n”; } } A length függvény a sor hosszát adja vissza. It nem olvastuk be az egész bemenetet egyben, hanem soronként dolgoztunk.
Operációs rendszerek gyakorlat
168
Példák – III. ●
Keó rjuü nk be szaó mjegyeket eó s íórjuk ki, hogy melyikboő l haó ny darabot íórtunk be. A kiíóraó s a megfeleloő szaó muó csillag kirajzolaó saó val is aó braó zoljuk. while($szam=<>) { chomp($szam); $stat[$szam]++; } for ($i=0; $i<=9; $i++) { print $i.”: ”.$stat[$i].” ”; print ”*”x$stat[$i]; print ”\n”; }
Operációs rendszerek gyakorlat
169
Fájlok kezelése – I. ●
<> segíótseó geó vel: ●
●
Faó jl handler segíótseó geó vel ● ● ●
●
Ha a programnak adunk át paraméter(eke)t, akkor a standard bemenet helyet a megadot fájlokból fog olvasni. Ha megnyitunk egy fájlt, akkor kapunk egy fájl handlert. Szintaxis: open(BE, ”pelda.txt”); A fáj lezárása: close(BE);
Ha megnyitottuk a faó jt, ugyanuó gy tudunk beloő le olvasni, mint a billentyuő zetroő l: $sor=; @mindensor=;
Operációs rendszerek gyakorlat
170
Fájlok kezelése – II. ●
Ha a faó jlba íórni szeretneó nk, akkor egy kicsit maó shogy kell megnyitni: open(KI, ”>kimenet.txt”); Felülírja, ha volt ot valami. open(M, ”>>naplo.txt”); Az ot levő fájl végéhez fűzi az új tartalmat.
●
IÍraó s a faó jlba: print KI ”Ez egy sor lesz a fajlban.\n”; print M $db.” darab sort olvastunk be.\n”;
Operációs rendszerek gyakorlat
171
Reguláris kifejezések – bevezetés ●
Mi a regulaó ris kifejezeó s? ● ●
●
Maó s szavakkal ● ● ●
●
Számítástudományi fogalom Nyelv definiálására használható Regular expression Regexp Regex
Man oldal ●
man 7 regex
Operációs rendszerek gyakorlat
172
Regexp – mire jó? ●
Mire hasznaó lhatoó ? ●
●
●
●
Egy reguláris kifejezésre egy string vagy illeszkedik, vagy nem illeszkedik Specifikálhatunk szabályokat és eldönthetjük, hogy egy string megfelel-e azoknak Adatok validálása (illeszkedés vizsgálat) és a információ kinyerése A grep paranccsal, illetve Perl nyelvi elemként használható. A szintaxisok valamennyire eltérőek!
Operációs rendszerek gyakorlat
173
Regexp – karakterek ●
Nem speciaó lis karakterek ● ● ● ●
●
Betűk, számok, aláhúzás jel (_) Önmagukra illeszkednek. Pl.: a, x, J, 4, _ A regexp kis-nagy-betű érzékeny (case sensitive)!
Speciaó lis karakterek ● ●
Sok karakternek egyéb szerepe van, pl. (, ), [, ], $, ^, ., \, / stb. Escape szekvenciaként tudunk ezekre illeszteni: ●
●
\$, \[, \\, \/ stb.
A különböző regexp típusokban eltérőek az erre vonatkozó szabályok
Operációs rendszerek gyakorlat
174
Regexp – halmazok – I. ●
Halmazok ● ● ● ●
●
Több karaktert tartalmaznak Tartományok is megadhatók Bármely, a halmazba tartozó karakterre illeszkednek [ és ] közt adhatók meg. A tartományokat kötőjel jelöli
Peó ldaó k: ● ● ● ●
[a-z] Bármely kisbetű [A-Z] Bármely nagybetű [A-L] Nagybetűk A-tól L-ig [aouei0-9] Magánhangzók és a számok
Operációs rendszerek gyakorlat
175
Regexp – halmazok II. ●
Peó ldaó k: ● ● ●
[A-Za-z] Bármely betű [A-Za-z_] Bármely betű, szám, _ jel [^0-9] Bármi, kivéve a számjegyek ●
●
[a-z^] Bármely kisbetű is a ^ jel ●
●
A ^ tagadást jelent, ha elöl áll A ^ lehet karakter is, ha a sor végén áll
[0-9-] Bármely számjegy és a kötőjel ●
It a kötőjel nem tartományt jelöl
Operációs rendszerek gyakorlat
176
Regexp – halmazok III. ●
A gyakori halmazokra roü vidíóteó sek hasznaó lhatoó k. ● ●
●
Ilyenkor nem kell [ és ] Perl szintaxisban működnek
A koü vetkezoő k: ● ● ● ● ● ●
\w \W \d \D \s \S
Kis- és nagybetűk, számok, aláhúzás jel Bármi, ami nincs benne a \w-ben Számjegyek Bármi, ami nem számjegy Bármi, ami nem nyomtatható (whitespace) Bármi, ami nincs benne a \s-ben
Operációs rendszerek gyakorlat
177
Regexp – halmazok IV. ●
Baó rmely karakter ● ● ● ●
●
. (pont) karakter Ez a legnagyobb karakterhalmaz Egyben a leggyakoribb elem is reguláris kifejezésekben Ha magára a . (pont) karakterre hivatkozunk, akkor a \. jelölést használjuk
Csak grep szintaxisnaó l ● ● ●
[[:alnum:]] [[:digit:]] [[:punct:]]
Operációs rendszerek gyakorlat
Alfanumerikus karakterek (betű, szám, _) Számjegyek (0-9) Központozó karakterek
178
Regexp – horgonyok ●
Pozicionaó lni tudunk veluü k: ● ● ● ●
^ $ \b \B
Sor eleje Sor vége Szóhatár (csak Perl szintaxisnál) Bármi, ami nem szóhatár (csak Perl szintaxisnál)
Operációs rendszerek gyakorlat
179
Regexp – kvantorok I. ●
Mennyiseó get jeloü lhetuü nk veluü k ● ● ●
●
* bármennyi előfordulás (0 is) ? 0, vagy 1 előfordulás + 1, vagy több előfordulás
Arra vonatkoznak, ami utaó n aó llnak. Peó ldaó ul: ● ● ● ● ●
.* \w+ [0-9-]? [aouei]+ [A-Z]*
Bármely karakterből bármennyi Szóalkotó karakterből legalább egy 0, vagy 1 szám, vagy kötőjel Legalább egy magánhangzó 0, vagy több nagybetű
Operációs rendszerek gyakorlat
180
Regexp – kvantorok II. ●
Tovaó bbi kvantorok tartomaó nyok jeloü leó seó re ● ● ● ●
●
{ennyi} {min,max} {,max} {min,}
Pontosan ennyi előfordulás Legalább min, legfeljebb max darab előfordulás Legfeljebb max előfordulás Legalább min előfordulás
Peó ldaó k ● ● ● ●
x{6} \w{,4} \.{2,} \d{3,8}
6db x Legfeljebb 4db alfanumerikus karakter Legalább 2db pont Legalább 3, legalább 8 szám
Operációs rendszerek gyakorlat
181
Regexp – példák – I. ●
●
Reguláris kifejezések alkotása az előbbiek egymás után írásával lehetséges Peó ldaó ul: ●
Egy szó: ● ● ●
●
Legyen az eleje nagybetű (pl. név): ● ●
●
[a-zA-Z]+ \w+ [[:alnum:]]+ [A-Z][a-zA-Z]+ [A-Z]\w+
Vezeték és keresztnév: ●
[A-Z][a-zA-Z]+ [A-Z][a-zA-Z]+
Operációs rendszerek gyakorlat
182
Regexp – példák – II. ●
Telefonszaó m ●
●
●
● ●
●
[0-9-]*, vagy [0-9-]+ Számok és kötőjel bármilyen sorrendben (0, vagy több, illetve 1, vagy több darab). [0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9] Pl. 06-20-1234567 és hasonló telefonszámokra illeszkedik, de fapados megoldás [0-9]+-[0-9]+-[0-9]+ Már jobb. It az egyes tagok bármennyi tagúak lehetnek. [0-9]{2}-[0-9]{2}-[0-9]{6,7} A korrekt megoldás. 06-[0-9]0-[0-9]{6,7} Lehetnek fix részek is a reguláris kifejezésben. \d{2}-\d{2}-\d{6,7} Perles reguláris kifejezés szintaxis.
Operációs rendszerek gyakorlat
183
Regexp – példák – III. ●
Bankszaó mlaszaó m ●
● ● ●
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][09][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] Működik! De ez tényleg nagyon fapados... [0-9]{8}-[0-9]{8}-[0-9]{8} Így korekt [[:digit:]]{8}-[[:digit:]]{8}-[[:digit:]]{8} Beszédesebb. \d{8}-\d{8}-\d{8} Perl szintaxissal.
Operációs rendszerek gyakorlat
184
Regexp – példák – IV. ●
Olyan „sima” faó jl, amit mindenki íórhat (ha az ls -l kimeneteó t vizsgaó ljuk) ●
●
^-.w..w..w 4 helyen fixen megmondjuk, hogy mi van, 5 helyen tetszőleges karakter állhat
Olyan „sima” faó jl, amit senki sem íórhat ●
^-.[^w]..[^w]..[^w] It bizonyos helyekről kitiltjuk a w betűt. A kétféle ^ jel jelentése egész más!
Operációs rendszerek gyakorlat
185
Regexp – példák – V. ●
Maó ssalhangzoó -magaó nhangzoó -maó ssalhangzoó magaó nhangzoó ● ●
● ●
Magánhangzók:[aouei] (Csak felsoroljuk a lisát.) Mássalhangzók: [^aouei] (Fel is sorolhatnánk a listát, de így egyszerűbb) Összerakva: [aouei][^aouei][aouei][^aouei] Ha a szó elején esetleg lehet nagybetű is: [aoueiAOUEI][^aouei][aouei][^aouei]
Operációs rendszerek gyakorlat
186
Egy újabb szabály: vagy kapcsolat – I. ●
●
Ha kifejezeó s egy reó szeó re toü bbfeó le lehetoő seó g is van, akkor a kifejezeó st kerek zaó roó jelbe tesszuü k eó s a lehetoő seó gek koü zeó | jelet teszuü nk. Pl. az eloő zoő peó lda: ● ●
●
Ez, vagy az a szoó : ●
●
[aouei]Halmazzal (csak egyedül álló karakterekkel megy.) (a|o|u|e|i) Vagy kapcsolatal (ez|az)
Egy naploó boó l a fontos bejegyzeó sek ●
(error|fault|fail)
Operációs rendszerek gyakorlat
187
Egy újabb szabály: vagy kapcsolat – II. ●
Eleó rhetoő WiFi haó loó zatok eó s jeleroő sseó guü k ●
●
iwlist wlan0 scan | grep -E '(ESSID|Quality)'
Persze a szavak helyett lehetnek bonyolultabb kifejezeó sek is
Operációs rendszerek gyakorlat
188
Regexp – példák – VI. ●
IP cíómek ● ●
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} Perl szintaxis. ●
A pontra a \. illeszkedik!
Operációs rendszerek gyakorlat
189
Néhány összetettebb példa – I. ●
Leghosszabb faó jl ●
●
ls -l | sort -n -k 5 | tail -n 1
Ha csak a faó jl meó rete eó s a faó jl neve kell: ●
●
ls -l | sort -n -k 5 | tail -n 1 | cut -c cut -c 30-38,50De sajnos ez nem jó!
Operációs rendszerek gyakorlat
190
Oszlopok vágása ●
AWK ● ● ●
Alfred Aho, Peter Weinberger és Brian Kernighan nevéből Teljes értékű programnyelv Egyszerűen lehet vele oszlopokat kiírni ● ● ●
ls -l | awk '{print $5 ”\t” $9}' Az aposztrófok közöt levő kifejezés egy programblokk. A $n az n. oszlopot írja ki.
Operációs rendszerek gyakorlat
191
Néhány összetettebb példa – II. ●
A leghosszabb faó jl joó l: ●
●
●
ls -l | sort -n -k 5 | tail -n 1 | '{print $5 ”\t” $9} Persze előte szűrhetünk is. Pl. a leghosszabb végrehajtható fájl: ls -l | grep ^-..x | sort -n -k 5 | tail -n 1 | '{print $5 ”\t” $9}
Operációs rendszerek gyakorlat
192
Felhasználók shelljei ●
A /etc/passwd egy sora ● ●
●
root:x:0:0:root:/root:/bin/bash Az utolsó oszlop a shell.
A kuü loü nboü zoő shellek kigyuő jteó se ●
●
●
cat /etc/passwd | cut -d: -f 7 De ez többször is kiírja őket. cat /etc/passwd | cut -d: -f 7 | sort -u Csak a különbözők. cat /etc/passwd | cut -d: -f 7 | sort -u | wc -l Hány darab.
Operációs rendszerek gyakorlat
193
Egy igazán összetett példa ●
Milyen idoő lesz? wget idokep.hu/index.html -q -O - | grep "<area shape='rect' coords='5,16,24,232'" -A 30 | cut -d'<' -f3,10
●
Magyaraó zat: ●
●
●
Letöltjük az idokep.hu/index.html-t és a fájlt a standard kimenetre íratjuk. A -q kapcsoló az egyéb információ kiírását tiltja. Megkeressük, hogy hol van a lista eleje, ot keresünk egy csak ot előforduló stringet, amire grepelünk. A keletkező listát egy kicsit megvagdossuk. (Nem tökéketes, később majd finomítjuk.)
Operációs rendszerek gyakorlat
194
Vegyes feladatok/állatok – I. ●
●
Az allatok.txt minden sora majmokroó l, vagy víózilovakroó l szoó loó aó llíótaó sokat tartalmaz. Minden sorban az aó llatok eloő tt egy szaó m van, illetve valahol ezt koü vetoő en egy szaó m eó s egy szoó . IÍrjuk ki csak az aó llatokat eó s azok szaó maó t, valamint a maó sik szaó m-szoó paó rt. Peó lda: A Veszpremi Allatkertben 12 majom reggel 5 banant evett. Delutan 5 orakor Pecsett 3 vizilo 32 citromot fogyasztott. Budapesten 21 orakor 17 majom fejenkent 6 banant vacsorazott.
Operációs rendszerek gyakorlat
195
Vegyes feladatok/állatok – II. ●
Megoldaó s: open(BE, "allatok.txt"); while ($sor=) { if ($sor=~/\b(\d+) (majom| vizilo)\b.*\b(\d+) (\w+)\b/) { ($db, $allat, $szam, $szo)=($1, $2, $3, $4); print "$db $allat --> $szam $szo\n"; } } close(BE);
Operációs rendszerek gyakorlat
196
Vegyes feladatok/bevásárlólista – I. ●
●
Szaó moljuk oü ssze a bevaó saó rloó lista oü sszkoü ltseó geó t! Az aó rat mindig a forint, vagy ft szoó koü veti, a darabszaó mot a darab, vagy a db. Peó lda: Buza finomliszt 1 kg 250 forint 1 darab Zsemle 22 ft 4 db Joghurt 120 forint 2 db
Operációs rendszerek gyakorlat
197
Vegyes feladatok/bevásárlólista – II. ●
Megoldaó s: #!/usr/bin/perl -w open(BE, "bevasarlolista.txt"); while ($sor=) { if ($sor=~/\b(\d+) (forint|ft)\b.*\b(\d+) (db|darab)\b/) { ($ft, $db)=($1, $3); $osszeg+=$ft*$db; } } close(BE); print "Osszesen $osszeg forint\n";
Operációs rendszerek gyakorlat
198
lista_nagy.txt ●
A lista_nagy.txt egy „aó llatorvosi loó ”. Minden sora 4db, tabulaó torral elvaó lasztott mezoő t tartalmaz: ● ● ● ●
●
Név (vezetéknév és keresztnév, szóközzel elválasztva) Lakhely Irányítószám Telefonszám
A lista_nagy.txt-re korlaó tlan mennyiseó guő feladat talaó lhatoó ki.
Operációs rendszerek gyakorlat
199
A lista.txt oszlopainak beolvasása ●
Csak a sor beolvasaó sa utaó ni reó sz, regexp segíótseó geó vel:
●
●
$sor=~/^(\w+ \w+)\t(\w+)\t(\d{4})\t(.*)$/; ($nev, $hely, $ir, $tel)=($1, $2, $3, $4); A regexpet 4, zárójellel tagolt részre osztjuk. Ezek fognak megfelelni az egyes oszlopoknak.
Az egyes mezoő ket kuü loü n is szedhetjuü k:
● ●
$sor=~/^(\w+) (\w+)\t(\w+)\t(\d{4})\t(\d{2})(\d{2})-([0-9-]+)$/; ($vez, $ker, $hely, $ir, $_06, $korzet, $telvege)=($1, $2, $3, $4, $5, $6, $7); It a nevet és a telefonszámot is külön bontotuk. Probléma: Ez már nem túl átlátható.
Operációs rendszerek gyakorlat
200
A regexp több sorba való bontása ●
Az x kapcsoloó hataó saó ra a regexpet toü bb sorba bonthatjuk. Ilyenkor a regexp-ben levoő szoó koü zoü k helyett mindenkeó ppen a ”\ ” hasznaó lata szuü kseó ges. $sor=~/^(\w+)\ (\w+) \t(\w+) \t(\d{4}) \t(\d{2})-(\d{2})-([0-9-]+)$/x; ($vez, $ker, $hely, $ir, $_06, $korzet, $telvege) =($1, $2, $3, $4, $5, $6, $7);
Operációs rendszerek gyakorlat
201
A split függvény ●
Joó l strukturaó lt szoü vegeket nem csak regexppel, hanem a split fuü ggveó nnyel is szeó t tudunk bontani. ●
● ●
@tomb=split(/elvalaszto/, $string); Az /elvalaszto/ egy regexp. Ezzel tudjuk leírni a mezőelválasztót. (Így az nem csak egy fix string lehet.) Az egyes mezők a @tomb egyes celláiban jelennek meg. Egy harmadik paramétert is adhatunk a split-nek. Ekkor csak az első n mezőt dolgozza fel. ($nev, $hely, $ir, $tel)=split(/\t/, $sor);
Operációs rendszerek gyakorlat
202
Melyik szolgáltatónál hányan vannak? ●
Szaó moljuk meg, hogy melyik telefon szolgaó ltatoó naó l haó ny ember van. $sor=~/^\w+\ \w+ \t\w+ \t\d{4} \t\d{2}-(\d{2})-[0-9-]+$/x; $korzet=$1; if ($korzet == 20) {$tel20++;} elsif ($korzet == 30) {$tel30++;} elsif ($korzet == 70) {$tel70++;}
Operációs rendszerek gyakorlat
203
Lista szétbontása szolgáltató szerint – I. ●
Vaó logassuk szeó t haó rom faó jlba a kuü loü nboü zoő szolgaó ltatoó naó l levoő embereket. open(BE, ”lista_nagy.txt”); open(KI20, ”>ki20.txt”); open(KI30, ”>ki30.txt”); open(KI70, ”>ki70.txt”); while($sor=) { #Ide jön majd a program magja. } close(BE); close(KI20); close(KI30); close(KI70);
Operációs rendszerek gyakorlat
204
Lista szétbontása szolgáltató szerint – II. ●
A program magja: ($nev, $hely, $ir, $tel)=split(/\t/, $sor); if ($tel=~/^06-20/) { print KI20 ”$nev --- $tel\n”; } elsif #A többi szolgáltató...
Operációs rendszerek gyakorlat
205
Lista szétbontása a helységnevek hossza szerint – I. ●
●
A 4 betuő s helyen lakoó kat a 4betus.txt-be, az 5 betuő s helyen lakoó kat az 5betus.txt-be... rakjuk. Ne nyissunk meg tizen-egyneó haó ny faó jlt! Ehelyett minden faó jlt koü zvetlenuü l az íóraó s eloő tt fogunk megnyitni hozzaó fuő zeó sre. $hossz=length($hely); open(KI, ”>>”.$hossz.”betus.txt”); print KI …... close(KI);
Operációs rendszerek gyakorlat
206
Lista szétbontása a helységnevek hossza szerint – II. ●
●
Ez persze csak akkor muő koü dik helyesen, ha a faó jlok nem leó teztek, vagy uü resek voltak. A system fuü ggveó nnyel shell parancsokat tudunk kiadni: ●
●
system(”rm *betus.txt”); Ezzel törölni tudjuk azokat a fájlokat, amikbe majd írni fogunk.
A Perlnek a faó jlmuő veletekre van sajaó t fuü ggveó nye is, peó ldaó ul a toü rleó sre az unlink. ●
unlink <*betus.txt>; A <*betus.txt> egy glob. A kifejezés a mintára illeszkedő fájlok listáját adja vissza.
Operációs rendszerek gyakorlat
207
Hisztogram – I. ●
A hisztogram jelenteó se: Szaó moljuk meg, miboő l haó ny darab van. Szaó mok eseteó ben koü nnyuő a dolgunk:
●
while($szam=<>) { $db[$szam]++; } A @db tömb minden eleme azt mutatja meg, hogy az adot számból hány darabot írtunk be.
Operációs rendszerek gyakorlat
208
Hisztogram – II. ●
●
Mi a helyzet betuő k, vagy szavak eseteó n? Itt egy toü bben taó rolhatjuk a betuő t, vagy szoó t, egy maó sikban a darabszaó mot. Megkeressuü k a beíórt dolgot a toü bben. Ha megvan, akkor a hozzaó tartozoó szaó mlaó loó t noü veljuü k. Ha nem talaó ljuk, akkor mindkeó t toü mbhoü z hozzaó veszuü nk egy uó j elemet.
Operációs rendszerek gyakorlat
209
Hisztogram – III. while ($adat=<>) { chomp($adat); $van=0; for ($i=0; $i<=$a#dolgok; $i++) { if ($dolgok[$i] eq $adat) { $van=1; $db[$i]++; } } unless($van) { push(@dolgok, $adat); push(@db, 1); } } ●
De ezt lehet egyszeruő bben is a hash segíótseó geó vel.
Operációs rendszerek gyakorlat
210
A hash – I. ●
●
A hash-ben kulcs-eó rteó k paó rokat tudunk taó rolni. Egy olyan toü mbroő l van szoó , amiben az indexek nem felteó tlenuü l szaó mok, hanem akaó r szavak is lehetnek. Leó tezik meó g raó az asszociatíóv toü mb eó s a hasíótoó toü mb elnevezeó s is.
●
A hash jeloü leó se: %valtozonev
●
Egy elemhez íógy feó rhetuü nk hozzaó :
●
$a=$pelda{”kulcs”}; $pelda{”kulcs”}=$b; A kulcs lehet változó is.
Operációs rendszerek gyakorlat
211
A hash – II. ●
Akkor most laó ssuk ugyanezt hash segíótseó geó vel:
●
●
while ($szo=<>) { chomp($szo); $db{$szo}++; } Igen! Ez ennyi! Persze ki is kell nyeri az adatokat, erre való a keys függvény, ami visszaadja a hash kulcsait, amin egy foreach segítségével tudunk vég menni: foreach $szo (keys %db) { print $szo.” --> ”.$db{$szo}.”\n”; }
Operációs rendszerek gyakorlat
212
A hash – III. ●
●
Az eddigi talaó n legrosszabb teljesíóteó si araó nyuó beugroó : A lista_nagy.txt-boő l szuő rjuü k ki azokat az embereket, akiknek a telefonszaó ma toü bbszoü r is szerepel. Eloő szoü r oü sszegyuő jtjuü k, hogy melyik telefonszaó m haó nyszor szerepel: open(BE, ”lista_nagy.txt”); while($sor=) { chomp($sor); if ($sor=~/\t(06-[0-9-]+)$/) { $szamok{$1}++; } } close(BE);
Operációs rendszerek gyakorlat
213
A hash – IV. ●
Majd az oü sszegyuő jtoü tt adatok alapjaó n felkiaó ltoó jellel, vagy aneó lkuü l kiíórjuk a sorokat: open(BE, ”lista_nagy.txt”); while ($sor=) { chomp($sor); $sor=~/^(.*)\t(06-[0-9-]+)$/; ($eleje, $tel)=($1, $2); print $eleje; if ($szamok{$tel}>=2) {print ”!”;} print $tel; } close(BE);
Operációs rendszerek gyakorlat
214
Split és regexp – I. ●
Feladat: Adott egy lista, amiben az elsoő oszlop egy szoü veg, a maó sodik oszlop egy szaó m. A szaó m lehet egeó sz, vagy toü rt, negatíóv, vagy pozitíóv. Az oszlopok koü zti elvaó lasztoó lehet egy, vagy toü bb space, tabulaó tor, ” - ”, ” -- ”, vagy vesszoő . IÍrjuk ki egyseó ges formaó tumban, valamint íórjuk ki a szaó mok aó tlagaó t. meres1,164 valami 812.75 foobar48 -- -0.71 egyik, -52
Operációs rendszerek gyakorlat
215
Split és regexp – II. ●
A feladat megoldhatoó regexp segíótseó geó vel: $sor=~/^(.*)( +|\t|, *| - | -- )([0-9.-]+)$/; ($szoveg, $szam)=($1, $3); push(@szoveg, $szoveg); push(@szam, $szam); $db++; $osszeg+=$szam;
●
De a splitet is segíótseó guü l híóvhatjuk: ($szoveg, $szam)=split(/( +|\t|, *| - | -- )/, $sor);
Operációs rendszerek gyakorlat
216
Csere reguláris kifejezéssel – I. ●
Szintaxis ●
●
$szoveg=~s/mit/mire/; A „mit” egy reguláris kifejezés, a „mire” pedig egy szöveg. Ami a „mit”-re illeszkedik, azt a „mire” szövegre cseréli. A „mire” szövegben vissza is tudunk hivatkozni a „mit” egyes részeire. $szoveg=~s/Magyar Koztarsasag/Magyarorszag/; $szoveg=~/huje/hulye/; $szoveg=~/muszaly/muszaj/;
Operációs rendszerek gyakorlat
217
Csere reguláris kifejezéssel – II. ●
Vagy ki is emelhetuü nk valamit. Pl. tegyuü k szoü gletes zaó roó jelbe a Glomer szoó t! $szoveg=~s/Glomer/\[Glomer\]/;
●
Ezzel keó t probleó ma van: ● ●
●
Csak az elsőt fogja megtalálni. Csak ezt az egy fix szöveget tudja cserélni.
Ha minden megtalaó laó st csereó lni szeretneó nk, akkor hasznaó ljuk a g kapcsoloó t: $szoveg=~s/Glomer/\[Glomer\]/g;
Operációs rendszerek gyakorlat
218
Csere reguláris kifejezéssel – III. ●
Ha dinamikusabbaó akarjuk tenni, akkor vissza kell hivatkoznunk: ●
$szoveg=~s/(szo1|szo2|szo3)/\[$1\]/g; A $1 it is az első zárójeles szövegrészt jelöli.
Operációs rendszerek gyakorlat
219
Összetettebb feladatok
Dobókocka – I. ●
Generaó ljunk 1-toő l 6-ig veó letlen-szaó mokat Bash-ben. ●
A $RANDOM környezeti változó minden alkalommal más véletlen-számot ad. $kocka=$(($RANDOM % 6 + 1)) /* int rand() { return 4; //Szabályos kockadobással választva. } */
Operációs rendszerek gyakorlat
222
Dobókocka – II. ●
Rajzoljuk is ki a kockaó t! Ehhez eloő szoü r egy minden poü ttyoü t tartalmazoó kockaó t rajzolunk ki eó s majd szelektaó lunk a poü ttyoü k koü zuü l. echo echo echo echo echo echo echo echo echo echo echo echo echo
-n ”*” -n ” ”*” -n ”*” -n ” -n ”*” -n ” ”*”
”
” ”
-n ”*” -n ” ”*”
Operációs rendszerek gyakorlat
” 223
Dobókocka – III. ●
Majd minden poü ttnyneó l kigondoljuk, hogy az melyik szaó mnaó l laó thatoó eó s aszerint vagy egy csillagot, vagy egy szoó koü zt íórunk ki. if [ $kocka -eq 2 ] || [ $kocka -eq 3 ] || [ $kocka -eq 4 ] || [ $kocka -eq 5 ] || [ $kocka -eq 6 ] then echo -n ”*” else echo -n ”” fi
Operációs rendszerek gyakorlat
224
Dobókocka – IV. ●
Ezt lehet roü videbben is: if echo $kocka | grep -q '[23456]' then #stb...
●
Soő t, meó g az ideó zoő jelet eó s a szoü gletes zaó roó jelet is megspoó rolhatjuk: if echo 23456 | grep -q $kocka then #stb...
Operációs rendszerek gyakorlat
225
Fej, vagy írás? – I. ●
Egy hagyomaó nyos megoldaó s: szam=$((RANDOM % 2)) if [ $szam -eq 1 ] then echo fej else echo iras fi
Operációs rendszerek gyakorlat
226
Fej, vagy írás? – II. ●
A truü kkoü s megoldaó s:
● ● ●
echo $RANDOM | sed 's,^.*\(.\)$,\1,' | sed 's,[01234],fej,' | sed 's,[56789],iras,' Az első sed csak az utolsó számot hagyja meg. A következő sed a 0...4 számokat „fej”-re cseréli. A következő sed az 5..9 számokat „iras”-ra cseréli.
Operációs rendszerek gyakorlat
227
Webgaléria – I. ●
Keó t fontos teendoő : ● ●
●
Thumbnail-ek generálása (már volt róla szó, csak bash-ben). HTML fájl generálása
Leó peó sek: ● ●
●
Fejléc Egy sorban x darab thumbnail kirakása linkként, illetve a thumbnail-ek előállítása. Lábléc
Operációs rendszerek gyakorlat
228
Webgaléria – II. ●
A fejleó c ●
●
●
Triviális megoldás soronként egy printel: open(KI, ”>index.html”); print KI ”\n”; print KI ”\n”; print KI ”Webgaleria\n”; print KI ”\n”; print KI ”\n” Persze az egészet ki lehet írni egy printel is: print KI ”\n\nWebgaleria \n\n\n”; Egyik sem néz ki valami jól...
Operációs rendszerek gyakorlat
229
Webgaléria – III. ●
Szebb megoldaó s: „Here-document”:
●
print KI < Webgaleria FOO ; A << után egy azonosító következik. Ezt az azonosítót keresi a Perl. A kető közöt egy több soros stringet lehet megadni.
Operációs rendszerek gyakorlat
230
Webgaléria – IV. ●
A thumbnailek kirakaó sa ●
Egy globbal megyünk végig a fájlokon és reguláris kifejezéssel ellenőrizzük, hogy kép-e. Ha igen, akkor konvertálunk és kiírjuk a HTML tartalmat. mkdir(”small”); foreach $file (<*>) { if ($file=~/^(.*)(\.(jpe?g|png|gif))$/i) { ($eleje, $vege)=($1, $2); $thumbnail=$eleje.”-small”.$vege; system(”convert $file -resize \>256x256 $thumbnail”); print KI ””; print KI ””; print KI ”\n”; if (++$counter % 4) {print KI ”
\n”;} } }
Operációs rendszerek gyakorlat
231
Webgaléria – V. ●
Majd a tag-eket eó s a faó jlt lezaó rjuk:
●
print KI ”\n”; close(KI); Egy új dolog is előjöt: az mkdir függvény.
Operációs rendszerek gyakorlat
232
LaTeX képek – I. ●
●
Egy .tex faó jlboó l nyerjuü k ki a keó peket eó s toü roü ljuü nk minden maó st. Egy whitelist tartalmaó t hagyjuk meg. A .tex faó jlban a keó pek a koü vetkezoő moó don vannak beszuó rva:
●
●
\epsfig{file=rendszer-architektura.eps, angle=0, width=\textwidth} Az architektura.eps-t töltjük be.
A feladatok: ● ● ●
A whitelist-re felveszünk néhány fix dolgot. A whitelist-hez hozzáadunk minden képet. Minden olyan fájlt, ami nincs rajta a whitelisten. törlünk.
Operációs rendszerek gyakorlat
233
LaTeX képek – II. ●
A whitelist: @whitelist=(”diplomamunka.tex”, ”make.sh”, ”cite.bib”, ”caption.sty”, ”caption3.sty”, ”draftwatermark.sty”, ”everypage.sty”, ”mybibstyle.sty”);
●
De nekuü nk jobb lenne a hash: %whitelist=map {$_ => 1} @whitelist; A map egy hash-t készít a tömb elemei alapján. A hash minden elemének kulcsa a tömb egy-egy eleme lesz, az érték pedig 1.
Operációs rendszerek gyakorlat
234
LaTeX képek – III. ●
Ezutaó n a diplomamunka.tex soraiboó l kiszedjuü k a szaó munkra fontosakat eó s feltoü ltjuü k a %whitelist hasht. open(BE, ”diplomamunka.tex”); while ($sor=) { if ($sor=~/\\epsfig.*file=([\w.-]+)/) { $whitelist{$1}=1; } } close(BE);
Operációs rendszerek gyakorlat
235
LaTeX képek – IV. ●
Majd toü rluü nk mindent, ami nincs a whtielist-en: foreach $file (<*>) { unless ($whitelist{$file}) { system(”rm -rf $file”); } }
Operációs rendszerek gyakorlat
236
További beugró feladatok
Római irányítószám – I. ●
Feladat: A nevsor.txt fájlból írjuk ki a neveket és a településeket. Ha a település Budapest, akkor a kerületet is írjuk ki római számmal. (A kerület az irányítószám 2. és 3. karaktere.) A bemenő fájl első mezője a név, a több információ sorrendje tetszőleges
Operációs rendszerek gyakorlat
238
Római irányítószám – II. ●
Peó lda: $ cat nevsor.txt Tal Anett, 9090 Pannonhalma, 06-20-958-2732 Sipos Geza, 06-1-2317-675, 1105 Budapest Szasz Bela, 1221 Budapest, 06-70-343-8915 $ ./irszam.pl Tal Anett: Pannonhalma Sipos Geza: Budapest X. kerulet Szasz Bela: Budapest XXII. kerulet
Operációs rendszerek gyakorlat
239
Római irányítószám – III. ●
Megoldaó s: ●
● ●
Az irányítószámok római számmá való konvertálásához egy tömböt fogunk használni, aminek az i.eleme az i római alakját tárolja. @romai=(0, I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, XIII, XIV, XV, XVI, XVII, XVIII, XIX, XX, XXI, XXII, XXIII); A stringeket it nem kötelező idézőjelbe tenni. A vesszőket is elhagyhatjuk a következő szintaxissal: @romai=qw(0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII, XXIII);
Operációs rendszerek gyakorlat
240
Római irányítószám – IV. ●
Majd be kell olvasni a faó jlt eó s minden sort illeszteni: open(BE, ”nevsor.txt”); while($sor=) { $sor=~/^(\w+ \w+)/; $nev=$1; $sor=~/\d(\d{2})\d (\w+)/; ($irszk, $telepules)=($1, $2); print ”$nev: $telepules”; if ($telepules eq ”Budapest”) { print ” $romai[$irszk]. kerulet”; } print ”\n”; } close(BE);
Operációs rendszerek gyakorlat
241
Irányítószám keresése ●
Feladat: Keressük meg az irányítószámot a beolvasot sorban és írjuk ki kötőjelek közöt. Az irányítószám a sor elején, végén és bármely köztes helyen is állhat.
●
Megoldaó s: $sor=<>; chomp($sor); if ($sor=~/\b(\d{4})\b/) { print ”-$1-\n”; }
Operációs rendszerek gyakorlat
242
Minden fájl n. sora – I. ●
Feladat: ●
●
Írjuk ki minden fájl n. sorát a megadot formátumban. A program 1. paramétere az n értéke, a többi (tetszőleges számú) paraméter a fájlok nevét tartalmazza.
Peó lda: A(z) valami.txt 4. sora: Pelda szoveg A(z) masik.txt 4. sora: Masik pelda szoveg
Operációs rendszerek gyakorlat
243
Minden fájl n. sora – II. ●
Megoldaó s: n=$1 shift while [ ”$1” ] do head -n $n ”$1” | tail -n 1 shift done Az első két sor eltárolja az első paramétert, illetve törli azt a listából. Ezután egyenként végigmegyünk a többi paraméteren és kiírjuk az n. sort.
Operációs rendszerek gyakorlat
244
Leggyakoribb keresztnév – I. ●
Feladat: ●
●
Keressük meg a leggyakrabban szereplő keresztnevet és írjuk ki, hogy melyik keresztnév ez, illetve hogy hányszor szerepel. A lista_nagy.txt-ből dolgozzunk.
Megoldaó si menet: ●
●
A lista_nagy.txt soraiból elég csak a neveket illeszteni. Ehhez reguláris kifejezést fogunk használni. A gyakoriságokat hash-ben fogjuk tárolni.
Operációs rendszerek gyakorlat
245
Leggyakoribb keresztnév – II. ●
Megoldaó s: open(BE, "lista_nagy.txt"); while($sor=) { $sor=~/^\w+ (\w+)\t/; $ker=$1; $gyak{$ker}++; } close(BE);
Operációs rendszerek gyakorlat
246
Leggyakoribb keresztnév – III. ●
Folytataó s:
●
●
@ker=keys %gyak; @ker=sort {$gyak{$b} <=> $gyak{$a}} @ker; print $ker[0]; print " ($gyak{$ker[0]} elofordulas)\n"; A @ker a %gyak kulcsait, vagyis a keresztneveket tartalmazza. Ezt a tömböt rendezzük a gyakoriság szerint, tehát a sort függvénynek azt mondjuk, hogy az összehasonlításkor a gyakoriságokat vegye figyelembe. Erre való a $gyak{a} és a $gyak{b}, valamint a <=> operátor. A $a és a $b szokásos sorrendje fel van cserélve, tehát a rendezés fordítot sorrendben történik. A rendezés után a $ker[0] fogja tartalmazni a leggyakoribb keresztnevet, a $gyak{$ker[0]} pedig ennek gyakoriságát.
Operációs rendszerek gyakorlat
247
HTML vizsgalap – I. ●
Feladat: ●
Egy HTML formátumú vizsgalapból nyerjük ki a hallgatók vezetéknevét és Neptun kódját. A Neptun kódot csillagok közöt írjuk ki. A HTML fájl releváns sorainak formátuma: Herczeg Vilmos (AB4PQ7)
|
Operációs rendszerek gyakorlat
248
HTML vizsgalap – II. ●
Megoldaó s:
●
●
open(BE, "nevsor.html"); while($sor=) { chomp($sor); if ($sor=~/28%\">(\w+)\b.*\(([A-Z0-9]{6})\)/) { ($vez, $neptun)=($1, $2); print "$vez ($neptun)\n"; } } close(BE); A reguláris kifejezésben azt használtuk ki, hogy a név mindig egy fix elem után kövezkezik, illetve hogy a Neptun kód zárójelben van és csak nagybetűket és számokat tartalmazhat. A reguláris kifejezésben a \( a zárójel karaktert a ( pedig a zárójelezés műveletét jelenti.
Operációs rendszerek gyakorlat
249
Verziószámok XML-ből – I. ●
Feladat: ●
●
●
Keressük ki a megadot verziójú szervereket egy XML fájlból és írjuk ki az adatait. A verziószámot a billentyűzetről kérjük be. Az serverlist.xml tartalmazza a bemenő adatokat. Az XML fájl formátuma: <server name="foo" osname="linux" osversion="2.0.34"> 10.0.0.103 10.0.1.103 <server name="bar" osname="beos" osversion="4.0"> 4.4.4.4 <server name="flow" osname="sunos" osversion="2.0.34"> 193.6.33.202 192.168.1.6 10.5.0.7
Operációs rendszerek gyakorlat
250
Verziószámok XML-ből – II. ●
Megoldaó s: $ver=<>; chomp($ver); open(BE, "serverlist.txt"); while($sor=) { chomop($sor); # Ide kerül majd a feldolgozás. } close(BE);
Operációs rendszerek gyakorlat
251
Verziószámok XML-ből – III. ●
Megoldaó s (folytataó s):
}
if ($sor=~/<server/) { if ($sor=~/name=\"([^"]*)\"/) { $name=$1; } if ($sor=~/osname=\"([^"]*)\"/) { $osname=$1; } if ($sor=~/osversion=\"([^"]*)\"/) { $osversion=$1; } if ($osname eq $ver) { print $osname."\n"; print "\tversion: ".$osversion."\n"; print "\tserver name: ".$name."\n"; }
Operációs rendszerek gyakorlat
252