[Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: Pajaczek »

No Twoja propozycja z 2 potokami jest multi wydajna...
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: webster »

Słucham? Mniej wydajne? Wykonać jedną komendę zamiast przekazywać strumień z jednego grepa do drugiego? Do not be ridiculous...

Porównanie w czasie wykonania

Kod: Zaznacz cały

Valheru@webster:~ # time cat /var/log/messages | grep sshd | grep Failed
Nov 26 13:17:37 webster sshd[8341]: Failed password for root from 127.0.0.1 port 57227 ssh2

real    0m0.139s
user    0m0.007s
sys     0m0.005s
Valheru@webster:~ # time grep -w 'sshd\[\|Failed password for' /var/log/messages
Nov 26 13:17:37 webster sshd[8341]: Failed password for root from 127.0.0.1 port 57227 ssh2

real    0m0.024s
user    0m0.023s
sys     0m0.000s
Nawet nie chce mi się komentować dalej.
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
gienek
Użytkownik
Posty: 25
Rejestracja: 2011-05-18, 12:29

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: gienek »

Kod: Zaznacz cały

time cat plik.log | grep sshd | grep Failed
real    0m0.118s
user    0m0.108s
sys     0m0.035s

Kod: Zaznacz cały

time grep -w 'sshd\[\|Failed password for' plik.log
real    0m0.218s
user    0m0.210s
sys     0m0.007s

Kod: Zaznacz cały

uname -a
Linux blablabla 2.6.33.4 #3 SMP Wed May 12 23:13:09 CDT 2010 x86_64 Intel(R) Core(TM) i5-3330 CPU @ 3.00GHz GenuineIntel GNU/Linux
Inne wariacje mierzenia czasu wykonywania aplikacji też potwierdzają ww wyniki.

ps
Nie wiem po co toczyć piane zamiast pomóc gościowi w wątku?
No ale na każdym forum znajdą się eksperci którzy niczego nie wyjaśniają tylko chcą brylować.
Jesteś taki mądry trzeba było wkleić ten swój cudowny wierszyk przede mną.
Też nie che mi się dalej komentować bo na trolla trafiłem.
Awatar użytkownika
gienek
Użytkownik
Posty: 25
Rejestracja: 2011-05-18, 12:29

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: gienek »

Pajaczek pisze:No Twoja propozycja z 2 potokami jest multi wydajna...
Potoki są czasem wydajniejsze.
Kolejny teoretyk....
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: webster »

buehuhe, tak wierzę w Twój wynik jak w króliczka wielkanocnego :p :D No ale ok :D Skoro na logikę nie zaskakujesz że wykonanie jednej komendy musi trwać krócej niż dwóch to Sprawdźmy :))

Kod: Zaznacz cały

Linux MTA 3.10.7 #2 SMP Thu Aug 15 04:03:21 CDT 2013 x86_64 Intel(R) Xeon(TM) CPU 3.20GHz GenuineIntel GNU/Linux
root@MTA:~# time cat /var/log/messages | grep sshd | grep Failed

real    0m0.024s
user    0m0.015s
sys     0m0.006s
root@MTA:~# time grep -w 'sshd\[\|Failed password for' /var/log/messages

real    0m0.008s
user    0m0.005s
sys     0m0.002s

Kod: Zaznacz cały

Linux host 2.6.29.6 #2 SMP Mon Aug 17 11:58:18 CDT 2009 x86_64 Intel(R) Xeon(R) CPU X5355  @ 2.66GHz GenuineIntel GNU/Linux
root@host:~# time cat /var/log/messages | grep sshd | grep Failed

real    0m0.270s
user    0m0.002s
sys     0m0.014s
root@host:~# time grep -w 'sshd\[\|Failed password for' /var/log/messages

real    0m0.012s
user    0m0.008s
sys     0m0.003s

Kod: Zaznacz cały

Linux alien 3.10.12 #2 SMP Sun Sep 15 00:05:24 CDT 2013 x86_64 Dual-Core AMD Opteron(tm) Processor 2216 AuthenticAMD GNU/Linux
root@alien:~# time cat /var/log/messages | grep sshd | grep Failed

