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!