Informatika | Operációs rendszerek » Fábián Gábor - Operációs rendszerek gyakorlat

Alapadatok

Év, oldalszám:2006, 48 oldal

Nyelv:magyar

Letöltések száma:197

Feltöltve:2009. július 29.

Méret:180 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

Operációs rendszerek gyakorlat Írta: Fábián Gábor Készült Simon Gyula tanár úr előadásai és jegyzetei alapján ELSŐ KIADÁS 2006 (terjedelem:48 A4-es lap) A könyv pénzért forgalomba nem hozható, de ingyen szabadon terjeszthető. (A könyvben található hibákért, felelőséget nem vállalok, de a hibák jelzését köszönettel fogadom.) GABA Előszó Szeretném ha a következő néhány mondatot mindenki komolyan venné, akinek ezt a tantárgyat teljesítenie kell. A Simon tanár úr aggodalmát fejezte ki eme részletes iromány miatt, abban a tekintetben, hogy egyesek majd két nap alatt próbálják megtanulni a gyakorlat anyagát és majd lesz ami lesz alapon jönnek vizsgázni. Hát ne tegyétek! Biztos vannak nagyon jó képességű diákok köztetek és olyanok, akik vágják ezt a témát. De, ha te nem vagy ilyen, akkor hidd el, hogy sokkal könnyebbnek tűnik a dolog, mint amilyen valójában. Ha leülsz és egyedül nekiállsz script-et írni,

te is rájössz, hogy bizony nagy szívások vannak, és a unix és perl script filozófiáját is meg kell szokni. Szerintem, mondjuk egy hét alatt meg lehet tanulni (be lehet gyakorolni), de akkor két nap éjjel nappal és a további öt napon át is mondjuk 1-2 órát gyakorolni kell (:-)). Ezt az egész unix-segédletet olyan formában írtam le, hogy ha valaki leül és a példákat végigcsinálja elejétől a végéi, akkor azért már elboldogul a unix-ban. A segédlet tematikája az oktatásra helyezi a hangsúlyt, nem pedig a témák csoportosítására, ezért van az, hogy bár egy fájlkezelő parancsszóval kezdek, rendszer leíró parancsszavakkal folytatom és aztán így tovább össze-vissza. Ha nem vagy kezdő, vagy már végigcsináltad a gyakorlatokat, akkor ajánlom figyelmedbe a puska címszó alatti összefoglalót. (Egyenlőre még készül) Én az Uhu-linuxot használtam, és ezen ellenőriztem a parancsszavakat, script-eket és mindent, amit leírtam. Ha

más linuxot vagy linux emulátort használsz, akkor lehetnek eltérések, esetleg olyan dolgok, amiket másképp is meg lehet valósítani. Unix -történelem A Bell Labs készítette az ős UNIX-ot A Berkeley Egyetem készítette a BSD-t (Berkeley Software Distributions) Utolsó verzió: BSD v4.4 (Sun, Solaris 10) Ingyenes verziók: FreeBSD, OpenBSD, NetBSD Bell Labs (AT&T): továbbfejlesztette mit??? Jelenleg: System V. A Sun, AT&T két rendszer összeolvasztása System V. SVR4 (Solaris 20) Open Software Foundation: OSF1 (kihalt) Linus Torvalds: LINUX (A parancssorba beírva az uname parancsot megtudhatod, hogy milyen unix-ot használsz) Shell $ Bourne-shell család sh bash (Bourne Again Shell) ksh (Korn-shell) % C-shell család csh Kiterjesztések: zsh tcsh Linuxban a fontosabb könyvtárak. / /bin /usr/bin /usr/local/bin /dev /home /lib /usr/lib /tmp /usr/tmp /usr/man gyökér rendszer parancsokat tárolja rendszer parancsokat tárolja helyi rendszer parancsok

eszközök (unix fájlként kezeli a perifériákat) tartalmazza a felhasználók könyvtárait, fájljait program könyvtárak program könyvtárak átmeneti fájlok (kisebbek) átmeneti fájlok (nagyobbak) a kézikönyvet tartalmazza Alapfogalmak Könyvtár: Azok a szavak, amiket kékkel jelölök a könyvtárak nevei. Fájl: Azok a szavak, amiket dőlt betűvel írok a fájlok. A linuxban nem kötelező kiterjesztést adni a fájloknak, viszont ha adunk, akkor lehet több elemű is. (Pl: elso1hetgyakscript) Parancsszavak: Mindenhol fekete félkövér betűvel jelöltem: Könyvtár műveletek: mkdir, rmdir, rm -R, cp, mv, Fájl műveletek: echo* > fájl, ln, rm , cp, mv, ls, chown, chgrp, chmod Szűrők: sort, wc, grep stb. Kapcsolók: Azokat a karakterek, amiket a parancsszavak után kötőjellel kötve írunk (Pl. ls -l) kapcsolóknak nevezzük. Feladatuk az eredeti parancs módosítása A kapcsolók kombinálhatók és kombinálásuk sorrendje teljesen mindegy a

végeredmény tekintetében. Pl.: rm: törlés esetén (az rm csak fájlokat tud törölni) rm -i megkérdi, hogy mit töröljön le, rm -R mindent töröl, könyvtárakat is, rm -iR mindent töröl, de jóváhagyást kér előtte. A prompt: root:/# Az első tag azt mutatja, hogy ki a felhasználó, pl. jelen esetben a rendszergazda. A kettős kereszt a prompt vége. root:/# Programok leállításainak néhány módja ctrl-c ctrl-/ ctrl-z leállítás (ez nem mindig jön be) leállítás (ez nem mindig jön be) stop (ez be szokott jönni, de ilyenkor marad egy megállított folyamatunk) A parancsszavak - cd (Change directory / Változtass könyvtárat) Leírás: A megadott könyvtárba lép. Ha a célkönyvtár szülőkönyvtárban vagyunk elég megadni a könyvtár nevét, ha nem akkor elérési utat adhatunk meg. A parancs után a „.” az adott könyvtár szülőkönyvtárába léptet vissza A parancs után a „/” kapásból a gyökérbe léptet. Pl.: root:~# cd /

root:/# cd home root:/home# root:/home# cd /boot/grub root:/boot/grub# cd . root:/boot/# cd . root:/# - uname (Unix name / Unix típusa) Leírás: Megmondja hogy milyen unix-ot haszálok (Pl.:Sun, Solaris, Linux) Pl.: root:/# uname Linux root:/# Fontosabb kapcsolói: -n Megadja a hálózat nevét Pl.: root:/# uname -n localhost root:/# -v Megadja a verzió számát Pl.: root:/# uname -v #1 SMP Thu Oct 27 12:52:33 CEST 2005 root:/# - whoami (Who am I / Ki vagyok) Leírás: Megadja hogy ki vagyok, azaz mi a jelenlegi felhasználó neve. Pl.: root:/# whoami root root:/# - id (Identity / Személyazonosság) Leírás: Az id információt szolgáltat az adott felhasználóról, vagy arról, aki a programot futtatja, ha a felhasználó nincs megadva. Alapértelmezésben a valódi felhasználói ID-t, és a valódi csoport ID-t írja ki. Továbbá az effektív felhasználói ID-t, ha az különbözik a valódi felhasználói ID-től, az effektív csoport ID-t, ha az különbözik a

valódi csoport ID-től, és a kiegészítő csoportok ID-it. A parancs ezeket a paramétereket egy sorban egymás után írja ki, zárójelben megadva a felhasználó, illetve a csoport nevét. Pl.: root:/# id uid=0(root) gid=0(root) groups=0(root),50(audio),51(video), root:/# - man (Manual / Kézikönyv) Leírás: Leírja, hogy kell kezelni a parancsokat, megadja hogy milyen kapcsolók tartoznak az adott parancsokhoz. Pl.: root:/# man man (Bejön a manuál, amit ha meguntunk, a q billentyű lenyomásával hagyhatunk el.) root:/# man whoami (.) root:/# - pwd (Where directory / Hol vagyok) Leírás: Kiírja az aktuális (munka) könyvtár teljes nevét elérési úttal. Pl: root:/# cd /boot/grub root:/boot/grub# pwd /boot/grub root:/boot/grub# - mkdir (Make directory / Hozz létre könyvtárat) Leírás: Létrehoz egy könyvtárat. Ha csak egy nevet írunk be, akkor abban a könyvtárban jön létre egy alkönyvtár amelyikben vagyunk, ha elérési utat adunk meg, akkor az utolsó

elem lesz a könyvtár neve. Pl.: root:/boot/grub# cd /home root:/home#mkdir Proba root:/# cd Proba root:/home/Proba# mkdir /home/Proba2 root:/home/Proba# cd ./Proba2 root:/home/Proba2# - rmdir (Remove directory / Töröld a könyvtárat) Leírás: Töröl egy ÜRES könyvtárat. Ha csak egy nevet írunk be, akkor annak a könyvtárnak törli az ugyanolyan nevű alkönyvtárát, ha elérési utat adunk meg, akkor az utolsó elem lesz a törlendő könyvtár neve. Pl.: root:/home/Proba2# mkdir /Proba3 root:/home/Proba2#cd . root:/home# rmdir Proba3 root:/home# cd Proba root:/home/Proba# rmdir ./Proba2 -ls (List / Listázz) Leírás: Kilistázza az adott könyvtárban lévő fájlokat könyvtárakat. Pl.: root:/home/Proba# cd root:/home# ls a Proba root:/home# (A linux a felhasználó neveket tárolja a home könyvtárban, ezért a Proba könyvtáron kívül még a felhasználónév(ek)-el megegyező nevű könyvtárak lesznek láthatók, nekem csak egy felhasználó nevem volt az

a ) Fontosabb kapcsolói: -l A fájlnevek mellett megadja a fájl típusát, engedélyeit a hard-link-ek (keménykötések) számát, a tulajdonos- és a csoportnevet, a méretet bájtokban és az időbélyeget, azaz a módosítási időt, hacsak nem más időt választottunk egy másik opcióval. Hat hónapnál régebbi, vagy a jelenleginél több mint egy órával későbbi idővel rendelkező fájlok esetén az időbélyeg az évet tartalmazza a napon belüli időpont helyett. Pl.: root:/home# ls -l összesen 8 drwxr-xr-x 26 a users 4096 2006-03-17 11:56 a drwxr-xr-x 2 root root 4096 2006-03-17 15:09 Proba ( d - directory / könyvtár  Ha ájl akkor „– ” van d helyett. rwx - read, write, execute User /Felhasználó rwx - olvasaható, írható, végrehajtható Group /Csoport rwx - olvasaható, írható, végrehajtható Others /Mások 26, 2 - könyvtár eseén e gyermekeinek száma fájl esetén a linkek száma (hard-kemény, soft-könnyű) a, root - felhasználó neve

users, root - felhasználó titulusa (felhasználó, rendszergazda) 4096 - méret byte-ban 2006-03-17 - a módosítás dátuma 11:56, 15:09 - a módosítás ideje a, Proba - fájl vagy könyvtár neve ) -a Kilistázza a rejtett fájlokat is Pl.: root:/home# cd /tmp root:/tmp# ls -a . mapping-root . orbit-a gconfd-a orbit-root gconfd-root OSL PIPE 0 SingleOfficeIPC 9c56cf5 .gdm socket svebf.tmp hsperfdata root .X0-lock .ICE-unix .X11-unix keyring-UEPVRD xmms root.0 mapping-a root:/tmp# (Amelyik név előtt van egy . az a rejtett (hidden) tulajdonságú) - la A kapcsolók kombinálva is használhatók: ebben az esetben a rejtett fájlokat és a járulékos információkat is mutatja. - echo (Echo / Vízhang) Leírás: Kiírja a parancs után írt karaktersorozatot a képernyőre. Pl.: root:/tmp# cd root:/# echo Szia hogy vagy. Szia hogy vagy. root:/# - echo karaktersorozat > név Leírás: Fájl létrehozása karaktersorozat beírásával. Pl.: root:/# cd home/Proba

