Što je /dev /null i kako ga koristiti

What Is Dev Null How Use It

Linux je zanimljiv operativni sustav koji ugošćuje neke virtualne uređaje u brojne svrhe. Što se tiče programa koji se izvode u sustavu, ti se virtualni uređaji ponašaju kao da su stvarne datoteke. Alati mogu zahtijevati i hraniti podatke iz ovih izvora. Podatke generira OS umjesto da ih čita s diska.

Jedan takav primjer je /dev /null. To je posebna datoteka koja je prisutna u svakom pojedinom Linux sustavu. Međutim, za razliku od većine drugih virtualnih datoteka, umjesto čitanja, koristi se za pisanje. Sve što napišete /dev /null bit će odbačeno, zaboravljeno u prazninu. Poznat je kao nulti uređaj u UNIX sustavu.



Zašto biste htjeli nešto odbaciti u prazninu? Provjerimo što je /dev /null i njegova upotreba.



Preduvjeti

Prije nego što duboko zaronimo u upotrebu /dev /null, moramo jasno razumjeti stdout i stderr tok podataka. Pogledajte ovo dubinski vodič uključen stdin , stderr , i stdout .



Hajdemo se brzo osvježiti. Kad god se pokrene bilo koji pomoćni program naredbenog retka, on generira dva izlaza. Izlaz ide na stdout a pogreška (ako je generirana) ide na stderr . Prema zadanim postavkama oba su toka podataka povezana s terminalom.

Na primjer, sljedeća naredba ispisat će niz unutar dvostrukog navodnika. Ovdje je izlaz pohranjen u stdout .

$izbacitiPozdrav svijete



Sljedeća naredba pokazat će nam izlazni status prethodno pokrenute naredbe.

$izbaciti $?

Kako je prethodna naredba uspješno pokrenuta, status izlaza je 0. Inače će status izlaza biti drugačiji. Što se događa kada pokušate pokrenuti nevažeću naredbu?

$ adfadsf
$izbaciti $?

Sada moramo znati o deskriptoru datoteke. U UNIX ekosustavu to su cjelobrojne vrijednosti dodijeljene datoteci. Oba stdout (deskriptor datoteke = 1) i stderr (deskriptor datoteke = 2) imaju određeni deskriptor datoteke. Pomoću deskriptora datoteke (1 i 2 u ovoj situaciji) možemo preusmjeriti datoteku stdout i stderr u druge datoteke.

Za početak, sljedeći primjer preusmjerit će stdout naredbe echo u tekstualnu datoteku. Ovdje nismo naveli deskriptor datoteke. Ako nije navedeno, koristit će bash stdout prema zadanim postavkama.

$izbacitiPozdrav svijete>log.txt

Sljedeća naredba preusmjerit će stderr u tekstualnu datoteku.

$asdfadsa2>error.txt

Upotreba /dev /null

Preusmjeravanje izlaza na /dev /null

Sada smo spremni naučiti koristiti /dev /null. Prvo, provjerimo kako filtrirati normalne izlaze i pogreške. U sljedećoj naredbi grep će pokušati potražiti niz (u ovom slučaju zdravo) u direktoriju /sys.

$zahvat -rzdravo/sys/

Međutim, generirat će puno pogrešaka jer bez privilegija korijena grep ne može pristupiti brojnim datotekama. U tom će slučaju rezultirati pogreškama u odbijanju dopuštenja. Sada, koristeći preusmjeravanje, možemo dobiti jasniji izlaz.

$zahvat -rzdravo/sys/ 2> /dev/null

Izlaz izgleda puno bolje, zar ne? Ništa! U ovom slučaju, grep nema pristup velikom broju datoteka, a one koje su dostupne nemaju niz hello.

U sljedećem primjeru pingat ćemo Google.

$pingGoogle com

Međutim, ne želimo vidjeti sve te uspješne ping rezultate. Umjesto toga, želimo se usredotočiti samo na pogreške kada ping nije mogao doći do Googlea. Kako to učiniti?

$pingGoogle com1> /dev/null

Ovdje je sadržaj stdout se izbacuju u /dev /null, ostavljajući samo pogreške.

Preusmjeri sav izlaz na /dev /null

U određenim situacijama izlaz možda uopće neće biti koristan. Koristeći preusmjeravanje, možemo sve podatke izbaciti u prazninu.

$zahvat -rzdravo/sys/ > /dev/null2> &1

Prekinimo malo ovu naredbu. Prvo, bacamo sve stdout u /dev /null. Zatim, u drugom dijelu, kažemo bashu da pošalje stderr do stdout . U ovom primjeru nema ništa za ispisati. Međutim, ako ste zbunjeni, uvijek možete provjeriti je li naredba uspješno pokrenuta.

$izbaciti $?

Vrijednost je 2 jer je naredba generirala mnogo pogrešaka.

Ako ste skloni zaboraviti opis datoteke datoteke stdout i stderr , sljedeća naredba će biti sasvim u redu. To je općenitiji format prethodne naredbe. Oba stdout i stderr bit će preusmjeren na /dev /null.

$zahvat -rzdravo/sys/ &> /dev/null

Drugi primjeri

Ovo je zanimljivo. Sjećate li se dd alata? To je moćan alat za pretvaranje i kopiranje datoteka. Saznajte više o dd -u. Pomoću dd -a možemo testirati brzinu uzastopnog čitanja vašeg diska. Naravno, to nije točno mjerenje. Međutim, za brzi test, to je prilično korisno.

$dd ako=<velika_datoteka> od=/dev/nullstatus= napredakbs= 1Miflag= izravno

Ovdje sam koristio Ubuntu 18.04.4 ISO kao veliku datoteku.

Slično, možete isprobati i brzinu preuzimanja internetske veze.

$wget -ILI /dev/null<velika_veza_datoteke>

Završne misli

Nadamo se da imate jasno razumijevanje što je ova /dev /null datoteka. To je poseban uređaj koji, ako se na njega napiše, odbacuje, a ako se čita, čita null. Pravi potencijal ove zanimljive značajke je u zanimljivim bash skriptama.

Jeste li zainteresirani za bash skripte? Provjeri vodič za početnike za bash skriptiranje .

Uživati!