Les 4a Redirectie en piping

Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd
Inhoud: gebruik van >, <, >>, 2>, |, more, less, tee,  ` (backquote), cat, sort, uniq

Introductie

We kunnen de uitvoer van een commando omleiden, zodat deze niet op het scherm komt, maar in een bestand opgeslagen wordt . Ook kunnen we de invoer uit een ander bestand halen. We noemen dit omleiding of redirectie (redirection) . Het voeren van de uitvoer van een commando naar de invoer van een andere commando wordt piping genoemd. Linux is heel flexibel in het omleiden van invoer en uitvoer door middel van een aantal operatoren die op de commandoregel kunnen worden gebruikt.

Uitvoer omleiding

Het gewone commando ls  geeft normaliter de uitvoer naar de terminal oftewel het beeldscherm. Je kunt de uitvoer opvangen in een bestand door middel van de uitvoeroperator   >  , als volgt.
ls > lijstje
Dit bewaart de uitvoer van ls in een nieuw bestand genaamd lijstje.  Indien eventueel dit bestand al bestaat dan wordt dit overschreven.

Ook kunnen we de uitvoer van een commando in een bestand verzamelen, op een manier dat het wordt toegevoegd aan het bestand , met de >> operator.
ls >> lijstje
Dit stuurt de uitvoer van ls naar het bestand lijstje, waarbij de nieuwe uitvoer aan de bestaande inhoud van het bestand wordt vastgeplakt. Dit kan erg handig zijn om herhaaldelijk de uitvoer van een commando te kunnen bewaren, of van een reeks commandos te bewaren.

Fruit sorteren

Het sort commando sorteer de informatie die het als invoer krijgt en stuurt het weer weg als uitvoer. Een voorbeeld maakt dit duidelijk . Stel dat we een bestand met de naam fruit hebben met een aantal vruchten, bijvoorbeeld:
pruim
aardbei
kers
banaan
peer

Je kunt dit bestand eenvoudig zelf aanmaken met cat als volgt:
cat > fruit
Het commando leest hierna de invoer . Cat leest elke regel totdat je op de Enter toets drukt, en gaat dan de volgende regel lezen van de invoer (terminal). Dit gaatNaamloos door totdat je op Ctrl-D drukt. Met het indrukken van Ctrl-D stuur je een controleteken dat wordt geinterpreteerd als "einde van invoer". Dit is voor cat het signaal dat de invoer is beeindigd en cat stopt dan. Alle regels die je hebt ingevoerd voert , heeft cat hierna opgeslagen in een bestand fruit .

We willen dit bestand alfabetisch sorteren . Dit kunnen we doen met het sort commando. Het commando luidt dan zo.
sort fruit 
Het commando sort leest het bestand, sorteert de invoer alfabetisch en geeft dit terug als uitvoer naar het scherm. In dit geval wordt de invoer gelezen uit het bestand fruit .

Je kunt met uitvoeromleiding de uitvoer opslaan in een bestand
sort fruit > gesorteerdfruit
De uitvoer wordt nu opgeslagen in het bestand gesorteerdfruit , dat (opnieuw) wordt aangemaakt. Je kunt de inhoud bekijken met
cat gesorteerdfruit

Invoer omleiding

Het sort commando demonstreert ook de werking van invoer omleiding. We kunnen de invoer van sort direkt intypen vanaf het toetsenbord. Het commando dat we gebruiken is
sort <<END
Dit zorgt ervoor dat sort zijn invoer leest van de terminal (in dit geval het toetsenbord) en net zolang doorgaat totdat het "END" tegenkomt. Voer het commandNaamlooso uit en type 5 regels met fruit , elk afgesloten met Enter, en als laatste woord END. Sort geeft de ingevoerde regels gesorteerd terug.

Piping

We kunnen de uitvoer van een commando met de pipe-operator | gebruiken als invoer voor een volgende commando . Deze operator geeft op Linux ettelijke mogelijheden om allerlei slimme dingen te doen met de simpele commandos die tot onze beschikking staan.

Een simpel voorbeeld om te illustreren hoe dit in zijn werk gaat is het gebruik van het hulpprogramma less om de inhoud van een bestand in delen op het scherm weer te geven.

Less

Het hulpprogramma less is een erg handig hulpmiddel. Het kan een grote hoeveelheid informatie die niet in een keer op het scherm getoond kan worden aan de gebruiker in hapklare brokjes presenteren. Less wordt gebruikt om informatie ordelijk op het venster te laten zien, als er meer informatie is, dan de gebruiker in een keer kan zien. Het hulpprogramma less laat de gebruiker precies zoveel regel te zien als op het terminalvenster past. Met de spatiebalk kun je de volgende scherm te zien krijgen, of met de f-toets. Met de b-toets krijg je het vorige scherm te zien. met de q-toets stopt less en kom je weer op de commandoregel terug. Less wordt op diverse plaatsen gebruikt, bijvoorbeeld met het commando man om de man-paginas te tonen.

Een goed voorbeeld van less is om een lange bestandenlijst te zien. bijvoorbeeld:
ls /usr/bin
Deze bestandenlijst is groter dan op het scherm zichtbaar gemaakt kan worden. Het grootste deel is voorbijgescrolld en niet meer zichtbaar. Met Less kun je nu pagina voor pagina op je gemak lezen. Door gebruik te maken van de pipe-operator wordt de uitvoer van ls aan less gevoerd.
ls /usr/bin | less
Het vorige voorbeeld met het sorteren van fruit kunnen we met behulp van de pipe-operator nu ook zo schrijven.
cat fruit | sort 

Tekstbewerking

Er bestaan een aantal handige hulpprogrammaatje in Linux die het mogelijk maken een simpele maar krachtige bewerkingen uit te voeren. Deze programmas werken allemaal met behulp van omleiding. Door de programma achterelkaar uit te voeren, waarbij de een zijn uitvoer doorgeeft aan de volgende kunnen ingewikkelde bewerkingen op tekstbestanden worden verricht. Hoe sort werkt hebben we nu gezien.

Uniq

Dit programma bekijkt de invoer en filtert dubbele regels eruit en spuugt de tekst weer uit. Het helpt als de invoer al gesorteerd.

Cut

Dit programma leest de invoer regel voor regel, en knipt een kolom uit elke regel, en geeft dat door.

Je kunt het zo gek niet bedenken of het kan
ls /usr/bin | uniq | cut -f1 | sort | less 

Opdracht

1. Wat gebeurt als je dit doet?
sort fruit > fruit 
2. Geef de datum in het formaat "24 jan 2004"