root:/home/Proba# echo Szia hogy vagy. > probatxt root:/home/Proba# ls proba.txt root:/home/Proba# FONTOS: (Standard output, input) Az echo parancs után lévő kacsacsőrt (>) standard outputnak nevezzük. A unix-ban a standard output (kimenet) és a standard input (bemenet), kezelése egész egyszerűen megvalósítható az alábbi módon: standard output: Parancsszó > hova standard input: Parancsszó < miből Tehát az „echo Hello > p1”-esetén: Az „echo Hello” parancs eredmény az lenne, hogy kiírná a képernyőre azt, hogy Hello. A „> p1” viszont azt jelenti, hogy a kimenetem, ne a képernyő, hanem a p1 fájl legyen. Ezért az „echo Hello > p1” parancs eredménye az lesz, hogy létrejön egy p1 nevű fájl, amibe bele lesz írva a Hello szó. Ha a > helyett >> használunk, azt jelenti, hogy a fájl végére tegye az adatot. - cat (Concatenation / Fűzd össze) Leírás: Megmutatja hogy mi az adott fájl tartalma. Pl.:

root:/home/Proba# cat probatxt Szia hogy vagy. root:/home/Proba# - cp (Copy / Másolj) Leírás: Átmásolja a filet oda ahova akarjuk Pl.: root:/home/Proba# mkdir /Proba2 root:/home/Proba# cp proba.txt /Proba2 root:/home/Proba# cd ./Proba2 root:/home/Proba2# ls proba.txt root:/home/Proba2# cat proba.txt Szia hogy vagy. root:/home/Proba2# - mv (Move / Nevezd át, Mozgasd át) Leírás: Átmozgatja vagy átnevezi a fájlokat vagy könyvtárakat. Pl.: root:/home/Proba2# mkdir /Proba3 root:/home/Proba2# mv proba.txt /Proba3 root:/home/Proba2# ls -l összesen 0 root:/home/Proba2# cd ./Proba3 root:/home/Proba3# ls -l összesen 4 -rw-r--r-- 1 root root 16 2006-03-17 17:48 proba.txt root:/home/Proba3# mv proba.txt Letorolhetedtxt root:/home/Proba3# ls -l összesen 4 -rw-r--r-- 1 root root 16 2006-03-17 17:48 Letorolheted.txt root:/home/Proba3# mv ./Proba /Delete root:/home/Proba3# cd . root:/home# ls a Delete Proba2 Proba3 root:/home/Proba3# - rm (Remove / Töröld le) Leírás: Letörli a

fájlokat a megadott helyről. Pl.: root:/home/Proba3# ls Letorolheted.txt root:/home/Proba3# rm *.* root:/home/Proba3# ls root:/home/Proba3# Fontosabb kapcsolói: -R Törli a könyvtárat akkor is ha nem üres. Pl.: root:/home/Proba3# cd root:/home# ls a Delete Proba2 Proba3 root:/home# cd Delete root:/home/Delete# ls proba.txt root:/home/Delete# cd . root:/home# rm -R Delete root:/home# ls a Proba2 Proba3 root:/home# -i Megkérdezi, hogy tényleg törölni akarom-e a fájlt, illetve fájlokat. Pl.: root:/home# cd Proba3 root:/home/Proba3# root:/home/Proba3# echo Szia hogy vagy. > p1 root:/home/Proba3# echo Szia hogy vagy. > p2 root:/home/Proba3# echo Szia hogy vagy. > p3 root:/home/Proba3# ls p1 p2 p3/home/a/Doc root:/home/Proba3# rm -i * rm: remove regular file `p1? y rm: remove regular file `p2? n rm: remove regular file `p3? y root:/home/Proba3# ls p2 root:/home/Proba3# - echo karaktersorozat >> név (lásd standard kimenet) Leírás: Adott fájl végéhez

hozzáfűzi a megadott karaktersorozatot. Pl.: root:/home/Proba3# cp p2 /Proba2 root:/home/Proba3# cd ./Proba2 root:/home/Proba2# ls p2 root:/home/Proba2# cat p2 Szia hogy vagy. root:/home/Proba2# echo Kössz Jól vagyok. >> p2 root:/home/Proba2# cat p2 Szia hogy vagy. Kössz jól vagyok. root:/home/Proba2# cd ./Proba3 root:/home/Proba3# - ln (Link / Kapcsolat) Leírás: Amennyiben az utolsó argumentum egy létező könyvtár, az ln parancs minden más megadott fájlhoz létrehoz egy kötést ebben a könyvtárban (azonos néven). Ha csak egy fájl adott, ahhoz az aktuális könyvtárban hoz létre kötést. Különben ha két fájl adott, az elsőhöz hoz létre kötést a második által megadott néven. Hibát jelent, ha az utolsó argumentum nem könyvtár és kettőnél több fájl adott. Az ln parancs úgynevezett hard-link-et (kemény-kapcsolat) hoz létre. Egy fájl addig létezik a Linuxban míg az összes hard-link-je létezik. A hard-link azt is jelenti, hogy ha

az egyik fájl tartalmát módosítom, akkor annak a fájlnak (fájloknak) a tartalma is módosul amelyek hard-linkel csatlakoznak hozzá. Pl.: root:/home/Proba3# ln p2 Uj link root:/home/Proba3# ls p2 Uj link root:/home/Proba3# cat p2 Szia hogy vagy. root:/home/Proba3# cat Uj link Szia hogy vagy. root:/home/Proba3# rm p2 root:/home/Proba3# ls Uj link root:/home/Proba3# cat Uj link Szia hogy vagy. root:/home/Proba3# ln Uj link p1 root:/home/Proba3# cat p1 Szia hogy vagy. root:/home/Proba3# echo Nem én voltam >> Uj link root:/home/Proba3# cat Uj link Szia hogy vagy. Nem én voltam root:/home/Proba3# cat p1 Szia hogy vagy. Nem én voltam root:/home/Proba3# Fontosabb kapcsolói: -s Soft-linket, azaz könnyű-kapcsolatot hoz létre. A hard-link és a soft-link közötti különbség csak annyi, hogy ha egy fájl összes hard-link-jét töröljük, akkor hiába van soft-linkje az törölve lesz (A soft link megmarad, de hibaüzenetet fog küldeni). Erre a fajta kapcsolatra

legtöbbször más számítógépek közötti kapcsolatok esetén van szükség. Pl.: root:/home/Proba3# ln -s p1 Uj softlink p1 Uj link Uj softlink root:/home/Proba3# echo Még mindig nem én voltam. >> p1 root:/home/Proba3# cat p1 Szia hogy vagy. Nem én voltam Még mindig nem én voltam. root:/home/Proba3# cat Uj softlink Szia hogy vagy. Nem én voltam Még mindig nem én voltam. root:/home/Proba3# echo Na ne már. >> Uj softlink root:/home/Proba3# cat Uj softlink Szia hogy vagy. Nem én voltam Még mindig nem én voltam. Na ne már. root:/home/Proba3# cat p1 Szia hogy vagy. Nem én voltam Még mindig nem én voltam. Na ne már. root:/home/Proba3# rm -i * rm: remove regular file `p1? i rm: remove regular file `Uj link? i rm: remove symbolic link `Uj softlink? n root:/home/Proba3# ls Uj softlink root:/home/Proba3# cat Uj softlink cat: Uj softlink: Nem létező fájl vagy könyvtár root:/home/Proba3# - sort (Sort / Rendezd) Leírás: Ábécé sorrendbe rendezi a

sorokat a sor első karaktere szerint. Pl.: root:/home/Proba3# cd /Proba2 root:/home/Proba2# echo Kiss Béla > p1 root:/home/Proba2# echo Sándor Mátyás >> p1 root:/home/Proba2# echo Gulyás Botond >> p1 root:/home/Proba2# echo Lovas György >> p1 root:/home/Proba2# echo Máté Pál >> p1 root:/home/Proba2# echo Farkas Ádám >> p1 root:/home/Proba2# echo Bárány Béla >> p1 root:/home/Proba2# echo Juhász Pál >> p1 root:/home/Proba2# echo Nagy Zoltán >> p1 root:/home/Proba2# echo Kovács Erika >> p1 root:/home/Proba2# echo Szekeres Adrienn >> p1 root:/home/Proba2# echo Kádár Huba >> p1 root:/home/Proba2# echo Pál József >> p1 root:/home/Proba2# cat p1 Kiss Béla Sándor Mátyás Gulyás Botond Lovas György Máté Pál Farkas Ádám Bárány Béla Juhász Pál Nagy Zoltán Kovács Erika Szekeres Adrienn Kádár Huba Pál József root:/home/Proba2# sort p1 Bárány Béla Farkas Ádám Gulyás Botond

Juhász Pál Kádár Huba Kiss Béla Kovács Erika Lovas György Máté Pál Nagy Zoltán Pál József Sándor Mátyás Szekeres Adrienn root:/home/Proba2# Fontosabb kapcsolói: -n Ezt a kapcsolót akkor van értelme használni, ha a sorok elején számok vannak. Mert sort esetén: 111 Béla 11 Gábor 1 András 9 Éva Míg sort -n esetén: 1 András 9 Éva 11 Gábor 111 Béla - head (Head / Fej) Leírás: Alapesetben az első 10 sort listázza ki. Ha „-na” kapcsolóval használjuk, ahol a=1.n szám akkor a sort listáz ki Pl.: root:/home/Proba2# head p1 Kiss Béla Sándor Mátyás Gulyás Botond Lovas György Máté Pál Farkas Ádám Bárány Béla Juhász Pál Nagy Zoltán Kovács Erika root:/home/Proba2# head -n3 p1 Kiss Béla Sándor Mátyás Gulyás Botond root:/home/Proba2# - tail (Tail / Vége) Leírás: Alapesetben az utolsó 10 sort listázza ki. Ha „-na” kapcsolóval használjuk, ahol a=1.n szám akkor a sort listáz ki Pl.: root:/home/Proba2# tail p1 Lovas

György Máté Pál Farkas Ádám Bárány Béla Juhász Pál Nagy Zoltán Kovács Erika Szekeres Adrienn Kádár Huba Pál József root:/home/Proba2# tail -n3 p1 Szekeres Adrienn Kádár Huba Pál József root:/home/Proba2# - *, ?, karakterek használata, könyvtár szerkezet listázásnál, másolásnál, átnevezésnél, áthelyezésnél, törlésnél, stb. Áttekintés: * - A csillag jelentése bármely karaktersorozat. Pl.: rm -i * - jelentése, törölj mindent az adott könyvtárban ? - A kérdőjel jelentése egy karakter. Pl.: rm -i p? - jelentése, törölj minden p betűvel kezdődő majd akármilyen karakterrel végződő kétbetűs fájlt. - *, [a-z], ., ^ , $, karakterek használata, grep-nél Áttekintés: * - A csillag jelentése n-szer az előttem álló karakter, ahol n=0,1,2. Pl.: grep ai* p1 - jelentése, listáz minden olyan sort p1 fájlból amiben legalább a betű van (vagy ai, aii, aiii, stb). [a-z] - A szögletes zárójel jelentése a zárójelből