real    0m1.495s
user    0m0.260s
sys     0m0.603s
root@alien:~# time grep -w 'sshd\[\|Failed password for' /var/log/messages

real    0m0.775s
user    0m0.640s
sys     0m0.134s

Kod: Zaznacz cały

Linux ldap 2.6.24.5-smp #2 SMP Wed Apr 30 13:41:38 CDT 2008 i686 Intel(R) Xeon(R) CPU 5150  @ 2.66GHz GenuineIntel GNU/Linux
root@ldap:~# time cat /var/log/messages | grep sshd | grep Failed

real    0m1.229s
user    0m1.236s
sys     0m0.004s
root@ldap:~# time grep -w 'sshd\[\|Failed password for' /var/log/messages

real    0m0.484s
user    0m0.476s
sys     0m0.000s
gienek pisze:Jesteś taki mądry trzeba było wkleić ten swój cudowny wierszyk przede mną.
Też nie che mi się dalej komentować bo na trolla trafiłem.
Ps. gienek, nie wyzywaj tutaj nikogo proszę :)
PPs. Zwróć uwagę, że poprosiłem autora tematu aby przedstawił wynik lastb. Byłem gotowy przygotować dla Niego ładną linijkę, jednak nie doczekaliśmy się :) Czytamy, czytamy, czytamy i mniej choleryki :))
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
gienek
Użytkownik
Posty: 25
Rejestracja: 2011-05-18, 12:29

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: gienek »

Puść sobie dwie wersje na logu z ponad milionem linii zobaczysz różnice.
W tym wątku z mojej strony to wszystko.
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: webster »

gienek pisze:W tym wątku z mojej strony to wszystko.
A przepraszam nie padło :) No cóż :)
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
dienet
Moderator
Posty: 2105
Rejestracja: 2007-07-24, 18:58
Lokalizacja: Racibórz/Rybnik

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: dienet »

gienek pisze:Puść sobie dwie wersje na logu z ponad milionem linii zobaczysz różnice.
Puść sam i pokaż nam wyniki. Jestem bardzo ciekawy.
Pozdr0
dienet
[img]http://i164.photobucket.com/albums/u19/slawek15/kotekeo0lq3.jpg[/img]
Awatar użytkownika
gienek
Użytkownik
Posty: 25
Rejestracja: 2011-05-18, 12:29

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: gienek »

Wyniki już wkleiłem wcześniej.
Niestety tak wygląda duskusja z kolesiami którzy na domowych sztotach z kilkoma tysiącami linii feruja jednoznaczne opinie.

ps
Czy to forum to jakieś 20-litrowe akwarium z metalowymi ramami i bojownikiem w środku?
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: webster »

gienek pisze:Niestety tak wygląda duskusja z kolesiami którzy na domowych sztotach z kilkoma tysiącami linii feruja jednoznaczne opinie.
buehueh :D Moje wyniki powyżej podawane z C7000 C-class HP BladeSystem :D.
gienek pisze:ps
Czy to forum to jakieś 20-litrowe akwarium z metalowymi ramami i bojownikiem w środku?
Bojówka z mojej strony zaczęła się od Twojego obrażania mojej osoby :) Jak będziesz chciał to Znajdziesz swój post :)


Dla mnie osobiście to już EOT - nie biorę dłużej udziału w dyspucie.
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Awatar użytkownika
dienet
Moderator
Posty: 2105
Rejestracja: 2007-07-24, 18:58
Lokalizacja: Racibórz/Rybnik

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: dienet »

gienek pisze:Wyniki już wkleiłem wcześniej.
Zakładam, że nie możesz udostępnić swojego pliku z logami.

Zakładam też, że w najgorszym przypadku, każda linia w tym pliku to błąd logowania. A więc:

Kod: Zaznacz cały

|(dienet@t61)~|$ for i in $(seq 1 1000000); do echo line${1} >> test_f; done
|(dienet@t61)~|$ wc -l test_f 
1000000 test_f
|(dienet@t61)~|$ time grep line test_f > /dev/null                          

