[bash]Hulp nodig bij schrijven script

Pagina: 1
Acties:

  • Boomerang
  • Registratie: November 2000
  • Niet online
Hallo Tweakers,
Ik ben bezig met een script dat om de zoveel tijd de bekende Code Red II Threads uit het access_log van apache haalt.
Nu wil ik dit per dag doen, dus ik wil het aantal threads van de huidige dag.

Nu had ik het volgende met het 'date' commando bereikt:
code:
1
date "+%d/%m/%Y"

Dat geeft als output:
26/09/2001

Dan zou je het volgende commando kunnen maken voor het script:
code:
1
cat /usr/local/apache/logs/access_log | grep date"%d/%m/%y"

Het probleem is echter dat de logs van apache er op dit formaat uitzien:
26/Sep/2001

Hoe krijg ik de maanden dus in letters ? En zijn er nog andere opmerkingen,post ze dan :)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:08

  • Boomerang
  • Registratie: November 2000
  • Niet online
Ik wil dit dus niet met php doen, maar met bash scripting...
:7 .

Verwijderd

denk niet dat ie het in php doet maar gewoon in een bash script.
omzetten kan volgens mij met:
if (date=1)
%d=Sep
fi
enz
of zoiets ken bash scripting niet zo goed maar het idee is duidelijk denk ik.

  • Boomerang
  • Registratie: November 2000
  • Niet online
Op woensdag 26 september 2001 16:25 schreef ultimate het volgende:
denk niet dat ie het in php doet maar gewoon in een bash script.
omzetten kan volgens mij met:
if (date=1)
%d=Sep
fi
enz
of zoiets ken bash scripting niet zo goed maar het idee is duidelijk denk ik.
Bedankt voor je reply..
Hij geeft als ik het scriptje wil runnen steeds een error.. Verschillende varianten al geprobeert. Weet iemand misschien hoe ik dit kan aanpakken.

Dit heb ik zelf bedacht:
code:
1
2
3
date "%d/%m/%Y"
if (%m=1)
%m=Jan

Voor de rest zou ik het niet weten.. Bovenstaand scriptje werkt dus niet... ook niet met 'fi' op het einde.

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

#date +%d%b%y 8-)

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Boomerang
  • Registratie: November 2000
  • Niet online
Op woensdag 26 september 2001 17:05 schreef im_ik het volgende:
#date +%d%b%y 8-)
Hey thanks dude :)

  • Boomerang
  • Registratie: November 2000
  • Niet online
Dan de laatste vraag:
Hoe zet ik dit in 1 commando...
Ik had dit in gedachte:
code:
1
cat /usr/local/apache/logs/access_log | grep date +%d/%b/%Y | grep cmd.exe | wc -l

Dit resulteert in een foutmelding :(

Hoe moet ik dit anders doen? Want volgensmij kun je met grep alleen tekst selecteren.
Als je het met ; doet werkt het ook niet :(

Wie helpt mij nog ff :?

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

code:
1
cat /usr/local/apache/logs/access_log | grep 'date +%d/%b/%Y' | grep cmd.exe | wc -l

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Boomerang
  • Registratie: November 2000
  • Niet online
Op woensdag 26 september 2001 17:46 schreef im_ik het volgende:
code:
1
cat /usr/local/apache/logs/access_log | grep 'date +%d/%b/%Y' | grep cmd.exe | wc -l
Dit werkt helaas niet :'(

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

let wel eve op de ' = backtick om de date dit wil zeggen
dat dit eerst uitgevoerd wordt.

edit: backtips ook goed.. :)

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Boomerang
  • Registratie: November 2000
  • Niet online
Die ' heb ik gezien.
Maar wanneer ik probeer het uit te voeren werkt het niet naar behoren:
code:
1
2
3
4
5
bash$ cat access_log | grep 'date +%d/%b/%Y' | grep cmd.exe | wc -l
    0

bash$ cat access_log | grep 26/Sep/2001 | grep cmd.exe | wc -l
    165

Zoals je ziet werkt het eerste commando niet, en het 2e commando wel. Blijkbaar gaat er toch iets fout met 'date +%d/%b/%Y' :?

  • Le Mol
  • Registratie: April 2000
  • Niet online
de ' is geen qoute maar een backtick (ding bij de tilde op de toets)

je kunt er ook van maken ... grep $(date +%d/%b/%Y) ... dat doet het zelfde als de backticks, alleen als je het ziet is het duidelijker ;)

Logic brings you from a to b, your imagination can bring you anywhere


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Als het nog steeds fout gaat wat je je output dan de date commando ?

edit2: post gewijzigt.

edit: F*ck net te laat.. :9

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Kees
  • Registratie: Juni 1999
  • Laatst online: 12:20

Kees

Serveradmin / BOFH / DoC
<pre>
grep `date +%d/%b/%Y` /www/logs/access_log | grep "cmd.exe" | wc
</pre>werkt prima hier :)
let wel, er staan ` om de date heen, dat is iets anders dan '.

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

dawm had ik moeten zien....
Maar dat was het verkeerde ' moet zijn ` :)
kijk maar:

# echo 'date +%d/%b/%y'
date +%d/%b/%y
# echo `date +%d/%b/%y`
26/Sep/01

Zo nu kan ie ook verschil zien.
Je script was dus aan het zoeken naar date +%d/%b/%y en dat vind ie niet... vandaar

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Boomerang
  • Registratie: November 2000
  • Niet online
dom, dom, dom |:( |:(
Had het niet in de gaten van die ' of ` hehehe :)

Bedankt iedereen! Het werkt nu als een zonnetje ;)

  • Boomerang
  • Registratie: November 2000
  • Niet online
Het volgende script heb ik nu:
code:
1
2
3
4
5
6
7
cat /usr/local/apache/logs/access_log | grep `date +%d/%b/%Y` | grep cmd.exe | wc -l > total.txt
TO="cat /root/total.txt"

echo "@mysql_connect("localhost"); @mysql_select_db("blaat"); mysql_query="INSERT INTO threads (total) VALUES('$TO')"" > /root/mysql.txt

# Alles Opruimen
rm -rf /root/total.txt

Dit script doetut dus niet goed. Wat er gebeurd.... Het commando kijkt hoeveel threads er op een bepaalde dag zijn.. die voert dat in in total.txt. Dit gaat goed. Als ik total.txt open zie ik het aantal. Alleen To="/root/total.txt" werkt niet. Want die ziet de var To als tekst en niet als command.

Wie helpt mij ?

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

zet er eens ` ipv " om....
dit werk hiero
#test=`cat blabla.log`
#echo $test
inhoud van blabla.log

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • Boomerang
  • Registratie: November 2000
  • Niet online
Op woensdag 26 september 2001 21:23 schreef im_ik het volgende:
zet er eens ` ipv " om....
dit werk hiero
#test=`cat blabla.log`
#echo $test
inhoud van blabla.log
Nogmaals bedankt :)
Weer wat geleerd vandaag >:)

Verwijderd

Kees:
code:
1
grep `date +%d/%b/%Y` /www/logs/access_log | grep "cmd.exe" | wc
Waarom die pipes? :? Zo lijkt me wat logischer (en efficienter):
code:
1
grep -cE "^\\[`date +%d/%b/%Y`.+cmd\.exe" /www/logs/access_log
Pagina: 1