Ubuntu: Linux voor mensen/Input en output/De output redirection operatoren
De > operator
bewerkenGebruik
bewerkenAls je de output van een commando wilt opslaan in een bestand, gebruik je de “>” operator na het commando, gevolgd door de naam van het bestand waarin je de output kwijt wilt:
commando opties argumenten > bestandsnaam
willy@ubuntu:~$ date za jun 29 08:49:41 CEST 2006 willy@ubuntu:~$ date > datum willy@ubuntu:~$ cat datum za jun 29 08:49:41 CEST 2006 willy@ubuntu:~$ ls -l > mijn_home_vandaag willy@ubuntu:~$ cat datum mijn_home_vandaag > mijn_home_20060629 |
Bekijk het bestand
|
We zagen al eerder het gebruik van de zogenaamde backticks. Probeer, in plaats van zelf de datum op te geven, eens het volgende:
willy@ubuntu:~$ cat datum mijn_home_vandaag > mijn_home_`date +%y%m%d` |
Overschrijven voorkomen
bewerkenWees voorzichtig als je op deze manier de output van een commando in een bestand stopt. Als de opgegeven bestandsnaam al bestaat, zal de inhoud zonder waarschuwing overschreven worden.
Wil je niet het risico lopen om bestanden te overschrijven, geef dan eerst het volgende commando in:
set -o noclobber
Dit instrueert je shell om een melding te geven wanneer je dreigt een bestaand bestand te overschrijven.
|
We zullen in het derde lespakket zien hoe we deze optie permanent kunnen maken.
Beknotten van bestanden
bewerkenAls we “niets” naar een bestaand bestand sturen, is dat hetzelfde als het bestand leegmaken. Let in het volgende voorbeeld op de grootte van het bestand:
willy@ubuntu:~$ ls -l mijn_home_060626 -rw-r--r-- 1 willy willy 877 2006-06-29 08:54 mijn_home_060626 willy@ubuntu:~$ > mijn_home_060626 willy@ubuntu:~$ ls -l mijn_home_060626 -rw-r--r-- 1 willy willy 0 2006-06-29 08:54 mijn_home_060626 |
Dit beknotten of leegmaken van bestanden noemt men truncating.
De | operator
bewerkenGebruik
bewerkenDe “|” operator wordt gebruikt om de output van een commando te gebruiken als input voor een tweede commando.
Het verticale streepje noemt men in het Engels een pipe. Vandaar dat dit proces ook wel eens pipen genoemt wordt. De Nederlandse term is pijplijn.
Voorbeeld van een pipe met ps en grep
bewerkenIn het vorige hoofdstuk zagen we dat proceslijsten vaak heel lang kunnen zijn. Soms zijn ze zo lang, dat je terminalbuffer overstroomt. In dat geval kan je het schuivertje rechts van het venster niet gebruiken om helemaal naar het begin van de output terug te rollen. Bovendien is het sowieso niet handig om telkens te moeten gaan zoeken in zoveel output. Met een pipe en het grep commando kunnen we veel handiger en sneller werken. Bijvoorbeeld om enkel het browserproces te tonen:
Zorg ervoor dat je eerst de browser gestart hebt, via het icoon in de bovenste taakbalk of via de commandoregel. willy@ubuntu:~$ ps -ef | grep fire willy 7871 1 15 09:06 ? 00:00:04 /usr/lib/mozilla-firefox/firefox-bin -a firefox willy 7902 7296 0 09:07 pts/0 00:00:00 grep fire |
Op systemen die weinig belast zijn, krijg je wel eens het grep commando zelf te zien, naast de lijnen die je eigenlijk gevraagd had. Voorbeeld van een pipe met ls en grep
Een lange lijst van alle bestanden in de /etc map werkt niet handig. Stel dat we alle bestanden willen zien die met cron te maken hebben:
willy@ubuntu:~$ ls -l /etc | grep cron -rw-r--r-- 1 root root 364 2005-05-03 04:10 anacrontab drwxr-xr-x 2 root root 4096 2006-06-06 14:20 cron.d drwxr-xr-x 2 root root 4096 2006-06-06 14:23 cron.daily drwxr-xr-x 2 root root 4096 2006-06-06 14:20 cron.hourly drwxr-xr-x 2 root root 4096 2006-06-06 14:26 cron.monthly -rw-r--r-- 1 root root 651 2005-05-03 01:09 crontab drwxr-xr-x 2 root root 4096 2006-06-06 14:20 cron.weekly |
Noteer dat ls de lijnen alfabetisch sorteert. Het enige dat grep doet, is de lijnen met de gevraagde string eruithalen en op het scherm zetten. Bijgevolg is ook deze output alfabetisch gesorteerd.
Voorbeeld van een pipe met ls en less
bewerkenWil je toch alles zien in een lange lijst die niet op het scherm kan, gebruik dan het volgende commando:
ls -l map | less |
Gebruik de normale toetsen om binnen het less commando te navigeren.
Voorbeeld met twee pipes
bewerkenNemen we weer het voorbeeld van de paragraaf “Voorbeeld van een pipe met ls en grep”. Als we nu uit deze output enkel de lijnen willen die de string “crontab” niet bevatten, dan maken we de pijplijn wat langer, door de output van het grep commando te gebruiken voor een tweede grep:
willy@ubuntu:~$ ls -l /etc | grep cron | grep -v crontab drwxr-xr-x 2 root root 4096 2006-06-06 14:20 cron.d drwxr-xr-x 2 root root 4096 2006-06-06 14:23 cron.daily drwxr-xr-x 2 root root 4096 2006-06-06 14:20 cron.hourly drwxr-xr-x 2 root root 4096 2006-06-06 14:26 cron.monthly drwxr-xr-x 2 root root 4096 2006-06-06 14:20 cron.weekly |
De >> operator
bewerkenDe >> operator wordt gebruikt om output van een commando aan een bestaand bestand te hangen, zonder de inhoud te overschrijven. Neem er nog even de oefening van de paragraaf “Gebruik” bij. Daarin maakten we twee bestanden aan, datum en mijn_home_vandaag, die we later samenvoegden tot één enkel bestand. Dit kan ook in één stap:
De < operator
bewerkenIets moeilijker om te begrijpen is de input redirection. De operator is “<” en wordt gebruikt om bijvoorbeeld een bestand als input te gebruiken voor een commando dat in normale omstandigheden geen bestanden als input zou aanvaarden. Input redirection leest moeilijker dan output redirection, het komt doorgaans niet natuurlijk over en wordt daarom enkel gebruikt door gevorderden.