real	0m0.165s
user	0m0.147s
sys	0m0.016s
|(dienet@t61)~|$ time cat test_f | grep line > /dev/null                    

real	0m0.171s
user	0m0.150s
sys	0m0.031s
Proszę Cię o odpalenie tego u siebie na Twoim hiper sprzęcie, którego nie posiadam. Webster proszę zrób to też na swoim blejdzie.
Proszę też o zwrócenie nie tylko na czas real, ale też sys!

Kod zaczerpnięty stąd: http://stackoverflow.com/questions/1350 ... t-and-grep
Pozdr0
dienet
[img]http://i164.photobucket.com/albums/u19/slawek15/kotekeo0lq3.jpg[/img]
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: webster »

U mnie serwery aktualnie korzystają z weekandu i ciachają backupy, ale zrobiłem testy na dwóch maszynach, jednym bardziej i drugim mniej zmęczonym zadaniami:

Pierwsza maszyna

Kod: Zaznacz cały

root@Server:~# uname -a
Linux Server 3.10.7 #2 SMP Thu Aug 15 04:03:21 CDT 2013 x86_64 Intel(R) Xeon(TM) CPU 3.20GHz GenuineIntel GNU/Linux
root@Server:~# for i in $(seq 1 1000000); do echo line${1} >> test_f; done
root@Server:~# wc -l test_f
1000000 test_f
root@Server:~# time grep line test_f > /dev/null

real    0m0.226s
user    0m0.192s
sys     0m0.017s
root@Server:~# time cat test_f | grep line > /dev/null

real    0m0.214s
user    0m0.197s
sys     0m0.037s
Druga maszyna mniej obciążona

Kod: Zaznacz cały

Linux webster 3.10.17 #2 SMP Wed Oct 23 16:34:38 CDT 2013 x86_64 Intel(R) Core(TM) i7-3610QM CPU @ 2.30GHz GenuineIntel GNU/Linux
root@webster:~ # for i in $(seq 1 1000000); do echo line${1} >> test_f; done
root@webster:~ #  wc -l test_f
1000000 test_f
root@webster:~ # time grep line test_f > /dev/null

real    0m0.106s
user    0m0.101s
sys     0m0.004s
root@webster:~ # time cat test_f | grep line > /dev/null

real    0m0.106s
user    0m0.107s
sys     0m0.007s
Dla podkreślenia wagi strumieniowania z jednej komendy do drugiej oprócz poleconego jedynie cat'a wykonałem cat + grep + grep.
Pierwsza maszyna

Kod: Zaznacz cały

root@Server:~# for i in $(seq 1 1000000); do echo "line${1} kaktus${1}" >> test_kaktus_f; done
root@Server:~# time grep "line\|kaktus" test_kaktus_f > /dev/null

real    0m0.374s
user    0m0.272s
sys     0m0.028s
root@Server:~# time cat test_kaktus_f |grep line|grep kaktus test_kaktus_f > /dev/null

real    0m0.471s
user    0m0.438s
sys     0m0.068s
Druga maszyna - tutaj ładnie widać różnicę:

Kod: Zaznacz cały

root@webster:~ # for i in $(seq 1 1000000); do echo "line${1} kaktus${1}" >> test_kaktus_f; done
root@webster:~ # time grep "line\|kaktus" test_kaktus_f > /dev/null 

real    0m0.077s
user    0m0.075s
sys     0m0.002s
root@webster:~ # time cat test_kaktus_f |grep line|grep kaktus test_kaktus_f > /dev/null 

real    0m0.245s
user    0m0.246s
sys     0m0.005s
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: Pajaczek »

Gienku: gdybyś uważniej czytał, a mniej brał przykładu ze swojego idola (tego z avatara) to może byś zauważył, że użyłem sformułowania "wydajniejsze", co niekoniecznie jest tożsame z "szybszy". Jak myślisz, które zadanie będzie wydajniejsze: liczące coś przez godzinę, ale używające jednego rdzenia, czy wykonujące to samo zadanie przez pół godziny, ale na 4 rdzeniach?

I takie małe porównanie wykonań powyższego, wykonane na pewnym, niestety niedomowym szrocie:

Kod: Zaznacz cały

