Redirects en Pipes

← Terug naar overzicht

Output Redirect

Normaal verschijnt de uitvoer van een commando op je scherm (de standaard uitvoer). Met redirect-operatoren kun je die uitvoer naar een bestand sturen.

Er zijn twee operatoren:

| Operator | Werking |

|----------|---------|

| > | Schrijf uitvoer naar een bestand. Overschrijft het bestand als het al bestaat. |

| >> | Voeg uitvoer toe aan het einde van een bestand. Maakt het bestand aan als het niet bestaat. |

echo "Hallo" > bestand.txt     # overschrijft bestand.txt
echo "Wereld" >> bestand.txt   # voegt toe aan bestand.txt

Oefening 1

Zorg ervoor dat het bestand /tmp/welkom.txt wordt aangemaakt met daarin exact de tekst Welkom bij Linux. Het bestand mag nog niet bestaan.

Jouw commando:

Oefening 2

Het bestand /tmp/welkom.txt bevat al de tekst Welkom bij Linux. Voeg de tekst Tweede regel toe aan dit bestand, zonder dat de bestaande inhoud verloren gaat.

Jouw commando:

Oefening 3

Je wilt een overzicht van de bestanden in /home/user/Documents bewaren. Sla dat overzicht op in het bestand /tmp/inhoud.txt.

Jouw commando:

Oefening 4

Het bestand /tmp/log.txt bevat verouderde gegevens. Vervang de volledige inhoud door de tekst Nieuwe entry. Er mag daarna geen oude tekst meer in het bestand staan.

Jouw commando:

Oefening 5

Maak een kopie van de inhoud van Documents/readme.txt en sla die op als /tmp/kopie.txt. Doe dit zonder het commando cp te gebruiken.

Jouw commando:

Pipes

Een pipe (|) stuurt de uitvoer van het ene commando direct als invoer naar het volgende commando. Zo kun je commando's aan elkaar koppelen.

commando1 | commando2

De uitvoer van commando1 wordt de invoer van commando2. Enkele voorbeelden:

ls /home/user | head -n 3      # toon eerste 3 items uit ls
cat bestand.txt | grep "zoek"  # zoek in de inhoud van een bestand

Oefening 1

Toon de inhoud van /home/user, maar laat alleen de eerste 2 items zien.

Jouw commando:

Oefening 2

In het bestand /tmp/landen.txt staan meerdere landnamen. Toon alleen de regels die de tekst land bevatten.

Jouw commando:

Oefening 3

Hoeveel bestanden en mappen bevat de map /home/user? Toon alleen het aantal als getal.

Jouw commando:

Oefening 4

Het bestand /tmp/woorden.txt bevat een lijst met woorden. Hoeveel van die woorden bevatten de letter a? Toon alleen het aantal.

Jouw commando:

Oefening 5

Het bestand /tmp/namen.txt bevat een ongesorteerde lijst met namen. Toon de namen in alfabetische volgorde.

Jouw commando:

Combineren

De echte kracht van Linux komt naar voren wanneer je pipes en redirects combineert. Je kunt een pipeline bouwen en het eindresultaat opslaan in een bestand.

cat bestand.txt | grep "patroon" | sort > resultaat.txt

Dit leest een bestand, filtert op een patroon, sorteert de resultaten en slaat alles op in resultaat.txt.

Oefening 1

In het bestand /tmp/logboek.txt staan logregels van verschillende types. Sla alleen de regels die ERROR bevatten op in een nieuw bestand /tmp/errors.txt.

Jouw commando:

Oefening 2

Het bestand /tmp/fruit.txt bevat een ongesorteerde lijst fruitsoorten. Sorteer deze lijst alfabetisch en sla het resultaat op in /tmp/fruit_sorted.txt.

Jouw commando:

Oefening 3

Het bestand /tmp/data.txt bevat een lijst gebruikers met hun status (actief of inactief). Tel hoeveel gebruikers de status actief hebben (niet inactief) en sla dat aantal op in /tmp/telling.txt.

Jouw commando:

Oefening 4

Het bestand /tmp/scores.txt bevat een lijst getallen. Maak een bestand /tmp/top3.txt met daarin de 3 hoogste getallen, gesorteerd van hoog naar laag.

Jouw commando:

Oefening 5

Het bestand /tmp/tekst.txt bevat een lijst woorden, maar sommige komen vaker voor. Tel hoeveel unieke woorden er zijn en sla dat aantal op in /tmp/rapport.txt.

Jouw commando:

Command Chaining

Naast pipes kun je commando's ook achter elkaar uitvoeren met speciale operatoren. Dit heet command chaining.

| Operator | Werking |

|----------|---------|

| ; | Voer het volgende commando altijd uit, ongeacht of het vorige slaagde |

| && | Voer het volgende commando alleen uit als het vorige slaagde |

| \|\| | Voer het volgende commando alleen uit als het vorige faalde |

mkdir map && cd map          # cd alleen als mkdir slaagt
rm bestand || echo "Mislukt" # echo alleen als rm faalt
echo "A"; echo "B"          # beide worden altijd uitgevoerd

Oefening 1

Voer twee acties uit op een enkele regel: maak de map /tmp/testmap aan en maak daarna een bestand /tmp/testmap/info.txt met de tekst test. Beide acties moeten altijd worden uitgevoerd, ook als de eerste zou falen.

Jouw commando:

Oefening 2

Maak de map /tmp/project aan en schrijf daarin een bestand app.txt met de tekst Hallo. Het bestand mag alleen worden aangemaakt als het aanmaken van de map is gelukt.

Jouw commando:

Oefening 3

Probeer de map /tmp/bestaande_map te verwijderen met rmdir. Als dat niet lukt (de map is niet leeg), moet de tekst Map is niet leeg worden geschreven naar /tmp/status.txt. Doe dit op een enkele regel.

Jouw commando:

Oefening 4

Voer drie stappen uit op een enkele regel: (1) maak de map /tmp/output aan, (2) schrijf de tekst Gereed naar /tmp/output/status.txt, en (3) toon de inhoud van dat bestand. Elke stap mag alleen worden uitgevoerd als alle voorgaande stappen zijn geslaagd.

Jouw commando:

Oefening 5

Maak een backup-map /tmp/backup aan (deze mag al bestaan zonder fout) en kopieer vervolgens Documents/readme.txt daarheen. De kopie mag alleen plaatsvinden als de map succesvol is aangemaakt.

Jouw commando:

Samenvatting

In dit hoofdstuk heb je geleerd hoe je de uitvoer van commando's kunt sturen en combineren:

Met deze technieken kun je complexe taken uitvoeren in een enkele opdrachtregel. Dit vormt de basis van efficiient werken in Linux.