Linux is een interessant besturingssysteem dat een aantal virtuele apparaten host voor tal van doeleinden. Voor zover het programma’s betreft die in het systeem draaien, gedragen deze virtuele apparaten zich alsof het echte bestanden zijn. Programma’s kunnen gegevens opvragen en voeden vanuit deze bronnen. De gegevens worden gegenereerd door het OS in plaats van ze van een schijf te lezen.
Een voorbeeld hiervan is /dev/null. Het is een speciaal bestand dat aanwezig is in elk Linux systeem. Echter, in tegenstelling tot de meeste andere virtuele bestanden, wordt het gebruikt om te schrijven in plaats van te lezen. Wat je ook schrijft naar /dev/null zal worden weggegooid, vergeten in de leegte. Het staat bekend als het null apparaat in een UNIX systeem.
Waarom zou je iets willen weggooien in de leegte? Laten we eens kijken wat /dev/null is en hoe het gebruikt wordt.
Voorvereisten
Voordat we diep in het gebruik van /dev/null duiken, moeten we een goed begrip hebben van de stdout en stderr datastroom. Bekijk deze diepgaande gids over stdin, stderr, en stdout.
Laten we het even opfrissen. Wanneer een command-line programma wordt uitgevoerd, genereert het twee uitgangen. De uitvoer gaat naar stdout en de fout (indien gegenereerd) gaat naar stderr. Standaard zijn beide datastromen gekoppeld aan de terminal.
Het volgende commando drukt bijvoorbeeld de string binnen het dubbele aanhalingsteken af. Hier wordt de uitvoer opgeslagen in stdout.
Het volgende commando toont ons de exit-status van het eerder uitgevoerde commando.
Als de vorige opdracht met succes is uitgevoerd, is de exit-status 0. Anders zal de exit-status anders zijn. Wat gebeurt er als u een ongeldige opdracht probeert uit te voeren?
$ echo $?
Nu moeten we iets weten over de bestandsdescriptor. In het UNIX ecosysteem zijn dit gehele getallen die aan een bestand worden toegekend. Zowel stdout (file descriptor = 1) als stderr (file descriptor = 2) hebben een specifieke file descriptor. Met behulp van de bestandsdescriptor (1 en 2 in deze situatie), kunnen we de stdout en stderr omleiden naar andere bestanden.
Om te beginnen, het volgende voorbeeld leidt de stdout van het echo commando om naar een tekst bestand. Hier hebben we de bestandsdescriptor niet opgegeven. Als dat niet is opgegeven, gebruikt bash standaard stdout.
Het volgende commando leidt de stderr om naar een tekstbestand.
Gebruik /dev/null
Uitvoer omleiden naar /dev/null
Nu zijn we klaar om te leren hoe we /dev/null kunnen gebruiken. Laten we eerst eens kijken hoe we normale uitvoer en foutuitvoer kunnen filteren. In het volgende commando probeert grep te zoeken naar een string (hello, in dit geval) in de “/sys” directory.
Het zal echter een heleboel fouten genereren omdat zonder root privilege, grep geen toegang heeft tot een aantal bestanden. In zo’n geval zal het resulteren in de foutmelding “Permission denied”. Nu, met behulp van de omleiding, kunnen we een duidelijkere uitvoer krijgen.
De uitvoer ziet er veel beter uit, toch? Niets. In dit geval heeft grep geen toegang tot veel bestanden en de bestanden die wel toegang hebben, bevatten niet de string “hello”.
In het volgende voorbeeld gaan we Google pingen.
We willen echter niet al die succesvolle ping-resultaten zien. In plaats daarvan willen we ons alleen richten op de fouten wanneer de ping Google niet kon bereiken. Hoe doen we dat?
Hier wordt de inhoud van stdout gedumpt naar /dev/null, zodat alleen de fouten overblijven.
Alle uitvoer omleiden naar /dev/null
In bepaalde situaties is de uitvoer misschien helemaal niet nuttig. Met behulp van redirection kunnen we alle uitvoer in de leegte dumpen.
Laten we dit commando een beetje afbreken. Eerst dumpen we alle stdout naar /dev/null. Dan, in het tweede deel, vertellen we bash om stderr naar stdout te sturen. In dit voorbeeld, is er niets om uit te voeren. Als u echter in de war bent, kunt u altijd controleren of het commando met succes is uitgevoerd.
De waarde is 2 omdat het commando veel fouten heeft gegenereerd.
Als u de neiging hebt om de bestandsdescriptor van stdout en stderr te vergeten, zal het volgende commando prima werken. Het is een meer gegeneraliseerd formaat van het vorige commando. Zowel stdout als stderr worden omgeleid naar /dev/null.
Overige voorbeelden
Dit is een interessante. Ken je het gereedschap dd nog? Het is een krachtig gereedschap voor het converteren en kopiëren van bestanden. Leer meer over dd. Met dd kunnen we de sequentiële leessnelheid van uw schijf testen. Natuurlijk is dit geen nauwkeurige meting. Maar voor een snelle test is het wel handig.
Hier heb ik de Ubuntu 18.04.4 ISO gebruikt als het grote bestand.
Zo kunt u ook de downloadsnelheid van uw internetverbinding testen.
Final thoughts
Hopelijk hebt u nu een goed begrip van wat dit /dev/null bestand is. Het is een speciaal apparaat dat, als er naar geschreven wordt, null weggooit en als er van gelezen wordt, null leest. Het ware potentieel van deze interessante functie ligt in interessante bash scripts.
Bent u geïnteresseerd in bash scripting? Bekijk de beginnershandleiding voor bash scripting.
Enjoy!