bármely karakter. Pl.: grep p[a-z] p1 - jelentése, listáz minden olyan sort p1-ből, amiben a-tól z-ig akármilyen karakter előfordul. A fenti analógiájára a zárjelben lehetne akár [1-9], [A-Z], de akár [x-z] is. [a-z]* - A zárójelben lévő karaktersorozatot jelenti. Pl.: grep A[a-z]*n p1 - jelentése, listáz minden olyan sort p1-ből, amiben van egy A majd a-tól z-ig bármi majd egy n-el végződik (Pl.:Adrienn) . - A pont jelentése bármely karakter. Pl.: grep Aa p1 - jelentése, listáz minden olyan sort p1-ből amiben található egy A, majd két akármilyen karakter, majd egy kis a. (Pl.: Anna) .* - A pont csillag jelentése bármely karaktersorozat. Pl.: grep A*v - jelentése, listáz minden olyan sort p1-ből amiben található egy A majd, egy akármilyen karaktersorozat, majd egy v. (Pl.: A27-42B!xv) A „space” is karakternek számít, úgyhogy, ha keresztnevet keresünk, segíthet a következő formula (Pl.: A*), persze csak akkor, ha a családnév

előtt nincs karakter. ^ - A felső kalap jelentése a sor eleje. Pl.: grep ^B - jelentése listáz minden olyan sort ami Nagy B-vel kezdődik. $ - A dollár jel jelentése a sor vége. Pl.: grep a$ - jelentése listáz minden olyan sort aminek az utolsó karaktere egy a betű. Figyelj, hogy a karakternek a $ előtt kell lennie - grep () Leírás: A grep egy fáljból minden olyan sort a képernyőre ír, amely sorokban van olyan karakter (karaktersorozat), mint ami a parancs után van. Pl.: root:/home/Proba2# grep * p1 p1:Kiss Béla p1:Sándor Mátyás p1:Gulyás Botond p1:Lovas György p1:Máté Pál p1:Farkas Ádám p1:Bárány Béla p1:Juhász Pál p1:Nagy Zoltán p1:Kovács Erika p1:Szekeres Adrienn p1:Kádár Huba p1:Pál József root:/home/Proba2# grep A.*n p1 Szekeress Adrienn root:/home/Proba2# grep .B* p1 Kiss Béla Gulyás Botond Bárány Béla root:/home/Proba2# grep [A-D].*[[:space:]] p1 Bárány Béla root:/home/Proba2# grep ^B p1 Bárány Béla root:/home/Proba2#

grep a$ p1 Kiss Béla Bárány Béla Kovács Erika Kádár Huba root:/home/Proba2# Főbb kapcsolói: -e Az -e kapcsoló jelentősége abban rejlik, hogyha kötőjelre akarunk rákeresni, akkor ezt az opciót kell használni, mert egyébként kapcsolónak hiszi. Pl.: root:/home/Proba2# echo külön-féle > p3 root:/home/Proba2# grep -f (Kiakad, --> nyomj „ctrl-c”-t) root:/home/Proba2# grep -e -f p3 külön-féle root:/home/Proba2# - wc (Word count /Szószámláló) Leírás: Megszámolja a szavak számát az adott fájlban, majd a következő formában írja ki: Sor(ok) Szó(vak) Karakter(ek) Fájl neve Pl.: root:/home/Proba2# wc p1 13 26 159 p1 root:/home/Proba2# Fontosabb kapcsolói: -l A sorok számát adja meg az adott fájlban. -w A szavak számát adja meg az adott fájlban. -c A karakterek számát adja meg az adott fájlban. - chown (Change own / Változtass tulajdonost) Leírás: Felhasználó megváltoztatására használható. Kettőspont használatával

a csoport is megváltoztatható. Pl.: root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 root root 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chown a p1 root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a root 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chown :users p1 root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chown root:root p1 összesen 12 -rw-r--r-- 1 root root 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chown a p1 root:/home/Proba2# - chgrp (Change group / Változtass csoportot) Leírás: A csoport megváltoztatására használható. Pl.: root:/home/Proba2#

ls -l összesen 12 -rw-r--r-- 1 a root 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chgrp users p1 root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# - chmod (Change mod / Változtass módot) Leírás: Az adott fájlnak, könyvtárnak az attribútumai módosíthatók ezzel a paranccsal. A chmod parancs kéteféleképpen használható (végeredményt tekintve azonosak): 1) chmod [users group others all] [+-][rwx] parancs[felhasználóhoz(tól) csoporthoz(tól) többiekhez(től) mindenkihez(től)] [hozzáad (elvesz)][olvasási- írási- végrehajtási jogot] Pl.: chmod u+x p1 - jelentése, hogy a p1 fájl a felhasználók által végrehajtási jogot kapott. chmod a+rwx p1 - jelentése, hogy a p1 fájl mindenki által olvasási, írási, és végrehajtási

jogot kapott. 2) chmod[0-7][0-7][0-7] parancs[4+2+1][4+2+1][4+2+1] r+w+x| r+w+x |r+w+x Pl.: chmod 644 p1 - jelentése, hogy a felhasználók olvashatják írhatják a fájlt a csoportok és mások pedig csak olvashatják, végrehajtási joga senkinek sincs. chmod 777 - jelntése u.a mint a „chmod a+rwx”-nek Pl.: root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chmod g+w p1 root:/home/Proba2# ls -l összesen 12 -rw-rw-r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chmod g-w p1 root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chmod a+rwx p1 root:/home/Proba2# ls -l összesen 12 -rwxrwxrwx 1 a

users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# chmod 644 p1 root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# - find (Find / Találd meg) Leírás: A find-al fájlok keresését lehet megoldani, de önmagában nem érdemes használni, hanem a kapcsolóival együtt, ezért kapásból velük kezdem: 1) find / -name p1 -print A -name kapcsoló előtt, azt adom meg, hogy honnan nézve keresek (Most a gyökértől). A -print kapcsoló elé azt írom, amilyen nevű fájlt, könyvtárat keresek. (Most a p1 fájlt). Tehát jelen esetben a p1 fájlt keresem, amit ha megtalál a gyökértől kezdve elérési úttal együtt ad meg (és nem csak azt, hogy létezik ilyen) . 2) find / -name p1 -exec cat {} ; A -name kapcsoló előtt, azt adom meg, hogy honnan

nézve keresek (Most a gyökértől). Az -exec kapcsoló elé azt írom, amilyen nevű fájlt keresek, utána pedig azt a parancsszót, amit szeretnék a megtalált fájllal tenni. (Most cat, azaz a megtalált p1 fájl tartalmát kiírja.) A {} a -name kapcsoló utáni fájlt helyettesíti be. ; ez kell a végére, egyébként nem működik. Tehát jelen esetben, ha megtalálja a p1 fájlt, akkor megmutatja a tartalmát. 3) find / -name p1 -ok cat {} ; Egy az egyben azt csinálja, mint a „2)”-es pont, de mielőtt a megadott parancsot (Most cat) végrehajtaná, megkérdezi, hogy megtegye-e. Tehát jelen esetben a p1 fájlt keresi, amit ha megtalál, akkor megkérdezi, hogy megmutathatja-e a tartalmát, ha y-t nyomunk, akkor megmutatja. Pl.: root:/home/Proba2# find / -name p1 -print /home/Proba2/p1 root:/home/Proba2# find -name p1 -exec cat {} ; Kiss Béla Sándor Mátyás Gulyás Botond Lovas György Máté Pál Farkas Ádám Bárány Béla Juhász Pál Nagy Zoltán Kovács

Erika Szekeres Adrienn Kádár Huba Pál József root:/home/Proba2# find -name p1 -ok cat {} ; < cat . /p1 > ? y Kiss Béla Sándor Mátyás Gulyás Botond Lovas György Máté Pál Farkas Ádám Bárány Béla Juhász Pál Nagy Zoltán Kovács Erika Szekeres Adrienn Kádár Huba Pál József root:/home/Proba2# Megjegyzés: Ha az -exec, vagy -ok paraméterek után nem áll parancsszó, akkor az előttük lévő adott nevű fájl fog lefutni, már ha futtatható, egyébként anyázik. Pl.: find -name progi -exec {} ; //ahol progi a futtatható fájl - more (more / több) Leírás: A több képernyőnyi adatot több részben adja ki. Egyébként csak átrohanna a sorokon és csak az utolsó képernyőnyi adatot látnánk. A more-t |-al (alt+w) szoktuk kötni, és pipe-nak (csőnek)nevezzük. Pl.: „ls | more” parancs jelentése, több részletben listáz. „ls cat p1 | more” parancs jelentése, több részletben írd ki a p1 fájl tartalmát. Pl.: root:/home/Proba2# cd

/usr/games root:/usr/games# ls | more ( . Ha „enter”-t nyomok, akkor „scroll”oz Ha „Q”-t nyomunk, akkorkilép ) root:/usr/games# FONTOS: (Pipe) Ez azt jelenti, hogy parancsokat fűzünk egymás után. Pl.: ls -l > tmp ez ls -l | sort sort tmp ugyan az DE: igen hasznos lehet a pipe a következő esetben is: tail -2 p1 | head -1 // utolsó előtti sort adja meg a p1 fájlból - history (history / történelem) Leírás: A history parancs kilistázza a unix-rendszer elindítása után addig használt összes parancsot, még hozzá úgy, hogy mindegyik parancssor elé tesz egy sorszámot (időrendben sorszámoz: első parancssor 1, második parancssor 2, stb.) Ezen parancsok a ! használatával és a kívánt parancssor előtti sorszám beírásával aktiválhatók. Pl.: root:/usr/games# cd /home/Proba2 root:/home/Proba2# history |more (Ha sok parancsot írtál be, érdemes a „| more”-t használni.) . 834 cd . 835 dir 836 cd usr 837 ls . root:/home/Proba2# !837 ls

p1 p2 p3 root:/home/Proba2# - ps (ps / ) Leírás: A ps parancs a processzek állapotát adja meg. (PID = Process ID, magyarul a folyamat azonosítószáma) Pl.: root:/home/Proba2# ps PID TTY TIME CMD 3585 pts/0 00:00:00 bash 4076 pts/0 00:00:00 ps root:/home/Proba2# - nice parancssor & (Nice / Csekély) Leírás: Alacsonyabb prioritást ad a programoknak, és a háttérbe teszi. nice Parancssor & alakban vagy csak simán Parancssor & alakban A parncssor utáni sor (a példában: [4] 4318) elesén a munka sorszáma látható két szögletes zárójel közöt, utána pedig process száma. Ha végez akkor egy Done (magyarul: Kész) felirat jelzi. Pl.: root:/home/Proba2# find / -name proba -print & [4] 4318 root:/home/Proba2# /home/Proba2/proba használjuk. root:/home/Proba2# (Dolgozgatok, dolgozgatok) [4]- Done find / -name proba -print root:/home/Proba2# nice find / -name pr -print & [4] 4319 root:/home/Proba2# /usr/share/locale/l10n/pr /usr/bin/pr

