Správa súborov

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

Čo je / dev / null a ako ho používať
Linux je zaujímavý operačný systém, ktorý hostí niekoľko virtuálnych zariadení na rôzne účely. Pokiaľ ide o programy spustené v systéme, tieto virtuálne zariadenia fungujú, akoby išlo o skutočné súbory. Nástroje môžu požadovať a načítať údaje z týchto zdrojov. Dáta generuje OS namiesto ich načítania z disku.

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 = of = / dev / null status = progress bs = 1M iflag = direct

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!

Hry Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 vydané minulý mesiac, je šiestym vývojovým vydaním v 1.13.séria x a prináša množstvo vylepšení, najmä používateľského rozhra...
Hry Ako nainštalovať League Of Legends na Ubuntu 14.04
Ako nainštalovať League Of Legends na Ubuntu 14.04
Ak ste fanúšikom League of Legends, potom je to pre vás príležitosť otestovať spustenie League of Legends. Upozorňujeme, že program PlayOnLinux podpor...
Hry Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
OpenRA je herný engine Libre / Free Real Time Strategy, ktorý obnovuje rané hry z Westwoodu, ako napríklad klasické Command & Conquer: Red Alert. Dist...