rendszerprogramozás linux környezetben -...

13
Készítette: Petróczy Tibor Rendszerprogramozás Linux környezetben 1 Rendszerprogramozás Linux környezetben 1. Unix shellek és shell scriptek Miért, és mikor: - használtál már UNIX/Linux rendszert - ismered a rendszer alapfilozófiáját - nem a GUI felület az elsődleges - hatékony és gazdaságos üzemeltetés A shell tulajdonságai: - parancsértelmező és programozási nyelv - a parancsokat a standard inputról vagy állományból olvassa - shell script segítségével egyszerűen bővíthető a parancskészlet - paraméterezhető (kapcsolók) - string változókra és vezérlési szerkezetekre épül - egyszerű átirányítás (>, <) - csővezeték használata - beépített parancsok használhatósága Shell részletesebb ismertetése a „Linux alapismeretek” alatt. Shellek beállítása alapvetően az /etc/profile fájl alatt érhető el. (~/.profile, ~/.bach_profile…) Shell script futtatása: - shell-en keresztül -> /bin/sh fájlnév - futtathatóvá kell tenni -> chmod 700 fájlnév, majd ./fájlnév - sticky bit használata (más jogosultságával való futtatás) - kezdő sor a shell elérési utja: #!/bin/sh Futtatáskor alapvetően 2 hiba fordulhat elő, az egyik, hogy maga a script állomány nincs futtatható állapotra állítva, a másik pedig, hogy olyan helyről szeretnénk futtatni az állomány, amely nincs benne a PATH-ban. Parancsok: - Ctrl-C: program futásának megszakítása - Ctrl-D: programból való kilépés (exit) - Ctrl-Z: program futásának felfüggesztése (jobs, fg %n)

Upload: doantu

Post on 17-Feb-2019

244 views

Category:

Documents


0 download

TRANSCRIPT

Készítette: Petróczy Tibor Rendszerprogramozás Linux környezetben

1

Rendszerprogramozás Linux környezetben

1. Unix shellek és shell scriptek

Miért, és mikor:

- használtál már UNIX/Linux rendszert

- ismered a rendszer alapfilozófiáját

- nem a GUI felület az elsődleges

- hatékony és gazdaságos üzemeltetés

A shell tulajdonságai:

- parancsértelmező és programozási nyelv

- a parancsokat a standard inputról vagy állományból olvassa

- shell script segítségével egyszerűen bővíthető a parancskészlet

- paraméterezhető (kapcsolók)

- string változókra és vezérlési szerkezetekre épül

- egyszerű átirányítás (>, <)

- csővezeték használata

- beépített parancsok használhatósága

Shell részletesebb ismertetése a „Linux alapismeretek” alatt.

Shellek beállítása alapvetően az /etc/profile fájl alatt érhető el. (~/.profile, ~/.bach_profile…)

Shell script futtatása:

- shell-en keresztül -> /bin/sh fájlnév

- futtathatóvá kell tenni -> chmod 700 fájlnév, majd ./fájlnév

- sticky bit használata (más jogosultságával való futtatás)

- kezdő sor a shell elérési utja: #!/bin/sh

Futtatáskor alapvetően 2 hiba fordulhat elő, az egyik, hogy maga a script állomány nincs futtatható

állapotra állítva, a másik pedig, hogy olyan helyről szeretnénk futtatni az állomány, amely nincs

benne a PATH-ban.

Parancsok:

- Ctrl-C: program futásának megszakítása

- Ctrl-D: programból való kilépés (exit)

- Ctrl-Z: program futásának felfüggesztése (jobs, fg %n)

2

2. Shell alapelemek

Fontosabb környezeti változók:

- $HOME: login katalógus neve

- $PATH: keresési út a programok végrehajtásához

- $MAIL: elérési út ahova a mailjeink érkeznek

- $PS1: elsődleges prompt

- $PS2: másodlagos prompt

- $EDITOR: alapértelmezett szövegszerkesztő

- $PWD: aktuális munkakönyvtár

- $OSTYPE: operációs rendszer típusa

