Toon posts:

[ubuntu] cut en grep uit httpd.log

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo, ik heb een httpd log en nu wil ik de ip addressen eruit halen en naar een bestand schrijven. Ik kan dit met cut -c doen en daarmee de karakters opgeven, maar ip adressen zijn niet allemaal even lang natuurlijk, waardoor ik of spaties erachter krijg, of de laatste cijfers mis, naar gelang ik de lengte aan pas. Is hier een truckje voor?
Dit is een stukje uit een log:
115.64.226.150 - - [13/Nov/2010:14:05:51 +1100] "GET /images/Weeds.gif HTTP/1.1" 200 2433
124.186.79.199 - - [13/Nov/2010:14:44:03 +1100] "GET /images/header_bg1b.jpg HTTP/1.1" 304 -
122.49.200.89 - - [13/Nov/2010:15:04:39 +1100] "GET /images/menu7.gif HTTP/1.1" 200 858

wat is dus wil is een lijst van puur en alleen de ip's en puur en alleen de data/tijd, (zodat ik van de 2 resulterende lijstjes een grafiek kan plotten.)

Acties:
  • 0 Henk 'm!

  • Semyon
  • Registratie: April 2001
  • Laatst online: 04:30
Als je weet dat het aan het begin staat, waarom dan niet alles tot de eerste spatie pakken?

code:
1
grep .... | cut -d\  -f 1

Only when it is dark enough, can you see the stars


Acties:
  • 0 Henk 'm!

Verwijderd

Dit had je wel iets beter kunnen uitzoeken.

1: Bij cut kun je een delimiter opgeven, dit kan ook een spatie zijn (quotes erom)
2: Je kunt daar ook awk voor gebruiken. dat standaard split op "whitespace".

Acties:
  • 0 Henk 'm!

  • Semyon
  • Registratie: April 2001
  • Laatst online: 04:30
