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
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 tail tail –f
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>] – „érdekesebb” signal-ok: • 1: HUP • 9: KILL
– PID • 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: – hour: – day of month: – month: – day of week :
0-59 0-23 1-31 1-12 0-7 (0 or 7 is Sun)
• A field may be an asterisk (*), which always stands for ``first-last''
crontab példák <Min> <Month> # run five minutes after midnight, every day 50***
$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
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 <szűrő> • 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