[ log]$ for i in $(seq 1 1000000); do echo line${1} >> test_f; done
[ log]$ wc -l test_f
1000000 test_f
[ log]$ time grep line test_f > /dev/null

real    0m0.147s
user    0m0.135s
sys     0m0.012s
[ log]$ time cat test_f | grep line > /dev/null

real    0m0.156s
user    0m0.138s
sys     0m0.038s

[ log]$ top | head -n 5
top - 09:21:43 up 27 days, 22:05, 38 users,  load average: 20.00, 13.87, 8.10
Tasks: 2102 total,  23 running, 2068 sleeping,   9 stopped,   2 zombie
Cpu(s):  2.1%us,  2.1%sy,  1.1%ni, 94.5%id,  0.2%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  264498996k total, 81789648k used, 182709348k free,  9845928k buffers
Swap: 62488544k total,        8k used, 62488536k free, 61680516k cached

[ log]$ for i in $(seq 1 1000000); do echo "line${1} kaktus${1}" >> test_kaktus_f; done
[ log]$ time grep "line\|kaktus" test_kaktus_f > /dev/null

real    0m0.129s
user    0m0.111s
sys     0m0.018s
[ log]$ time cat test_kaktus_f |grep line|grep kaktus > /dev/null

real    0m0.406s
user    0m0.595s
sys     0m0.054s
[ log]$ time cat test_kaktus_f |grep line|grep kaktus test_kaktus_f > /dev/null

real    0m0.507s
user    0m0.487s
sys     0m0.036s
(nawet czasowo nie był zbytnio obciążony, policzyłem to rano, jak jeszcze niewiele pracy miał).
Oraz z faktycznie domowego szrota:

Kod: Zaznacz cały

bash-4.1$ uname -a
Linux darkstar 2.6.37.6 #3 SMP Sat Apr 9 22:49:32 CDT 2011 x86_64 AMD FX(tm)-8320 Eight-Core Processor AuthenticAMD GNU/Linux
bash-4.1$ for i in $(seq 1 1000000); do echo line${1} >> test_f; done
bash-4.1$ time grep line test_f > /dev/null

real	0m0.112s
user	0m0.101s
sys	0m0.010s
bash-4.1$ time cat test_f | grep line > /dev/null

real	0m0.122s
user	0m0.109s
sys	0m0.027s
bash-4.1$ for i in $(seq 1 1000000); do echo "line${1} kaktus${1}" >> test_kaktus_f; done
bash-4.1$ time grep "line\|kaktus" test_kaktus_f > /dev/null

real	0m0.094s
user	0m0.084s
sys	0m0.009s
bash-4.1$ time cat test_kaktus_f |grep line|grep kaktus > /dev/null

real	0m0.272s
user	0m0.386s
sys	0m0.033s
bash-4.1$ time cat test_kaktus_f |grep line|grep kaktus test_kaktus_f > /dev/null

real	0m0.261s
user	0m0.252s
sys	0m0.021s
Przy okazji, to ostatnie w 3 wersjach, bo Webster chyba przez nieuwagę zamieścił wynik z nie do końca poprawnej wersji, która dla potoków daje bardziej optymistyczne wyniki niż są one w rzeczywistości ;)
Awatar użytkownika
webster
Użytkownik
Posty: 1269
Rejestracja: 2009-10-06, 11:58
Lokalizacja: Gdańsk
Kontakt:

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: webster »

Co dałem nie tak? Dobrze Wykonałeś, nigdzie nie było lepszego wyniku dla przekazywania potoku. "Poka" paluchem bo nie mogę odnaleźć :)
††† Chaos Of The Mirror - Valheru †††
††† I ♥ SlackWare RuLeZ †††

Slackware Poland FaceBook
Pajaczek
Użytkownik
Posty: 1439
Rejestracja: 2006-08-03, 13:16
Lokalizacja: Winny Gród

Re: [Bash] Prosty skrypt tworzący log o błędnym logowaniu.

Post autor: Pajaczek »

cat test_kaktus_f |grep line|grep kaktus test_kaktus_f > /dev/null
ODPOWIEDZ