- $SHELL: jelenleg futó shell típusa

- $TERM: terminál típusa

- $RANDOM: véletlen szám

- $USER: aktuális felhasználói név

Változók használata:

- valtozo=ertek

- valtozo1=45

- valtozo2=”Test szoveg”

- értékadásnál nincs szóköz az egyenlőség bal és jobb oldalán!

- minden változót szövegként kezel

- a szöveget „…” jelek közé kell tenni

- változó kiíratása a $-jel használatával: echo $valtozo1

- ’…’ : betű szerinti kiíratás, ekkor nincs értelmezés, pl: echo ’Valtozo: $valtozo1’

- „…” : shell számára értelmes karaktereket értelmezi és behelyettesíti, pl: echo „Valtozo:

$valtozo1”

- `…` : parancsvégrehajtás, behelyettesítés

Shell belső változói:

- $# (parancssori paraméterek száma)

- $n (n-edik parancssori paraméter értéke, max. 9)

- $0 (aktuális héjprogram neve)

- $$ (futó program azonosítója)

- $? (exit státusz)

- $- (a héjprogramot végrehajtó héjnak átadott kapcsolók)

- $* (az összes paraméter egyben egyetlen stringként)

Matematikai kifejezések:

- < -lt (kisebb - less)

- <= -le (kisebb egyenlő – less equal)

- = -eq (egyenlő - equal)

- == -eq (Egyenlő - equal)

- != -ne (nem egyenlő – not equal)

- >= -ge (nagyobb egyenlő – greater equal )

3

- > -gt (nagyobb - greater)

- +, -, *, /, % (a szorzás védőkarakterrel értelmezendő: \* )

- -a logikai és ( | )

- -o logikai vagy ( & )

- ! logikai tagadás

- expr(művelet) : végrehajtás

4

3. Átirányítások

Parancs és adatfeldolgozás:

1. Szabványos bemenetre érkező adatokat fogadja (billentyűzet, file, másik program kimenete,

hardver eszköz)

2. Feldolgozás

3.a Szabványos kimenetre küldi (képernyő, file, másik program bemenete, hardver eszköz)

3.b Szabványos hibacsatorna (Hiba csatorna + egyéb információk) -> fájlba, képernyőre

Típusok:

- program > file (program kimenete fájlba, ha létezik felülírja, ha nem létrehozza)

- program >> file (program kimenete fájlba hozzáfűzéssel ha létezik, ha nem létrehozza)

- program < file (program bemenete fájlból)

- program 1 | program 2 (első program kimenete a másik program bemenete)

pl: program > /dev/audio, program > /dev/printer, program > /dev/null

Szűrők: tipikusan a stdin-ról olvasnak és a stdout-ra írnak. Egyszerűen csővezetékbe szervezhetőek.

Elágaztatás: “tee” parancs

Elágazás segítségével egyidejüleg megkapjuk a képernyőn a végeredményt + fájlba írjuk a szükséges

információkat.

pl: ps aux | sort | tee filenev

Leggyakoribb szűrők:

- cat fájlok összemásolása

- more fájlok kiírásának tördelése

- less fájlok kiírásának tördelése

- head fájl első n sora

- tail fájl utolsó n sora

- tee adatfolyam elágaztatás

- sort sorbarendezése

- tr karakterhelyettesítő

- wc sor és karakterszámláló

- diff fájl összehasonlítása

- sed adatfolyam editor

- uniq előfordulás vizsgálat

5

4. Vezérlési szerkezetek

A. Feltételkezelés (if)

if [logikai feltétel]

then

parancsok

elif [logikai feltétel]

then

parancsok

else

parancsok

fi

A feltétel kezelés során használhatjuk a “test” parancsot, vagy a *…+ zárójel part.

A “test” parancs segítségével kifejezések kiértékelése:

Fájlokra alkalmazva:

Szintaktika: test [kapcsoló] [file]

Kapcsolók

–r Értéke igaz, ha a fájl létezik és olvasható

-w írható

-x futtatható

–f Értéke igaz, ha a fájl létezik

