Wat is / dev / null en hoe kan het u helpen?

Als we al een idee hebben van de GNU / Linux-mappenboom, zouden we op zijn minst bekend moeten zijn met de / dev / reference, waar alle bestanden gerelateerd aan hardware-apparaten.

Als we in de directory kijken / Dev / we zullen een "bestand" zien met de naam nul, maar als we het willen openen om de inhoud te zien, zal het systeem ons vertellen dat dit niet mogelijk is, aangezien het geen gewone inhoud is. Ik heb het word-bestand bijgevoegd omdat, zoals jullie allemaal weten voor Linux, alles (hardware en software) als een bestand wordt weergegeven.

Dit is een bijdrage van Daniel Durante, waarmee hij een van de winnaars werd van onze wekelijkse wedstrijd: «Deel wat je weet over Linux«. Gefeliciteerd Daniel!

Met welk apparaat komt / dev / null overeen?

Stel je voor praktische doeleinden een vuilnisbak, een bodemloze put of een ruimte voor om iets in te gooien zonder de mogelijkheid om het terug te vinden (hoe hard de NASA-jongens ook proberen).

Maar als ik al commando's zoals rm heb, waarom wil ik dan iets nieuws dat ik verwijder?

Omdat de manier waarop beide "zwarte gaten" werken totaal verschillend is: hoe zou u de standaarduitvoer van een fout in een commando binnen een shellscript tijdens runtime negeren? Dit is waar / dev / null binnenkomt.

Laten we het eens bekijken met een voorbeeld.

We hebben een bestand gemaakt met de naam tests met de tekenreeks "Hallo wereld". Als we de inhoud van dat bestand op de opdrachtregel willen weergeven, kunnen we dat op de volgende manier doen:

gebruiker @ laptop: ~ $ cat test
Hallo Wereld

Als het bestand niet bestond of als tests werd genoemd (met een 's' aan het einde), zouden we de volgende fout in de console krijgen:

gebruiker @ laptop: ~ $ cat tests
cat: tests: het bestand of de map bestaat niet

Wat kunnen we doen om de foutmelding te vermijden? Stuur de uitvoer van het commando gewoon door, in geval van een fout, naar een "vuilnisbak", dat wil zeggen naar / dev / null

Hoe specificeren we dit in het geval van een fout? Hier voert u de standaard invoer-, uitvoer- en foutwaarden in voor een programma: STDIN, STDOUT en STDERR (die respectievelijk kunnen worden vervangen door 0, 1 en 2). Op deze manier, als we ...

gebruiker @ laptop: ~ $ cat tests 2> / dev / null
gebruiker @ laptop: ~ $

... We zullen zien dat de foutmelding niet op de console wordt weergegeven.

Je moet voorzichtig zijn, want de syntaxis is essentieel: tussen de karakters 2 en> mag er geen spatie zijn. Anders zou het het volgende opleveren:

gebruiker @ laptop: ~ $ cat tests 2> / dev / null
cat: tests: het bestand of de map bestaat niet
cat: 2: Het bestand of de directory bestaat niet

Een spatie tussen> en / dev / null heeft daarentegen geen negatieve invloed op het resultaat.

We kunnen bijvoorbeeld ook foutomleiding gebruiken om fouten als volgt in een logbestand vast te leggen:

gebruiker @ laptop: ~ $ cat tests 2> err.log

Een ander interessant geval zou het verzamelen van resultaten in een ander bestand zijn, zolang er geen fout optreedt, waarvoor we zouden plaatsen:

gebruiker @ laptop: ~ $ cat test 1> output_result 2> err.log

Ten slotte is het de moeite waard om de uitdrukking «> / dev / null 2> & 1» te plaatsen waarin de standaarduitvoer en de foutuitvoer worden gecombineerd, zodat ze worden omgeleid zodat in geen geval de uitvoerinformatie wordt verkregen.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   Guido Ignatius Ignatius zei

    Ah, maar een van de meest gebruikte hulpprogramma's die / dev / null heeft, ontbreekt, namelijk het legen van bestanden: $ cat / dev / null> file.log Op deze manier zal het bestand file.log leeg zijn. Voeg het toe!

    1.    Eduard H. zei

      Het was precies de verklaring waarnaar hij op zoek was.
      Ik steun de motie om het toe te voegen =)

      Saludos!

  2.   PABLO zei

    Hallo, allereerst is het artikel erg goed! de tweede wil ik iets bijdragen met deze link over het onderwerp cron job in php van Cpanel en de derde felicitaties voor de blog!

  3.   PABLO zei

    Leuk artikel over dev / null, wat jammer vind ik dat ik eerder per abuis op de verkeerde plaats heb gereageerd! ik bied mijn verontschuldiging aan

  4.   anoniem zei

    goede bijdrage thanks

  5.   truien zei

    Gegroet, ik krijg een nulaanval. Ik gebruik andrirc en ik krijg een privé van mijn bijnaam met het woord Null. 2 seconden later sluit het programma dat ik heb gelezen en voor zover ik zie kan dit alleen door de Shell worden gedaan, niet door iemand van buitenaf. Ik heb geprobeerd mezelf te negeren / ignore -lrpcntikd en Niets verbaast me, het commando blijft maar komen. Als je een manier hebt om het te blokkeren, zou ik dat op prijs stellen. Proost

  6.   sophia martinez zei

    Wat gebeurt er als bij het uitvoeren van de zin het symbool> niet wordt geplaatst?

    Kan iemand me alsjeblieft begeleiden?

  7.   Nul zei

    Goedemorgen, ik heb Debian netinst geïnstalleerd in ACER Extensa 5620Z - 32 bit. Zodra de installatie vanaf USB is voltooid en de pendrive is verwijderd zodat deze opstart vanaf de harde schijf (niet opnieuw installeren vanaf de pen) maar op het moment van opstarten het systeem vraagt ​​ze me:
    debian login: xxxxxxx (oké)
    Wachtwoord: xxxxxxx (ok)
    nul@debian:~$ ???? wat is dit? Wat moet ik daar neerzetten?

    Zonder deze opdracht kan ik niet doorgaan met het opstarten van het systeem.
    Kun je me helpen? Ik weet niet hoe ik verder moet.
    Dank u zeer. Vriendelijke groeten.