Az időhöz kötődő parancsok



Hasonló dokumentumok







































Á Á ü Ö Á Á Á ü ö ü ü ö ö ö ö ü Á ü ü




ú ű ú ű Ó Ú Á ú Ú ú ú ú Ú Ú Ó ú ú Ö ú É ű ú

















































ü Ö Ü Ü ü ö Á Ü ö Ü Ü ö ö ö ű Ü ü Ü ö ö ú ü Ó ö ü ú Ü ö ü ü ö ö ö ö ü






ö ü ü ü ü ö ö ú Ü É Á É ö ö ü ú ö ű ú ü ö ű ö ú Á ú ö ű Á Í ö ü ö ö ű ö ú ú ö ö


Átírás:

Az időhöz kötődő parancsok Az idő nyilvántartása...1 A date parancs...2 A time parancs...4 A sleep parancs...5 Időzített programfuttatás...6 Az at parancs...6 A UNIX démonok...6 A cron démon...7 Az idő nyilvántartása -UTC koordinált világidő (Coordinated Universal Time, Temps Universel Coordonné) -precíz órával követett, nemzetközi időreferencia, standard idő -a GMT (Greenwich Mean Time) időt helyettesítette -időzónák: az UTC ezen a szinten ugyanazt a felosztást követi mint a GMT, ezért ez most is így jelenik meg a gépek időnyilvántartásában. Tehát a GMT az időzóna referencia -nyári időszámítás befolyása a nyilvántartott időre (DST: Daylight Saving Time) -az időzónáknak is van külön elnevezése: pl. Kelet Európai Zóna (EET: Eastern European Time) -gépek összehangolása: NTP (Network Time Control) protokoll -www.ntp.org -Interneten 10 ms szinten hangol össze, lokális hálózaton 200 mikroszekundum szinten -bármelyik gép órája eltérhet a pontos időtől, mert azok a rezgőkörök amelyekre a egy PC-n az órajelek épülnek sem egészen pontosak -rendszer hardver órája (a BIOS tárolja) Kapcsolódó állományok és parancsok: /sbin/hwclock másolja át a hardver időt a rendszerbe indításkor /etc/sysconfig/clock tartalmazza azt az információt, hogy UTC vagy helyi időt használok, és melyik időzónában vagyok (Fedora Linux-on): cat /etc/sysconfig/clock # The ZONE parameter is only evaluated by system-config-date. # The time zone of the system is defined by the contents of /etc/localtime. ZONE="Europe/Bucharest" -időmérés a UNIX-ban: a referencia 1970 január 1 (UNIX Epoch), szekundum alapú -egy 32 bites egész számban tárolja ezt az értéket -2038-ig működhet így -a C nyelvben használatos függvények képezik az alapját bármilyen programból történő időkezelésnek: 1

A time_t time(time_t * t); szekundumban visszaadja az Epoch óta eltelt időt, clock_t times(struct tms *buf); órajelekben (clock ticks) adja vissza a pillanatnyi időt, illetve a UNIX time parancsa által mért felhasználói és rendszer időket, a sysconf(_sc_clk_tck) hívással lehet lekérni az egy szekundumra eső órajelek számát, ez rendszerenként különböző lehet, 100/szekundum például. Az int gettimeofday(struct timeval *tv, struct timezone *tz); szekundumban és mikroszekundumban is visszaadja a pillanatnyi időt. Az idő lekérdezése: a rendszernek tudnia kell melyik időzónában van, és azt, hogy érvényben van-e nyári időszámítás. Így kijelöléskor az UTC időbélyegből ki tudja számítani a helyi időt. A rendszer órája (system time) vagy az UTC, vagy a helyi időt használja, beállítás szerint. A legtöbb alkalmazás többnyire az UTC idő időbélyegével (szekundumok Epoch óta) jelöli meg objektumait (állományok, adatbázis rekordok). Van eset amikor helyi időbélyeget használnak, de ilyenkor fel van tüntetve mellette az UTC-hez viszonyított eltérés (adatbázisoknál timestamp with time zone és timestamp without time zone típusú mezők). Így a világ bármely részén nézünk meg egy állományt, rekordot, az illető alkalmazás pontosan ki tudja írni létrehozásának, módosításának idejét a helyi idő kijelölésével. A shell programozásnál az idő lekérdezésénél legtöbbször a date parancsot használjuk. A date parancs Használat lekérdezéshez: date +FORMAT használat idő beállításhoz (csak root használhatja így): date [MMDDhhmm[[CC]YY][.ss]] valamint a GNU date rendelkezik a -d kapcsolóval konverziókhoz, használata: date -d idősztring +FORMAT Az idő beállítását csak root végezheti el, ilyenkor a parancs argumentuma számjegyekből áll, és a hónapot (MM), napot (DD), órát és percet (hhmm) tartalmazza. Ha szükséges, a sztring további részében megjelenhet az év (CCYY) és a szekundum. Az első használati módnál a FORMAT sztringben ugyanazok a formázó karakterek használhatóak, mint a C nyelv strftime() függvényében. Ilyenkor a date a megfelelő formázással kiírja a pillanatnyi időt. Ha valamilyen nevet kell kiírnia (nap, hónap) az LC_TIME környezeti változót veszi alapul a nyelv megállapításához, ha ez nincs akkor a LANG változót. Pl.: date Sat Dec 8 18:07:44 EET 2007 date +"%Y. %B %d %A" 2007. December 08 Saturday export LANG=hu_HU.utf-8 date +"%Y. %B %d %A" 2007. december 08 szombat 2

Gyakran használjuk a date által előállított sztringet állománynevek előállítására: date +"%Y-%m-%d" 2007-12-08 echo a > (date +"%Y-%m-%d").txt ls *.txt 2007-12-08.txt A formázó sztringben az alábbi jelöléseket használhatjuk: Időmezők: %% literális % %n újsor %t vízszintes tabulátor %H óra (00..23) %I óra (01..12) %k óra ( 0..23) %l óra ( 1..12) %M perc (00..59) %p a helyi AM vagy PM %r 12-órás idő (hh:mm:ss [AP]M) %s az Koordinált Világidő (UTC) szerinti 1970-01-01 00:00:00 ót eltelt másodpercek %S másodperc (00..61) %T 24-órás idő (hh:mm:ss) %X a helyi idő ábrázolása (%H:%M:%S) %Z időzóna (pl. EDT), vagy semmi, ha nem határozható meg időzóna Dátummezők: %a a helyi nap rövidített neve (Sun..Sat) %A a helyi nap teljes neve, változó hosszal (Sunday..Saturday) %b a helyi hónap rövidített neve (Jan..Dec) %B a helyi hónap teljes neve, változó hosszal (January..December) %c a helyi dátum és idő (Sat Nov 04 12:02:33 EST 1989) %d a hónap napja (01..31) %D dátum (mm/dd/yy) %j az év napja (001..366) %m hónap (01..12) %U a hét sorszáma az évben úgy, hogy vasárnap a hét első napja (00..53) %w a hét napja (0..6) úgy, hogy 0 vasárnapnak felel meg %W a hét sorszáma az évben úgy, hogy hétfő a hét első napja (00..53) 3

%x a helyi dátum ábrázolása (mm/dd/yy) %y az év utolsó két számjegye (00..99) %Y év (1970...) további kapcsolók, részletek, lásd man date vagy info date. Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás Ha időbélyeggel dolgozunk, és ki kell írnunk a legalkalmasabb formátum az ISO-8601 standard által definiált, ennek két alakja (a második könnyebben olvasható): date "+%Y-%m-%dT%H:%M:%S%z" 2007-12-02T22:50:23+0200 date "+%Y-%m-%d %H:%M:%S %Z" 2007-12-02 22:50:36 EET A GNU date egy olyan kapcsolóval is rendelkezik amelyik konverziót enged meg, a -d vagy date kapcsoló. Ilyenkor a date nem a pillanatnyi időt írja ki, hanem a -d kapcsoló argumentumaként megadott időt. Ezt vagy standard ISO-8601 jelöléssel adjuk meg, (pl.: -d '2007-11-02' ) vagy egy relatív időpillanatokat leíró nyelvvel (ez nem standard, a GNU által kidolgozott. A date parancs kézikönyveiben rosszul dokumentált, de érdekességként megtalálható itt: http://www.gnu.org/software/tar/manual/html_node/relative-items-in-date-strings.html#sec120. Néhány példa: date "+%Y-%m-%d %H:%M" 2007-12-02 22:39 date -d tomorrow "+%Y-%m-%d %H:%M" 2007-12-03 22:40 date -d '-1 year' "+%Y-%m-%d %H:%M" 2006-12-02 22:40 date -d 'next week friday' "+%Y-%m-%d %H:%M" 2007-12-14 00:00 date -d '-1 week friday' "+%Y-%m-%d %H:%M" 2007-11-30 00:00 date -d '-5 week friday' "+%Y-%m-%d %H:%M" 2007-11-02 00:00 date -d 'this friday' "+%Y-%m-%d %H:%M" 2007-12-07 00:00 date -d 'last friday' "+%Y-%m-%d %H:%M" 2007-11-30 00:00 #vagy egyszerű konverzióhoz használjuk az ISO-8601 formátumot date -d '2007-12-01 11:52pm' "+%s" 1196545920 A time parancs Mire megy el az idő egy program futtatása alatt? 1. Az az idő, amit a a programok az ún. "felhasználó neve alatt futó" állapotban töltenek (user state). Ebbe beletartozik a program minden utasítása + a felhasznált könyvtárak utasításai, kivéve a kernel függvényeit (User-state CPU time). 2. Az az idő, amit a program rendszer (system state) állapotban tölt: a rendszerhívások ideje és a kernel által a program adminisztrálására fordított idő (System-state CPU time). 4

pl. egy strcpy hívás a felhasználó idejét terheli, egy printf vagy fork hívás a kernelét. 3. A Be/Ki idő: mennyi időt tölt az operációs rendszer Be/Ki alrendszere a program kiszolgálásával (pl. várakozás hard diszk időkre)(i/o time). 4. Hálózati idő. Mennyi idő telik el hálózati kérések kiszolgálásával (Network time). 5. Más programok futtatásával töltött idő. 6. Mennyi idő telik el virtuális memória kezeléssel (Virtual memory performance). A legegyszerűbb módja egy program által eltöltött idő vizsgálatára a time parancs: time opciók parancs % time sort nagyfile.txt > rendezett.txt real user sys 0m0.610s 0m0.556s 0m0.016s Implicit módban a time a valós időt (amennyit én érzékeltem), a felhasználói módban és a rendszermódban használt időt írja ki. A sleep parancs Gyakran használjuk a héjprogramozásban várakozásokra. sleep szám[smhd] s m h d másodperc perc óra nap sleep 2d sleep 0.1s Az argumentuma más programoktól eltérően tizedes szám is lehet, tehát sleep 0.01 lehetséges: time sleep 0.01 real user sys 0m0.012s 0m0.000s 0m0.001s 5

Időzített programfuttatás Az at parancs at időpont < szkript at időpont -f szkript batch idopont < szkript batch idopont -f szkript Az időpont formái: HH:MM, now, midnight, noon, teatime, HH:MMpm; dátumot is megadva: HHNNÉÉ. A programok kimenetét illetve a hibakimenetet levélben, a MAIL környezeti változóban megadott címre (lásd alább a cron parancsnál) küldi el. at 12:25 -f test.sh job 12 at 2007-12-09 12:25 at 10am 121306 -f test.sh job 13 at 2006-12-13 10:00 Segédparancsok: atq : a végrehajtandó at sor (at queue) feladatait listázza atrm : feladatot töröl a sorból A batch-el indított parancsok akkor indulnak amikor a rendszer terheltsége megengedi. A terheltség vizsgálatára az uptime parancs áll rendelkezésünkre. Az uptime az alábbi információkat írja ki:. A pillanatnyi idő, mennyi ideje fut a rendszer, hány felhasználó van pillanatnyilag belépve, és rendszer átlagos terheltsége (load) az elmúlt 1, 5, és 15 percre. uptime 12:36:16 up 30 min, 2 users, load average: 0.07, 0.02, 0.00 A parancsok kimenetét a rendszer e-mailen juttatja el a felhasználóhoz. Az at használatát a /etc/at.allow vagy /etc/at.deny állományokkal lehet engedélyezni vagy tiltani. A UNIX démonok A UNIX alatt azokat a programokat, amelyek folyamatosan aktívak, nem felhasználóhoz és terminálhoz kötöttek démonoknak nevezzük. Ezeket a rendszer indulásakor általában az init vagy más rendszerindító folyamatok által lesznek indítva, és különböző rendszerszintű szolgáltatásokat látnak el. A háttérben futnak, nincsenek felhasználóhoz és terminálhoz kötve: kimenetük rendszerint egy napló állományba kerül. A UNIX/Linux rendszerek alatt ilyenek az inetd, sendmail, crond. 6

A cron démon Operációs rendszerek I. - UNIX felhasználói ismeretek és héjprogramozás A rendszerszintű feladatindításokat a cron nevű démon végzi (crond). A konfigurációs állományai az /etc könyvtárban vannak (cron.deny, cron.monthly/, cron.weekly/, cron.daily/, cron.hourly/, crontab ). Az egyes felhasználók rendszeresen futtatott időzített feladataikat egy szöveges állományba írhatják, amennyiben erre engedélyük van (cron.allow és cron.deny állomámyok a /etc könyvtárban). Az állományt a crontab nevű parancs segítségével szerkeszthetjük. A crontab használata: crontab -l : kilistázza a feladatokat crontab -e : behívja a szövegszerkesztőt a feladat szerkesztésre crontab -r : törli az adott crontab állományt Pl. crontab állományra: SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=petike HOME=/ 00 02 * * * /home/petike/bin/napi_backup.sh 00 03 * * 5 /home/petike/bin/heti_backup.sh A crontab sorok formátuma: perc óra nap hónap hét_napja parancs Tehát az öt mező tartalma: 1. perc (0-59), 2. (0-23), 3. hónap napja (1-31), 4. melyik hónap (1-12), 5. a hét melyik napján fut (0-6 0=Vasárnap). A mezőkben a * jelenti a "minden kiválasztva" értéket, tehát az első mezőben a * jelentése: minden percben lefut. Kimenetét ugyancsak e-mailben küldi el a rendszer az állományban megadott környezeti változó szerinti email címre. 7