–s Értéke igaz, ha a fájl létezik és hossza nem nulla

-b blokkos eszköz

-c karakteres eszköz

-d könyvtár

-l közvetett hivatkozás

-p csővezeték

-e létezik

-G saját csoportba tartozik

-O saját tulajdonba tartozik

file1 –nt file2 a file1 újabb, mint a file2

file1 –ot file2 a file1 régebbi, mint a file2

file1 –ef file2 afile1 és file2 azonos állományt jelöl

Karakterlánc kapcsolók:

test $str1=$str2 Értéke igaz, ha a 2 változó értéke megegyezik

test $str1 != $str2 Értéke igaz, ha a 2 string nem egyenlők

test –z $str Értéke igaz, ha a változó hossza nulla

test –n $str Értéke igaz, ha a változó hossza nem nulla

Számokra értelmezve:

Használjuk az aritmetikai összehasonlító kifejezéseket

6

B. Ciklusok (for)

A shell programozás alapvető for ciklus kezelése:

for változó in lista

do

parancsok

done

Bash script esetében használható a feltételes for ciklus kezelés:

for (( kezdőérték; feltétel; léptetés ))

do

parancsok

done

C. Ciklusok (while)

A ciklus addig fut, ameddig a logikai kifejezés értéke igaz!

while [ logikai kifejezés ]

do

parancsok

done

Figyeljük a cikluson belüli változó növelésére a feltétel függvényében, hogy ne kapjunk

végtelen ciklust, lehetséges megoldások:

valtozo=`expr $valtozo + 1`

valtozo=$((valtozo+1))

true $((valtozo++))

D. Ciklusok (until)

A ciklus addig fut, ameddig a logikai kifejezés értéke hamis!

until [ logikai kifejezés ]

do

parancsok

done

E. Többágú szelekció (case)

case valtozo in

minta1) parancs;;

minta2) parancs;;

*) parancs;;

esac

7

5. Függvények

- Függvény változói nem lokálisak, hozzáférnek a főprogram változóihoz és maguk is

létrehozhatnak újakat, ezeket a főprogram is örökölni, illetve látni fogja.

- Többszörös meghívás esetén nem lesznek többször létrehozva, csak a függvény első

meghívásakor

- önálló be- és kimenettel, visszatérési értékkel, valamint saját parancssori paraméterekkel

rendelkeznek

- visszatérésük értékét müködésük végén adják át

fuggveny ()

{

parancsok

}

fuggveny

Függvény hívásának blokkját meg kell előzni a megírt (létező) függvény törzsének.

A meghíváskor tetszőlegesen elláthatjuk a függvényünket paraméterekkel, amelyekre hivatkozhatunk a függvény törzésben.

Példa:

fuggveny_paramter ()

{

echo “Kiirjuk a 2. paramétert:“ $2

}

fuggveny_paramter “Elsö” “Második” “Harmadik” 5 “Tiz”

Jelen példában, a függvényünket 5 tetszőleges paraméterrel hívtam meg, és a függvény törzsében hivatkoztam a második meghívott paraméterre, így a képernyőre a következő sort írja ki: “Kiirjuk a 2. paramétert Második

8

6. Reguláris kifejezések

A reguláris kifejezések a UNIX/Linux rendszerek mélyebb megismerésénél nélkülözhetetlenek,

elsősorban felhasználási területük:

- keresések

- szűrések

- cserék

A szabályos, vagy reguláris kifejezésekkel vezérlhetjük a programokat.

Leggyakabban használt eszközök: grep, sed, awk

A “grep” a bemenetre érkező sorok közül csak azokat küldi a kimenetre, amelyek megfelelnek az

adott reguláris kifejezésnek (szűrési feltételnek).

A “sed” (Strem Editor) a megadott parancsok szerint módosítani is tudja a kimenetet (csere). Sor

alapú, de a teljes bemenetet egyben is kezelheti.

Az “awk” programozási nyelv szövegfeldolgozásra. Soronként kezeli a bemenetet, és a kimenetet