(Dolgozgatok, dolgozgatok) [4] Done nice find / -name pr -print root:/home/Proba2# - jobs (jobs / munka) Leírás: Megmutatja a futó és megállított folyamatokat. AZ [1], [2], [3], ., [n] a munkák sorszáma Ha a sorszám mögött van egy + jel, akkor az az aktuális munka. Pl.: root:/home/Proba2# vi (ctrl-z) [1]+ Stopped vi root:/home/Proba2# vi (ctrl-z) [2]+ Stopped vi root:/home/Proba2# vi (ctrl-z) [3]+ Stopped vi root:/home/Proba2# jobs [1] Stopped vi [2]- Stopped vi [3]+ Stopped vi root:/home/Proba2# - fg (Front ground / Elő tér) Leírás: Az előtérbe helyezi azt a megadott munkát, ami vagy meg lett állítva, vagy háttérbe lett rakva. Ha simán csak az fg parancsszót írjuk be, akkor (a ps parancsszónál tárgyalt) aktuális munkát veszi előtérbe. (A példában az a find volt, amit aztán lestoppoltam) Egyébként a munka sorszámával lehet az adott munkát előtérbe hívni a következő módon: fg %munkaszáma (Pl.: fg % 3) Ilyenkor viszont ez a munka válik

aktuálissá. Pl.: root:/home/Proba2# find / -name p3 -print (ctrl+z) [4]+ Stopped find / -name p3 -print root:/home/Proba2# jobs [1] Stopped vi [2] Stopped vi [3]- Stopped vi [4]+ Stopped find / -name p3 -print root:/home/Proba2# fg find / -name p3 -print /home/Proba2/p3 (ctrl+z) [4]+ Stopped find / -name p3 -print root:/home/Proba2# fg %2 vi (ctr+z) [2]+ Stopped vi root:/home/Proba2# jobs [1] Stopped vi [2]+ Stopped vi [3] Stopped vi [4]- Stopped find / -name p3 -print root:/home/Proba2# fg vi (ctrl+z) [2]+ Stopped vi root:/home/Proba2# - bg (Back ground / Háttér) Leírás: Háttérbe helyezi a megállított programot és futtatja. Egyébként ugyanúgy működik, mint az fg. Pl.: root:/home/Proba2# bg [2]+ vi & root:/home/Proba2# bg %4 [4]- find / -name p3 -print & [2]+ Stopped vi root:/home/Proba2# (Dolgozgatok, dolgozgatok) [4] Done find / -name p3 -print root:/home/Proba2# - kill (Kill / Nyírd ki) Leírás: Megszünteti az adott folyamatot. (Ez nem mindig jön

össze) Ha tutira meg akarjuk szüntetni a folyamatot akkor kill -9. Pl.: root:/home/Proba2# ps PID TTY TIME CMD 3741 pts/0 00:00:00 bash 4272 pts/0 00:00:00 vi 4273 pts/0 00:00:00 vi 4274 pts/0 00:00:00 vi 4301 pts/0 00:00:00 ps root:/home/Proba2# kill 4272 root:/home/Proba2# ps PID TTY TIME CMD 3741 pts/0 00:00:00 bash 4272 pts/0 00:00:00 vi //Nem szünt meg 4273 pts/0 00:00:00 vi 4274 pts/0 00:00:00 vi 4302 pts/0 00:00:00 ps root:/home/Proba2# kill -9 4272 root:/home/Proba2# ps PID TTY TIME CMD 3741 pts/0 00:00:00 bash 4273 pts/0 00:00:00 vi 4274 pts/0 00:00:00 vi 4303 pts/0 00:00:00 ps [1]- Megölve vi root:/home/Proba2# //Megszünt - alias (Alias / ) Leírás: Az alias parancs lényege, hogy ha egy hosszú parancssort sokszor használunk, akkor lehetőségünk van egy egyszerűbb karaktersorozattal, vagy akár egy karakterrel helyettesíteni. A használata a következőképpen történik: alias karakter(ek)=”régi parancssor”. (Pl.: alias a=”ls -l”) Ha meg akarom

szüntetni, akkor: unalias karakter(ek) (Pl.: unalias a) Pl.: root:/home/Proba2# alias a=”ls -l” root:/home/Proba2# a összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# ls -l összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# unalias a root:/home/Proba2# a bash: a: command not found root:/home/Proba2# - tee (tee / ) Leírás: A tee ugyanaz, mint a pipe, de közben az adatokat lementi Pl.: ls -l | tee proba | grep .root „ls-l” a teljes listázás az adott könyvtárban „| tee proba” a proba nevű fájlba teszi a teljes listát „| grep .root” azokat a sorokat listázza ki, amelyekben szerepel a root szó Pl.: root:/home/Proba2# ls -l | tee proba | grep .root -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11

2006-03-18 17:45 p3 root:/home/Proba2# cat proba összesen 12 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 root:/home/Proba2# ls -l összesen 16 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1 -rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 -rw-r--r-- 1 root root 263 2006-04-10 14:39 proba root:/home/Proba2# - cut (Cut / Vágj) Leírás: A cut levág a sorokból annyit, amennyit megadunk neki. Érdemes a -c paraméterrel használni kapásból, ami után szám-szám alakban adhatjuk meg hogy hányas karaktertől hányas karakterig maradjanak a sorok: - ha valamelyik szám helyére nem írunk semmit (a kötőjel marad) akkor a sor elejéig illetve végig-et jelent. - ha csak egy számot írunk, akkor azt a számú karaktert hagyja csak meg minden egyes sorban. Pl.: root:/home/Proba2# ls -l összesen 16 -rw-r--r-- 1 a users 159 2006-03-18 14:13 p1

-rw-r--r-- 1 root root 32 2006-03-18 12:28 p2 -rw-r--r-- 1 root root 11 2006-03-18 17:45 p3 -rw-r--r-- 1 root root 211 2006-04-10 14:47 proba root:/home/Proba2# ls -l | cut -c 15a users 159 2006-03-18 14:13 p1 root root 32 2006-03-18 12:28 p2 root root 11 2006-03-18 17:45 p3 root root 211 2006-04-10 14:47 proba root:/home/Proba2# ls -l | cut -c -11 összesen 16 -rw-r--r--rw-r--r--rw-r--r--rw-r--r-root:/home/Proba2# ls -l | cut -c 30-40 2006-03-18 2006-03-18 2006-03-18 2006-04-10 root:/home/Proba2# ls -l | cut -c 30 2 2 2 2 root:/home/Proba2# - tr (Trace / Nyom) Leírás: A tr a standard bemenetet a standard kimenetre másolja és közben az általunk megadott ismétlődő karaktert arra cseréli amire szeretnénk. Pl.: root:/home/Proba2# ls -l| tr r X összesen 16 -Xw-X--X-- 1 a useXs 159 2006-03-18 14:13 p1 -Xw-X--X-- 1 Xoot Xoot 32 2006-03-18 12:28 p2 -Xw-X--X-- 1 Xoot Xoot 11 2006-03-18 17:45 p3 -Xw-X--X-- 1 Xoot Xoot 211 2006-04-10 14:47 pXoba root:/home/Proba2# Fontosabb

kapcsolói: -d A megadott ismétlődő karakter(eke)t törli Pl.: root:/home/Proba2# ls -l| tr -d 123 összesen 0 -rw-r--r-- a users 59 006-0-8 4: p -rw-r--r-- root root 006-0-8 :8 p -rw-r--r-- root root 006-0-8 7:45 p -rw-r--r-- root root 006-04-0 4:47 proba root:/home/Proba2# Egyéb: (beépített osztályok segítségével kis betűket naggyá teszi) Pl.: root:/home/Proba2# ls -l| tr -s [:lower:] [:upper:] ÖSZESEN 16 -RW-R--R-- 1 A USERS 159 2006-03-18 14:13 P1 -RW-R--R-- 1 ROT ROT 32 2006-03-18 12:28 P2 -RW-R--R-- 1 ROT ROT 11 2006-03-18 17:45 P3 -RW-R--R-- 1 ROT ROT 211 2006-04-10 14:47 PROBA root:/home/Proba2# Ezekkel van egy kis gondom $ testprog -23 ./bin alma $0: testprog  [megjegyzés: basename $0 ] $1: -23 $2: ./bin $3: alma Unix-scriptek A unix-script egy olyan futtatható program, ami az idáig tárgyalt parancsok segítségével komplex műveletekre képes. De szerintem inkább álljunk neki és írjunk néhány scrip-tet, és akkor már mindenkinek tiszta lesz,

hogy miről is beszélek. A példától a mondandóm a # jellel fogom elkülöníteni és zöld színnel. Pl.: root:/home/Proba2# cd . root:/home# mkdir ./scriptek root:/home# cd scriptek root:/home/scriptek# root:/home/scriptek# echo #!/bin/bash > elso.script root:/home/scriptek# echo echo Na mi a helyzet hapsikám?! >> elso.script root:/home/scriptek# cat elso.script #!/bin/bash echo Na mi a helyzet hapsikám?! # # # # # A # jel egyébként azt jelenti a script-eknél, hogy ami mögöttem van az komment, úgyhogy, nem zavarom a script-et a működésében, de most itt nem ez a jelentése, hanem a „#!/bin/bash”-nál mindig kell az elejére a #. A jelentése a sornak pedig az, hogy a bash-al futtatom le a script-et. Az echo Na mi a helyzet hapsikám?! sor pedig már egy ismert parancssor. root:/home/scriptek# ./elsoscript # A unix-ban írd be a „./” jelet az indítandó fájl elé, mert egyébként anyázik bash: ./elsoscript: Engedély megtagadva # #

Valószínűleg a fenti sort fogod te is megkapni. Ne ess kétségbe, a gond ott van, hogy a fájl amit létrehoztál nem rendelkezik, futtatási joggal. Úgyhogy orvosolni kell root:/home/scriptek# ls -l összesen 4 -rw-r--r-- 1 root root 44 2006-04-10 18:38 elso.script root:/home/scriptek# chmod a+x elso.script root:/home/scriptek# ls -l összesen 4 -rwxr-xr-x 1 root root 44 2006-04-10 18:38 elso.script root:/home/scriptek# ./elsoscript Na mi a helyzet hapsikám?! # És voala! Már működik is az első script-ünk. root:/home/scriptek# cat elso.script > elsoscript2 root:/home/scriptek# ls -l összesen 8 -rwxr-xr-x 1 root root 44 2006-04-10 18:38 elso.script -rw-r--r-- 1 root root 44 2006-04-10 21:24 elso.script2 root:/home/scriptek# bash elso.script2 Na mi a helyzet hapsikám?! # # # Na most, hogy is van, az elso.script2 tartalma ugyanaz, mint az elsoscript-é, de nem futtatható, és mégis lefut. Ez azért van, mert a bash parancs mindent lefuttat ami lefuttatható.

root:/home/scriptek# echo #!/bin/bash > masodik.script root:/home/scriptek# echo echo Figyelj mert csalok?! >> masodik.script root:/home/scriptek# echo cd / >> masodik.script root:/home/scriptek# echo pwd >> masodik.script root:/home/scriptek# echo ps >> masodik.script root:/home/scriptek# bash masodik.script Figyelj mert csalok?! / PID TTY TIME CMD 3559 pts/0 00:00:00 bash 4518 pts/0 00:00:00 bash 4519 pts/0 00:00:00 ps # # # # Mit is kellene látnunk? Azt, hogy a script-ben van egy olyan sor, hogy lépj a gyökérbe, mégis amikor végez, akkor újból abban a könyvtárban vagyunk, ahonnan indítottuk, és a process folyamatoknál is észrevehető, hogy egy új bash folyamat jelent meg. Az új bash az első bash gyermeke root:/home/scriptek# . / masodikscript Figyelj mert csalok?! / PID TTY TIME CMD 3559 pts/0 00:00:00 bash 4536 pts/0 00:00:00 ps # # # A jelen esetben ha „. /”-t használunk a futtatandó fájl előtt, akkor az nem hoz létre

