Hej,
postanowiłem przejrzeć kod adblock.sh (http://eko.one.pl/?p=openwrt-adblock) i być może uzupełnić go o parę brakujących URL.
Przy okazji chcę się nauczyć trochę o linuksie.
Byłbym wdzięczny za Wasz komentarz, poprawki i odpowiedzi na pytania.
#!/bin/sh
rm -f /tmp/block.hosts # usuwa plik block.hosts, opcją force (bez interakcji z uzytkownikiem)
#wget sluzy do sciagania plikow po http. Opcja q(quiet) ogranicza komunikaty do uzytkownika. Opcja 0 (--output-document=) z przełącznikiem - ma za zadanie\
# pozwolić na wyplucie sciganietego pliku tektstowego na domyslne wyjscie (czyli ekran uzytkownika), zamiast zwyklego zapisania w systemie plikow("na dysk).
# Znak | to tzw. pipeline. Pozwala przekierowac wynika dzialania komendy jako wejscie do kolejnej komendy.
# grep to narzędzie to wyszukiwania ciagu znaków w pliku.
Nie ogarniam składni w tym miejscu - czemu dodane jest 127.... przed każdą nową linią?Tzn. wiem po co, ale nie wiem składnia grep działa w tym przypadku.
# Znak > przekierwuje cale wyjscie do pliku - jesli plik istnieje, nadpisuje go (czyli stary jest usuniety). Ten plik to block.build.list
wget -qO- "[url]http://www.mvps.org/winhelp2002/hosts.txt[/url]" | grep "^127.0.0.1" > /tmp/block.build.list
# Znak >> powoduje dopisanie do juz istniejacego pliku. Dopisujemy do poprzedniego (block.build.list), tak, zeby polaczyc kilka plikow w jeden
# polecenie jest powielone dla roznych list - dzieki temu mozemy uzywac kilka list
wget -qO- "[url]http://www.malwaredomainlist.com/hostslist/hosts.txt[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "[url]http://hosts-file.net/.\ad_servers.txt[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "[url]http://adaway.org/hosts.txt[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "[url]http://pgl.yoyo.org/as/serverlist.php?showintro=0;hostformat=hosts[/url]" | grep "^127.0.0.1" >> /tmp/block.build.list
no tu bedzie grubo.... {$1=$1} i cały awk jest nieco "niestrawny"
# awk to wywołanie skryptu,zawartego pomiędzy dwoma znakami '
# pierwsze polecenie {$1=$1} to "głupi" warunek sprawdzający czy pierwszy wiersz jest pierwszym wierszem. Z tego co rozumiem, jest to potrzebne
# do wymuszenia na awk przetworzenia pola i usunięcia spacji (specyfika awk, niekoniecznie jest to logiczne)
# drugie polecenie {gsub(/\r/,"") ma za zadanie przetworzyć koniec wiersza w pliku ("DOSowy") na strawny dla Linuxa
# print wyświetla bieżący rekord
# block.build.list|sort|uniq ma za zadanie przekiewoac plik do sortowania (sort) i usuwania duplikatów (uniq). Całość podana jest jako
# argument dla polecenia dla awk. Czyli skrypt {$1=$1}{gsub(/\r/,"")}{print } wykonywany jest na /tmp/block.build.list|sort|uniq
# Znak > przekierowuje wyjscie do wskazanego pliku
awk '{$1=$1}{gsub(/\r/,"")}{print }' /tmp/block.build.list|sort|uniq > /tmp/block.build.before
# Usuwa poprzedni plik, ktorego zawartosc zostala juz przetworzona i zapisana do nowego pliku. Uzycie -f (force) zapewnia brak koniecznosci
# potwierdzenia operacji przez uzytkownika
rm -f /tmp/block.build.list
# Grep wyswietli wiersze z pliku block.build.before z pominieciem tych, które są w pliku white.list.
Po co jest -f, nie mam pojęcia.
# Znak > przekieruje wszystko do nowo utworzonego pliku block.hosts
grep -vf /etc/white.list /tmp/block.build.before > /tmp/block.hosts
# Ponownie - usuwanie starego pliku po jego przetworzeniu i zapisaniu nowego
rm -f /tmp/block.build.before
# Restart uslugi odpowiedzialnej za DNS powoduje zaczytanie pliku block.hosts do pamięci i korzystanie z niego przy rozwiązywaniu nazw DNS
/etc/init.d/dnsmasq restart
# exit to zamknięcie skryptu. Wartosc 0 ma wskazac wywolującemuy, ze nie bylo bledu, jesli program wywal ten exit.
exit 0
Tak jak napisałem, robię tą analizę dla siebie, ale chciałbym żeby została na forum (najlepiej poprawiona), może komuś pomoże lepiej zrozumieć linux / openwrt.
Komentarze są "po bashu", bo chcę żeby było można zmieniać/czytać kod bezpośrednio w WinSCP.