Linux este un sistem de operare interesant care găzduiește câteva dispozitive virtuale pentru numeroase scopuri. În ceea ce privește programele care rulează în sistem, aceste dispozitive virtuale se comportă ca și cum ar fi fișiere reale. Instrumentele pot solicita și alimenta date din aceste surse. Datele sunt generate de sistemul de operare în loc să le citească de pe un disc.

Un astfel de exemplu este /dev/null. Este un fișier special care este prezent în fiecare sistem Linux. Cu toate acestea, spre deosebire de majoritatea celorlalte fișiere virtuale, în loc să citească, este folosit pentru a scrie. Tot ceea ce scrieți în /dev/null va fi aruncat, uitat în vid. Este cunoscut sub numele de dispozitiv null într-un sistem UNIX.

De ce ați vrea să aruncați ceva în vid? Să verificăm ce este /dev/null și utilizarea sa.

Precondiții

Înainte de a ne scufunda adânc în utilizarea lui /dev/null, trebuie să avem o înțelegere clară a fluxului de date stdout și stderr. Consultați acest ghid aprofundat despre stdin, stderr și stdout.

Să facem o scurtă reîmprospătare. Ori de câte ori este rulat orice utilitar de linie de comandă, acesta generează două ieșiri. Ieșirea merge în stdout, iar eroarea (dacă este generată) merge în stderr. În mod implicit, aceste două fluxuri de date sunt asociate cu terminalul.

De exemplu, următoarea comandă va imprima șirul de caractere din interiorul ghilimelelor duble. Aici, ieșirea este stocată în stdout.

$ echo „Hello World”

Comenda următoare ne va arăta starea de ieșire a comenzii executate anterior.

$ echo $?

Cum comanda anterioară s-a executat cu succes, starea de ieșire este 0. În caz contrar, starea de ieșire va fi diferită. Ce se întâmplă atunci când încercați să executați o comandă invalidă?

$ adfadsf
$ echo $?

Acum, trebuie să știm despre descriptorul de fișier. În ecosistemul UNIX, acestea sunt valori întregi atribuite unui fișier. Atât stdout (descriptor de fișier = 1), cât și stderr (descriptor de fișier = 2) au un descriptor de fișier specific. Folosind descriptorul de fișier (1 și 2 în această situație), putem redirecționa stdout și stderr către alte fișiere.

Pentru început, următorul exemplu va redirecționa stdout al comenzii echo către un fișier text. Aici, nu am specificat descriptorul de fișier. Dacă nu este specificat, bash va folosi implicit stdout.

$ echo „Hello World” > log.txt

Comenda următoare va redirecționa stderr către un fișier text.

$ asdfadsa 2> error.txt

Utilizarea /dev/null

Redirecționarea ieșirii către /dev/null

Acum, suntem gata să învățăm cum să folosim /dev/null. Mai întâi, să verificăm cum să filtrăm ieșirea normală și de eroare. În următoarea comandă, grep va încerca să caute un șir de caractere (hello, în acest caz) în directorul „/sys”.

$ grep -r hello /sys/

Cu toate acestea, va genera o mulțime de erori, deoarece fără privilegii de root, grep nu poate accesa o serie de fișiere. În acest caz, va genera erori de tip „Permission denied”. Acum, folosind redirecționarea, putem obține o ieșire mai clară.

$ grep -r hello /sys/ 2> /dev/null

Lovitura arată mult mai bine, nu-i așa? Nimic! În acest caz, grep nu are acces la o mulțime de fișiere, iar cele care sunt accesibile nu au șirul „hello”.

În exemplul următor, vom face ping la Google.

$ ping google.com

Dar, nu vrem să vedem toate aceste rezultate de ping reușite. În schimb, dorim să ne concentrăm doar pe erorile în care ping nu a putut ajunge la Google. Cum facem acest lucru?

$ ping google.com 1> /dev/null

Aici, conținutul stdout este descărcat în /dev/null, lăsând doar erorile.

Redirecționați toată ieșirea în /dev/null

În anumite situații, ieșirea poate să nu fie deloc utilă. Folosind redirecționarea, putem arunca toată ieșirea în void.

$ grep -r hello /sys/ > /dev/null 2>&1

Să rupem puțin această comandă. În primul rând, aruncăm toate stdout-urile în /dev/null. Apoi, în a doua parte, îi spunem lui bash să trimită stderr la stdout. În acest exemplu, nu este nimic de ieșit. Totuși, dacă sunteți confuz, puteți oricând să verificați dacă comanda a rulat cu succes.

$ echo $?

Valoarea este 2 deoarece comanda a generat o mulțime de erori.

Dacă aveți tendința de a uita descriptorul de fișier al stdout și stderr, următoarea comandă se va descurca foarte bine. Este un format mai generalizat al comenzii anterioare. Atât stdout cât și stderr vor fi redirecționate către /dev/null.

$ grep -r hello /sys/ &> /dev/null

Alte exemple

Acesta este unul interesant. Vă amintiți de instrumentul dd? Este un instrument puternic pentru convertirea și copierea fișierelor. Aflați mai multe despre dd. Folosind dd, putem testa viteza de citire secvențială a discului dumneavoastră. Bineînțeles, nu este o măsurătoare precisă. Cu toate acestea, pentru un test rapid, este destul de utilă.

$ dd if=<big_file> of=/dev/null status=progress bs=1M iflag=direct

Aici, am folosit Ubuntu 18.04.4 ISO ca fișier mare.

În mod similar, puteți testa, de asemenea, viteza de descărcare a conexiunii dvs. de internet.

$ wget -O /dev/null <big_file_link>

Gânduri finale

Sperăm că aveți o înțelegere clară a ceea ce este acest fișier /dev/null. Este un dispozitiv special care, dacă este scris în el, aruncă, iar dacă este citit, citește null. Adevăratul potențial al acestei caracteristici interesante se află în scripturi bash interesante.

Sunteți interesat de scripturile bash? Consultați Ghidul începătorului de scripting bash.

Distracție plăcută!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.