en je kan als delimiter de [ gebruiken voor de tijd:

code:
1
grep ... | cut -d\[ -f 2 | cut -d\  -f 1


nogmaals onder voorbehoud dat die formatting gebruikt wordt.

Only when it is dark enough, can you see the stars


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Semyon schreef op donderdag 05 mei 2011 @ 07:37:
en je kan als delimiter de [ gebruiken voor de tijd:

code:
1
grep ... | cut -d\[ -f 2 | cut -d\  -f 1


nogmaals onder voorbehoud dat die formatting gebruikt wordt.
ok, dat is mooi... nu het volgende... ik heb daarin status messages (200, 403, 404, etc)

Hoe kan ik alle log entries met status error (beginnende met 4xx) weergeven?

Ik neem aan met iets als grep "^4" gecombineerd met de field en een delimiter (" "), maar hoe kan ik met grep een delimiter of field aangeven? Ik heb geprobeerd dezelfde syntax als met cut te gebruiken, maar het lijkt helemaal niet te kunnen?

Acties:
  • 0 Henk 'm!

  • Japius
  • Registratie: April 2003
  • Laatst online: 30-08 20:57
ik zou het volgende doen:

cat httpd.log | awk '{print $9 " " $1}' | grep -E '^4'


awk split op whitespace, $9 is het 9e item, dus de status (als ik goed telde) en $1 is het IP. Uitprinten als STATUS IP en greppen op "beginnen met 4".

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Japius schreef op donderdag 05 mei 2011 @ 13:07:
ik zou het volgende doen:

cat httpd.log | awk '{print $9 " " $1}' | grep -E '^4'


awk split op whitespace, $9 is het 9e item, dus de status (als ik goed telde) en $1 is het IP. Uitprinten als STATUS IP en greppen op "beginnen met 4".
Netjes hoor, doet precies wat ik wil. Bedankt!

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

awk '{ if ($9 ~ /^4/) print $0; }'


Overigens, als je daadwerkelijk alle error statussen wilt, moet je /^[45]/ gebruiken.

[ Voor 62% gewijzigd door CyBeR op 05-05-2011 13:29 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

  • Japius
  • Registratie: April 2003
  • Laatst online: 30-08 20:57
CyBeR schreef op donderdag 05 mei 2011 @ 13:26:
awk '{ if ($9 ~ /^4/) print $0; }'
Nice, die syntax kende ik niet! Als je een manier hebt gevonden die werkt, kijk je toch snel niet verder dan je neus lang is. Ik weet dat je met awk meer kan dan alleen print, maar in de praktijk is dat wel het enige dat ik ermee doe.

Acties:
  • 0 Henk 'm!

  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Japius schreef op donderdag 05 mei 2011 @ 13:44:
[...]


Nice, die syntax kende ik niet! Als je een manier hebt gevonden die werkt, kijk je toch snel niet verder dan je neus lang is. Ik weet dat je met awk meer kan dan alleen print, maar in de praktijk is dat wel het enige dat ik ermee doe.
Ik bedenk me zojuist dat 'ie nog een stuk simpeler kan:

awk '$9 ~ /^4/'


Dit is exact hetzelfde, maar dan met de conditional verplaatst naar de condition (duh eigenlijk) en gebruik makend van dat de default action gelijk is aan 'print $0'.

Afbeeldingslocatie: http://asset.soup.io/asset/0333/4366_22e3.png

[ Voor 21% gewijzigd door CyBeR op 06-05-2011 03:04 ]

All my posts are provided as-is. They come with NO WARRANTY at all.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CyBeR schreef op vrijdag 06 mei 2011 @ 02:53:
[...]


Ik bedenk me zojuist dat 'ie nog een stuk simpeler kan:

awk '$9 ~ /^4/'


Dit is exact hetzelfde, maar dan met de conditional verplaatst naar de condition (duh eigenlijk) en gebruik makend van dat de default action gelijk is aan 'print $0'.

[afbeelding]
Ik ben net begonnen met Linux op dit niveau via de shell etc, vanwege mijn security opleiding en begin het vanwege de flexibiliteit best te waarderen. De leercurve is alleen best hoog, waardoor je door een antwoord weer een nieuwe vraag krijgt... :)

Zo ook deze... Ik heb nu een bestand uit mijn log gehaald met alle datums van de requests erin. Die wil ik sorteren op aantal per dag. Als ik het volgende commando gebruik:

cat DATES | uniq -c | sort

krijg ik dit:

379 22/Mar/2011
381 02/Mar/2011
38 24/Dec/2010
388 13/Sep/2010
390 10/Mar/2011

hoe krijg ik het zo dat sort naar de 3 getallen kijkt, dus 38 als 038 ziet, zodat mijn lijst klopt?

Acties:
  • 0 Henk 'm!

  • Semyon
  • Registratie: April 2001
  • Laatst online: 04:30
Verwijderd schreef op vrijdag 06 mei 2011 @ 03:54:
Ik ben net begonnen met Linux op dit niveau via de shell etc, vanwege mijn security opleiding en begin het vanwege de flexibiliteit best te waarderen. De leercurve is alleen best hoog, waardoor je door een antwoord weer een nieuwe vraag krijgt... :)
Echt, het belangrijkste wat ik je kan meegeven zijn de man pages. (Vaak belangrijker dan een Google search!)
Dit is echt als een aardig advies bedoeld, je gaat wel merken hoe belangrijk dit is. :)
Verwijderd schreef op vrijdag 06 mei 2011 @ 03:54:
hoe krijg ik het zo dat sort naar de 3 getallen kijkt, dus 38 als 038 ziet, zodat mijn lijst klopt?
Zo ook hier

code:
1
2
3
4
5
6
$ man sort

..

       -n, --numeric-sort
              compare according to string numerical value

[ Voor 5% gewijzigd door Semyon op 06-05-2011 04:05 ]

Only when it is dark enough, can you see the stars


Acties:
  • 0 Henk 'm!

Verwijderd

Ik herhaal mezelf ook nog maar een keer:
Dit had je wel iets beter kunnen uitzoeken.
Als je niet zelfstandig in staat bent dit soort enorm simpele taken uit te voeren, zul je nooit een security expert worden. Ook ik bekijk vrijwel dagelijks nog wel een stuk documentatie, en niet zelden is dat een man page.

Zeker de standaard tools als sed, awk, sort, uniq, grep en cut zijn enorm belangrijk. Ik doe hiermee elke dag wel iets mee. Zorg dat je ze beheerst. Je hoeft echter niet alles uit je hoofd te kennen. Het is redelijk schandalig dat je in één topic twee keer een vraag had die je op dezelfde manier had kunnen oplossen: documentatie lezen.

Als een van mijn collega's zoiets vraagt zeg ik letterlijk niet meer of minder dan "man sort".

Die man pages zijn er omdat:
  • je niet altijd een (open) netwerkverbinding hebt;
  • de opties per versie of implementatie kunnen verschillen.
En dan is er nog /usr/share/doc waarin je nog veel meer kunt vinden.

Je hoeft alleen maar te weten wat elke tool ongeveer kan doen. De rest is op te lossen op het moment als je het nodig hebt. De belangrijke dingen ga je vanzelf onthouden en uit het hoofd doen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 06 mei 2011 @ 06:57:
Ik herhaal mezelf ook nog maar een keer:

[...]

Als je niet zelfstandig in staat bent dit soort enorm simpele taken uit te voeren, zul je nooit een security expert worden. Ook ik bekijk vrijwel dagelijks nog wel een stuk documentatie, en niet zelden is dat een man page.

Zeker de standaard tools als sed, awk, sort, uniq, grep en cut zijn enorm belangrijk. Ik doe hiermee elke dag wel iets mee. Zorg dat je ze beheerst. Je hoeft echter niet alles uit je hoofd te kennen. Het is redelijk schandalig dat je in één topic twee keer een vraag had die je op dezelfde manier had kunnen oplossen: documentatie lezen.

Als een van mijn collega's zoiets vraagt zeg ik letterlijk niet meer of minder dan "man sort".

Die man pages zijn er omdat:
  • je niet altijd een (open) netwerkverbinding hebt;
  • de opties per versie of implementatie kunnen verschillen.
En dan is er nog /usr/share/doc waarin je nog veel meer kunt vinden.

Je hoeft alleen maar te weten wat elke tool ongeveer kan doen. De rest is op te lossen op het moment als je het nodig hebt. De belangrijke dingen ga je vanzelf onthouden en uit het hoofd doen.
Bedankt voor je hulp.
onhandige opmerking verwijderd om pavlov-reactie te voorkomen - CAPSLOCK2000

[ Voor 11% gewijzigd door CAPSLOCK2000 op 06-05-2011 11:54 ]

Pagina: 1