gyermeket, hanem a szülő bash-t használja, és ekkor, ha a script lefut, akkor nem lép vissza abba a könyvtárba, ahonnan el lett indítva. root:/# cd /home/scriptek root:/home/scriptek# # # A következő téma amit meg kell tárgyalnunk,hogyan működik a unix-ban, ha a változónak értéket adunk. root:/home/scriptek# ertek=13 root:/home/scriptek# ertek2=13abcd # # # # Amint látjátok az értékadás roppant egyszerű: változó neve=szám vagy karakter, vagy jelek közé írt string. Felhívnám rá a figyelmeteket, ha a változónak új értéket adtok, akkor onnantól kezdve az lesz az értéke, azaz mindig az utolsó megadott értéket jegyzi meg. root:/home/scriptek# echo $ertek 13 root:/home/scriptek# echo $ertek2 13abcd # A változók értéke az „echo $változónév” -parncsal kapható meg. root:/home/scriptek# EGY=1 root:/home/scriptek# KETTO="2.000" root:/home/scriptek# echo "$EGY meg ${EGY} az egyenlő" $KETTO 1 meg 1 az egyenlő

2.000 # # # A fenti néhány sor tanulsága az, hogy a parancsértelmezőt, nem zavarja meg az idézőjel, mert előbb hajtja végre a behelyettesítést. A „${}”-ről pedig a következő blokban „beszélek” részletesebben. root:/home/scriptek# proba=Pr root:/home/scriptek# echo En vagyok a Pr > Pr root:/home/scriptek# echo En vagyok a Proba > Proba # # # Ügye mindenki látja, hogya fenti három sorban csak annyi történt, hogy létrehoztam egy proba nevű változót melynek Pr az értéke, tovább létrehoztam két fájlt, melynek nevei Pr és Proba, és a saját nevüket beléjük írtam. root:/home/scriptek# cat $proba En vagyok a Pr root:/home/scriptek# cat ${proba}oba En vagyok a Proba # # # # # A fenti négy sor szerintem elég jól mutatja, hogy mire jó a „${}”. Ügye az első sor „cat $proba” ugyan az, mint a „cat Pr”, mert a „proba” értéke Pr. A „cat ${proba}oba” pedig ugyan az mint a „cat Proba”, mert a „${proba} = Pr” és

a „{}” miatt a „Pr”-t hozzáfűzi az „oba”-hoz. Egyébként a {}-t ilyen esetben határolónak nevezik. root:/home/scriptek# set (.) # # A fenti set parancs egy roppant jó kis parancs, mivel megadja az összes éppen használt változó nevét. root:/home/scriptek# rm -i Pr* rm: remove regular file `Pr? i rm: remove regular file `Proba? i root:/home/scriptek# # # A következő téma amit meg kell vizsgálni, az a láthatóság a változókesetén. Írjuk meg harmadik scriptünket. root:/home/scriptek# echo #!/bin/bash > harmadik.script root:/home/scriptek# echo echo Na szerinted mit csinálok? >> harmadik.script root:/home/scriptek# echo echo VALT=29 >> harmadik.script root:/home/scriptek# echo VALT=29 >> harmadik.script root:/home/scriptek# echo echo VALT: $VALT >> harmadik.script root:/home/scriptek# echo echo VALT2: $VALT2 >> harmadik.script root:/home/scriptek# cat harmadik.script #!/bin/bash echo Na szerinted mit csinálok? echo

VALT=29 VALT=29 echo VALT: $VALT echo VALT2: $VALT2 root:/home/scriptek# # # # # # # A fenti blokkban csak annyi történt, hogy létrehoztam a harmadik script-ünket, ami kiírja azt, hogy „Na szerinted mit csinálok?”, majd alá VALT=29, aztán történt egy változó értékadás, azaz a VALT -nak 29 lett az értéke, majd kiíratom a VALT változó értékét, és kiiratom a VALT 2 értékét is. De a VALT2 változónak a script-ben nem definiálom az értékét. Na most idáig ez ugyan az, amit már csináltunk A következő blokkban pedig megmutatom, hogy mire is megy ki a játék root:/home/scriptek# VALT=56 root:/home/scriptek# echo $VALT 56 root:/home/scriptek# VALT2=a root:/home/scriptek# echo $VALT2 a root:/home/scriptek# bash harmadik.script Na szerinted mit csinálok? VALT=29 VALT: 29 VALT2: root:/home/scriptek# echo $VALT 56 root:/home/scriptek#echo $VALT2 a root:/home/scriptek# # # # # # Emlékeztek, azt írtam, hogy a unix mindig az utolsó értékadást

veszi figyelembe, és akkor most mi van. Hát az, hogy a szűlő bash nem kapta meg a gyermekétől a VALT változó felülírására vonatkozó információt. A programba nem lát be a szülő (ezt mutatja a sárga kiemelés), és a gyerek sem lát ki a szülőre (ezt mutatja a piros kiemelés). root:/home/scriptek# export VALT2 root:/home/scriptek# echo $VALT2 a root:/home/scriptek# bash harmadik.script Na szerinted mit csinálok? VALT=29 VALT: 29 VALT2: a root:/home/scriptek# # # Ha az export-parancsot az adott változó elé írjuk, akkor a szülő láthatóvá teszi a gyermekének is a változót, így az már látja. root:/home/scriptek# echo $VALT 56 root:/home/scriptek# . /harmadikscript Na szerinted mit csinálok? VALT=29 VALT: 29 VALT2: a root:/home/scriptek# echo $VALT 29 root:/home/scriptek# # Ha a „. /”-t használunk, azaz „source”-t, akkor a gyereket látja a szülőt root:/home/scriptek# unset VALT2 root:/home/scriptek# echo $VALT2 root:/home/scriptek#

bash harmadik.script Na szerinted mit csinálok? VALT=29 VALT: 29 VALT2: root:/home/scriptek# # # # # Az unset parancs törli az adott változó értékét, és megszünteti a gyerek rálátását a szülőre. ÖSSZEFOGLALVA. 1) bash programnév (Ha futtatható: ./progamnév)  A szülő nem látja a gyereket és a gyerek se látja a szülőt. # # 2) 3) 4) # # # Gyakorlásképpen vegyük a következő feladatot: Írjunk programot, ami a bekért néven, .txt kiterjesztessél létrehoz egy fájlt és ebbe a fájlba beleírja a paraméterének az értékét. . /programnév export változónév unset változónév  a gyerket látja a szülő.  a szülő adott változóját látja a gyerek  az adott változó értékét törli és a láthatóságokat is. root:/home/scriptek# echo #!/bin/bash > negyedik.script root:/home/scriptek# echo echo Ird be a fájl nevet: >> negyedik.script root:/home/scriptek# echo read Nev >> negyedik.script root:/home/scriptek#

echo echo $1>${Nev}.txt >> negyedikscript root:/home/scriptek# cat negyedik.script #!/bin/bash echo Ird be a fájl nevet: read Nev echo $1>${Nev}.txt root:/home/scriptek# bash negyedik.script Én vagyok a paraméter Ird be a fájl nevet: proba root:/home/scriptek# ls -l összesen 24 -rwxr-xr-x 1 root root 44 2006-04-10 18:38 elso.script -rw-r--r-- 1 root root 44 2006-04-10 21:24 elso.script2 -rw-r--r-- 1 root root 101 2006-04-14 18:20 harmadik.script -rw-r--r-- 1 root root 51 2006-04-10 21:56 masodik.script -rw-r--r-- 1 root root 66 2006-04-14 23:35 negyedik.script -rw-r--r-- 1 root root 1 2006-04-14 23:37 proba.txt root:/home/scriptek# cat proba.txt Én vagyok a paraméter root:/home/scriptek# # # # # # # A fenti scrip-t első és második sora nem szorul magyarázatra, azonban a harmadik sor tartalmaz egy új elemet a read parancsot. A read egyszerűen csak anyit csinál, hogy karaktereket olvas be addig, míg „enter”-t nem nyomsz. Az egyel alatta lévő sor

pedig a program indításakor megadott paramétert (Én vagyok a paraméter) a Nev változóba beolvosott nevű. és txt kiterjesztésű fájlba menti Egyéb hasznos paraméterek: $$ : jelenlegi PID. $# : paraméterek száma. $@ : az összes paraméter. $* : az összes paraméter. $? : legutolsó parancs visszatérési értéke. $! : legutolsó bg folyamat PID-je. # # # # Írjunk egy olyan programot, ami bekér egy fájlnevet, majd ezen fájl tartalmát egy olyan fájlba másolja, amelynek neve az eredeti fájlnév, hozzáfűzve az aktuális PID-t. A másolás után kiiratjuk ezen fájl tartalmát névsorba rendezve, majd letöröljük. (Én még egy listázást is teszek bele, hogy megmutassam tényleg működik.) root:/home/scriptek# echo #!/bin/bash > proba2 root:/home/scriptek# echo echo Irjon be egy fajlnevet: >> proba2 root:/home/scriptek# echo read filename >> proba2 root:/home/scriptek# echo echo $filename > ${filename}$$ >> proba2

root:/home/scriptek# echo ls -l >> proba2 root:/home/scriptek# echo sort ${filename}$$ >> proba2 root:/home/scriptek# echo rm ${filename}$$ >> proba2 root:/home/scriptek# cat proba2 #!/bin/bash echo Irjon be egy fajlnevet: read filename echo $filename > ${filename}$$ ls -l sort ${filename}$$ rm ${filename}$$ root:/home/scriptek# bash proba2 Irjon be egy fajlnevet: gaba összesen 36 -rwxr-xr-x 1 root root 44 2006-04-10 18:38 elso.script -rw-r--r-- 1 root root 44 2006-04-10 21:24 elso.script2 -rw-r--r-- 1 root root 5 2006-04-16 17:32 gaba3687 -rw-r--r-- 1 root root 101 2006-04-14 18:20 harmadik.script -rw-r--r-- 1 root root 688 2006-04-16 11:23 haromszog -rw-r--r-- 1 root root 51 2006-04-10 21:56 masodik.script -rw-r--r-- 1 root root 66 2006-04-14 23:50 negyedik.script -rw------- 1 root root 128 2006-04-16 17:32 proba2 -rw-r--r-- 1 root root 22 2006-04-14 23:58 proba.txt gaba root:/home/scriptek# # # # # A fenti script működésében szerintem nincs semmi extra

, úgy hogy, túl sokat nem mondanék róla. A kulcs sora az „echo”-s sor, ahol is a filename változónkba beolvasott értéket beletesszük egy ugyanilyen nevű fájlba, a $$ hozzáfűzés pedig az aktuális process azonosító (PID) hozzáfűzését jelenti # És most következzen néhány fontos szerkezet megbeszélése. For ciklus: for név in halmaz do utasításlista done Példa rá: for i in alma korte do echo A változó értéke: $i done root:/home/scriptek# echo #!/bin/bash > forciklus root:/home/scriptek# echo for i in alma korte >> forciklus root:/home/scriptek# echo do >> forciklus root:/home/scriptek# echo echo A változó értéke: $i >> forciklus root:/home/scriptek# echo done >> forciklus root:/home/scriptek# cat forciklus #!/bin/bash for i in alma korte do echo A változó értéke: $i done root:/home/scriptek# bash forciklus A változó értéke: alma A változó értéke: korte root:/home/scriptek# # # # Világos, hogy mi

