Wat doet 2>/dev/null precies?

What Exactly Does 2 Dev Null Do



Of je nu een nieuwe Linux-gebruiker bent of een ervaren bash-programmeur, het is zeer waarschijnlijk dat je het cryptische commando 2>/dev/null bent tegengekomen. Hoewel deze opdracht er technisch ingewikkeld uitziet, is het doel ervan heel eenvoudig. Het verwijst naar een null-apparaat dat wordt gebruikt om de uitvoer van verschillende opdrachten te onderdrukken. Dit artikel zal elk onderdeel van de opdracht 2>/dev/null opsplitsen, het doel ervan uitleggen en voorbeelden zien van hoe het wordt gebruikt.

Null-apparaat - '/dev/null'

Alle op Linux gebaseerde systemen hebben een functie genaamd virtuele apparaten. Deze virtuele apparaten werken samen als echte bestanden in het besturingssysteem. De werking van dergelijke virtuele apparaten is vergelijkbaar met echte apparaten; ze worden gebruikt om gegevens te schrijven en te lezen. Het belangrijkste verschil tussen de twee is dat de gegevens voor de virtuele apparaten worden geleverd door het besturingssysteem.







/dev/null is een null-apparaat - een speciaal type virtueel apparaat. Het is aanwezig in elk Linux-systeem en het doel van dit apparaat is om alles dat ernaar wordt verzonden weg te gooien en de End of File (EOF) te lezen. De meeste virtuele apparaten worden gebruikt om gegevens te lezen; /dev/null is echter uniek omdat het wordt gebruikt om alle gegevens die erop worden geschreven te onderdrukken. In eenvoudige bewoordingen fungeert het als een zwart gat voor alle gegevens die ernaar worden geschreven in Linux-besturingssystemen.



Laten we nu eens kijken naar de resterende delen van de opdracht 2 > /dev/null



Bestandsbeschrijving – ‘2’

Elke uitvoering van een opdracht in Linux genereert drie bijbehorende bestanden: standaardinvoer, standaarduitvoer en standaardfoutbestanden. Het Linux-besturingssysteem verwijst naar elk van deze bestanden met een uniek niet-negatief geheel getal.





  • '0' voor standaard invoer
  • '1' voor standaarduitvoer
  • '2' voor standaardfout

De technische termen voor standaardinvoer, standaarduitvoer en standaardfoutstromen zijn respectievelijk stdin, stdout en stderr.

We weten dat het nummer '2' in het commando '2>/dev/null' verwijst naar de standaardfout (stderr) stream.



Operator voor bestandsomleiding – ‘>’

Het '>'-symbool staat bekend als de bestandsomleidingsoperator. Het doel is om wat links van hem is naar de commando's aan de rechterkant te leiden. In eenvoudiger woorden, elke reeks gegevens aan de linkerkant wordt naar de rechterkant van de operator geleid.

Tot nu toe hebben we het doel achter elk onderdeel van het 2>/dev/null-commando begrepen. Het stuurt de foutstroom naar /dev/null, die het weggooit. Met andere woorden, deze opdracht wordt gebruikt om foutoutputs te negeren en te onderdrukken. Als je echter een ervaren Linux-veteraan bent, kun je de inhoud van het /dev/null-bestand bekijken door de volgende opdracht in de terminal uit te voeren:

$ls -de /dev/nul

Deze opdracht wordt meestal gebruikt in scenario's waarin we uitvoer moeten filteren op fouten of wanneer we uitvoer willen verwijderen die is gekoppeld aan foutieve beschrijvingen. In de toekomst zullen we kijken naar voorbeelden van het gebruik ervan op een Ubuntu-systeem.

2>/dev/null gebruiken

Aangezien we weten dat het commando 2>/dev/null wordt gebruikt om fouten te verwijderen, zal het altijd worden gebruikt in combinatie met andere commando's. We zullen een vergelijkbare benadering zien in de volgende voorbeelden. U kunt de terminal openen door deze te openen via het toepassingsmenu of door de sneltoets Ctrl + Alt + T te gebruiken.

In het eerste voorbeeld zullen we in de /sys/ directory zoeken naar een willekeurige string (helloworld in dit geval). De opdracht voor zoeken is grep en het argument ervan is de zoekreeks. Voer de volgende opdracht in om naar uw tekenreeks te zoeken.

$greep -RHallo Wereld/sys/

Dit zoekcommando zal ongetwijfeld talrijke fouten weergeven, aangezien het zonder root-toegang wordt gebruikt. We zullen de foutenstroom naar /dev/null sturen door het commando 2>/dev/null te gebruiken om deze fouten te verwijderen.

$greep -RHallo Wereld/sys/ 2> /dev/nul

We kunnen zien dat de uitvoer van de opdracht veel netter en eenvoudiger is dan de vorige. De reden is dat de fouten worden verwijderd door 2> /dev/null te gebruiken, en aangezien het grep-commando geen bestand kon vinden dat overeenkomt met onze string 'helloworld', toont het geen uitvoer.

Om het gebruik van /dev/null beter te begrijpen, bekijken we het volgende voorbeeld van het pingen van een website (google.com in ons geval). U kunt google.com pingen door de volgende opdracht uit te voeren:

$pingGoogle com

Als we alle mislukte pings willen uitsluiten, kunnen we de opdracht 2>/dev/null gebruiken:

$pingGoogle com2> /dev/nul

In dit geval wordt de standaardfoutstroom (die de mislukte pings naar google.com laat zien) verzonden naar het virtuele apparaat /dev/null dat ze weggooit.

Als we echter alleen de mislukte pings willen zien, kunnen we de volgende opdracht uitvoeren:

$pingGoogle com1> /dev/nul

Hier sturen we de standaard uitvoerstroom (stdout) naar het /dev/null-apparaat dat het weggooit. Bijgevolg blijven alleen de pings over die de google.com-server niet hebben bereikt. In ons geval waren er echter geen mislukte pings. We kunnen stdout en stderr ook naar verschillende locaties leiden. Dit is handig als we uitvoer willen weggooien en fouten in een logboek willen opslaan of omgekeerd. U kunt de volgende opdracht uitvoeren om de mislukte pings op te slaan in een foutenlogboek terwijl u de standaarduitvoer van de ping-opdracht negeert:

$pingGoogle com1> /dev/nul2>error.log

Soms wilt u misschien alle uitvoer van een opdracht onderdrukken (inclusief standaarduitvoer en standaardfouten). We kunnen dit bereiken door het /dev/null-apparaat op een iets andere manier te gebruiken. U kunt de volgende opdracht typen om alle uitvoer te onderdrukken:

$pingGoogle com> /dev/nul2> &1

Merk op dat de volgorde van de commando's hier erg belangrijk is. Na het uitvoeren van het ping-commando, vertelt '>/dev/null' het systeem om de uitvoer te onderdrukken, en '2>&1' stuurt de standaardfoutstroom naar de standaarduitvoer. Op deze manier wordt alle uitvoer van de opdracht weggegooid.

Conclusie

We hebben het 2>/dev/null-commando en eenvoudige voorbeelden in dit artikel ontleed, en hopelijk begrijp je nu wat elk stukje ervan doet. Dit is echter slechts het topje van de ijsberg; null-apparaten worden op veel verschillende manieren gebruikt in bash-programmering. Enkele van de meer geavanceerde toepassingen zijn het controleren van het bestaan ​​van bestanden, het automatiseren van pakketinstallaties en voorkomen dat scripts tegen ongewenste uitzonderingen aanlopen.