Čo je /dev /null a ako ho používať

What Is Dev Null How Use It



Linux je zaujímavý operačný systém, ktorý hostí niektoré virtuálne zariadenia na množstvo účelov. Pokiaľ ide o programy spustené v systéme, tieto virtuálne zariadenia fungujú ako skutočné súbory. Nástroje môžu z týchto zdrojov požadovať a odosielať údaje. Údaje generuje operačný systém namiesto ich čítania z disku.

Jeden taký príklad je /dev /null. Je to špeciálny súbor, ktorý je prítomný v každom jednom systéme Linux. Na rozdiel od väčšiny ostatných virtuálnych súborov sa však namiesto čítania používa na písanie. Čokoľvek napíšete do /dev /null, bude zahodené, zabudnuté do prázdna. V systéme UNIX je známy ako nulové zariadenie.







Prečo by ste chceli niečo odhodiť do prázdna? Pozrime sa, čo je /dev /null a ako sa používa.



Predpoklady

Predtým, ako sa ponoríme hlboko do používania /dev /null, musíme jasne pochopiť stdout a stderr dátový tok. Pozrite sa na toto hĺbkový sprievodca na stdin , stderr a stdout .



Poďme sa rýchlo obnoviť. Pri každom spustení obslužného programu príkazového riadka generuje dva výstupy. Výstup ide do stdout a chyba (ak je vygenerovaná) prejde na stderr . V predvolenom nastavení sú oba tieto dátové toky priradené k terminálu.





Nasledujúci príkaz napríklad vytlačí reťazec v dvojitých úvodzovkách. Tu je výstup uložený v stdout .

$zahodilAhoj Svet



Nasledujúci príkaz nám ukáže stav ukončenia predtým spusteného príkazu.

$zahodil $?

Pretože predchádzajúci príkaz prebehol úspešne, stav ukončenia je 0. V opačnom prípade bude stav ukončenia odlišný. Čo sa stane, keď sa pokúsite spustiť neplatný príkaz?

$ adfadsf
$zahodil $?

Teraz musíme vedieť o deskriptore súborov. V ekosystéme UNIX sú to celočíselné hodnoty priradené súboru. Obaja stdout (deskriptor súboru = 1) a stderr (deskriptor súboru = 2) majú konkrétny deskriptor súboru. Pomocou deskriptora súboru (1 a 2 v tejto situácii) môžeme presmerovať súbor stdout a stderr do iných súborov.

Na začiatok nasledujúci príklad presmeruje súbor stdout príkazu echo do textového súboru. Tu sme neuviedli deskriptor súboru. Ak nie je zadané, použije bash stdout predvolene.

$zahodilAhoj Svet>log.txt

Nasledujúci príkaz presmeruje súbor stderr do textového súboru.

$asdfadsa2>error.txt

Použitie /dev /null

Presmerovanie výstupu na /dev /null

Teraz sme pripravení naučiť sa používať /dev /null. Najprv sa pozrime na to, ako filtrovať normálny výstup a chyby. V nasledujúcom príkaze sa grep pokúsi vyhľadať reťazec (v tomto prípade ahoj) v adresári /sys.

$uchopenie -rAhoj/sys/

Bude však generovať veľa chýb, pretože bez oprávnení root nemá grep prístup k viacerým súborom. V takom prípade to bude mať za následok odmietnutie chyby povolenia. Teraz pomocou presmerovania môžeme získať jasnejší výstup.

$uchopenie -rAhoj/sys/ 2> /dev/nulový

Výstup vyzerá oveľa lepšie, nie? Nič! V tomto prípade grep nemá prístup k mnohým súborom a prístupné súbory nemajú reťazec ahoj.

V nasledujúcom príklade použijeme príkaz ping na server Google.

$pingGoogle com

Nechceme však vidieť všetky tieto úspešné výsledky ping. Namiesto toho sa chceme zamerať iba na chyby, keď sa príkazu ping nepodarilo dostať na server Google. Ako to urobíme?

$pingGoogle com1> /dev/nulový

Tu je obsah stdout sú uložené na /dev /null, pričom zostanú iba chyby.

Presmerujte všetok výstup na /dev /null

V určitých situáciách nemusí byť výstup vôbec užitočný. Pomocou presmerovania môžeme všetok výstup vyhodiť do prázdna.

$uchopenie -rAhoj/sys/ > /dev/nulový2> &1

Poďme tento príkaz trochu prelomiť. Najprv všetko vyhodíme stdout na /dev /null. Potom, v druhej časti, povieme bash, aby ho poslal stderr do stdout . V tomto prípade nie je čo vytvárať. Ak ste však zmätení, môžete vždy skontrolovať, či bol príkaz úspešne spustený.

$zahodil $?

Hodnota je 2, pretože príkaz generoval veľa chýb.

Ak máte tendenciu zabúdať na deskriptor súboru stdout a stderr , nasledujúci príkaz bude fungovať dobre. Je to všeobecnejší formát predchádzajúceho príkazu. Obaja stdout a stderr bude presmerovaný na /dev /null.

$uchopenie -rAhoj/sys/ &> /dev/nulový

Ďalšie príklady

Toto je zaujímavé. Pamätáte si nástroj dd? Je to účinný nástroj na konverziu a kopírovanie súborov. Získajte viac informácií o dd. Pomocou dd môžeme otestovať rýchlosť sekvenčného čítania vášho disku. Nejde samozrejme o presné meranie. Na rýchly test je to však veľmi užitočné.

$dd keby=<veľký_súbor> z=/dev/nulovýpostavenie= pokrokbs= 1 miliflag= priamy

Tu som použil Ubuntu 18.04.4 ISO ako veľký súbor.

Podobne si môžete vyskúšať aj rýchlosť sťahovania vášho internetového pripojenia.

$wget -ALEBO /dev/nulový<veľký_súbor_odkaz>

Záverečné myšlienky

Dúfajme, že dobre rozumiete tomu, čo je tento súbor /dev /null. Je to špeciálne zariadenie, ktoré, ak je doň zapísané, zahodí a ak sa z neho číta, číta null. Skutočný potenciál tejto zaujímavej funkcie je v zaujímavých bash skriptoch.

Máte záujem o bash skriptovanie? Odhlásiť sa príručka pre začiatočníkov k bash skriptovaniu .

Užite si to!