Tak primer je / dev / null. To je posebna datoteka, ki je prisotna v vsakem sistemu Linux. Vendar se za razliko od večine drugih navideznih datotek namesto branja uporablja za pisanje. Karkoli napišete v / dev / null, bo zavrženo in pozabljeno v prazno. V sistemu UNIX je znana kot nična naprava.
Zakaj bi želeli nekaj zavreči v prazno?? Preverimo, kaj je / dev / null in njegova uporaba.
Pogoji
Preden se poglobimo v uporabo / dev / null, moramo jasno razumeti stdout in stderr podatkovni tok. Oglejte si ta poglobljeni vodnik naprej stdin, stderr, in stdout.
Na hitro se osvežimo. Kadar koli se zažene kateri koli pripomoček ukazne vrstice, ustvari dva izhoda. Izhod gre v stdout in napaka (če je ustvarjena) gre na stderr. Privzeto sta oba toka podatkov povezana s terminalom.
Na primer, naslednji ukaz bo natisnil niz z dvojnimi narekovaji. Tu je izhod shranjen v stdout.
$ echo "Hello World"
Naslednji ukaz nam bo pokazal stanje izhoda predhodno zagnanega ukaza.
$ echo $?
Ker se je prejšnji ukaz uspešno zagnal, je stanje izhoda 0. V nasprotnem primeru bo stanje izstopa drugačno. Kaj se zgodi, ko poskusite zagnati neveljaven ukaz?
$ adfadsf$ echo $?
Zdaj moramo vedeti o deskriptorju datoteke. V ekosistemu UNIX so to celoštevilčne vrednosti, dodeljene datoteki. Oboje stdout (deskriptor datoteke = 1) in stderr (deskriptor datoteke = 2) ima določen deskriptor datoteke. Z deskriptorjem datoteke (v tem primeru 1 in 2) lahko preusmerimo datoteko stdout in stderr v druge datoteke.
Za začetek bo naslednji primer preusmeril datoteko stdout ukaza echo v besedilno datoteko. Tu nismo podali deskriptorja datoteke. Če ni določeno, bo uporabil bash stdout privzeto.
$ echo “Hello World”> log.txt
Naslednji ukaz bo preusmeril datoteko stderr v besedilno datoteko.
$ asdfadsa 2> napaka.txt
Uporaba / dev / null
Preusmeritev izhoda v / dev / null
Zdaj smo se pripravljeni naučiti, kako uporabljati / dev / null. Najprej preverimo, kako filtrirati običajni izhod in napake. V naslednjem ukazu bo grep poskusil poiskati niz (v tem primeru zdravo) v imeniku “/ sys”.
$ grep -r zdravo / sys /
Vendar bo povzročilo veliko napak, saj brez korenskega privilegija grep ne more dostopati do številnih datotek. V takem primeru bo prišlo do napak »Dovoljenje zavrnjeno«. Zdaj lahko s preusmeritvijo dobimo jasnejši izhod.
$ grep -r hello / sys / 2> / dev / null
Izhod je videti veliko boljši, kajne? Nič! V tem primeru grep nima dostopa do veliko datotek, tiste, ki so dostopne, pa nimajo niza "zdravo".
V naslednjem primeru bomo pingali Google.
$ ping google.com
Vendar ne želimo videti vseh teh uspešnih rezultatov pinga. Namesto tega se želimo osredotočiti le na napake, ko ping ni mogel doseči Googla. Kako to naredimo?
$ ping google.com 1> / dev / null
Tukaj je vsebina stdout se odvržejo v / dev / null, pri čemer ostanejo samo napake.
Ves izhod preusmerite v / dev / null
V nekaterih primerih izhod morda sploh ne bo koristen. Z uporabo preusmeritve lahko izpisujemo ves izhod v praznino.
$ grep -r hello / sys /> / dev / null 2> & 1
Malo prekinimo ta ukaz. Najprej odvržemo vse stdout v / dev / null. Nato v drugem delu pravimo bashu, naj pošlje stderr do stdout. V tem primeru ni ničesar za izpis. Če ste zmedeni, lahko vedno preverite, ali se je ukaz uspešno zagnal.
$ echo $?
Vrednost je 2, ker je ukaz ustvaril veliko napak.
Če ponavadi pozabite deskriptor datoteke stdout in stderr, naslednji ukaz se bo dobro znašel. To je bolj splošen format prejšnjega ukaza. Oboje stdout in stderr bo preusmerjen na / dev / null.
$ grep -r hello / sys / &> / dev / null
Drugi primeri
To je zanimivo. Ne pozabite na orodje dd? Je močno orodje za pretvorbo in kopiranje datotek. Več o dd. Z uporabo dd lahko preizkusimo zaporedno hitrost branja vašega diska. Seveda to ni natančna meritev. Za hiter test pa je zelo koristen.
$ dd, če =
Tukaj sem uporabil Ubuntu 18.04.4 ISO kot velika datoteka.
Podobno lahko preizkusite tudi hitrost prenosa internetne povezave.
$ wget -O / dev / null
Zadnje misli
Upajmo, da jasno razumete, kaj je ta datoteka / dev / null. To je posebna naprava, ki jo, če ji piše, zavrže in če jo bere iz nje, prebere nič. Resnični potencial te zanimive funkcije je v zanimivih bash skriptih.
Vas zanima bash skript? Oglejte si začetniški vodnik za bash skript.
Uživajte!