Streams & Omleiding
Elk programma in Linux communiceert via standaardstromen: vaste kanalen voor invoer en uitvoer. Door die stromen om te leiden en commando's aan elkaar te koppelen via pipes bouw je krachtige bewerkingen op met simpele bouwstenen.
De drie standaardstromen
Wanneer een programma opstart, krijgt het automatisch drie open kanalen mee:

| Stroom | Nummer | Standaard verbonden met | Betekenis |
|---|---|---|---|
| stdin | 0 | Toetsenbord | Invoer die het programma leest |
| stdout | 1 | Terminal | Normale uitvoer |
| stderr | 2 | Terminal | Foutmeldingen |
Stdout en stderr verschijnen standaard allebei in je terminal, maar ze zijn aparte kanalen. Dat onderscheid wordt belangrijk zodra je ze wilt omleiden.
Voorbeeld: ls schrijft zijn uitvoer naar stdout. Als je een niet-bestaande map opvraagt, schrijft het de foutmelding naar stderr:
ls /bestaande-map # Uitvoer gaat naar stdout
ls /bestaat-niet # Fout gaat naar stderr
In de terminal zie je beide, maar als je gaat omleiden, kun je ze apart behandelen.
Uitvoer omleiden naar een bestand
Met > en >> stuur je stdout naar een bestand in plaats van naar de terminal.
Overschrijven met >
ls -la > overzicht.txt # Schrijf uitvoer naar bestand (overschrijft)
echo "Hallo" > bestand.txt # Maak bestand aan met die tekst
Als het bestand al bestaat, wordt het volledig overschreven. Als het niet bestaat, wordt het aangemaakt.
Toevoegen met >>
echo "Regel 1" > bestand.txt # Maak bestand aan
echo "Regel 2" >> bestand.txt # Voeg toe aan het bestand
cat bestand.txt
# Regel 1
# Regel 2
>> voegt toe aan het einde — handig voor logbestanden of wanneer je de bestaande inhoud wilt bewaren.
Stderr omleiden
Foutmeldingen gaan naar stderr (kanaal 2). Je kunt ze apart omleiden:
apt install nano 2> fouten.txt # Sla foutmeldingen op in bestand
apt install nano 2>> fouten.log # Voeg foutmeldingen toe aan logbestand
Stdout én stderr samen omleiden
apt install nano > alles.log 2>&1 # Stuur stderr naar dezelfde plek als stdout
apt install nano &> alles.log # Kortere notatie, zelfde resultaat
2>&1 betekent: "stuur kanaal 2 (stderr) naar dezelfde bestemming als kanaal 1 (stdout)". De volgorde is belangrijk — 2>&1 moet achteraan staan.
Uitvoer weggooien
Soms wil je de uitvoer van een commando helemaal negeren:
commando 2> /dev/null # Negeer foutmeldingen
commando > /dev/null 2>&1 # Negeer stdout én stderr
/dev/null is een speciaal apparaatbestand dat alles weggooit wat erin geschreven wordt. Het heet ook wel de "bitton" van Linux.
Pipes
Een pipe (|) verbindt de stdout van het ene commando met de stdin van het volgende. Zo ketting je commando's aan elkaar en bouw je verwerkingsstromen op.

ls -l | less # Blader door een lange bestandslijst
cat logfile.txt | grep "ERROR" # Zoek ERROR-regels in een logbestand
ls -l ──stdout──► less
(leest het als invoer)
Je kunt meerdere pipes combineren:
cat /etc/passwd | grep bash | wc -l
# 1. cat leest /etc/passwd
# 2. grep filtert de regels met 'bash'
# 3. wc -l telt het aantal resterende regels
Het krachtige van pipes is dat je kleine, gefocuste commando's combineert tot iets complexers — zonder tussenliggende bestanden aan te maken. Elk commando doet één ding goed; de pipe lijmt ze samen.
Overzicht
| Syntax | Wat het doet |
|---|---|
commando > bestand | Stdout omleiden naar bestand (overschrijven) |
commando >> bestand | Stdout toevoegen aan bestand |
commando 2> bestand | Stderr omleiden naar bestand |
commando 2>&1 | Stderr samenvoegen met stdout |
commando &> bestand | Stdout én stderr naar bestand |
commando > /dev/null | Stdout weggooien |
commando1 | commando2 | Pipe: stdout van 1 naar stdin van 2 |