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
Zorg ervoor dat het bestand /tmp/welkom.txt wordt aangemaakt met daarin exact de tekst Welkom bij Linux. Het bestand mag nog niet bestaan.
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.
Je wilt een overzicht van de bestanden in /home/user/Documents bewaren. Sla dat overzicht op in het bestand /tmp/inhoud.txt.
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.
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.
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
Toon de inhoud van /home/user, maar laat alleen de eerste 2 items zien.
In het bestand /tmp/landen.txt staan meerdere landnamen. Toon alleen de regels die de tekst land bevatten.
Hoeveel bestanden en mappen bevat de map /home/user? Toon alleen het aantal als getal.
Het bestand /tmp/woorden.txt bevat een lijst met woorden. Hoeveel van die woorden bevatten de letter a? Toon alleen het aantal.
Het bestand /tmp/namen.txt bevat een ongesorteerde lijst met namen. Toon de namen in alfabetische volgorde.
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.
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.
Het bestand /tmp/fruit.txt bevat een ongesorteerde lijst fruitsoorten. Sorteer deze lijst alfabetisch en sla het resultaat op in /tmp/fruit_sorted.txt.
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.
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.
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.
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
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.
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.
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.
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.
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.
In dit hoofdstuk heb je geleerd hoe je de uitvoer van commando's kunt sturen en combineren:
>) -- Schrijf uitvoer naar een bestand. Overschrijft bestaande inhoud.>>) -- Voeg uitvoer toe aan een bestand zonder te overschrijven.|) -- Stuur de uitvoer van het ene commando als invoer naar het volgende.; (altijd), && (alleen bij succes) of || (alleen bij falen).Met deze technieken kun je complexe taken uitvoeren in een enkele opdrachtregel. Dit vormt de basis van efficiient werken in Linux.