logo

Wat is /Dev/Null in Linux?

Als je shell-programmeren hebt geleerd, ben je misschien al iets tegengekomen als /dev/null. In dit artikel zullen we begrijpen wat het is en hoe het wordt gebruikt. Laten we beginnen met begrijpen wat /dev is.

Wat is /dev?

In het Linux-bestandssysteem is alles een bestand of een map. Zelfs apparaten zijn toegankelijk als bestanden. Uw harde schijfpartities, Pen-drive, luidsprekers, voor al deze bestaat er een bestand van waaruit deze toegankelijk zijn. Om te begrijpen hoe apparaten als bestanden worden benaderd, moet je het op deze manier bekijken: wat doen we met een bestand? We lezen er gegevens uit en schrijven er gegevens naar. Een apparaat zoals een luidspreker kan gegevens invoeren om geluid te produceren, een harde schijf kan worden gebruikt om gegevens te lezen en te schrijven, een printer gebruikt de invoer om bestanden af ​​te drukken, enz. Bestanden en apparaten lijken in dit opzicht op elkaar



/dev is een map waarin alle fysieke en virtuele apparaten van een Linux-systeem worden opgeslagen. Fysieke apparaten zijn gemakkelijk te begrijpen, het zijn tastbare apparaten zoals een pen-drive, luidsprekers, printers, enz. Een Linux-systeem heeft ook virtuele apparaten die als apparaat fungeren, maar geen fysiek apparaat vertegenwoordigen.

Wat is /dev/null?

Het is een virtueel apparaat met een speciale eigenschap: alle gegevens die naar /dev/null worden geschreven, verdwijnen of verdwijnen. Vanwege deze eigenschap wordt het ook wel bitbucket of blackhole genoemd. Laten we een demonstratie zien.

Uitvoer omleiden naar /dev/null

In deze demo kun je zien dat we wat gegevens hebben toegevoegd, maar dat die gegevens niet zijn opgeslagen. Dit specifieke kenmerk van /dev/null kent enkele gebruiksscenario's. Laten we ze zien.



Gebruik van /dev/null

Omdat alles wat ernaar geschreven is, wordt verwijderd, kunt u bestanden naar /dev/null verplaatsen om ze te verwijderen. Maar dit is geen veelgebruikte use case. Het wordt voornamelijk gebruikt om standaarduitvoer en standaardfouten uit een uitvoer te verwijderen.

Wat zijn standaarduitvoer en standaardfout?

De uitvoer van een Linux-opdracht bevat twee gegevensstromen: standaarduitvoer (stdout) en standaardfout (stderr0), terwijl de standaarduitvoer de normale uitvoer is als de opdracht geen fouten bevat, en de standaardfout de fout is die door de opdracht wordt gegenereerd. Uitvoer kan zowel standaarduitvoer als standaardinvoer bevatten. Voorbeeld van stdout en stderr:

Laten we het volgende shellscript uitvoeren



java if-instructie
# /bin/sh ls apt update>

De eerste opdracht is met succes uitgevoerd, maar de tweede genereerde een fout. Omdat stdout en stderr twee afzonderlijke gegevensstromen zijn, kunnen ze afzonderlijk worden verwerkt.

Hoe krijg ik toegang tot stderr en stdout?

Stdout en stderr zijn gegevensstromen, die beide in Linux als een bestand worden behandeld. Als u hierop enige actie wilt uitvoeren, gebruikt u een bestandsdescriptor die de bestandsstroom op unieke wijze identificeert. De bestandsdescriptor voor stdout is 1 en voor stderr is 2.

Om ze afzonderlijk te openen, bekijken we de volgende opdracht die wordt uitgevoerd op hetzelfde scriptbestand dat in het vorige voorbeeld werd gebruikt.

./script.sh 1>stdout.txt>

Hierin kunt u zien dat de uitvoer standaardfouten bevat, maar dat de standaarduitvoer niet werd weergegeven. Dit komt omdat de stdout-stream naar het stdout.txt-bestand is verzonden en je kunt zien dat het stdout.txt-bestand de standaarduitvoer bevat.

Bij het schrijven van een shellscript willen we misschien de standaardfout uit de uitvoer verwijderen. Welke stroom we ook uit de uitvoer willen onderdrukken, die gegevensstroom kan in /dev/null worden geschreven. Je zou die gegevens naar een ander bestand kunnen schrijven, net als in het bovenstaande voorbeeld, maar als je die gegevens niet kunt gebruiken, waarom zou je er dan geheugen aan willen verspillen? Het is beter om ze volledig weg te gooien. Laten we het volgende voorbeeld bekijken

./script.sh 2>/dev/null>

En zomaar hebben we de stderr uit de uitvoer verwijderd. Als u de volledige uitvoer wilt verwijderen, kunt u de volgende opdracht gebruiken

hoe Java te upgraden
command>/dev/null 2>&1>

Het &> commando leidt de uitvoer van de bestandsdescriptor die aan de linkerkant wordt vermeld (in het bovenstaande commando, de uitvoer van 2) om naar de stroom van bestandsdescriptor die aan de rechterkant wordt vermeld. De uitvoer van stderr (2) wordt dus omgeleid naar stdout(1), die op zijn beurt wordt geschreven in /dev/null en dus wordt vernietigd.

Veilige verwijdering van bestanden

‘/dev/null’ vindt nut bij het veilig verwijderen van bestanden. Door ‘/dev/null’ naar een bestand om te leiden, kunt u de inhoud ervan effectief overschrijven met null-bytes, waardoor het een uitdaging wordt om betekenisvolle gegevens te herstellen.

Bijvoorbeeld:

cat /dev/null>gevoelig_bestand>

Deze opdracht vervangt de inhoud van ‘sensitive_file’ door null-bytes, waardoor de veilige verwijdering ervan wordt gegarandeerd.

Logbestanden opschonen

Logbestanden kunnen in de loop van de tijd aanzienlijke gegevens verzamelen. Om logbestanden te wissen zonder de actieve services te onderbreken, kunt u hun inhoud omleiden naar ‘/dev/null.’

doen terwijl je in Java bent

Bijvoorbeeld:

cat /dev/null>/var/log/syslog>

Deze opdracht leegt het ‘syslog’-bestand door de inhoud ervan om te leiden naar ‘/dev/null’, waardoor het logboek effectief wordt opgeschoond zonder het bestand zelf te verwijderen.

Tips en trucs:

  • Standaarduitvoer omleiden naar ‘/dev/null’: ‘command> /dev/null’
  • Standaardfout omleiden naar ‘/dev/null’: ‘command 2> /dev/null’
  • Zowel uitvoer als fout omleiden naar ‘/dev/null’: ‘command>/dev/null 2>&1’

Conclusie

In dit artikel hebben we besproken dat `/dev/null’ in Linux een virtueel zwart gat is waar gegevens verdwijnen wanneer ernaar wordt geschreven. Het wordt vaak gebruikt om uitvoer en fouten te verwijderen, waardoor de uitvoering van opdrachten schoner wordt. Het kan ook worden gebruikt voor het veilig verwijderen van bestanden en het opschonen van logbestanden. Als u de functionaliteit ervan begrijpt, zijn efficiënte opdrachtregelbewerkingen in Linux mogelijk.