történik, ugye? Az i változónk egy kételemű halmazból (alma, korte) áll. Előszőr az egyiket veszi értékként, majd a másikat Majd kiírása kerül úgy, hogy előtte van „A változó értéke:” szöveg. root:/home/scriptek# echo #!/bin/bash > forciklus2 root:/home/scriptek# echo for i in $* >> forciklus2 root:/home/scriptek# echo do >> forciklus2 root:/home/scriptek# echo echo A változó értéke: $i >> forciklus2 root:/home/scriptek# echo done >> forciklus2 root:/home/scriptek# cat forciklus2 #!/bin/bash for i in $* do echo A változó értéke: $i done root:/home/scriptek# bash forciklus2 alma körte barack A változó értéke: alma A változó értéke: körte A változó értéke: barack root:/home/scriptek# # # # Ez a script egy az egyben ugyanaz, mint a felső, csak egy eltérés van benne, hogy a for ciklus halmaza a $*-nak köszönhetően a script neve után beírt paraméterekből álló halmaz. root:/home/scriptek# bash

forciklus2 alma * A változó értéke: alma A változó értéke: elso.script A változó értéke: elso.script2 A változó értéke: forciklus A változó értéke: forciklus2 A változó értéke: harmadik.script A változó értéke: masodik.script A változó értéke: negyedik.script A változó értéke: proba.txt root:/home/scriptek# # # # # A következő történt. Az előbb mondtam, hogy a forciklus2 után következő paraméterek lesznek a halmaza a script-ben lévő for ciklusnak. A * miatt a parancsértelmező viszont úgy veszi, hogy a könyvtárban lévő összes fájl neve is paraméter. Ezért jön az alma után az elsoscript, majd így tovább Case szerkezet: case szó in minta 1) minta 2) . minta n) esac Példa rá: case $# in 0) echo „Nincs parameter.”;; 1) echo „Egy parameter van:” $1;; 2) echo „Két parameter van:” $1, $2;; *) „Sok parameter van:” $@;; esac root:/home/scriptek# echo #!/bin/bash > case root:/home/scriptek# echo case $# in

>> case root:/home/scriptek# echo 0) echo "Nincs parameter.";; >> case root:/home/scriptek# echo 1) echo "Egy parameter:" $1;; >> case root:/home/scriptek# echo 2) echo "Két parameter:" $1, $2;; >> case root:/home/scriptek# echo *) echo "Sok parameter:" $@;; >> case root:/home/scriptek# echo esac >> case root:/home/scriptek# cat case #!/bin/bash case $# in 0) echo "Nincs parameter.";; 1) echo "Egy parameter:" $1;; 2) echo "Két parameter:" $1, $2;; *) echo "Sok parameter:" $@;; esac root:/home/scriptek# bash case korte barack alma Sok parameter: korte, barack alma root:/home/scriptek# bash case korte alma Két parameter: korte alma root:/home/scriptek# bash case 1 Egy parameter: 1 root:/home/scriptek# bash case Nincs parameter. root:/home/scriptek# # # # # A fenti blokk a case szerkezet működésére egy példa, ami úgy működik, hogy ha egy egyik sora (minta)

teljesítit a feltételt, akkor aktiválja azt a sort. Ha a feltételt több sor is teljesíti, akkor csak a feltételnek elsőre eleget tevő sort hajtja végre. If then else szerkezet: if utasítás then utasítás igaz else utasítás hamis fi Példa rá: if [ „$1” = „$2” ] then echo egyenlő else echo nem egyenlő fi root:/home/scriptek# echo #!/bin/bash > ifthenelse root:/home/scriptek# echo if [ „$1” = „$2” ] >> ifthenelse root:/home/scriptek# echo then echo egyenlő >> ifthenelse root:/home/scriptek# echo else echo nem egyenlő >> ifthenelse root:/home/scriptek# echo fi >> ifthenelse root:/home/scriptek# cat ifthenelse #!/bin/bash if [ "$1" = "$2" ] then echo egyenlő else echo nem egyenlő fi root:/home/scriptek# bash ifthenelse 5 5 egyenlő root:/home/scriptek# bash ifthenelse a 5 nem egyenlő root:/home/scriptek# # # # A fenti blokkban az if then else szerkezetet gyakoroltuk, a script-ünk nem csinál

mást, mint megvizsgálja a feltételt, ha igaz then és végrehajtja a sorában lévő parancsot, ha nem igaz akkor else és az ő sorában lévő parancsot hajtja végre. If then elif else szerkezet: if utasítás 1 then utasítás 1 igaz elif utasítás 2 then utasítás 2 igaz elif utasítás 3 then utasítás 3 igaz . elif utasítás n then utasítás n igaz else utasítás hamis fi Példa rá: if [ "$a" -lt "5" ] then echo Az altalam gondolt szam nagyobb. elif [ "$a" -gt "5" ] then echo Az altalam gondolt szam kisebb. else echo Eltalaltad fi root:/home/scriptek# echo #!/bin/bash > ifthenelifelse root:/home/scriptek# echo echo Na melyik szamra gondoltam: >>ifthenelifelse root:/home/scriptek# echo read a >> ifthenelifelse root:/home/scriptek# echo if [ "$a" -lt "5" ] >> ifthenelifelse root:/home/scriptek# echo then echo Az altalam gondolt szam nagyobb. >> ifthenelifelse root:/home/scriptek#

echo elif [ "$a" -gt "5" ] >> ifthenelifelse root:/home/scriptek# echo then echo Az altalam gondolt szam kisebb. >> ifthenelifelse root:/home/scriptek# echo else echo Eltalaltad >> ifthenelifelse root:/home/scriptek# echo fi >> ifthenelifelse root:/home/scriptek# cat ifthenelifelse #!/bin/bash echo Na melyik szamra gondoltam: read a if [ "$a" -lt "5" ] then echo Az altalam gondolt szam nagyobb. elif [ "$a" -gt "5" ] then echo Az altalam gondolt szam kisebb. else echo Eltalaltad fi root:/home/scriptek# bash ifthenelifelse Na melyik szamra gondoltam: 2 Az altalam gondolt szam nagyobb. root:/home/scriptek# bash ifthenelifelse Na melyik szamra gondoltam: 6 Az altalam gondolt szam kisebb. root:/home/scriptek# bash ifthenelifelse Na melyik szamra gondoltam: 5 Eltalaltad root:/home/scriptek# # # # # # # A fentiprogram egy nagyon egyszerű példa az if then elif else szerkezetre, amely egyszerűen egy

gondoltam egy számot játék (ahol én gondoltam, te meg kitalálhatod) A fenti két script-ben a feltétel megadására használt [ $a művelet $b] típusú megadást, másképpen test parancsal is megadhatjuk. Azaz if test $# = 2 ugyan if [ $# = 2 ] then . az mint then . # Vagy if test –f tmp then . ugyan az mint if [ $# = 2 ] then . Elágazások altertnatív módja: if C1 then C2 fi ugyan az mint C1 && C2 if not C1 then C2 fi ugyan az mint C1 || CK 1. Numerikus kifejezések: (2 szám összehasonlítása) [ $a –lt $b ] a<b (less then) [ $a –gt $b ] a>b (greater then) [ $a –le $b ] a <= b (less then or equal to) [ $a –ge $b ] a >= b (greater then or equal to) [ $a –eq $b ] a=b (equal to) [ $a –ne $b ] a != b (not equal to) 2. String kifejezések: [ $a = $b ] [ $a != $b ] [ -n $b ] [ -z $b ] a két string azonos a két string nem azonos a string nem nullstring a string nullstring 3. Fájl kifejezések: [ -f FÁJL ] [ -d KÖNYVTÁR ] [

-l LINK] while ciklus: while utasítás 1 do utasítás 2 done a fájl létezik (reguláris fájl) a könyvtár létezik a link létezik Példa rá: while [ „$1” ] && [ „$1” != „and” ] do echo $1 shift done root:/home/scriptek# echo #!/bin/bash > while root:/home/scriptek# echo while [ „$1” ] && [ „$1” != „end” ] >> while root:/home/scriptek# echo do >> while root:/home/scriptek# echo echo $1 >> while root:/home/scriptek# echo shift >> while root:/home/scriptek# echo done >> while root:/home/scriptek# cat while #!/bin/bash while [ "$1" ] && [ "$1" != "end" ] do echo $1 shift done root:/home/scriptek# bash while a b c end d a b c root:/home/scriptek# # # # # # # # # A fenti script-ről csak néhány mondatot szeretnék „szólni”: Ugyebár a while ciklust hivatott bemutatni, ahol a ciklus feltétele, hogy a paramétereket egyenként beolvassa míg „end”-et nem

talál, vagy míg végig nem ér a paramétereken. A trükk az egészben csak a shift parancsszó, ami nem csinál mást, mint hogy elmozdítja a karaktert eggyel jobbra. Ezért előszőr az első paramétert írja ki majd a másodikat, harmadikat és így tovább (a, b, c). Mivel a d paraméter előtt van egy „end” nevű, ezért ott a script futása megáll while ciklus (végtelen): while: do utasítás done Példa rá: while: do read sor echo „-->” $sor done root:/home/scriptek# echo #!/bin/bash > while vegtelen root:/home/scriptek# echo while : >> while vegtelen root:/home/scriptek# echo do >> while vegtelen root:/home/scriptek# echo read sor >> while vegtelen root:/home/scriptek# echo echo „-->” $sor >> while vegtelen root:/home/scriptek# echo done >> while vegtelen root:/home/scriptek# cat while vegtelen #!/bin/bash while : do read sor echo "-->" $sor done root:/home/scriptek# bash while vegtelen Szia hogy vagy

--> Szia hogy vagy Köszönöm jól vagyok --> Köszönöm jól vagyok Ez most egy végtelen ciklus --> Ez most egy végtelen ciklus (ctrl+c) root:/home/scriptek# # # # # Na, a fenti kis blokk a végtelen while ciklusra példa, ami ugye csak annyiban tér el, a sima while ciklustól, hogy a feltétel heyén egy : van, aminek a jeletése „mindig igaz”. Ha a proginkat meg akarjuk állítani akkor „ctrl+c”-vel megtehetjük. root:/home/scriptek# echo #!/bin/bash > while2 root:/home/scriptek# echo while read sor >> while2 root:/home/scriptek# echo do >> while2 root:/home/scriptek# echo echo „-->” $sor >> while2 root:/home/scriptek# echo done < $1 >> while2 root:/home/scriptek# cat while2 root:/home/scriptek# cat while2 #!/bin/bash while read sor do echo "-->" $sor done < $1 root:/home/scriptek# bash while2 forciklus --> #!/bin/bash --> for i in alma korte --> do --> echo A változó értéke: $i --> done

root:/home/scriptek# # # A fenti kis script nem csinál mást, mint hogy egy megadott fájl sorait a képernyőre írja (mint a cat parancs). Expr parancs: Matematikai műveleteket végezhetünk vele (+, - , *, / ). expr 3 + 4 expr 3 / 4 expr 3 % 4 expr 3 /* 4 (összeadás) (osztás) (az eredmény az osztás maradéka lesz) (szorzás) Parancsok behelyettesítése: A parncsok helyettesítése a backtick-el (alt+7) oldható meg, azaz a standard kimenetet paraméterbe tesszük. Pl.: i=1 j=`expr $i+1` echo $j # $i =1  expr 1 + 1  2  j=2  „2”-t ír ki a képernyőre Pl.: echo tst > tmp1 cat `cat tmp1` # # létrehozza a tmp1 nevű fájlt tst tartalommal  `cat tmp1`=tst  cat tst  ha van tst fájl a könyvtárba kiírja a tartalmát. Pl.: user=`grep „^${USER}:” /etc/passwd | cut -d: -f6` echo $user # # # # # # # # # # $USER megadja az aktuális felhasználónevet: root grep „^${USER}:” /etc/passwd jelentése: a passwd fájlból azt a sort

