En tak primer je /dev /null. To je posebna datoteka, ki je prisotna v vsakem sistemu Linux. Vendar se za razliko od večine drugih virtualnih datotek namesto za branje uporablja za pisanje. Karkoli napišete /dev /null, bo zavrženo in pozabljeno v prazno. V sistemu UNIX je znana kot ničelna naprava.
Zakaj bi želeli nekaj zavreči v prazno? Preverimo, kaj je /dev /null in njegova uporaba.
Predpogoji
Preden se poglobimo v uporabo /dev /null, moramo jasno razumeti stdout in stderr podatkovni tok. Preverite to poglobljen vodnik naprej stdin , stderr , in stdout .
Hitro se osvežimo. Kadar koli zaženete kateri koli pripomoček ukazne vrstice, ustvari dva izhoda. Izhod gre na stdout in napaka (če je ustvarjena) gre na stderr . Privzeto sta oba toka podatkov povezana s terminalom.
Na primer, naslednji ukaz bo natisnil niz v dvojnem narekovaju. Tu je izhod shranjen v stdout .
$vrgel venPozdravljen, svet
Naslednji ukaz nam bo pokazal stanje izhoda predhodno izvedenega ukaza.
$vrgel ven $?
Ker je prejšnji ukaz uspešno tekel, je stanje izhoda 0. V nasprotnem primeru bo stanje izhoda drugačno. Kaj se zgodi, ko poskusite zagnati neveljaven ukaz?
$ adfadsf$vrgel ven $?
Zdaj moramo vedeti o deskriptorju datotek. V ekosistemu UNIX so to celoštevilske vrednosti, dodeljene datoteki. Oboje stdout (deskriptor datoteke = 1) in stderr (opisnik datotek = 2) imajo poseben opisnik datotek. Z deskriptorjem datotek (v tem primeru 1 in 2) lahko preusmerimo datoteko stdout in stderr na druge datoteke.
Za začetek bo naslednji primer preusmeril datoteko stdout ukaza echo v besedilno datoteko. Tukaj nismo podali deskriptorja datotek. Če ni določeno, bo uporabil bash stdout privzeto.
$vrgel venPozdravljen, svet>log.txt
Naslednji ukaz bo preusmeril datoteko stderr v besedilno datoteko.
$asdfadsa2>error.txt
Uporaba /dev /null
Preusmeritev izhoda na /dev /null
Zdaj smo pripravljeni, da se naučimo uporabljati /dev /null. Najprej preverimo, kako filtrirati običajne izhode in napake. V naslednjem ukazu bo grep poskušal poiskati niz (v tem primeru zdravo) v imeniku /sys.
$oprijem -rzdravo/sys/
Vendar bo povzročilo veliko napak, saj brez korenskih pravic grep ne more dostopati do številnih datotek. V takem primeru bo prišlo do napak pri zavrnitvi dovoljenja. S pomočjo preusmeritve lahko dobimo jasnejši izhod.
$oprijem -rzdravo/sys/ 2> /dev/nič
Rezultat izgleda veliko bolje, kajne? Nič! V tem primeru grep nima dostopa do veliko datotek in tiste, ki so dostopne, nimajo niza hello.
V naslednjem primeru bomo pingali Google.
$pingGoogle com
Vendar ne želimo videti vseh teh uspešnih rezultatov pinga. Namesto tega se želimo osredotočiti le na napake, ko ping ne more doseči Googla. Kako to naredimo?
$pingGoogle com1> /dev/nič
Tukaj je vsebina stdout so dampirani v /dev /null, pri čemer ostanejo le napake.
Vse preusmerite na /dev /null
V nekaterih primerih izhod morda sploh ni uporaben. Z uporabo preusmeritve lahko izpustimo vse izhode v prazno.
$oprijem -rzdravo/sys/ > /dev/nič2> &1
Malce prekinimo ta ukaz. Najprej odvržemo vse stdout v /dev /null. Nato v drugem delu bashu rečemo, naj pošlje stderr do stdout . V tem primeru ni kaj izpisati. Če pa ste zmedeni, lahko vedno preverite, ali je ukaz uspešno zagnan.
$vrgel ven $?
Vrednost je 2, ker je ukaz ustvaril veliko napak.
Če ponavadi pozabite deskriptor datoteke datoteke stdout in stderr , naslednji ukaz bo v redu. To je bolj splošna oblika prejšnjega ukaza. Oboje stdout in stderr bo preusmerjen na /dev /null.
$oprijem -rzdravo/sys/ &> /dev/nič
Drugi primeri
To je zanimivo. Se spomnite orodja dd? To je močno orodje za pretvorbo in kopiranje datotek. Več o dd. S pomočjo dd lahko preizkusimo hitrost zaporednega branja vašega diska. Seveda to ni natančna meritev. Vendar je za hiter test zelo uporaben.
$dd če=<big_file> od=/dev/ničstanje= napredekbs= 1Miflag= neposredno
Tukaj sem kot veliko datoteko uporabil ISO Ubuntu 18.04.4.
Podobno lahko preizkusite tudi hitrost prenosa internetne povezave.
$wget -ALI /dev/nič<big_file_link>
Končne misli
Upajmo, da imate jasno razumevanje, kaj je ta /dev /null datoteka. To je posebna naprava, ki jo, če je zapisana, zavrže in če se bere, bere ničelno. Resnični potencial te zanimive funkcije je v zanimivih bash skriptah.
Vas zanima bash skript? Preveri vodnik za začetnike pri bash skriptiranju .
Uživajte!