Jedným z takýchto príkladov je / dev / null. Je to špeciálny súbor, ktorý je prítomný v každom systéme Linux. Na rozdiel od väčšiny ostatných virtuálnych súborov sa však namiesto čítania používa na zápis. Čokoľvek napíšete do / dev / null bude zahodené, zabudnuté do prázdna. Je známe ako nulové zariadenie v systéme UNIX.
Prečo by ste chceli niečo zahodiť do prázdna? Poďme sa pozrieť, čo je / dev / null a jeho použitie.
Predpoklady
Pred hlbokým ponorením do používania / dev / null musíme jasne pochopiť stdout a stderr dátový tok. Pozrite sa na tohto podrobného sprievodcu stdin, stderr, a stdout.
Poďme sa rýchlo občerstviť. Kedykoľvek je spustený akýkoľvek obslužný program príkazového riadku, generuje dva výstupy. Výstup ide do stdout a chyba (ak je vygenerovaná) ide do stderr. V predvolenom nastavení sú oba tieto dátové toky spojené s terminálom.
Napríklad nasledujúci príkaz vytlačí reťazec v dvojitých úvodzovkách. Tu je výstup uložený v stdout.
$ echo „Hello World“
Nasledujúci príkaz nám ukáže stav ukončenia predtým spusteného príkazu.
$ echo $?
Pretože predchádzajúci príkaz sa úspešne spustil, stav ukončenia je 0. V opačnom prípade bude stav ukončenia iný. Čo sa stane, keď sa pokúsite spustiť neplatný príkaz?
$ adfadsf$ echo $?
Teraz potrebujeme vedieť o deskriptore súboru. V ekosystéme UNIX sú to celočíselné hodnoty priradené súboru. Oboje stdout (deskriptor súboru = 1) a stderr (deskriptor súboru = 2) majú konkrétny deskriptor súborov. Pomocou deskriptora súborov (v tejto situácii 1 a 2) môžeme presmerovať stdout a stderr do iných súborov.
V nasledujúcom príklade bude pre začiatok presmerovaný znak stdout príkazu echo do textového súboru. Tu sme neurčili deskriptor súboru. Ak nie je uvedené, použije sa bash stdout predvolene.
$ echo „Hello World“> prihlásiť sa.TXT
Nasledujúci príkaz presmeruje stderr do textového súboru.
$ asdfadsa 2> chyba.TXT
Pomocou / dev / null
Presmerovanie výstupu na / dev / null
Teraz sme pripravení naučiť sa používať / dev / null. Najskôr sa pozrime, 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“.
$ grep -r ahoj / sys /
Bude to však generovať veľa chýb, pretože bez oprávnenia root nemá grep prístup k mnohým súborom. V takom prípade to bude mať za následok chyby „Povolenie zamietnuté“. Teraz pomocou presmerovania môžeme získať jasnejší výstup.
$ grep -r ahoj / sys / 2> / dev / null
Výstup vyzerá oveľa lepšie, že? Nič! V takom prípade nemá grep prístup k množstvu súborov a tie, ktoré sú prístupné, nemajú reťazec „ahoj“.
V nasledujúcom príklade budeme pingovať na Google.
$ ping google.com
Nechceme však vidieť všetky tie úspešné výsledky príkazu ping. Namiesto toho sa chceme zamerať iba na chyby, keď sa ping nemohol dostať ku Googlu. Ako to urobíme?
$ ping google.com 1> / dev / null
Tu je obsah stdout sú vyradené na / dev / null, zostávajú 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 vyradiť všetok výstup do prázdna.
$ grep -r ahoj / sys /> / dev / null 2> & 1
Poďme tento príkaz trochu prelomiť. Najskôr vyhodíme všetko stdout do / dev / null. Potom v druhej časti hovoríme bashe, aby poslal stderr do stdout. V tomto príklade nie je čo vydávať. Ak ste však zmätení, môžete kedykoľvek skontrolovať, či sa príkaz úspešne spustil.
$ echo $?
Hodnota je 2, pretože príkaz vygeneroval veľa chýb.
Ak máte tendenciu zabudnúť na deskriptor súborov stdout a stderr, nasledujúci príkaz bude v pohode. Je to všeobecnejší formát predchádzajúceho príkazu. Oboje stdout a stderr bude presmerovaný na / dev / null.
$ grep -r ahoj / sys / &> / dev / null
Ďalšie príklady
Toto je zaujímavý. Pamätajte si nástroj dd? Je to mocný nástroj na konverziu a kopírovanie súborov. Získajte viac informácií o dd. Pomocou dd môžeme otestovať postupnú rýchlosť čítania vášho disku. Nie je to samozrejme presné meranie. Pre rýchly test je to však celkom užitočné.
$ dd, ak =
Tu som použil Ubuntu 18.04.4 ISO ako veľký súbor.
Podobne môžete vyskúšať aj rýchlosť sťahovania vášho internetového pripojenia.
$ wget -O / dev / null
Záverečné myšlienky
Dúfajme, že máte jasnú predstavu o tom, čo je tento súbor / dev / null. Je to špeciálne zariadenie, ktoré, ak je doň zapísané, zahodí a pri načítaní z neho číta nulovú hodnotu. Skutočný potenciál tejto zaujímavej funkcie je v zaujímavých bash skriptoch.
Máte záujem o skriptovanie bash? Prečítajte si príručku pre začiatočníkov o skriptovaní bash.
Užite si to!