írd ki, aminek az elején megtalálod a „root:”-ot cut -d: -f6 jelentése: kivágom azt a karaktersorozatot, amely az -f parméter után írt számú olyan karaktersorozat, melynek határai a -d paraméter után beírt karakter(ek). Jelen esetben a sor: root:x:0:0:root:/root:/bin/basht Tehát a „/root”-ot vágja ki a cut. Az egész parancssor jelentése: a passwd fájlból kivett root: elejű sorból kivágott 6. olyan karaktersorozat, melynek határai a :, legyen a user változó értéke. Végezetül a „/root”-ot írja ki a képernyőre. (Nálad meg: /„a felhasználóneved”) Pl.: for i in `ls t*` do cat $i done # # `ls t*` jelentése: kilistázom az összes fájlt, amiben van t. A for ciklus a cat $i-vel pedig az összes listázott file tartalmát a képernyőre írja. # A következő kis progi megmutat néhány alkalmazási módot az expr parancsra. root:/home/scriptek# cat haromszog #!/bin/bash #include <math.h> echo Adja meg a haromszog 1. oldalanak a

hosszat: read a echo Adja meg a haromszog 2. oldalanak a hosszat: read b echo Adja meg a haromszog 3. oldalanak a hosszat: read c ab=`expr $a + $b` ac=`expr $a + $c` bc=`expr $b + $c` K=`expr $a + $b + $c` s=`expr $K / 2` A=`expr $s - $a` B=`expr $s - $b` C=`expr $s - $c` SZ1=`expr $s * $A` SZ2=`expr $B * $C` SZ3=`expr $SZ1 * $SZ2` T="$SZ3" if [ "$ab" -lt "$c" ] then echo A haromszog nem letezik elif [ "$ac" -lt "$b" ] then echo A haromszog nem letezik elif [ "$bc" -lt "$a" ] then echo A haromszog nem letezik else echo A haromszog letezik es echo a kerulete: $K echo a teruletetenek negyzete: $T fi root:/home/scriptek# # # # Csak annyit szertnélk hozzáfűzni a progihoz, hogy azért a terület négyzetét iratom ki, és nem a területet, mert nem jöttem rá, hogy lehet gyököt vonni (elvileg sqrt, de nekem nem műkszik.) Függvények: fcn name() { . } Pl.: Példa rá: fcn Proba() { if [ "$1" -eq

"$2" ] then return 11 else return 21 fi } root:/home/scriptek# echo #!/bin/bash > fv root:/home/scriptek# echo fcn Proba() >> fv root:/home/scriptek# echo { >> fv root:/home/scriptek# echo if [ "$1" -eq "$2" ] >> fv root:/home/scriptek# echo then >> fv root:/home/scriptek# echo return 11 >> fv root:/home/scriptek# echo else >> fv root:/home/scriptek# echo return 21 >> fv root:/home/scriptek# echo fi >> fv root:/home/scriptek# echo } >> fv root:/home/scriptek# echo fcn Proba 1 2 >> fv root:/home/scriptek# echo echo $? >> fv root:/home/scriptek# echo fcn Proba 3 3 >> fv root:/home/scriptek# echo echo $? >> fv root:/home/scriptek# cat fv #!/bin/bash fcn Proba() { if [ "$1" -eq "$2" ] then return 11 else return 21 fi } fcn Proba 1 2 echo $? fcn Proba 3 3 echo $? root:/home/scriptek# bash fv 21 11 root:/home/scriptek# # # # # # A fenti progi elején van

egy Proba nevű függvény, ami azt vizsgálja, hogy a két szám egyenlő-e. Ha egyenlő 11-es értékkel tér vissza, ha nem egyenlő akkor 21-et ad viszsza értékül Utána kétszer meghívásra kerül a Proba fv. úgy, hogy előszőr 1 nem egyenlő kettő, majd úgy hogy 3 egyenlő 3. # # # # FONTOS: A fv. csak akkor hajtódik végre, ha meghívjuk A fv.-ben lévő paraméterek lokális pozicionális paraméterek A többi paraméter globális. # # # # return: kilép a függvényből és visszatérési értéket ad. Pl.: return VAL exit: kilép a függvényből és nincs visszatérési érték. - sleep (Sleep / Aludj) Leírás: A sleep parancsal egy folyamat adott időre elaltatható. Használata: sleep n, ahol az n=1, 2, ., k másodpercet jelent # # # # A következő script-ünk a fenti sleep parancs egy lehetséges használatára kíván példaként szolgálni: Írjunk egy olyan programot, amely a háttérben futtatva a MEGVAN üzenet kiírásával jelzi, ha a

paraméterként megadott nevű fájllétrejött. Pl.: root:/home/scriptek# echo #!/bin/bash > sleep root:/home/scriptek# echo until test -f $1 >> sleep root:/home/scriptek# echo do >> sleep root:/home/scriptek# echo sleep 1 >> sleep root:/home/scriptek# echo done >> sleep root:/home/scriptek# echo echo MEGVAN! >> sleep root:/home/scriptek# cat sleep #!/bin/bash until test -f $1 // vagy until [ -f $1 ] do sleep 1 done echo MEGVAN! root:/home/scriptek# bash sleep kell.txt & [1] 11983 (.) root:/home/scriptek# echo Létrejöttem > kell.txt root:/home/scriptek# MEGVAN! (enter) [1]+ Done bash sleep kell.txt root:/home/scriptek# # # A fenti script ,egértése szerintem nem jelenthet gondot, úgyhogy inkább nem ragoznám. - date (Date / Dátum) Leírás: A date parancs megadja a dátumot év (%y), hónap (%m), nap (%d) formában. A kapcsolóit, és hogy hogyan kell használni, a példában találjátok. Pl.: root:/home/scriptek# date +%y 06

root:/home/scriptek# date +%m 04 root:/home/scriptek# date +%d 19 root:/home/scriptek# date +%y.%m%d 06.0419 root:/home/scriptek# date +%x 2006-04-19 root:/home/scriptek# - bsename (Base name / Szótő) Leírás: A basename parancs megadja a a hosszú kiterjesztésű fájlok szótövét. A példából megértitek mire gondolok. Pl.: root:/home/scriptek# echo > szoto.egyhosszukiterjesztesvagyok root:/home/scriptek# basename szoto.egyhosszukiterjesztesvagyok szoto.egyhosszukiterjesztesvagyok root:/home/scriptek# basename szoto.egyhosszukiterjesztesvagyok vagyok szoto.egyhosszukiterjesztes root:/home/scriptek# szoto.egyhosszukiterjesztesvagyok kiterjesztesvagyok szoto.egyhosszu root:/home/scriptek# basename szoto.egyhosszukiterjesztesvagyok .egyhosszukiterjesztesvagyok szoto root:/home/scriptek# Kiértékelés: (a fordító ebben a sorrendben vizsgálja a parancssort) 1. Paraméterek behelyettesítése 2. Parancsok behelyettesítése 3. (Határolókarakterekkel tördelés) 4.

Joker karakterek ( *, ?, [] ) behelyettesítése illeszkedő fájlnevekkel. 5. Parancs hívása Kivételek: nincs behelyettesítés Pl.: echo *t $alma *t $alma // ahol alma=korte ”.” van paraméter és parancs behelyettesítés, nincs fájlnév bővítés Pl.: echo ”*t$alma” // ahol alma=korte *t korte Perl-scriptek # # # # # A perl-script hasonló, mint a „bash-script” ezért itt már nem a parancssort fogom használni a script elkészítésére (részben azért mert a unix-script fejezetben már kiveséztem a script írást, részben meg azért, mert rohadtul unalmas így csinálni, ezért inkább egy jó kis notepad-et fogok használni.) és nem fogok annyira részletesen magyarázni sem, mint idáig, és annyi példa se lesz root:/home/scriptek# mkdir Perl root:/home/scriptek# cd Perl root:/home/scriptek/Perl# cat elso.perl #!/usr/bin/perl -w print "Enter number: "; $be = <STDIN>; chomp $be; $ki = $be*4-2; print "$ki ";

root:/home/scriptek/Perl# perl elso.perl # # # # # # # # # # # # # # Az első fontos dolog, hogy perl-ben vagyunk és nem bash-ban, tehát a script-eket perl-el és nem bash-al tudod indítani. Én nem figyeltem és vagy tízszer javítottam át a script-et mire rájöttem, hogy olyat akarok csinálni, ami soha a büdös életben nem fog összejönni. (perl-t bash-al futtatni) Na jó, viszont most elemezzük az eső scriptünket sorrol sorra: Az első sor megmondja a fordítónak, hogy ő egy perl-script, a -w kapcsoló pedig (worry = aggódni), arra jó, hogy így anyázik, ha rosszat írtál. Ellenkező esetben egy büdős szót sem szól, csak nem működik. A print parancs olyan mint az echo (írd ki a képernyőre). A „$be=” egy változó értékadás, az „<STDIN>” az inputról való beolvasást jelenti (alapesetben billenytyűzet). chomp parncsszó levágja a sor végét jelző karaktert. (Magyarán az „enter”-t) A „$ki”-s sor egy sima műveletvégzés. Az

utolsó sorban kiiratjuk a ki változó értékét majd sort ugrunk a „ ”-el Numerikus és string változók: $pi = 3.1415926; $str1 = ”hello world ”; // ahol a “ “ a sorugrás karakter $str2 = ’hello world ’; Műveletek: $STR3=uc($str1); $pi2 = 2*$pi; $c=sin($pi2); $ct++; A default változó: $ // ahol, uc = upper case, azaz mindent nagyként ír ki. Lista változók (tömbök): Pl.: root:/home/scriptek/Perl# cat masodik.perl #!/usr/bin/perl -w $v=12; @list = (1, 2, alma, $v); print "@list "; # 1 2 alma 12 @list2=(korte, @list, (45, 67)); print "@list2 "; # korte 1 2 alma 12 45 67 $size=@list2; $lastix=$#list2; print "size: $size, lastix: $lastix. "; # megadja a list2 hosszát:7 # megadja az utolsó lista indexet:6 # size: 7, lastix: 6. $elem2 = $list2[2]; $elemlast=$list2[-1]; @sublist= @list2[1.3, 5]; # lehtne helyette @, de értékadásnál jobb így # a lista2 utolsó elemét adja meg # a list 1., 2, 3, 5-ik tagját

jelenti print "elem2: $elem2, elemlast: $elemlast, sublist: @sublist "; root:/home/scriptek/Perl# perl masodik.perl 1 2 alma 12 korte 1 2 alma 12 45 67 size: 7, lastix: 6. elem2: 2, elemlast: 67, sublist: 1 2 alma 45 root:/home/scriptek/Perl# # # # # # # A fenti script-tel kapcsolatban csak néhány megjegyzésem lenne: A @ jel jelenti azt, hogy ez egy listaváltozó. A perl-ben a lista elemei 0-tól indulnak, tehát az 1-es index a második tagot jelenti, és így tovább. Ha negatív számot adunk meg indexnek, akkor pedig a hátsó tagtól indul visszafele a számozás, azaz a -1 az utolsó tagot, míg a -2 az utolsó elöttit jelenti, és így tovább. Blokkok: { utasítás 1; utasítás 2; . utasítás N; } Elágazás: if (feltétel) blokk 1 else blokk 2 Pl.: Példa rá if ($a > 12) { $qtya = kuvasz; print “$qtya ”; } else { print ”$matchka ”; } root:/home/scriptek/Perl# cat if.perl #!/usr/bin/perl -w $matchka=cica; print "Irj be egy

