Ce este / dev / null și cum vă poate ajuta?

Dacă avem deja câteva noțiuni despre arborele directorului GNU / Linux, ar trebui cel puțin să fim familiarizați cu / dev / reference, care este efectiv în care se află toate fișierele legate de dispozitive hardware.

Dacă ne uităm în director / dev / vom vedea un „fișier” numit zero, dar dacă dorim să-l deschidem pentru a-i vedea conținutul, sistemul ne va spune că nu este posibil, deoarece nu este un conținut obișnuit. Am atașat cuvântul fișier deoarece, după cum știți cu toții pentru Linux, totul (hardware și software) este reprezentat ca un fișier.

Aceasta este o contribuție a lui Daniel Durante, devenind astfel unul dintre câștigătorii concursului nostru săptămânal: «Distribuiți ceea ce știți despre Linux«. Felicitări Daniel!

Cu ce ​​dispozitiv corespunde / dev / null?

În scopuri practice, imaginați-vă un coș de gunoi, o groapă fără fund sau un spațiu exterior în care să aruncați orice fără posibilitatea de a-l recupera (oricât de mult ar încerca băieții de la NASA).

Dar dacă am deja comenzi precum rm, de ce vreau ceva nou pe care să-l șterg?

Deoarece modul în care funcționează ambele „găuri negre” este complet diferit: cum ați merge la suprascrierea ieșirii standard a unei erori într-o comandă într-un script shell în timpul rulării? Aici intervine / dev / null.

Să vedem cu un exemplu.

Am creat un fișier numit teste care conține șirul „Hello World”. Dacă dorim să reprezentăm conținutul acelui fișier pe linia de comandă, am putea face acest lucru în felul următor:

utilizator @ laptop: ~ $ test cat
Salut Lume

Dacă fișierul nu a existat sau a fost numit ca teste (cu un „s” la final), am primi următoarea eroare în consolă:

utilizator @ laptop: ~ $ teste pentru pisici
cat: tests: Fișierul sau directorul nu există

Ce am putea face pentru a evita mesajul de eroare? Ei bine, pur și simplu redirecționați ieșirea comenzii, în caz de eroare, la un „gunoi”, adică la / dev / null

Cum specificăm să fie în caz de eroare? Aici introduceți valorile standard de intrare, ieșire și eroare pentru un program: STDIN, STDOUT și STDERR (care pot fi substituite cu 0, 1 și respectiv 2). În acest fel, dacă punem ...

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

… Vom vedea că mesajul de eroare nu va fi produs pe consolă.

Trebuie să fii atent, deoarece sintaxa este esențială: între caracterele 2 și> nu ar trebui să existe spațiu. În caz contrar, ar da următoarele:

utilizator @ laptop: ~ $ cat tests 2> / dev / null
cat: tests: Fișierul sau directorul nu există
cat: 2: Fișierul sau directorul nu există

În schimb, un spațiu între> și / dev / null nu va afecta negativ rezultatul.

De asemenea, am putea utiliza redirecționarea erorilor, de exemplu, pentru a captura erori într-un fișier jurnal după cum urmează:

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

Un alt caz interesant ar fi colectarea rezultatelor într-un alt fișier, atâta timp cât nu apare o eroare, pentru care am pune:

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

În cele din urmă, merită să puneți expresia «> / dev / null 2> & 1» în care sunt combinate ieșirea standard și ieșirea de eroare, redirecționându-le astfel încât în ​​niciun caz să nu se obțină informațiile de ieșire.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Guido Ignatius Ignatius el a spus

    Ah, dar lipsește unul dintre cele mai utilizate utilitare pe care le are / dev / null, care este golirea fișierelor: $ cat / dev / null> file.log În acest fel, fișierul file.log va fi gol. Adaugă-l!

    1.    Edward H. el a spus

      Tocmai explicația pe care o căuta.
      Susțin moțiunea de a o adăuga =)

      Salutări!

  2.   Pablo el a spus

    Buna ziua, in primul rand articolul este foarte bun! al doilea aș vrea să contribui cu ceva cu acest link pe această temă job cron în php de la Cpanel si a treia felicitare pentru blog!

  3.   Pablo el a spus

    Frumos articol despre dev / null, ce păcat cred că am comentat din greșeală în locul greșit înainte! imi cer scuze

  4.   anonim el a spus

    bună contribuție mulțumiri

  5.   tricouri el a spus

    Salutări, am un atac nul. Folosesc andrirc și primesc un privat din porecla mea cu cuvântul Null. 2 secunde mai târziu, programul se închide. Am citit și din ceea ce văd acest lucru poate fi făcut doar de Shell, nu de cineva extern. Am încercat să mă ignor / ignor -lrpcntikd și nimic nu mă surprinde că comanda continuă să vină. Dacă aveți vreo modalitate de a încerca să o blocați, aș aprecia. Noroc

  6.   Sofia martinez el a spus

    Ce se întâmplă dacă la executarea propoziției simbolul> nu este plasat?

    Ar putea cineva să mă ghideze, te rog?

  7.   Zero el a spus

    Bună dimineața, am instalat Debian netinst în ACER Extensa 5620Z – 32 biți.Odată ce instalarea de pe USB este terminată și pendrive-ul este scos astfel încât să pornească de pe hard disk (nu reinstalați din pen) dar în momentul pornirii sistemul ea ma intreaba:
    autentificare debian: xxxxxxxx (ok)
    Parola: xxxxxxxx (ok)
    nil@debian:~$ ???? Ce este asta? Ce ar trebui sa pun acolo?

    Fără această comandă nu pot continua cu pornirea sistemului.
    Ma poti ajuta? Nu știu cum ar trebui să continui.
    Mulțumesc foarte mult. Salutări calde.