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"