Ga naar hoofdinhoud

3.1 Zoeken en doorgeven

Hier bouw je op verder: Bestanden lezen met cat, head en tail

Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.

Met grep zoek je in een bestand naar een woord. Je krijgt alleen de regels te zien waar het in staat:

grep Failed /var/log/auth.log
Mar 26 10:15:01 oefenpc sshd[1234]: Failed password for admin from 192.168.1.100
Mar 26 10:15:03 oefenpc sshd[1234]: Failed password for admin from 192.168.1.100
Mar 26 10:15:04 oefenpc sshd[1234]: Failed password for admin from 192.168.1.100

grep let op hoofdletters: grep failed vindt hier niets. Met grep -i maakt het niet uit.

Terminal laden...

De pipe​

Het teken | heet een pipe. Hij geeft de van het ene door aan het volgende, in plaats van hem op het scherm te zetten:

cat /etc/passwd | grep student
student:x:1000:1000:student:/home/student:/bin/bash

cat leest het hele bestand, en grep houdt alleen de regel met student over. Zo bouw je met kleine commando's iets groters.

Voorspel​

In 1.1 zag je wat er in /etc staat. Wat geeft dit, denk je?

ls /etc | grep host
Klik hier als je het hebt geprobeerd
hostname
hosts

ls /etc geeft de namen in /etc, en grep host houdt de namen over waar host in zit. Ze staan onder elkaar: op het scherm zet ls de namen naast elkaar, maar naar een pipe zet hij elke naam op een eigen regel. Zo kan grep, dat per regel kiest, per naam kiezen.

Opdracht 3.1.a: wat doet de webserver?​

In /var/log/apache2/access.log schrijft de webserver elk bezoek. Zoek met één regel alle bezoeken aan inloggen.html.

Terminal laden...
Klik hier voor een tip

Het woord waarnaar je zoekt komt eerst, het bestand erachter.

Klik hier voor het antwoord
grep inloggen.html /var/log/apache2/access.log
192.168.1.100 - - [26/Mar/2026:10:15:01 +0100] "GET /inloggen.html HTTP/1.1" 200 1234
192.168.1.100 - - [26/Mar/2026:10:15:05 +0100] "POST /inloggen.html HTTP/1.1" 303 0

Twee bezoeken van dezelfde computer: eerst haalt hij het formulier op (GET), dan verstuurt hij het (POST). De andere drie regels in het logboek gaan over andere pagina's. Met cat /var/log/apache2/access.log | grep inloggen.html mag ook; het resultaat is hetzelfde.

Er gaat iets mis​

Geen uitvoer​

Oorzaak: grep vond niets. Dat is geen fout: dan zegt hij niets. Vaak scheelt het een hoofdletter.

Oplossing: probeer het met -i, of zoek op een kleiner stuk van het woord.

# niets: in het bestand staat Failed met een hoofdletter
grep failed /var/log/auth.log

# drie regels
grep -i failed /var/log/auth.log

De terminal blijft wachten​

Oorzaak: je zette geen bestand achter het patroon, en er komt ook niets door een pipe binnen. Dan wacht grep op tekst die jij typt. Dat lijkt op vastlopen. De oefenterminal kan niet wachten, en zegt het:

oefenterminal: grep zonder bestand wacht op wat je typt; dat kan hier niet. Zet een bestand achter het patroon.

Oplossing: zet het bestand achter het patroon. Staat het al te wachten, in of op een , druk dan op Ctrl+C: dat stopt het commando dat nu draait, en je krijgt je terug.

Door naar 3.2 Bestanden vinden.