módosítani tudja, továbbá a sorokon belül mezőket is megkülönböztet (pozícionálás).

Használt speciális karakterek:

^ sor eleje (grep ^a file : “a” betűvel kezdődő fájlok)

$ sor vége (grep a$ file : “a” betűre végző fájlok)

. tetszőleges karakter (kivéve új sor)

\ mentesítő karakter, speciális jelentés ki/be kapcsolás

[ lista ] egyetlen karakter, amely a megadott lista bármely eleme lehet

[^lista] egyetlen karakter, amely a listában felsoroltakon kivül bármi lehet

[a-z] bármilyen kisbetű

[A-Z] bármilyen nagybetű

[0-9] bármilyen számjegy

* ismétlő karakter, a * előtt álló karakter vagy kifejezés tetszőleges (akár 0) számú előfordulása

+ ismétlő karakterek, de megköveteli, hogy az előtte lévő karakter, vagy kifejezés legalább egyszer előforduljon

( ) csoportba rendezi a szabványos kifejezéseket, egységként kezeli

| logikai VAGY

{ } illeszkedések száma ( ,x- pontosan, ,x,- legalább, {x,y} intervallum)

Példák:

cat szoveg | grep ^[0-9] - számmal kezdődik

cat szoveg | grep ^[0-9]\{1\}[^0-9] - 1db számmal kezdődik és követi valami kötelezően

cat szoveg | grep ^[0-9]\{1\}[^0-9]* - 1db számmal kezdődik, de lehet 1db szám is

9

7. Stream editor

SED: folyamat editor, vagy programozható szövegszerkesztő

A szabványos bemenetre érkező szöveget képes feldolgozni és átalakítani.

Hogyan: a feldolgozandó szöveget soronként egy átmeneti tárba, az úgynevezett mintatérbe olvassa

be, szabályos kifejezések alapján megkeres benne bizonyos részeket, majd elvégzi rajtuk az egybetűs

parancsok formájában megadott műveleteket.

pl: … | sed ’program’ vagy sed ’program’ filenév

Jelen példában a ’program’ a sed saját nyelvén írt szöveg feldolgozási utasítássorozatot jelenti.

Általános program: <cím1>, <cím2> parancs

A cím jelen esetben, lehet:

- szám: a bemenet adott sorszámú sorra

pl: sed 10 parancs - csak a 10. soron hajtódik végre

sed 1, 10 parancs - az 1-től 10-ig terjedő sorokra hajtódik végre

sed parancs 10 - a keresett mintának csak a 10. előfordulásán hajtódik végre

- szabványos kifejezés

pl: sed /[0-9]/ parancs - csak a számokat tartalmazó sorokon érvényesül

sed /[a-z]/ parancs - csak a kisbetűket tartalmazó sorokon érvényesül

Alapvető parancslista:

- p: kiíratás

- d: törlés

- s: helyettesítés egy előfordulásnál

- s-g: helyettesítés minden előfordulásnál

- a: hozzáfűzés

- i: beszúrás

- c: a mintatér cseréje

- y: a karakterek cseréje

- n: még 1 sort olvas a bemenetről és hozzáfűzi a mintatérhez

Példák:

cat szoveg | sed p - duplan jeleníti meg a sorokat

cat szoveg | sed ’10 p’ - duplán jeleníti meg a 10. sort

cat szoveg | sed ’1, 10 p’ - duplán jeleníti meg 1-10-ig a sorokat

-n - letilthatjuk az alapértelmezett megjelenítést

cat szoveg | sed –n ’10 p’ - csak a 10. sort jeleníti meg

cat szoveg | sed ’1, 10 d’ - törli 1-10-ig a sorokat

cat szoveg | sed ’s/mit/Mire/’ - csak az első előfordulást cseréljük

cat szoveg | sed ’s/mit/Mire/g’ - minden előfordulást cserélünk

cat szoveg | sed ’y/mit/Mire/’ - helyettesítendő/helyettesítő – karakterszámra egyforma!

10

Fájlba íratás:

sed ’program’ –f fájlnév

11

8. AWK programnyelv

