20:00 | Temat wykladu: | |
Linux: Useful shell scripting (by keidii, 13.08.2006) @ wyklady.net | ||
19:58 | keidii | Dzis powiemy sobie o zastosowaniach praktycznych tego co ma linux |
keidii | "w wiekszosci standardowych wyposazen" | |
19:59 | keidii | Wiele osob wie ze sa tam gdzies "sedy , tary, bzipy , caty , grepy " |
keidii | ale i tak zabardzo nie wie co z tym zrobic | |
keidii | Podstaw basha ( ogolnie shel ) nie bede poruszal | |
20:00 | keidii | bo to nie o tym bajka |
keidii | na poczatek prosty przyklad ... | |
keidii | Postawilismy server FTP | |
keidii | autoryzacja LOGIN/PASS | |
20:01 | keidii | dane plaintextem leza w pliku /etc/ftp-userland |
keidii | i piszemy dodawarke ludzi | |
keidii | i bardzo bylo by nam milo generowac hasla ;) | |
keidii | ale jak !? | |
keidii | POMYSL 1. | |
keidii | /dev/urandom | |
keidii | TAK ! códowne zródło losowości ;) | |
keidii | ale ... tam sporo znaków niepiśmiennych jest ;/ | |
20:02 | keidii | POMYSL 2. |
keidii | Co nam daje ciąg znaków latwych do "napisania" | |
keidii | czyli a-z 0-9 | |
keidii | no np: md5 | |
20:03 | keidii | keidii@lisi ~ $ echo "Ala" | md5sum |
keidii | 172eb34e70235fe60fc15d6d27ae2e12 - | |
keidii | cacy | |
keidii | ale i tak trzeba wklepac za kazdym razem jakis napis | |
keidii | POMYSL 1 + 2 | |
keidii | Wezmy troche sianka z /dev/urandom i zrobmy md5 tego ! | |
keidii | extra | |
20:04 | keidii | testing : |
keidii | keidii@lisi ~ $ cat /dev/urandom | head -n 1 | md5sum | |
keidii | acf15e0240cad226a3df6d54395a8a14 - | |
keidii | cacy | |
keidii | napisalem head -n 1 zeby wziasc pierwszy "wiersz" z dev urandom | |
20:05 | keidii | czyli w sumie porcje znaków do pojawienia sie "entera" |
keidii | mozna np: pobrac n bajtów | |
keidii | uzywajac dd | |
keidii | to wygladalo by tak : | |
20:06 | keidii | keidii@lisi ~ $ dd if=/dev/urandom of=temp bs=1 count=666 && cat temp | md5sum |
keidii | 666+0 przeczytanych recordów | |
keidii | 666+0 zapisanych recordów | |
keidii | skopiowane 666 bajtów (666 B), 0,008867 sekund, 75,1 kB/s | |
keidii | a89d172244f045c7bc067cab38160719 - | |
keidii | dd czyta z "if" zapisuje do "of" | |
20:07 | keidii | bs - rozmiar bufora |
keidii | count - ilosc | |
keidii | ( nie bede tu nic bardziej opisywal - jest to w manie ) | |
keidii | najpierw berzemy 666 bajtów do pliku temp | |
keidii | pozniej liczymy tego md5sum | |
keidii | i niby okej ... ale kto zapamieta haslo a89d172244f045c7bc067cab3816071 ? | |
20:08 | keidii | ja nie ;) |
keidii | a jak przy wpisywaniu sie pomyle 4 razy to sie potne ;) | |
keidii | NA SZYBKO ( i skutecznie;p) | |
keidii | mamy seda ;) | |
keidii | sed to taki wygodny zwierzaczek | |
20:09 | keidii | wykozystamy funkcje s |
keidii | : | |
20:10 | keidii | keidii@lisi ~ $ cat /dev/urandom | head -n 1 | md5sum | sed "s/\(.....\).*/\1/" |
keidii | e82c9 | |
keidii | cacy | |
keidii | pani Jadzia poradzi sobie juz z takim haselkiem | |
keidii | ;) | |
keidii | latwo prosto i skutecznie | |
keidii | SZYBKO ! co najwazniejsze | |
20:11 | keidii | - wiadomo - mozna napisac program w c ... |
keidii | ale to zabiera czas | |
keidii | ;) | |
keidii | to teraz wystarczy ta linijke zapisac w pliku np: | |
keidii | haselko.sh | |
keidii | odpalamy ./haselko.sh | |
20:12 | keidii | dostajemy qwd2 |
keidii | ZADANIE dla chętnych :) | |
keidii | napisac ./haselko.sh [N] | |
keidii | czyli mozemy podac dlugosc haselka :) | |
keidii | powiedzmy ze N nie przekracza 20 | |
keidii | EO Zadanie :) | |
20:13 | keidii | jakies pytania ? |
mosquito | ;] | |
mag7 | ja nic nie czaje :P | |
ant_ | mag7: do zajebistosci trzeba dorosnac ;) | |
Dark | ;DDD | |
KosiarZ | :D | |
keidii | ok... lecimy dalej | |
mag7 | spoko | |
20:14 | keidii | ja zakladam ze np: wyklady z basha sa przerobione ;) |
keidii | teraz troche "plastyki" | |
keidii | mamy takie polecenie lspci | |
keidii | wyswielta nam ... PCI | |
20:15 | keidii | to co mamy w obudowie ;) |
keidii | wyjscie jest proste : | |
keidii | lisi keidii # lspci | |
keidii | 00:00.0 Host bridge: nVidia Corporation nForce3 Host Bridge (rev a4) | |
keidii | 00:01.0 ISA bridge: nVidia Corporation nForce3 LPC Bridge (rev a6) | |
keidii | a teraz zabawimy sie w plastyków | |
20:16 | keidii | Widac , ze "ID" sprzetu to : |
keidii | XX : XX . X | |
keidii | czyli mozna by sie pokusic o prezentacje tego w formie drzewka | |
keidii | AA:BB.C | |
keidii | AA klucz 1 , BB klucz 2 , CC klucz 3 | |
20:17 | keidii | dla osób nie posiadajacych lspci : |
keidii | http://wyklady.net/keidii/pliczek.we | |
keidii | przyklad dzialania lspci | |
20:18 | keidii | literówka przepraszam |
keidii | http://wyklady.net/keidii/pliczek.tmp | |
keidii | caly piekny wypis sprzetu ;) | |
20:19 | keidii | lspci >> pliczek.tmp |
keidii | od teraz bedziemy operowac na danych w pliku | |
keidii | Krok 1. | |
keidii | Odkrajamy "ID" | |
20:20 | keidii | dwie metowy na szybko |
keidii | ---con-- | |
keidii | lisi misc # cat pliczek.tmp | cut -f1 -d" " | |
keidii | 00:00.0 | |
keidii | 00:01.0 | |
keidii | lisi misc # cat pliczek.tmp | awk '{print $1}' | |
keidii | 00:00.0 | |
keidii | 00:01.0 | |
20:21 | keidii | ktora metoda lepsze - wedle gustu :) |
keidii | teraz wezmy z tego pierwsze 2 znaczki | |
20:22 | keidii | lisi misc # cat pliczek.tmp | cut -f1 -d":" |
keidii | 00 | |
keidii | 00 | |
keidii | ok | |
keidii | widac wiele powtarza sie | |
keidii | ;/ | |
keidii | no to urzywamy innych linuxowych narzedzi : | |
keidii | sort i uniq | |
keidii | sort sortuje | |
20:23 | keidii | a uniq z _POSORTOWANYCH_ dane pokazuje unikaty |
keidii | lisi misc # cat pliczek.tmp | cut -f1 -d":" | sort | uniq | |
keidii | 00 | |
keidii | 01 | |
keidii | 02 | |
keidii | okej | |
20:24 | keidii | teraz tak samo mozna dostac sie do 2 i 3 "kolumny" ID |
20:25 | keidii | kolumna 2 : |
keidii | lisi misc # cat pliczek.tmp | cut -f2 -d":" | cut -f1 -d"." | |
keidii | 00 | |
keidii | 01 | |
keidii | kolumna 3 : | |
keidii | lisi misc # cat pliczek.tmp | cut -f1 -d" " | cut -f2 -d"." | |
keidii | 0 | |
keidii | 0 | |
keidii | okej | |
keidii | teraz mozna sie pokusic o poskladanie tego w calosc :) | |
keidii | jezeli mamy juz upatrzeone ID[1] ( pierwszy czlon id ) | |
20:27 | keidii | np: 00 |
keidii | to wybranie wszystkich lini z ID pasujacym do wzorca : | |
keidii | lisi misc # cat pliczek.tmp | grep "00:..\.." | |
keidii | 00:00.0 Host bridge: nVidia Corporation nForce3 Host Bridge (rev a4) | |
keidii | 00:01.0 ISA bridge: nVidia Corporation nForce3 LPC Bridge (rev a6) | |
keidii | lisi misc # cat pliczek.tmp | grep "01:..\.." | |
keidii | 01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 420 Go 32M] (rev a3) | |
20:28 | keidii | jezeli wybierzemy ID[1] i ID[2] |
keidii | np: 00 , 02 : | |
keidii | to urzyjemy : | |
keidii | lisi misc # cat pliczek.tmp | grep "00:02\.." | |
keidii | 00:02.0 USB Controller: nVidia Corporation nForce3 USB 1.1 (rev a5) | |
keidii | 00:02.1 USB Controller: nVidia Corporation nForce3 USB 1.1 (rev a5) | |
keidii | 00:02.2 USB Controller: nVidia Corporation nForce3 USB 2.0 (rev a2) | |
keidii | i analogicznie koluma 3 | |
20:29 | keidii | grep "00:02\.1" |
keidii | przykladowa calosc jest pod adresem : | |
keidii | http://wyklady.net/keidii/example.1.1.sh | |
keidii | linijki : | |
keidii | rm -rf plikczek.tmp | |
20:30 | keidii | i |
keidii | lspci >> pliczek.tmp | |
keidii | mozna usunac | |
keidii | ( wtedy czly czas pracujemy na danych z pliku ) | |
20:31 | keidii | kawalek wyniku : |
keidii | lisi misc # ./example.1.1.sh | |
keidii | Tree lvl 1, id : 00 | |
keidii | Tree lvl 2, id : 00 | |
keidii | Tree lvl 3, id 0 | |
keidii | Tree lvl 2, id : 01 | |
keidii | Tree lvl 3, id 0 | |
keidii | Tree lvl 3, id 1 | |
keidii | Tree lvl 2, id : 02 | |
keidii | cacy | |
keidii | juz mozemy wybierac to co chcemy | |
keidii | taraz odpalamy zdolnosci plastyczne | |
keidii | i upiekszamy calosc | |
keidii | nie bede opisywal jak - bo to kwestia gustów plastycznych itp ;) | |
keidii | ja zrobilem to tak : | |
20:32 | keidii | http://wyklady.net/keidii/example.1.2.sh |
keidii | przykladowy wynik : | |
keidii | lisi misc # ./example.1.2.sh | |
keidii | .-[PC]-- | |
keidii | | | |
keidii | +--+[00] | |
keidii | | +--+[00] | |
keidii | | | +-=[0] 00:00.0 Host bridge: nVidia Corporation nForce3 Host Bridge (rev a4) | |
keidii | | | | |
keidii | | +--+[01] | |
keidii | | | +-=[0] 00:01.0 ISA bridge: nVidia Corporation nForce3 LPC Bridge (rev a6) | |
keidii | | | +-=[1] 00:01.1 SMBus: nVidia Corporation nForce3 SMBus (rev a4) | |
keidii | | | | |
20:33 | keidii | | +--+[02] |
keidii | | | +-=[0] 00:02.0 USB Controller: nVidia Corporation nForce3 USB 1.1 (rev a5) | |
keidii | | | +-=[1] 00:02.1 USB Controller: nVidia Corporation nForce3 USB 1.1 (rev a5) | |
keidii | | | +-=[2] 00:02.2 USB Controller: nVidia Corporation nForce3 USB 2.0 (rev a2) | |
keidii | elegancie drzewko ;) | |
keidii | przerwa na pytania i zadam zadanie numer 2 ;) | |
keidii | jakieś pytania ? | |
ant_ | uadne dzefk0 | |
20:34 | ant_ | ;) |
KosiarZ | ^^ true. | |
satan- | nie ma pytan lec dalej :) | |
keidii | ok | |
keidii | ZADANIE 2 : | |
keidii | napisac podobne drzewko ale dla ps : | |
keidii | objasnienie : | |
keidii | lisi misc # ps -Al | head -n 5 | |
keidii | F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD | |
keidii | 4 S 0 1 0 0 76 0 - 368 - ? 00:00:00 init | |
keidii | 1 S 0 2 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0 | |
keidii | 5 S 0 3 1 0 -40 - - 0 - ? 00:00:00 watchdog/0 | |
keidii | 1 S 0 4 1 0 70 -5 - 0 worker ? 00:00:01 events/0 | |
keidii | 4 pierwsze wpisy | |
keidii | nas interesuja kolumny : | |
keidii | PID i PPID | |
keidii | PID to numer procesu | |
keidii | PPID to numer rodzica | |
20:36 | keidii | na poczatku jest proces 0 |
keidii | czyli dostajemy drzewko | |
keidii | PID 0 -> | |
keidii | PID 1 | |
keidii | PID 2 | |
keidii | PID 3 | |
keidii | PID 4 | |
keidii | itd | |
keidii | napisac program ./drzewko.ps.sh | |
20:37 | keidii | ktory ladnie nam narysuje drzewko procesów |
keidii | ;) | |
keidii | ( strona "artystyczna" nie jest wazna :) | |
keidii | handicap : | |
keidii | http://wyklady.net/keidii/example.ps.sh | |
20:38 | keidii | ps -lA | awk '{print $5}' |
keidii | pokazuje 5 kolumne | |
keidii | EO Zadanie | |
20:39 | keidii | pytania do zadan po wykladzie |
keidii | ;) | |
keidii | Część 3 ! | |
keidii | Psucie internetu :) | |
20:40 | keidii | Jest niedziela |
keidii | mamy taki kaprys : | |
keidii | Jak sie zaloguje ... to chce miec na dziendoby wyswietlane wiadomosci | |
keidii | co sie dzieje na swiecie :) | |
keidii | cat wiadomosc.txt | |
keidii | tylko najpierw trzeba te wiadomosci "dostac" | |
20:41 | keidii | zepsujemy tutaj wiadomosci z WP : |
keidii | http://wiadomosci.wp.pl/index.html | |
keidii | tam jest na srodku mala tabelka WIADOMOSCI DNIA | |
keidii | i my TO akurat chcemy ;) | |
keidii | ( taka nasza wredna natura ) | |
20:42 | keidii | no to co ... |
keidii | wget ;) | |
keidii | wget http://wiadomosci.wp.pl/index.html -O wiadomosci | |
keidii | extra | |
keidii | tylko nadal mamy plik html ze smieciami ;) | |
20:43 | keidii | fuj ;/ |
keidii | no to analizujemy : | |
keidii | keidii@lisi ~ $ cat wiadomosci | less -S | |
keidii | i szukamy textu : Wiadomosci dnia | |
keidii | JEST ! | |
20:44 | keidii | o .. jest i dookola kupa smieci jak zykle ;/ |
keidii | czytamy dalej | |
keidii | ja nasze wiadomosci w nastepnym wierszu | |
keidii | okej | |
keidii | jest jakis trop | |
keidii | co robimy ? GREPujemy :) | |
20:45 | keidii | linijka "charakterystyczna" zawiera text |
keidii | Wiadomosci dnia | |
keidii | linijka nizej zawiera trasc wiadomosci | |
keidii | jezeli ktos nie ma to : | |
keidii | http://wyklady.net/keidii/wiadomosci | |
keidii | plik na ktorym bedziemy psuc ;) | |
keidii | keidii@lisi ~ $ cat wiadomosci | grep "Wiadomości dnia" -A1 | |
keidii | <IMG SRC="http://i.wp.pl/a/i/wiadomosci_04/layout/tri.gif" width=10 height=9 border=0 align=absmiddle><b class="h3">Wiadomości dnia</b><br><br class="SGodstep"> | |
keidii | <table border="0" cellspacing="2" cellpadding="2" width="100%"><tr valign="top"><td><br style="font-size:4px"><b class=box>:::</b></td><td><a href="/kat,1356,wid,8462249,wiadomosc.html" class="h2">W ciągu 33 dni walk Izrael stracił 103 żołnierzy, wojna kosztowała 5 mld dolarów</a> </td></tr><tr valign="top"><td><br style="font-size:4px"><b class=box>:::</b></td><td><a href="/kat,1342,wid,8462184,wiadomosc.html" class="h2">Prezydent odsłonił pomnik "Ognia" w Z | |
keidii | -A1 powoduje wyswietlenie linijki znalezionej + nastepna [1] linijka | |
keidii | okej mamy to co chemy | |
20:47 | keidii | teraz walniemy |
keidii | keidii@lisi ~ $ cat wiadomosci | grep "Wiadomości dnia" -A1 | tail -n 1 | |
keidii | i dostajemy nasz ukochany wiersz ;] | |
keidii | ale .. to jest 1 wiersz ;/ | |
20:48 | keidii | nooo too ? |
keidii | zamienmy wszystkie "</td>" na "\n" ( znak nowego wiersza ) | |
keidii | i pozbądzmy sie syfu HTML | |
keidii | czyli "<*****>" na "" | |
keidii | do tego jest idealnie sed !;) | |
keidii | sed "s/<\/td>/\n/g;s/<[^>]*>//g" | |
20:49 | keidii | zalatwia calosc ;) |
keidii | ( piekna chinszczyzna ) | |
keidii | sprawdzamy : | |
keidii | keidii@lisi ~ $ cat wiadomosci | grep "Wiadomości dnia" -A1 | tail -n 1 | sed "s/<\/td>/\n/g;s/<[^>]*>//g" | |
keidii | ::: | |
keidii | W ciągu 33 dni walk Izrael stracił 103 żołnierzy, wojna kosztowała 5 mld dolarów | |
keidii | ::: | |
keidii | Prezydent odsłonił pomnik "Ognia" w Zakopanem | |
20:50 | keidii | ::: |
keidii | Polscy turyści wciąż nie mogą wrócić do domu | |
keidii | ::: | |
keidii | Walentynowicz: wystawa Eriki Steinbach daje fałszywy obraz | |
keidii | ::: | |
keidii | Pijany kierowca wjechał w karetkę pogotowia | |
keidii | | |
keidii | teraz szukamy pewnego wzorca : | |
keidii | no no calkiem calkiem | |
keidii | ;] | |
keidii | :::: | |
keidii | WIADOMOSC | |
keidii | :::: | |
keidii | WIADOMOSC | |
keidii | syf | |
keidii | no to jeszcze raz grep :) | |
keidii | i grep ;) | |
20:51 | keidii | grep ":::" -A1 | grep -v ":::" |
keidii | najpiersz szukamy linijek ":::" | |
keidii | pozniej wycinamy linijki ":::" ;) | |
keidii | cacy | |
keidii | i mamy nasz "system newsów" | |
keidii | http://wyklady.net/keidii/example.2.1.sh | |
20:52 | keidii | extra :) |
keidii | mozna w ten sam sposob pobierac _DOWOLNE_ informacje z _dowolnego_ servisu | |
keidii | wget moze podac sie za np:"internet explorera" | |
keidii | i cacy :) | |
20:53 | keidii | jezeli dorzucimy do wyników (samych wiadomosci) ich linki |
keidii | ( czyli to gdzie prowadza ) | |
keidii | to mozemy dosctac | |
keidii | NAGLOWEK | |
keidii | tresc skrocona | |
keidii | NAGLOWEK | |
keidii | tresc skrocona | |
keidii | ( wystarczy wgetnac to gdzie prowadzi ten link, | |
20:54 | keidii | a pozniej podobna metaoda wyciac tresc :P ) |
keidii | i to jest ZADANIE 3 ! | |
keidii | napisac automacik ktory powbierze nam naglowki | |
20:55 | keidii | i powiedzmy pierwsze 3 linijki newsa ;) |
keidii | ( niech bedzie wp.pl - ale mozna sobei wybrac inny servis ) | |
keidii | EO zadanie | |
20:56 | keidii | Na zakonczenie powiem , ze w bashu napisalem bota do OGame ( tak z ciekawosci - czy sie da ;P ) |
keidii | ktory loguje sie | |
keidii | podajac za Firefoxa | |
keidii | i zarzadza kontem ;) | |
20:57 | keidii | Rownie dobrze mozna napisac program ktory bedzie przeszukiwal elektroniczne ksiazki telefoniczne , czy tez jakies katalogi z firmami |
keidii | jak wpiszemy np: | |
keidii | ./szukaj.firme.sh Dentysta | |
keidii | on przeszuka katalog www i wypisze nam na konsole wynik | |
keidii | kombinacji i zastowowan jest WIELE | |
keidii | a linux ma od groma uzytecznych polecen | |
20:58 | keidii | sed, awk, seq, cat, ls, tee, tail ,head cut |
keidii | i mozna by tak tu wyliczac .... dlugo :) | |
keidii | DZIEKUJE | |
keidii | ===wyklad=== | |
KosiarZ | a pytania? | |
KosiarZ | ;p | |
keidii | pytania ;) | |
KosiarZ | Dwa mam. | |
keidii | tak | |
KosiarZ | rep ":::" -A1 | grep -v ":::" | |
20:59 | KosiarZ | drugi grep tu nie styknie? |
keidii | nienie | |
keidii | mamy tak jak napisalem : | |
KosiarZ | Aa, bo pierwszy wytnie dol jeszcze | |
KosiarZ | bo na dole smieci byly | |
keidii | 20.54.14: <%keidii> :::: | |
keidii | 20.54.16: <%keidii> WIADOMOSC | |
keidii | 20.54.17: <%keidii> :::: | |
keidii | 20.54.18: <%keidii> WIADOMOSC | |
keidii | 20.54.21: <%keidii> syf | |
keidii | na koniec mozemy dostac syf | |
keidii | ;] | |
keidii | to takie zabezpieczenia | |
KosiarZ | no tak, zapomnialem o syfie na dole | |
KosiarZ | i drugie | |
KosiarZ | sed "s/<\/td>/\n/g;s/<[^>]*>//g" | |
21:00 | KosiarZ | mozesz przyblizyc, bo seda sie od dawna chcialem nauczyc? |
keidii | ok | |
KosiarZ | ten poprzedni rozumialem | |
keidii | cel tego "zasedzenia" | |
KosiarZ | ale ten trosze zlozony | |
keidii | 1. mamy dlugi wiersz | |
keidii | trzeba go polamac | |
keidii | 2. powycinac html | |
KosiarZ | mhm | |
keidii | to sa 2 komendy : | |
keidii | s/<\/td>/\n/g; | |
keidii | i | |
keidii | s/<[^>]*>//g | |
21:01 | keidii | zamien </td> na \n |
keidii | zamien <[^>]*> na "" | |
KosiarZ | A od czego jest to /g na koncu? | |
keidii | "s" dziala tak ze zamieni tylko pierszy "match" | |
keidii | a g powoduje przeszukanie lancucha dalej | |
21:02 | KosiarZ | mhm |
keidii | mozna by tak "powiedzies" | |
keidii | S- szukaj do pierwszego | |
keidii | G - go dalej | |
keidii | ;] | |
KosiarZ | Lapie, lapie, thx | |
21:03 | keidii | teraz http://forum.wyklady.net/index.php?topic=76.0 |
KosiarZ | hm, a [^>] to co to jest? ^^ | |
keidii | tam mozecie mnei zjechac ;) | |
KosiarZ | bo juz slabo pamietam | |
keidii | [znaczki]* | |
keidii | oznacza dowolne z wnetrza [] | |
KosiarZ | aaa | |
KosiarZ | no ta. | |
keidii | a jak ^ to not | |
keidii | czyli < ( nie > )* > | |
KosiarZ | thnks | |
keidii | bo moze nam dopasowac np: | |
21:04 | keidii | <b> asdasd </b> |
keidii | ^-----------^ | |
keidii | pasuje | |
KosiarZ | A zadanka sprawdzisz? ^_^ | |
keidii | aa wlasnie ;) | |
keidii | zadanka prosze na keidii@o2.pl | |
21:05 | keidii | z dopiskiem ZADANKA.SH |