File Management

Ce este / dev / null și cum se folosește

Ce este / dev / null și cum se folosește
Linux este un sistem de operare interesant care găzduiește unele dispozitive virtuale în numeroase scopuri. În ceea ce privește programele care rulează în sistem, aceste dispozitive virtuale acționează 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. Orice scrieți în / dev / null va fi aruncat, uitat în gol. Este cunoscut sub numele de dispozitiv nul într-un sistem UNIX.

De ce ai vrea să arunci ceva în gol? Să verificăm ce este / dev / null și utilizarea acestuia.

Condiții prealabile

Înainte de a ne adânci în utilizarea / dev / null, trebuie să înțelegem clar stdout și stderr flux de date. Consultați acest ghid detaliat pe stdin, stderr, și stdout.

Să avem o reîmprospătare rapidă. Ori de câte ori este rulat un utilitar din linia de comandă, acesta generează două ieșiri. Ieșirea merge la stdout iar eroarea (dacă este generată) merge la stderr. În mod implicit, ambele fluxuri de date sunt asociate terminalului.

De exemplu, următoarea comandă va imprima șirul dintre ghilimele duble. Aici, ieșirea este stocată în stdout.

$ echo „Hello World”

Următoarea comandă ne va arăta starea de ieșire a comenzii executate anterior.

$ echo $?

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

$ adfadsf
$ echo $?

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

Pentru început, următorul exemplu va redirecționa fișierul stdout a comenzii ecou într-un fișier text. Aici, nu am specificat descriptorul fișierului. Dacă nu este specificat, bash va folosi stdout în mod implicit.

$ echo „Hello World”> jurnal.txt

Următoarea comandă va redirecționa fișierul stderr la un fișier text.

$ asdfadsa 2> eroare.txt

Folosind / dev / null

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

Acum suntem gata să învățăm cum să folosim / dev / null. În primul rând, să verificăm cum să filtrăm ieșirea normală și erorile. În următoarea comandă, grep va încerca să caute un șir (salut, în acest caz) în directorul „/ sys”.

$ grep -r salut / sys /

Cu toate acestea, va genera o mulțime de erori deoarece fără privilegiu de root, grep nu poate accesa mai multe fișiere. Într-un astfel de caz, va rezulta erori „Permisiune refuzată”. Acum, folosind redirecționarea, putem obține o ieșire mai clară.

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

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

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

$ ping google.com

Cu toate acestea, nu vrem să vedem toate acele rezultate de ping de succes. În schimb, dorim să ne concentrăm asupra erorilor numai atunci când ping-ul nu a putut ajunge la Google. Cum facem asta?

$ ping google.com 1> / dev / null

Aici, conținutul stdout sunt abandonate la / dev / null, lăsând doar erorile.

Redirecționați toate ieșirile către / dev / null

În anumite situații, rezultatul poate să nu fie deloc util. Folosind redirecționarea, putem arunca toate ieșirile în gol.

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

Să încălcăm puțin această comandă. În primul rând, vom arunca toate stdout la / dev / nul. Apoi, în a doua parte, îi spunem lui Bash să trimită stderr la stdout. În acest exemplu, nu este nimic de produs. Cu toate acestea, dacă sunteți confuz, puteți verifica oricând 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 fișierului de stdout și stderr, următoarea comandă va merge bine. Este un format mai generalizat al comenzii anterioare. Ambii stdout și stderr va fi redirecționat către / dev / null.

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

Alte exemple

Acesta este unul interesant. Amintiți-vă instrumentul dd? Este un instrument puternic pentru conversia și copierea fișierelor. Aflați mai multe despre dd. Folosind dd, putem testa viteza de citire secvențială a discului dvs. Desigur, nu este o măsurare precisă. Cu toate acestea, pentru un test rapid, este destul de util.

$ dd if = of = / dev / status nul = progres bs = 1M iflag = direct

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

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

$ wget -O / dev / null

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 pe acesta, se elimină și, dacă este citit, citește nul. Adevăratul potențial al acestei caracteristici interesante este în scripturile bash interesante.

Sunteți interesat de scripturi bash? Consultați ghidul pentru începători pentru scripturile bash.

Bucurați-vă!

Cele mai bune jocuri pentru a juca cu urmărirea manuală
Oculus Quest a introdus recent marea idee de urmărire manuală fără controlere. Cu un număr din ce în ce mai mare de jocuri și activități care execută ...
Cum se afișează suprapunerea OSD în aplicații și jocuri Linux pe ecran complet
Jucarea jocurilor pe ecran complet sau utilizarea aplicațiilor în modul ecran complet fără distragere vă poate elimina din informațiile relevante ale ...
Top 5 cărți de captură a jocului
Cu toții am văzut și ne-au plăcut jocurile de streaming pe YouTube. PewDiePie, Jakesepticye și Markiplier sunt doar câțiva dintre cei mai buni jucător...