Onderstaand commando laat alle websites zien die vandaag bezocht zijn op je apache webserver.
cat /var/log/apache2/other_vhosts_access.log | grep -i $(date "+%d/%b/%Y") | awk {'print $1'} | sort | uniq
Hieronder uitgelegd wat er nu precies gebeurt met dit commando.
cat
cat /var/log/apache2/other_vhosts_access.log | grep -i $(date "+%d/%b/%Y") | awk {'print $1'} | sort | uniq
cat laat simpel de apache other_vhosts_access.log logfile zien. In de logfile staat bijvoorbeeld:
linux.dennisclarisse.nl:443 62.42.37.23 - - [04/Feb/2019:18:23:52 +0100] "GET /index.. etc. etc.
grep
cat /var/log/apache2/other_vhosts_access.log | grep -i $(date "+%d/%b/%Y") | awk {'print $1'} | sort | uniq
Met grep filter je de regels eruit met de datum van vandaag. Het formaat van de datum is d-b-Y 04/Feb/2019. Zie hieronder vetgedrukt:
linux.dennisclarisse.nl:443 62.42.37.23 - - [04/Feb/2019:18:23:52 +0100] "GET /index.. etc. etc.
Met -i (niet hoofdlettergevoelig) pakt hij ook 04/feb/2019.
Het kan natuurlijk zo zijn dat je logfile een ander datumformaat heeft. Je kunt hier de verschillende mogelijkheden zien om het formaat aan te passen.
awk
cat /var/log/apache2/other_vhosts_access.log | grep -i $(date "+%d/%b/%Y") | awk {'print $1'} | sort | uniq
Vervolgens kun je met awk alleen het eerste veld $1 laten zien. En dat is de domeinnaam in dit geval.
linux.dennisclarisse.nl:443 62.42.37.23 - - [04/Feb/2019:18:23:52 +0100] "GET /index.. etc. etc.
sort en uniq
cat /var/log/apache2/other_vhosts_access.log | grep -i $(date "+%d/%b/%Y") | awk {'print $1'} | sort | uniq
Vervolgens sorteer je de enorme lijst met sort, zodat je daarna de lijst uniek kan maken met uniq. Zo heb je elke domeinnaam maar 1 keer in je lijst.
Taalbarrière?
Indien je andere taal of landinstelling ingesteld hebt staat kan het zijn dat de date functie een andere maand terug geeft. Bijvoorbeeld mrt in plaats van Mar in deze maand…
Dat is op te lossen om de volgende regel aan het begin in het script toe te voegen.
LANG=en_us_8859_1