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. |
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.
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!
Tocmai explicația pe care o căuta.
Susțin moțiunea de a o adăuga =)
Salutări!
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!
Frumos articol despre dev / null, ce păcat cred că am comentat din greșeală în locul greșit înainte! imi cer scuze
bună contribuție mulțumiri
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
Ce se întâmplă dacă la executarea propoziției simbolul> nu este plasat?
Ar putea cineva să mă ghideze, te rog?
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.