20:00Temat wykladu:
Linux: Useful shell scripting (by keidii, 13.08.2006) @ wyklady.net
19:58keidiiDzis powiemy sobie o zastosowaniach praktycznych tego co ma linux
keidii"w wiekszosci standardowych wyposazen"
19:59keidiiWiele osob wie ze sa tam gdzies "sedy , tary, bzipy , caty , grepy "
keidiiale i tak zabardzo nie wie co z tym zrobic
keidiiPodstaw basha ( ogolnie shel ) nie bede poruszal
20:00keidiibo to nie o tym bajka
keidiina poczatek prosty przyklad ...
keidiiPostawilismy server FTP
keidiiautoryzacja LOGIN/PASS
20:01keidiidane plaintextem leza w pliku /etc/ftp-userland
keidiii piszemy dodawarke ludzi
keidiii bardzo bylo by nam milo generowac hasla ;)
keidiiale jak !?
keidiiPOMYSL 1.
keidii/dev/urandom
keidiiTAK ! códowne zródło losowości ;)
keidiiale ... tam sporo znaków niepiśmiennych jest ;/
20:02keidiiPOMYSL 2.
keidiiCo nam daje ciąg znaków latwych do "napisania"
keidiiczyli a-z 0-9
keidiino np: md5
20:03keidiikeidii@lisi ~ $ echo "Ala" | md5sum
keidii172eb34e70235fe60fc15d6d27ae2e12 -
keidiicacy
keidiiale i tak trzeba wklepac za kazdym razem jakis napis
keidiiPOMYSL 1 + 2
keidiiWezmy troche sianka z /dev/urandom i zrobmy md5 tego !
keidiiextra
20:04keidiitesting :
keidii
keidii@lisi ~ $ cat /dev/urandom | head -n 1 | md5sum
keidii
acf15e0240cad226a3df6d54395a8a14 -
keidiicacy
keidiinapisalem head -n 1 zeby wziasc pierwszy "wiersz" z dev urandom
20:05keidiiczyli w sumie porcje znaków do pojawienia sie "entera"
keidiimozna np: pobrac n bajtów
keidiiuzywajac dd
keidiito wygladalo by tak :
20:06keidii
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 -
keidiidd czyta z "if" zapisuje do "of"
20:07keidiibs - rozmiar bufora
keidiicount - ilosc
keidii( nie bede tu nic bardziej opisywal - jest to w manie )
keidiinajpierw berzemy 666 bajtów do pliku temp
keidiipozniej liczymy tego md5sum
keidiii niby okej ... ale kto zapamieta haslo a89d172244f045c7bc067cab3816071 ?
20:08keidiija nie ;)
keidiia jak przy wpisywaniu sie pomyle 4 razy to sie potne ;)
keidiiNA SZYBKO ( i skutecznie;p)
keidiimamy seda ;)
keidiised to taki wygodny zwierzaczek
20:09keidiiwykozystamy funkcje s
keidii:
20:10keidii
keidii@lisi ~ $ cat /dev/urandom | head -n 1 | md5sum | sed "s/\(.....\).*/\1/"
keidii
e82c9
keidiicacy
keidiipani Jadzia poradzi sobie juz z takim haselkiem
keidii;)
keidiilatwo prosto i skutecznie
keidiiSZYBKO ! co najwazniejsze
20:11keidii- wiadomo - mozna napisac program w c ...
keidiiale to zabiera czas
keidii;)
keidiito teraz wystarczy ta linijke zapisac w pliku np:
keidiihaselko.sh
keidiiodpalamy ./haselko.sh
20:12keidiidostajemy qwd2
keidiiZADANIE dla chętnych :)
keidiinapisac ./haselko.sh [N]
keidiiczyli mozemy podac dlugosc haselka :)
keidiipowiedzmy ze N nie przekracza 20
keidiiEO Zadanie :)
20:13keidiijakies pytania ?
mosquito;]
mag7ja nic nie czaje :P
ant_mag7: do zajebistosci trzeba dorosnac ;)
Dark;DDD
KosiarZ:D
keidiiok... lecimy dalej
mag7spoko
20:14keidiija zakladam ze np: wyklady z basha sa przerobione ;)
keidiiteraz troche "plastyki"
keidiimamy takie polecenie lspci
keidiiwyswielta nam ... PCI
20:15keidiito co mamy w obudowie ;)
keidiiwyjscie 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)
keidiia teraz zabawimy sie w plastyków
20:16keidiiWidac , ze "ID" sprzetu to :
keidiiXX : XX . X
keidiiczyli mozna by sie pokusic o prezentacje tego w formie drzewka
keidiiAA:BB.C
keidiiAA klucz 1 , BB klucz 2 , CC klucz 3
20:17keidiidla osób nie posiadajacych lspci :
keidiihttp://wyklady.net/keidii/pliczek.we
keidiiprzyklad dzialania lspci
20:18keidiiliterówka przepraszam
keidiihttp://wyklady.net/keidii/pliczek.tmp
keidiicaly piekny wypis sprzetu ;)
20:19keidiilspci >> pliczek.tmp
keidiiod teraz bedziemy operowac na danych w pliku
keidiiKrok 1.
keidiiOdkrajamy "ID"
20:20keidiidwie metowy na szybko
keidii---con--
keidiilisi misc # cat pliczek.tmp | cut -f1 -d" "
keidii00:00.0
keidii00:01.0
keidiilisi misc # cat pliczek.tmp | awk '{print $1}'
keidii00:00.0
keidii00:01.0
20:21keidiiktora metoda lepsze - wedle gustu :)
keidiiteraz wezmy z tego pierwsze 2 znaczki
20:22keidiilisi misc # cat pliczek.tmp | cut -f1 -d":"
keidii00
keidii00
keidiiok
keidiiwidac wiele powtarza sie
keidii;/
keidiino to urzywamy innych linuxowych narzedzi :
keidiisort i uniq
keidiisort sortuje
20:23keidiia uniq z _POSORTOWANYCH_ dane pokazuje unikaty
keidii
lisi misc # cat pliczek.tmp | cut -f1 -d":" | sort | uniq
keidii
00
keidii
01
keidii
02
keidiiokej
20:24keidiiteraz tak samo mozna dostac sie do 2 i 3 "kolumny" ID
20:25keidiikolumna 2 :
keidiilisi misc # cat pliczek.tmp | cut -f2 -d":" | cut -f1 -d"."
keidii00
keidii01
keidiikolumna 3 :
keidiilisi misc # cat pliczek.tmp | cut -f1 -d" " | cut -f2 -d"."
keidii0
keidii0
keidiiokej
keidiiteraz mozna sie pokusic o poskladanie tego w calosc :)
keidiijezeli mamy juz upatrzeone ID[1] ( pierwszy czlon id )
20:27keidiinp: 00
keidiito 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:28keidiijezeli wybierzemy ID[1] i ID[2]
keidiinp: 00 , 02 :
keidiito 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)
keidiii analogicznie koluma 3
20:29keidiigrep "00:02\.1"
keidiiprzykladowa calosc jest pod adresem :
keidiihttp://wyklady.net/keidii/example.1.1.sh
keidiilinijki :
keidiirm -rf plikczek.tmp
20:30keidiii
keidiilspci >> pliczek.tmp
keidiimozna usunac
keidii( wtedy czly czas pracujemy na danych z pliku )
20:31keidiikawalek 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
keidiicacy
keidiijuz mozemy wybierac to co chcemy
keidiitaraz odpalamy zdolnosci plastyczne
keidiii upiekszamy calosc
keidiinie bede opisywal jak - bo to kwestia gustów plastycznych itp ;)
keidiija zrobilem to tak :
20:32keidiihttp://wyklady.net/keidii/example.1.2.sh
keidiiprzykladowy 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:33keidii
| +--+[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)
keidiielegancie drzewko ;)
keidiiprzerwa na pytania i zadam zadanie numer 2 ;)
keidiijakieś pytania ?
ant_uadne dzefk0
20:34ant_;)
KosiarZ^^ true.
satan-nie ma pytan lec dalej :)
keidiiok
keidiiZADANIE 2 :
keidiinapisac podobne drzewko ale dla ps :
keidiiobjasnienie :
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
keidii4 pierwsze wpisy
keidiinas interesuja kolumny :
keidiiPID i PPID
keidiiPID to numer procesu
keidiiPPID to numer rodzica
20:36keidiina poczatku jest proces 0
keidiiczyli dostajemy drzewko
keidiiPID 0 ->
keidiiPID 1
keidiiPID 2
keidiiPID 3
keidiiPID 4
keidiiitd
keidiinapisac program ./drzewko.ps.sh
20:37keidiiktory ladnie nam narysuje drzewko procesów
keidii;)
keidii( strona "artystyczna" nie jest wazna :)
keidiihandicap :
keidiihttp://wyklady.net/keidii/example.ps.sh
20:38keidiips -lA | awk '{print $5}'
keidiipokazuje 5 kolumne
keidiiEO Zadanie
20:39keidiipytania do zadan po wykladzie
keidii;)
keidiiCzęść 3 !
keidiiPsucie internetu :)
20:40keidiiJest niedziela
keidiimamy taki kaprys :
keidiiJak sie zaloguje ... to chce miec na dziendoby wyswietlane wiadomosci
keidiico sie dzieje na swiecie :)
keidiicat wiadomosc.txt
keidiitylko najpierw trzeba te wiadomosci "dostac"
20:41keidiizepsujemy tutaj wiadomosci z WP :
keidiihttp://wiadomosci.wp.pl/index.html
keidiitam jest na srodku mala tabelka WIADOMOSCI DNIA
keidiii my TO akurat chcemy ;)
keidii( taka nasza wredna natura )
20:42keidiino to co ...
keidiiwget ;)
keidiiwget http://wiadomosci.wp.pl/index.html -O wiadomosci
keidiiextra
keidiitylko nadal mamy plik html ze smieciami ;)
20:43keidiifuj ;/
keidiino to analizujemy :
keidii
keidii@lisi ~ $ cat wiadomosci | less -S
keidiii szukamy textu : Wiadomosci dnia
keidiiJEST !
20:44keidiio .. jest i dookola kupa smieci jak zykle ;/
keidiiczytamy dalej
keidiija nasze wiadomosci w nastepnym wierszu
keidiiokej
keidiijest jakis trop
keidiico robimy ? GREPujemy :)
20:45keidiilinijka "charakterystyczna" zawiera text
keidiiWiadomosci dnia
keidiilinijka nizej zawiera trasc wiadomosci
keidiijezeli ktos nie ma to :
keidiihttp://wyklady.net/keidii/wiadomosci
keidiiplik na ktorym bedziemy psuc ;)
keidiikeidii@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
keidiiokej mamy to co chemy
20:47keidiiteraz walniemy
keidiikeidii@lisi ~ $ cat wiadomosci | grep "Wiadomości dnia" -A1 | tail -n 1
keidiii dostajemy nasz ukochany wiersz ;]
keidiiale .. to jest 1 wiersz ;/
20:48keidiinooo too ?
keidiizamienmy wszystkie "</td>" na "\n" ( znak nowego wiersza )
keidiii pozbądzmy sie syfu HTML
keidiiczyli "<*****>" na ""
keidiido tego jest idealnie sed !;)
keidiised "s/<\/td>/\n/g;s/<[^>]*>//g"
20:49keidiizalatwia calosc ;)
keidii( piekna chinszczyzna )
keidiisprawdzamy :
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:50keidii
:::
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
&nbsp;&nbsp;
keidii
teraz szukamy pewnego wzorca :
keidiino no calkiem calkiem
keidii;]
keidii::::
keidiiWIADOMOSC
keidii::::
keidiiWIADOMOSC
keidiisyf
keidiino to jeszcze raz grep :)
keidiii grep ;)
20:51keidiigrep ":::" -A1 | grep -v ":::"
keidiinajpiersz szukamy linijek ":::"
keidiipozniej wycinamy linijki ":::" ;)
keidiicacy
keidiii mamy nasz "system newsów"
keidiihttp://wyklady.net/keidii/example.2.1.sh
20:52keidiiextra :)
keidiimozna w ten sam sposob pobierac _DOWOLNE_ informacje z _dowolnego_ servisu
keidiiwget moze podac sie za np:"internet explorera"
keidiii cacy :)
20:53keidiijezeli dorzucimy do wyników (samych wiadomosci) ich linki
keidii( czyli to gdzie prowadza )
keidiito mozemy dosctac
keidiiNAGLOWEK
keidiitresc skrocona
keidiiNAGLOWEK
keidiitresc skrocona
keidii( wystarczy wgetnac to gdzie prowadzi ten link,
20:54keidiia pozniej podobna metaoda wyciac tresc :P )
keidiii to jest ZADANIE 3 !
keidiinapisac automacik ktory powbierze nam naglowki
20:55keidiii powiedzmy pierwsze 3 linijki newsa ;)
keidii( niech bedzie wp.pl - ale mozna sobei wybrac inny servis )
keidiiEO zadanie
20:56keidiiNa zakonczenie powiem , ze w bashu napisalem bota do OGame ( tak z ciekawosci - czy sie da ;P )
keidiiktory loguje sie
keidiipodajac za Firefoxa
keidiii zarzadza kontem ;)
20:57keidiiRownie dobrze mozna napisac program ktory bedzie przeszukiwal elektroniczne ksiazki telefoniczne , czy tez jakies katalogi z firmami
keidiijak wpiszemy np:
keidii./szukaj.firme.sh Dentysta
keidiion przeszuka katalog www i wypisze nam na konsole wynik
keidiikombinacji i zastowowan jest WIELE
keidiia linux ma od groma uzytecznych polecen
20:58keidiised, awk, seq, cat, ls, tee, tail ,head cut
keidiii mozna by tak tu wyliczac .... dlugo :)
keidiiDZIEKUJE
keidii===wyklad===
KosiarZa pytania?
KosiarZ;p
keidiipytania ;)
KosiarZDwa mam.
keidiitak
KosiarZrep ":::" -A1 | grep -v ":::"
20:59KosiarZdrugi grep tu nie styknie?
keidiinienie
keidiimamy tak jak napisalem :
KosiarZAa, bo pierwszy wytnie dol jeszcze
KosiarZbo na dole smieci byly
keidii20.54.14: <%keidii> ::::
keidii20.54.16: <%keidii> WIADOMOSC
keidii20.54.17: <%keidii> ::::
keidii20.54.18: <%keidii> WIADOMOSC
keidii20.54.21: <%keidii> syf
keidiina koniec mozemy dostac syf
keidii;]
keidiito takie zabezpieczenia
KosiarZno tak, zapomnialem o syfie na dole
KosiarZi drugie
KosiarZsed "s/<\/td>/\n/g;s/<[^>]*>//g"
21:00KosiarZmozesz przyblizyc, bo seda sie od dawna chcialem nauczyc?
keidiiok
KosiarZten poprzedni rozumialem
keidiicel tego "zasedzenia"
KosiarZale ten trosze zlozony
keidii1. mamy dlugi wiersz
keidiitrzeba go polamac
keidii2. powycinac html
KosiarZmhm
keidiito sa 2 komendy :
keidiis/<\/td>/\n/g;
keidiii
keidiis/<[^>]*>//g
21:01keidiizamien </td> na \n
keidiizamien <[^>]*> na ""
KosiarZA od czego jest to /g na koncu?
keidii"s" dziala tak ze zamieni tylko pierszy "match"
keidiia g powoduje przeszukanie lancucha dalej
21:02KosiarZmhm
keidiimozna by tak "powiedzies"
keidiiS- szukaj do pierwszego
keidiiG - go dalej
keidii;]
KosiarZLapie, lapie, thx
21:03keidiiteraz http://forum.wyklady.net/index.php?topic=76.0
KosiarZhm, a [^>] to co to jest? ^^
keidiitam mozecie mnei zjechac ;)
KosiarZbo juz slabo pamietam
keidii[znaczki]*
keidiioznacza dowolne z wnetrza []
KosiarZaaa
KosiarZno ta.
keidiia jak ^ to not
keidiiczyli < ( nie > )* >
KosiarZthnks
keidiibo moze nam dopasowac np:
21:04keidii<b> asdasd </b>
keidii^-----------^
keidiipasuje
KosiarZA zadanka sprawdzisz? ^_^
keidiiaa wlasnie ;)
keidiizadanka prosze na keidii@o2.pl
21:05keidiiz dopiskiem ZADANKA.SH