Operációs Rendszerek II. labor 4-5. alkalom
Több program egyszerre Többszörös bejelentkezéssel triviális Egy shell alól is lehet: Indítás háttérben: <parancs> & Futó program felfüggesztése: CTRL-Z Háttérbe küldés: bg Háttérben futó program előtérbe: fg Ha több van: fg %2, stb. Ha kilépünk (Hangup), leállnak a programok nohup <cmd>
Próbáljuk ki Teszt, ami sokáig fut (alma.sh): while true; do date >> alma.txt sleep 2 done Indítsuk el és nézzük a készülő fájlt! Hogyan? Függesszük fel a futást! Frissül a fájl? Küldjük el háttérbe (bg)! Frissül a fájl? Hozzuk előtérbe (fg)! Állítsuk meg! Indítsuk rögtön háttérből Ugye most is frissül?
Próbáljuk tovább! Háttérben fut, frissül Lépjünk ki, majd vissza. Frissül még? Futassuk úgy, hogy kilépés után is fusson! nohup alma.sh & Frissül a fájl? Lépjünk ki majd vissza! Frissül? Tipp: cat <file> tail <file> tail f <file>
Mi fut? ps parancs, többféle kapcsolóval (man) SysV stílus: ps ef BSD stílus: ps aux Ami érdekes (most, egyébként a többi is) PID, PPID, UID/USER, CMD Szülők és gyerekek, zombik és árvák top utility: periodikusan lekérdezi q, M, P
Ha nem akarom, hogy fusson kill parancs kill [<signal>] <PID> érdekesebb signal-ok: PID 1: HUP 9: KILL Például a ps parancs kimenetéből -1: csak root-ként, broadcast killall parancs: név alapján jár el
Feladat Írjon egy olyan scriptet, ami kiírja a paramétereként megadott nevű folyamat PID-jét! ps ef grep $1 cut c7-11 Ez a cut nem túl szép Jobb megoldás? ps ef grep $1 awk { print $2 } De ez mást is kiír. Jobb megoldás? szedjük ki a grep sort (greppel)
Ütemezett futtatás Szeretném, ha rendszeresen futna akkor is, ha nem vagyok belépve CRON mechanizmus /var/spool/cron/crontabs könyvtár Szerkesztés, listázás: crontab parancs (vs. vi, de ) crontab l /list/ crontab e /edit vi!!!!/ crontab r /remove/ Na de mit írjunk ide?!
crontab fájl Forma: mikor, mit. A mikor kicsit összetett minute: 0-59 hour: 0-23 day of month: 1-31 month: 1-12 day of week : 0-7 (0 or 7 is Sun) A field may be an asterisk (*), which always stands for ``first-last''
crontab példák <Min> <Hour> <Day_of_M> <Month> <Day_of_W> # run five minutes after midnight, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # run at 2:15pm on the first of every month 15 14 1 * * $HOME/bin/monthly # run at 10 pm on weekdays, annoy Joe 0 22 * * 1-5 mail -s "It's 10pm" joe%joe,%%where are you?% " 23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am... " 5 4 * * sun echo "run at 5 after 4 every sunday"
Feladat Készítsen egy programot, ami percenként egy adott fájlhoz ($HOME/now) hozzáfűzi az aktuális dátumot és időpontot (függetlenül attól, hogy be vagyunk-e lépve)! Script (now.sh): date >> $HOME/now crontab: * * * * * $HOME/now.sh
További futtatási módok Démonok, inittab és futási szintek who r init parancs, inittab rc könyvtárak
Folyamatok közötti kommunikáció Régi eszközök: pipe FIFO signal Pipe ismerős: ls more signal is: kill FIFO named pipe
FIFO Speciális fájl, tartalma csővezeték szerűen viselkedik Létrehozás: mkfifo vezetek Más rendszereken: mknod Használat (két konzol) konzol1: cat <vezetek konzol2: echo hello > vezetek
diff parancs Szöveges fájlok összevetése diff -q alma.txt korte.txt De ami érdekesebb: diff alma.txt korte.txt > diff.out patch alma diff.out xdiff (windiff, ha Windows) alma.txt: alma barack dió korte.txt: alma citrom dió
tar parancs Végtelenül bonyolult fájl archiváló program Archív létrehozása: tar cf <archív neve> <mit> Archív listázása: tar tf <archív neve> Archív kibontása: tar xf <archív neve> Példa (a HOME-unk alatt hozzunk létre egy valami könyvtárat, ahova másoljunk bele fájlokat!) tar cvf alma.tar valami tar tf alma.tar tar xvf alma.tar
tar folytatás, könyvtárak másolása Készítsünk egy akarmi könyvtárat cd; mkdir akarmi Másoljuk ide a valami tartamát (könyvtárastul) Kellemetlen meglepetés: tar cf alma.tar /home/hallgato/valami cd akarmi tar xf../alma.tar Megoldás: mindig relatív megadás kell! Könyvtárak másolása köztes fájl nélkül mkdir akarmi tar cf valami ( cd akarmi; tar xf )
Find parancs, fájlok keresése Szintén nem az egyszerűségéről híres Alap: find <hol> <szűrő> <akció> Fontosabb szűrési paraméterek: Név: find. name *.txt *-print] Típus: find. type f [-print] Fájl: f, Könyvtár: d, stb Méret: find. size 1M [-print] Vagy inkább: find. size -1M [-print] Egyéb finomságok : időbélyegek, stb.
Find folytatás Időbélyegek: státusz v., módosítás, hozzáférés ctime, mtime, atime Előjelek: + vagy - Léptékek: second, minute, hour, day, week; default: nap Példák: find. mtime +3 find. mtime -3 Összehasonlítás: newer find. newer valami.txt
Find még tovább Határoljuk be a keresési mélységet! find. depth 2 print Egyéb akciók : exec exec <mit> <paraméter: {}> \; find. type d exec ls ld {} \; Ez innentől már invazív, lehet destruktív is!
Gyakorlás, find: listázza ki /usr könyvtár alatt található (al)könyvtárakat! find /usr -type d Listázzon, de csak kettes mélységben! find /usr -type d -depth 2 /usr alatti 1 MB-nál nagyobb méretű fájlokat! find /usr -type f -size +1M -exec ls -l {} \; Meg a méretüket is find /usr -type f -size +1M -exec ls -l {} \;
Egyszerű inkrementális mentés Írjon egy scriptet, ami két paramétert vár a mentendő könyvtár nevét a mentési könyvtárat (ahova a mentések készülnek) A mentési könyvtárba a fájlok neve a mentés időpontja legyen (tar fájl jöjjön létre) Az egyes mentések csak az előző mentés óta keletkezett változásokat tartalmazzák (fájl szinten, kivétel a törlések) Az egyes inkrementumok megőrizendők! Lehessen lehetőség full mentés készítésére Használandó parancsok: find, tar, touch Vagy bármi más, ami jól esik
sed Stream EDitor Sorokat dolgoz fel, főként cserére használjuk Akkor jó, ha sokszor kell cserélni DOS Unix text file, stb. Példafájl: telsz name: Alma, phone:123-4567 name: Barack, phone:234-5678 name: Citrom, phone:345-6789 name: Eper, phone:567-8912
sed folytatás Magyarítsunk: sed "s/name/neve" telsz Többszörös behelyettesítés: sed -e "s/name/neve/" -e "s/phone/telefon/ " telsz Telefonszám maszk: sed "s/[0-9]/*/" telsz Újra fussunk neki: sed "s/[0-9]/*/g" telsz Telefonszám formázás (behelyettesítés) sed "s/[0-9]*-[0-9]*/(&)/" telsz
Fekete lista Diszken helyet foglalók fekete listája Adott könyvtár (tipikusan /home, de most legyen /usr) alatti alkönyvtárak helyfoglalása, csökkenő sorrendben rendezve du, sort és társai Top 5 foglalás kiírása [Adott érték feletti sorok kiírása (pl. 10 mega)] du parancs (+megfelelő paraméterek): helyfoglalás sort: rendezés head: első 5 elem
Felhasználók fájljai Egy adott könyvtárban (és alkönyvtáraiban) található közönséges fájlok listázása, amelyek egy adott felhasználó (paraméter) tulajdonában vannak (find) A fájlok megszámlálása A fájlok össz. helyfoglalásának kiírása
Jog tuning Írjunk egy olyan scriptet, ami az összes futtatható fájl írási jogát megszűnteti (de a futtatási és egyéb jogok maradnak) chmod Hibakezelés! Csak akkor legyen hiba, ha tényleg nem sikerült állítani a jogot (azaz, ha nem is volt írási jog ne szóljon, hogy nem sikerült)
Tulajdonjog váltás Hozzunk létre egy új felhasználót (archiv) Írjunk egy script-t, ami egy adott alkönyvtár összes, 10 kilobyte-nál nagyobb fájljának tulajdonjogát átadja az archiv felhasználónak (chown)! Számoljuk meg az eredményes átadásokat! A scriptet módosítsuk úgy, hogy kezelje a hibákat is!
Gépek között Régen és ma: telnet: terminál emulátor kliens ftp: interaktív fájltranszfer rsh: parancs futtatása távoli gépen rcp: fájl másolás gépek között ssh: secure shell (win: putty) ssh [user@]hostname [command] scp: secure copy scp [[user@]host1:]file1... [[user@]host2:]file2