Jellemzői:

- Szövegfeldolgozásra szakosodott programnyelv, több változata létezik:

- awk, gawk (GNU projtect), tawk (MS-Windows DLL), awka, mksawk, awkcc, mawk…

- a C szövegszerkesztésre kihegyezett változata, képességei azonosak egy grafikus felületen

futó táblázatkezelővel

- az awk alapvető feladata, hogy olyan szövegegységeket keressen file-okban, amelyek

tartalmaznak egy bizonyos mintát

- a minta lehet szabványos kifejezés vagy logikai feltétel, ha nincs minta akkor minden sorra

végrehajtja

- az awk programok adatvezéreltek (először az adatot adjuk meg amivel dolgozni szeretnénk,

aztán azt, hogy mit szeretnénk csinálni)

Futtatása:

- szabványos bementről:

… | awk ’{parancsok}’

- feldolgozandó fájl megadásával:

awk ’{parancsok}’ file1 <file2>

- ha a program hosszabb, vagy külön fájlban van:

… | awk –f programfile

awk –f programfile file1 <file2>

programfile.awk

#!/bin/awk

Feldolgozás:

- soronként történik, a sorokat mezőkre osztja (legkisebb feldolgozási egység)

- a mezőket a mezőelválasztó karakterrel tagoljuk, értéke definiálható [-F] (alapértelmezetten:

szóköz, tabulátor)

- mezőkre hivatkozás: $1, $2,… $n, a $0 az egész sort jelöli

- a minták megadása reguláris kifejezéssel /…/ jelek között

- logikai feltételek a C-ben megszokott operátorokkal: „a>2”

Változók:

- felhasználó által megadott változók:

a. nem kell külön deklarálni, első értékadáskor létrejönnek

b. megadhatjuk program futása előtt is, vagy a héjprogram változóját is átvehetjük

pl: less /etc/passwd | awk –F: ’{nev=”Felhasznaloi nev:” ; konyvt=”Konyvtar: „ ; print nev,$1”

„konyvt$6}’

12

c. BEGIN blokk használata, ez a főciklustól független műveletek végrehajtását teszi

lehetővé, így a BEGIN még a sorok feldolgozása előtt, de csak egyszer fog végrehajtódni,

míg az END blokk a sorok feldolgozás után végez el valamilyen műveletet

pl: awk –F: ’BEGIN {nev=”Felhasznaloi nev:” ; konyvt=”Konyvtar:”} {print nev, $1”, „konyvt$6}’

- belső változók:

a. FILENAME (aktuális bemeneti fájl)

b. FS (bemeneti mezőelválasztó karakter)

c. NF (az aktuális sor mezőinek száma)

d. NR (az aktuális sor száma)

e. OFS (kimeneti mezőelválasztó karakter)

Operátorok:

- = (értékadás)

- || (vagy)

- && (és)

- ! (tagadás)

- relációs operátorok (>=, ==, !=…)

- aritmetikai operátorok (+, -, *, /, %, ++, --)

Vezérlési szerkezetek:

- ugyanaz, mint a C programozási nyelv esetében

if (feltétel) utasítás else utasítás for(kifejezés1;feltétel;kifejezés2) utasítás for(változó in tömb) utasítás while(feltétel) utasítás break continue next exit

Beépített függvények: (eltérhetnek a különböző awk-k esetében)

- cos(kif): kifejezés koszinusza - exp(kif): kifejezés exponenciális függvénye - getline(): következő sor beolvasása, ha a visszatérési értéke 0, akkor fájl vége - index(s1,s2): s2 kezdő pozíciója s1-ben - int(kif): kifejezés egészrésze - length(s): s string hossza - log(kif): kifejezés logaritmusa - sin(kif): kifejezés szinusza - split(s,a,d): s-t d elválasztójel szerint a[1]…a[n] tömbelemekre osztja, visszatérési értéke n

13

- sprintf(fmt,…): a …-ot fmt formátum string szerint formázva adja vissza - substr(s,m,n): s string m-edik karaktertől kezdődő n karakteres része