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!