szamot:"; $a=<STDIN>; if ($a > 12) { $qtya = kuvasz; print "$qtya "; } else { print "$matchka "; } root:/home/scriptek/Perl#perl if.perl Irj be egy szamot:6 cica root:/home/scriptek/Perl# perl if.perl Irj be egy szamot:15 kuvasz root:/home/scriptek/Perl# For ciklus: for (init; test; incr) blokk Példa rá for( $i= 6; $i < 20; $i=$i+3 ) { print "$i "; } Pl.: FOYTATÁSA KÖVETKEZIK #!/usr/bin/perl -w for( $i= 6; $i < 20; $i=$i+3 ) { print "$i "; } for( $s=a88; $s lt c10; $s++ ) { print "$s "; } While ciklus: while (kifejezés) blokk Pl.: #!/usr/bin/perl -w while ($be= <STDIN>) { print $be; } Kilépés a programból: exit visszatérési érték Pl.: exit 0; # OK Logikai operátorok: !, not &&, and ||, or Pl.: if ($a && ($b || $c)) Relációs operátorok Numerikus String == eq > gt < lt >= ge <= le != ne Teszt 1. gyakorló feladat a) Másolja át a /usr/bin

könyvtárból az összes „lo” kezdetű fájlt a /home/me könyvtárba. b) Lépjen be az utóbbi könyvtárba. c) Irassa ki az aktuális könyvtár nevét. d) Hozzon létre itt egy könyvtárat „tmp” néven. e) Mozgassa át a tmp könyvtárba az összes olyan fájlt, amelynek neve a „loc” karaktersorozatot tartalmazza. f) Listázza ki az összes „t” betűvel kezdődő fájlt a könyvtárban. g) Másolja át a csiga.txt fájlt a poktxt fájlba h) Törölje le az összes olyan fájlt, melynek nevében két „s” betű van úgy, hogy köztük két (bármilyen) karakter van. i) Irassa ki a képernyőre az eger.txt fájlt Megoldás: root:~# cd /home root:/home# mkdir teszt root:/home# cd teszt root:/home/teszt# 2. gyakorló feladat a) Derítse ki, milyen felhasználónéven jelentkezett be. (Segítség a továbbiakhoz: Ön a marineni nevű felhasználó.) b) Derítse ki, milyen csoportokba (group) tartozik. c) Lépjen be a /home/marineni/recept könyvtarba. d) Hozzon

létre kemény (hard) linket a /receptek/makosretes.txt fájlra, melynek neve mariretes.txt legyen e) Hozzon létre puha (soft) linket a /receptek/pacal.txt fájlra, melynek neve maripacaltxt legyen. f) Másolja át a maripacal.txt fájlt a kedvenctxt-be g) Állítsa be a kedvenc.txt fájl csoport (group) azonosítóját "szakacsok"-ra h) Állítsa be a kedvenc.txt fájl hozzáférési jogosultságait úgy, hogy csak a "szakacsok" csoport tagjai olvashassák a fájlt, de írni ők sem tudják. Mari néni persze írhassa és olvashassa is a fájlt. i) Mari néni a következő parancsot adta ki: chmod 640 kedvenc.txt Tudja-e a többi szakács a "szakacsok" csoportból olvasni és írni a fájlt? j) Józsi bácsi is bejelentkezett és kiadta az rm /receptek/*.txt parancsot Mit lát a képernyőn Mari néni a cat kedvenc.txt parancs kiadása után? k) Mit lát a képernyőn Mari néni a cat maripacal.txt parancs kiadása után? l) Mit lát a képernyőn Mari

néni a cat mariretes.txt parancs kiadása után? Megoldás: 3. gyakorló feladat a) Listázza ki az aktuális könyvtár tartalmát a lista.txt nevű fájlba b) A lista.txt végére írja be a mai aktuális dátumot (Segítség: man date) c) A fájl végére írja be: UTOLSO ELOTTI SOR UTOLSO SOR d) Irassa ki a lista.txt fájl sorainak számát e) Irassa ki a lista.txt fájl utolsó 2 sorát f) Irassa ki a hanyszo.txt fájlba, hogy hány szóból áll a listatxt utolsó előtti sora Megoldás: 4. gyakorló feladat a) Parancssorból írja be a nevsor.lst fáljba a következő adatokat Kiss Pityu, pityu@alma.hu, kekfrankos Alfoldi Geza, gezuka@borkotostolo.hu, rizling Kiss Peter, -, rizling Nagy Andras, Pukki@kekfrankos.com, kadarka Kovacs Antal, kanti@loleg.com, kekfrankos b) c) d) e) Irassa ki a nevsor.lst fájl tartalmát az abctxt fájlba névsorba rendezve Irassa ki azon személyek adatait, akik a kekfrankost szeretik. (Figyeljen Nagy Andrasra!) Irassa ki azon személyek

adatait, akiknek vezetékneve K betűvel kezdődik. Irassa ki azon személyek adatait, akiknek keresztneve P betűvel kezdődik. (Segítség: a vezetéknév a sor elején áll, a keresztnév ez után egy szóközzel elválasztva kezdődik.) f) Irassa ki azon személyek adatait, akiknek vezetéknevében van i betű. (Figyeljen Nagy Andrasra!) g) Irassa ki azon személyek adatait, akiknek vezetéknevében van i betű és van e-mail címe. h) Irassa ki azon személyek adatait, akiknek vezetéknevében van i betű és az e-mail cím @ előtti része tartalmaz egy x, y, vagy z karaktert. i) Névsorban irassa ki az előző pontnak megfelelő személyek adatait. Megoldás: root:/home/teszt# echo Kiss Pityu, pityu@alma.hu, kekfrankos > nevsorlst root:/home/teszt# echo Alfoldi Geza, gezuka@borkotostolo.hu, rizling >> nevsorlst root:/home/teszt# echo Kiss Peter, -, rizling >> nevsor.lst root:/home/teszt# echo Nagy Andras, Pukki@kekfrankos.com, kadarka >> nevsorlst

root:/home/teszt# echo Kovacs Antal, kanti@loleg.com, kekfrankos >> nevsorlst root:/home/teszt# sort nevsor.lst > abctxt root:/home/teszt# grep ,.kekfrankos nevsorlst Kiss Pityu, pityu@alma.hu, kekfrankos Kovacs Antal, kanti@loleg.com, kekfrankos root:/home/teszt# grep K nevsor.lst Kiss Pityu, pityu@alma.hu, kekfrankos Kiss Peter, -, rizling Kovacs Antal, kanti@loleg.com, kekfrankos root:/home/teszt# grep [A-Z][a-z]*.P nevsorlst Kiss Pityu, pityu@alma.hu, kekfrankos Kiss Peter, -, rizling root:/home/teszt# grep .*i.*[A-Z] nevsor.lst Kiss Pityu, pityu@alma.hu, kekfrankos Alfoldi Geza, gezuka@borkotostolo.hu, rizling Kiss Peter, -, rizling root:/home/teszt# grep .*i.*[A-Z].*@ nevsor.lst Kiss Pityu, pityu@alma.hu, kekfrankos Alfoldi Geza, gezuka@borkotostolo.hu, rizling root:/home/teszt# grep .*i.*[A-Z].*[x-z]@ nevsor.lst Kiss Pityu, pityu@alma.hu, kekfrankos Alfoldi Geza, gezuka@borkotostolo.hu, rizling root:/home/teszt# grep .*i.*[A-Z].*[x-z]@ nevsor.lst |sort Alfoldi Geza,

gezuka@borkotostolo.hu, rizling Kiss Pityu, pityu@alma.hu, kekfrankos root:/home/teszt# 5. gyakorló feladat a) Keresse meg az összes .bak kiterjesztésű fájlt a /home/pistike alkönyvtártól indulva (Segítség: find). b) Listázza ki az osszes.hf nevű fájlba az összes olyan cpp kiterjesztésű fájl tartalmát a /home/einstein alkönyvtáról indulva, amely nevében tartalmazza a "hazifeladat" karektersorozatot. (Segítség: find -exec opció) c) Számolja meg, hány #define karaktersorozatot tartalmazó programsor található a /home/billgates/mywindows könyvtárban a .c kiterjesztésű fáljokban (Segítség: grep, wc ) Megoldás: 6. gyakorló feladat a) Hogyan lehet kiiratni a képernyőre azon folyamatok adatait, amelyeket az aktuális parancsértelmezőből indítottunk? (ps, grep) b) Írassa ki azon folyamatok adatait, amelyek Stopped állapotban vannak. (ps, grep) c) Indítson el a háttérben egy keresést, ami a talalat nevű fájlba beteszi az

összes olyan fájl nevét, ami tartalmazza a nyul és a roka karaktersorozatokat ilyen sorrendben. d) Hogyan lehet egy Stopped állapotban lévő job-ot előtérbe hozni? Mit jelent ez? e) Hogyan lehet egy Stopped állapotban lévő job-ot háttérbe tenni? Mit jelent ez? f) Hogyan lehet egy futó programot Stopped állapotba hozni? g) Hogyan lehet egy előtérben futó folyamatot megölni? h) Hogyan lehet egy háttérben futó folyamatot megölni? Megoldás: 7. gyakorló feladat a) Írjon egy programot, ami kiírja, hogy hány paraméterrel indították. b) Írjon programot, ami az első paraméterként megadott fájlba másolja a többi paraméreterben megadott fájlok tartalmát (tehát pl. masol summa file1 file2 file3 bemasolja a file1, file2, file3 tartalmát a summa nevű fájlba). A paraméterek száma pontosan 4. c) Írja meg az előző programot, ha a paraméterek száma tetszőleges, kettőnél nagyobb szám. (Segítség: cat, shift) d) Írjon egy programot, ami bekér

egy fájlnevet, majd ezen fájl tartalmát egy olyan fájlba másolja, amelynek neve az eredeti fájlnév, hozzáfűzve az aktuális PID-t. A másolás után irassa ki ezen fájl tartalmát névsorba rendezve, majd törölje le. Megoldás: 8. gyakorló feladat a) Írjon progamot, ami soronként olvas be és a sorokat a paraméterként megadott fájlba másolja. A beolvasás addig tart, amíg a STOP tartalmú sort nem olvassa b) Írjon progamot, ami soronként olvas be és a sorokat a paraméterként megadott fájlba másolja. A beolvasás addig tart, amíg egy üres sort nem olvas c) Írjon programot, amely a háttérben futtatva a MEGVAN üzenet kiírásával jelzi, ha a paraméterként megadott nevű fájl létrejött. Segítség: használja a sleep parancsot d) Írjon programot, ami a paraméterként megadott könyvtárban található összes fájl nevét és a fájlban található sorok számát kiírja a következő formátumban: <fájlnév>: sorok száma. Pl:

<billc>: 125 e) Írjon meg az ls parancs magyar nyelvű megfelelőjét. A lista nevű parancs hasonlóan működik, mint az ls, de még a kapcsolói is magyarul beszélnek: -l helyett -h, -a helyett m kapcsolókat kell használni. (Elég, ha e két kapcsolót megérti programunk) Megoldás: