Skryptologia i systemy kolejkowe Maciej Cytowski, Franciszek Rakowski Interdyscyplinarne Centrum Modelowania Matematycznego i Komputerowego Uniwersytet Warszawski Szkolenie KDM (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 1 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 2 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 3 / 79
Powłoki powłoka = środowisko pracy powłoki sa to programy komputerowe pełniace rolę pośrednika pomiędzy systemem operacyjnym lub aplikacjami a użytkownikiem, przyjmujac jego polecenia i wyprowadzajac wyniki działania programów wyróżniamy kilka rodzin powłok (sh, csh, ksh,..) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 4 / 79
Historia powłok Powłoki pierwszej generacji Thompson shell - pierwsza powłoka systemów Unix (1971) - bardzo prosty interpreter poleceń możliwość przekierowania wejścia i wyjścia i użycia znaku (tzw. pipe) Powłoki drugiej generacji Bourne shell - sh (1977) - zastapiła Thompson shell w oficjalnej 7 dystrybucji Unix-a (AT&T Bell Laboratories) C-shell - csh (1978) - uznawana za dużo bardziej interaktywna powłokę niż sh, wprowadzała bardzo dużo nowoczesnych konstrukcji skryptowych (operacje arytmetyczne, historia poleceń, aliasy.. ) AWK (1977) - dużo bardziej zaawansowany język, nigdy nie stał się niestety samodzielna powłoka Powłoki trzeciej generacji Reakcja na rewolucyjne rozwiazania C-shell. TENEX C-shell - tcsh (1981) - csh rozszerzone o kilka dodatkowych funkcji, takich jak np. dopełnianie komend Korn shell - ksh (1983) - odpowiedź AT&T Bell Laboratories; wprowadzenie większości pomysłów csh do Bourne shell; uznawany za ojca popularnego bash-a Powłoki czwartej generacji Perl (1987) - funkcjonalność powłok oraz takich programów jak AWK czy SED w jednym narzędziu; ojciec takich języków skryptowych jak Phyton, PHP, Ruby tcl, zsh, Hamilton shell,... (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 5 / 79
Powłoki - interpretery poleceń Proste (bardzo) języki programowania Skrypty - programy Skrypty sa intepretowane Polecenia wbudowane - opisy w bashu: help nazwapoleceniawbudowanego (Polecenia zewnętrzne - opisy przez: man nazwapoleceniazewnętrznego) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 6 / 79
Przykład - Numeryczne Prognozy Pogody (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 7 / 79
Ogólna budowa skryptu Linie zaczynajace się od # sa komentarzami Wyjatki: Wpisywanie w 1. wierszu, od 1. kolumny, nazwy interpretatora, dla którego skrypt jest przeznaczony: #!/bin/bash polecenia systemu kolejkowego: #PBS -l cput=24:00:00 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 8 / 79
Uruchomienie skryptu Nadajac mu prawa do wykonywania i uruchamiajac jak każdy program: chmod +x nazwaskryptu./nazwaskryptu (Wykonanie przez interpreter potomny) Wywołujac interpreter z nazwa skryptu: bash nazwaskryptu (Wykonanie przez interpreter potomny) Korzystajac z polecenia source: source nazwaskryptu (lub krócej:. nazwaskryptu (Wykonanie przez bieżacy interpreter) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 9 / 79
Różnice przy różnych sposobach uruchamiania > less skrypt1 #!/bin/bash export ZMIENNA1=newvalue cd /home/users/kdmszk/src > pwd /home/users/kdmszk > echo $ZMIENNA1 oldvalue (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 10 / 79
Różnice przy różnych sposobach uruchamiania >./skrypt1 > pwd /home/users/kdmszk > echo $ZMIENNA1 oldvalue (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 11 / 79
Różnice przy różnych sposobach uruchamiania > source skrypt1 > pwd /home/users/kdmszk/src > echo $ZMIENNA1 newvalue (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 12 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 13 / 79
Powłoka csh i tcsh Pierwszy przykład #!/bin/tcsh set a while ( $a <= 20 ) echo $a @ a=$a + 1 @ a++ end cd /tmp Uwaga na spacje przy operacjach arytmetycznych! (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 14 / 79
Powłoka csh i tcsh - ustawianie zmiennych Do ustawiania zmiennych w tcsh służa polecenia: set - zmienne lokalne setenv - zmienne środowiskowe Do usuwania: unset, unsetenv. set IMIE=Maciek setenv IMIE Maciek Zmienne środowiskowe..moga być czytane i zmieniane przez programy potomne. (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 15 / 79
Zmienne lokalne a środowiskowe > less skrypt #!/bin/tcsh echo a=$a echo b=$b chmod +x skrypt setenv a 1 set b=2 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 16 / 79
Zmienne lokalne a środowiskowe >./skrypt a=1 b: Undefined variable. > source skrypt a=1 b=2 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 17 / 79
Powłoka csh i tcsh - zmienne Definiowanie i odwoływanie się do zmiennych set a=3 echo $a unset a set lancuch=(mag jest dziwny) echo $lancuch[2] echo $lancuch (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 18 / 79
Powłoka csh i tcsh set lancuch=(mag$a jest dziwny) set lancuch=(mag $a jest dziwny) set lancuch= mag jest dziwny (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 19 / 79
Powłoka csh i tcsh Substytucje zmiennych $$ numer procesu $argv[*] wszystkie parametry wywołania $argv[number] parametr wywołania ${?name} 1 jeśli zmienna name istnieje, 0 ${#name} liczba słów w zmiennej name (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 20 / 79
Powłoka csh i tcsh Modyfikatory zmiennych set a=plik.txt np: echo $a :r rdzeń nazwy pliku :e rozszerzenie nazwy pliku (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 21 / 79
Powłoka csh i tcsh wyrażenia logiczne: ( $a <= 20 ) && == >= < i lub!= <= > pętla foreach: foreach i (wordlist)... end (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 22 / 79
Podstawienia Variable substitution $$ numer procesu History substitution! ostatnie polecenie Command substitution wykonuje polecenie w cudzysłowie (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 23 / 79
Podstawienia foreach i (*) == foreach i ( ls ) foreach i ( seq 1 10 ) echo $i end (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 24 / 79
Podstawienia Instrukcje warunkowe if (expr1) then... else if (expr2) then... else... endif expr1 warunek logiczny np. ( $i <= 100 ), ( $a!= ) lub -op plik opcje filetest np. ( -e plik ), op= -efxrwzd... (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 25 / 79
Hands-on: TCSH Należy napisać program, który dla zbioru obrazów cyfrowych dokona automatycznej zamiany wszystkich obrazów na ich negatywy oraz zminiejszenia ich rozmiaru o 50%. Do wykonania tego zadania należy użyć programu convert (ImageMagick). Zamiana na negatyw: convert input.jpg -negate output.jpg Zmniejszenie o 50%: convert input.jpg -resize 50% output.jpg Dane wejściowe: handson_tcsh.tgz (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 26 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 27 / 79
Wejście/wyjście - wiadomości podstawowe Deskryptory: 0 - standardowe wejście (stdin) 1 - standardowe wyjście (stdout) 2 - standardowy strumień diagnostyczny (stderr) Każdemu otwartemu plikowi odpowiada co najmniej jeden deskryptor (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 28 / 79
Przekierowywanie stdin i stdout Przekierowanie: pliku na standardowe wejście: < nazwapliku standarowego wyjścia na plik z nadpisaniem (skasowanie poprzedniej treści tego pliku) > nazwapliku standarowego wyjścia na plik z dopisaniem na koniec tego pliku: > > nazwapliku Np.:./program < plikwejściowy > > plikwyjściowy (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 29 / 79
Przekierowywanie stderr Przekierowanie: standarowego strumienia diagnostycznego na plik z nadpisaniem (skasowanie poprzedniej treści tego pliku): 2> nazwapliku standarowego strumienia diagnostycznego na plik z dopisaniem na koniec tego pliku: 2> > nazwapliku To zadziała zawsze:./program 2> plikwyjściowy (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 30 / 79
Przekierowywanie stdout i stderr jednocześnie Skopiowanie stderr na stdout: 2>&1./program > plik.out 2>&1 W bashu można użyć do jednoczesnego przekierowania po prostu:./program > plik.out 2> plik.err W tcsh przejdzie tylko sklejenie:./program >& plik Uwaga:./program 2>&1 > plik przekieruje na plik tylko stdout. Stderr trafi na stdout (sprzed przekierowania) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 31 / 79
Zmienne zwykłe - bash Nie trzeba ich deklarować, ale można: help declare Sprawdzanie wartości: echo $NAZWAZMIENNEJ Ustawianie wartości (domyślnie napisy, można zadeklarować inaczej) NAZWAZMIENNEJ=WARTOŚĆ (bez spacji!) Np.: napis1= Ala ma kota ; napis2=$napis1 Często przypisanie wraz z eksportowaniem: export NAZWAZMIENNEJ=WARTOŚĆ (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 32 / 79
Zmienne środowiskowe - bash Zmienne takie jak: HOME, SHELL, USER, PWD. Sprawdzenie wartości wszystkich: set Operacje (poza deklarowaniem) jak na zmiennych zwykłych Przypisanie nawet bez export widoczne w programach wywoływanych z bieżacej instancji interpretera (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 33 / 79
Parametry wywołania skryptu Do kolejnych parametrów skryptu odwołujemy się przez: $1, $2,..., $9, ${10}, ${11},... $0 - nazwa skryptu $# - liczba parametrów $* lub $@ - napis złożony ze wszystkich parametrów $? - kod zakończenia ostatniego polecenia (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 34 / 79
Parametry wywołania skryptu - c.d. Do poruszania się po liście parametrów służy shift: shift n przesuwa listę w lewo o n pozycji: parametr o numerze n + 1 staje się pierwszy shift (bez parametrów) równoznaczne z shift 1 Uwaga! set NAPIS1 NAPIS2 w bashu ustawi $1 na NAPIS1, $2 na NAPIS2, a wyzeruje wszystkie dalsze parametry ($3, $4,...) (W tcsh set NAPIS1 NAPIS2 ustawi wartość zmiennej NAPIS1 na NAPIS2) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 35 / 79
Kody zakończenia poleceń Polecenia przekazuja kody zakończenia: 0 - zakończenie pomyślne, 1 - zakończenie z błędem. Polecenia można łaczyć: rm -f plik echo Błąd w rm polecenie1; polecenie2 - zwykłe złożenie: wykonaj polecenie1, potem wykonaj polecenie2 polecenie1 && polecenie2 - wykonaj polecenie2 jeśli polecenie1 zakończylo się sukcesem polecenie1 polecenie2 - wykonaj polecenie2 jeśli polecenie1 zakończyło się porażka (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 36 / 79
Instrukcja if if COMMANDS1 then COMMANDS2 [else COMMANDS3] fi if COMMANDS1 then COMMANDS2 [else COMMANDS3]fi Wykonywane COMMANDS1 i zależnie od kodu ich zakończenia COMMANDS2 albo COMMANDS3. Przy zagnieżdżaniu można używać elif (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 37 / 79
Polecenie wbudowane test Polecenie test używane jako warunek if: Porównywanie liczb: -eq -ne -lt -le -gt -ge Porównywanie napisów: =,!= ; -z - pusty, -n niepusty Testowanie plików: -d katalog, -f plik zwykły Łaczenie testów: negacja!, koniunkcja -a, altermatywa -o Inne: help test if test -w $1 -a -f $1; then...; fi (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 38 / 79
Operacje arytmetyczne Zadeklarowanie zmiennej jako całkowitoliczbowej i zwykłe operatory: declare -i k=0; k=k+1; Polecenie wbudowane let lub $[ ] lub $(( )): k=0; let k=k+1; k=0; k=$[k+1]; Jeśli obliczone wyrażenie daje 0, kodem zakończenia let jest 1, wpp. 0. Polecenie zewnętrzne expr (dla każdej operacji nowy proces!): k=0; k=$(expr $k + 1) (spacje sa istotne) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 39 / 79
Pętla while while COMMANDS1 do COMMANDS2 done while COMMANDS1; do COMMANDS2; done Póki kod zakończenia COMMANDS1 równy 0, wykonuje COMMANDS2 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 40 / 79
Pętla for for NAME [ in WORDS...] do COMMANDS done WORDS jest lista obiektów Jeśli nie podamy WORDS, for iteruje się po parametrach skryptu `seq n` daje listę liczb naturalnych od 1 do n Nowsza składnia: for (( expr1; expr2; expr3)); do list; done for k in 1 2; do echo $k; done (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 41 / 79
Hands-on: dodawanie liczb całkowitych Napiszmy krótki skrypt dodajacy liczby podane jako parametry wywołania: np.:./dodaj 2 8 7 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 42 / 79
Hands-on: dodawanie - przykładowy skrypt #!/bin/bash declare -i n=0; for i in seq 1 $# do n=n+$1 shift done echo $n (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 43 / 79
Funkcje (bash) [ function ] NAME () { COMMANDS; } Wywołanie: nazwafunkcji [arg] Odwołania do parametrów przez $1, $2,... (przesłonięcie parametrów skryptu) deklaracja zmiennych lokalnych: local i Kodem zakończenia funkcji jest kod ostatniego wykonanego polecenia Do wyniku (ostatnio wołanej) funkcji można się odwołać przez $? (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 44 / 79
Różnice tcsh - bash Główne różnice pomiędzy powłokami tcsh i bash zostały opisane przez Łukasza Bolikowskiego w 11 numerze Biuletynu KDM: http://www.icm.edu.pl/kdm/biuletyn_nr_11 zmienne środowiskowe przekierowanie wyjścia pętle, instrukcje warunkowe inne drobiazgi (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 45 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 46 / 79
Wklejanie innych programów - awk awk BEGIN{...na dobry początek...} \ {... polecenia awk przetwarzające \ każdy rekord pliku...} \ END{...polecenia na zakończenie...} <plik awk BEGIN{} { if(fnr>4){e=\$5*627.5;printf("%d\t%f\n",\$1,e)} } END{} < plik.inp > plik.out (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 47 / 79
awk (Aho, Weiberger, Kernighan) #!/bin/tcsh set a=ala set lan=(mag jest dziwny) echo lan awk {print $1 " $a "} Operacje zmiennoprzecinkwe: set y= echo 3 awk {e=$1*2.23;print e} echo $y lub set y= echo scale=2;3*2/20 bc -l (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 48 / 79
awk (Aho, Weiberger, Kernighan) elementy awk: sformatowane wyjście: printf operacje arytmetyczne zmiennoprzecinkowe, wbudowane funkcje: sin(),cos(),exp(),... if ()...;else... for(i-1;i<=3;i++)...; break,exit,continue. array[] - tablice wbudowane zmienne: NF,NR,FNR,FILENAME,ARGC,ARGV (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 49 / 79
Hands-on: AWK ping gw.icm.edu.pl > plik... 20 sek > less plik PING gw.icm.edu.pl (212.87.14.2) 56(84) bytes of data. 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=1 ttl=57 time=15.1 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=2 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=3 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=4 ttl=57 time=16.3 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=5 ttl=57 time=15.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=6 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=7 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=8 ttl=57 time=14.7 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=9 ttl=57 time=14.9 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=10 ttl=57 time=14.3 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=11 ttl=57 time=16.2 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=12 ttl=57 time=15.0 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=13 ttl=57 time=15.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=14 ttl=57 time=15.8 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=15 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=16 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=17 ttl=57 time=14.2 ms gw.icm.edu.pl ping statistics 17 packets transmitted, 17 received, 0% packet loss, time 15997ms rtt min/avg/max/mdev = 14.299/15.013/16.378/0.650 ms (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 50 / 79
Hands-on: AWK cat plik awk BEGIN{} (/icmp_seq/) {print $0} END{} 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=1 ttl=57 time=15.1 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=2 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=3 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=4 ttl=57 time=16.3 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=5 ttl=57 time=15.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=6 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=7 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=8 ttl=57 time=14.7 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=9 ttl=57 time=14.9 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=10 ttl=57 time=14.3 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=11 ttl=57 time=16.2 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=12 ttl=57 time=15.0 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=13 ttl=57 time=15.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=14 ttl=57 time=15.8 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=15 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=16 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=17 ttl=57 time=14.2 ms (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 51 / 79
Hands-on: AWK cat plik awk BEGIN{A=0} (/icmp_seq/) {print $0;A++} END{print A} 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=1 ttl=57 time=15.1 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=2 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=3 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=4 ttl=57 time=16.3 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=5 ttl=57 time=15.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=6 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=7 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=8 ttl=57 time=14.7 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=9 ttl=57 time=14.9 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=10 ttl=57 time=14.3 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=11 ttl=57 time=16.2 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=12 ttl=57 time=15.0 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=13 ttl=57 time=15.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=14 ttl=57 time=15.8 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=15 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=16 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=17 ttl=57 time=14.2 ms 17 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 52 / 79
Hands-on: AWK cat plik awk BEGIN{A=0} { if(nr<6 && /icmp_seq/) {print $0;A++} } END{print A} 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=1 ttl=57 time=15.1 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=2 ttl=57 time=14.4 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=3 ttl=57 time=14.6 ms 64 bytes from gw.icm.edu.pl (212.87.14.2): icmp_seq=4 ttl=57 time=16.3 ms 4 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 53 / 79
Hands-on: AWK cat plik awk BEGIN{A=0} { if(nr<6 && /icmp_seq/) {print $8;A++} } END{print A} time=15.1 time=14.4 time=14.6 time=16.3 4 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 54 / 79
Hands-on: AWK cat plik awk BEGIN{A=0} { if(nr<6 && /icmp_seq/) {n=substr($8,6); print n/10;a++} } END{print A} 1.51 1.44 1.46 1.63 4 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 55 / 79
Hands-on: AWK cat plik awk BEGIN{A=0} { if(nr<6 && /icmp_seq/) {n=int(substr($8,6)); hist[n]++; print n; A++} } END{print A; for(x in hist) print x,hist[x] } 15 14 14 16 4 14: 2 15: 1 16: 1 (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 56 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 57 / 79
Sed Język skryptowy do operacji na plikach, przetwarza je linia po linii Kopiuje podane pliki na standardowe wyjście, dokonujac przy okazji ich edycji zgodnie z podanymi komendami Komendy można podać wywołujac seda badź podać sedowi jako skrypt: sed -e s/pies/kot/g plik sed -f skrypt plik Postać komend: [adres1 [, adres2]] funkcja [argumenty] (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 58 / 79
Wyrażenia regularne Sed używa wyrażeń regularnych takich jak grep. ˆ - pasuje do poczatku linii $ - pasuje do końca linii. - pasuje do pojedynczego znaku (znak)* - pasuje do dowolnie wielu wystapień znaku pod rzad (znak)? - pasuje do 0 lub 1 wystapień znaku [ajz] - pasuje do któregoś z wyminionych znaków [ajz] - pasuje do dowolnego znaku poza wyminionymi (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 59 / 79
Komenda podstawienia [adres1[, adres2]]s/wzorzec/czymzastapić/[flagi] Możliwe flagi: g - zastap wszystkie wystapienia wzorca n - zastap n-te wystapienie wzorca Adresy identyfikuja linie, w których chcemy dokonywać podstawień Możliwe adresy: /wyrażenieregularne/ - linie, których część pasuje do wyrażenia numer linii ($ - ostatnia linia) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 60 / 79
Adresy - dokładniej Jeśli w liście adresów podamy 2 adresy: adres1, adres2, komenda dotyczyć będzie linii: od pierwszego wystapienia adres1 do pierwszego wystapienia adres2 od wystapienia adres1 po już trafionym wystapieniu adres2 do następnego wystapienia adres2 Operator negacji! wskazuje, że komenda odnosi się do linii nieybranych przez adres (badź adresy). (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 61 / 79
Przykład podstawienia > cat plik Ala ma kota, ale nie ma psa. Ala ma kota i psa. > sed -e /nie/s/psa/chomika/g plik Ala ma kota, ale nie ma chomika. Ala ma kota i psa. (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 62 / 79
Komenda usunięcia [adres1[, adres2]]d > cat plik Ala ma kota, ale nie ma psa. Ala ma kota i psa. Ala ma psa, ale nie kota. > sed -e 2,$d plik Ala ma kota, ale nie ma psa. (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 63 / 79
Wstawianie tekstu Komenda i wstawia tekst przed bieżac a linia: sed -e 1iJakisTekst plik wstawi JakisTekst przed poczatkiem pliku. Uwaga: ciachy / sa niepotrzebne w tym przypadku Komenda a wstawia tekst za bieżac a linia: sed -e $ajakistekst plik wstawi JakisTekst na końcu pliku. Komenda c pozwala zastapić zawartość linii: sed -e 10cNowaZawartośćLinii10 plik (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 64 / 79
Komendy różne Wiele komend: sed -e 1,4d 6,9d plik lub: sed -e 1,4d -e 6,9d plik Wyłaczenie wypisywania na stdout: sed -n -e komenda (lub #n w pierwszej linii sedowego skryptu) Wypisywanie: sed -n -e 1,10p (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 65 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 66 / 79
Program automatycznej kompilacji - make (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 67 / 79
Program automatycznej kompilacji - make CC=g++ FLAGS= OBJ= main.o Tmolecule.o Boltzman.o TARGET=single.cpp.o: $(CC) $(FLAGS) -c $(<) $(TARGET):$(OBJ) $(CC) -o $(TARGET) $(OBJ) $(OBJ):Tmolecule.h clean: rm *.o $(TARGET) (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 68 / 79
Znaki specjalne $@ - is the name of the file to be made $? - is the names of the changed dependents $< - the name of the related file that caused the action $* - the prefix shared by target and dependent files (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 69 / 79
Plan prezentacji 1 Wstęp do skryptologii 2 Powłoka tcsh 3 Powłoka bash 4 Program awk 5 Program sed 6 Makefile - programy automatycznej kompilacji 7 Skrypty PBS (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 70 / 79
PBS w ICM System kolejkowy PBS w ICM znajdziemy na komputerach: halo tornado Wykonywanie obliczeń na tych maszynach dozwolone jest tylko i wyłacznie przy użyciu systemu kolejkowego. (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 71 / 79
Idealny użytkownik Idealny scenariusz pracy: przygotowanie programu identyfikacja zasobów których potrzebuje program załaczenie programu do systemu kolejkowego, właściwie określajac zasoby Dzięki kontroli nad systemem kolejkowym mamy (praktycznie) pełna kontrolę nad przepływem pracy na danej maszynie. (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 72 / 79
Zasoby w obrębie jednego CPU, PBS wymaga określenia co najmniej dwóch zasobów: czasu CPU Ilości pamięci dla równoległych zadań wieloprocesorowych, PBS musi również wiedzieć ile node ów/cpu zajmie zadanie inne rzeczy do rozważenia: nazwa zadania? gdzie skierować standardowe wyjście i bład? czy system powinien zawiadomić nas mail em po zakończeniu zadania? (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 73 / 79
Przydatne opcje PBS -l mem=n[kmg] zadanie wykorzysta N [kilo mega giga] bajtów pamięci -l cput=hh:mm:ss maksymalny czas CPU na zadanie PBS -l walltime=hh:mm:ss maksykalny czas zegarowy na zadanie PBS -l nodes=n:ppn=m zadanie wykorzysta N node ów, w tym na każdym po M procesorów (dotyczy klastra halo) -I uruchom jako zadanie interaktywne -N jobname nazwa zadania (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 74 / 79
Przydatne opcje PBS cd. -S shell użyj powłoki shell zamiast domyślnej do interpretacji skryptu PBS -q queue zadanie ma być wstawione do wskazanej kolejki queue -o outfile skieruj standardowe wyjście do pliku outfile -e errfile skieruj bład do pliku errfile -j oe połacz standardowe wyjście i bład -m e wyślij e-mail a do użytkownika po zakończeniu zadania (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 75 / 79
PBS różnice komputer tornado liczbę procesorów ustawiamy za pomoca: -l mppe N dla procesorów MSP -l mppssp N dla procesorów SSP klaster halo liczbę procesorów ustawiamy za pomoca: nodes=n:ppn=m dla procesorów M procesorów w N węzłach (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 76 / 79
Operacje na zadaniu Załaczanie zadania: z użyciem polecenia qsub: sheed@halo:# qsub submit.pbs Opcje moga być również podane z linii komend. Monitorowanie zadania: z użyciem polecenia qstat qstat qstat -a qstat -f qstat -Q Modyfikacja i zabijanie zadania: qalter w celu zmiany przydzielonych zasobów oraz qdel w celu zabicia zadania identyfikowanego poprzez job_id (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 77 / 79
Przykładowy skrypt #!/bin/tcsh #PBS -N zadanie #PBS -l nodes=8:ppn=2 #PBS -l walltime=24:00:00 #PBS -l file=5gb #PBS -m e echo Job started echo " " at date echo " " on host hostname echo " " working directory is $PBS_O_WORKDIR echo " " will run on cat < $PBS_NODEFILE set numprocs= wc -l < $PBS_NODEFILE mpiexec -transform-hostname=s/^n/a/./program echo Job finished at date Generator skryptów dostępny na WWW http://www.icm.edu.pl/kdm.static/generator/ (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 78 / 79
Dziękujemy za uwagę Zespół KDM (Kontakt: pomoc@icm.edu.pl) Skryptologia Szkolenie KDM 79 / 79