Jedním z takových příkladů je / dev / null. Je to speciální soubor, který je přítomen v každém systému Linux. Na rozdíl od většiny ostatních virtuálních souborů se však místo čtení používá k zápisu. Cokoli napíšete do / dev / null, bude zahozeno, zapomenuto do prázdna. Je znám jako nulové zařízení v systému UNIX.
Proč byste chtěli něco zahodit do prázdna? Podívejme se, co je / dev / null a jeho použití.
Předpoklady
Než se ponoříme hluboko do používání / dev / null, musíme mít jasný přehled o stdout a stderr datový tok. Podívejte se na tento podrobný průvodce na stdin, stderr, a stdout.
Pojďme se rychle občerstvit. Kdykoli je spuštěn libovolný obslužný program příkazového řádku, generuje dva výstupy. Výstup jde do stdout a chyba (je-li generována) přejde na stderr. Ve výchozím nastavení jsou oba tyto datové toky přidruženy k terminálu.
Například následující příkaz vytiskne řetězec v uvozovkách. Zde je výstup uložen v stdout.
$ echo „Hello World“
Následující příkaz nám ukáže stav ukončení dříve spuštěného příkazu.
$ echo $?
Protože předchozí příkaz proběhl úspěšně, stav ukončení je 0. V opačném případě bude stav ukončení jiný. Co se stane, když se pokusíte spustit neplatný příkaz?
$ adfadsf$ echo $?
Nyní potřebujeme vědět o deskriptoru souboru. V ekosystému UNIX se jedná o celočíselné hodnoty přiřazené souboru. Oba stdout (deskriptor souboru = 1) a stderr (deskriptor souboru = 2) mají konkrétní deskriptor souboru. Pomocí deskriptoru souboru (v této situaci 1 a 2) můžeme přesměrovat stdout a stderr do jiných souborů.
Následující příklad bude pro začátek přesměrovávat stdout příkazu echo do textového souboru. Zde jsme neurčili deskriptor souboru. Pokud není uvedeno, použije bash stdout ve výchozím stavu.
$ echo „Hello World“> přihlášení.txt
Následující příkaz přesměruje stderr do textového souboru.
$ asdfadsa 2> chyba.txt
Pomocí / dev / null
Přesměrování výstupu na / dev / null
Nyní jsme připraveni naučit se používat / dev / null. Nejprve se podívejme, jak filtrovat normální výstup a chyby. V následujícím příkazu se grep pokusí vyhledat řetězec (v tomto případě ahoj) v adresáři „/ sys“.
$ grep -r ahoj / sys /
Bude však generovat spoustu chyb, protože bez oprávnění root nemá grep přístup k řadě souborů. V takovém případě to bude mít za následek chyby „Oprávnění odepřeno“. Nyní pomocí přesměrování můžeme získat jasnější výstup.
$ grep -r ahoj / sys / 2> / dev / null
Výstup vypadá mnohem lépe, správně? Nic! V tomto případě nemá grep přístup k mnoha souborům a ty, které jsou přístupné, nemají řetězec „ahoj“.
V následujícím příkladu budeme pingovat na Google.
$ ping google.com
Nechceme však vidět všechny ty úspěšné výsledky ping. Místo toho se chceme zaměřit pouze na chyby, když se ping nemohl dostat na Google. Jak to uděláme?
$ ping google.com 1> / dev / null
Zde je obsah stdout jsou vypsány na / dev / null a zůstávají pouze chyby.
Přesměrujte veškerý výstup na / dev / null
V určitých situacích nemusí být výstup vůbec užitečný. Pomocí přesměrování můžeme vypsat veškerý výstup do prázdna.
$ grep -r ahoj / sys /> / dev / null 2> & 1
Pojďme tento příkaz trochu prolomit. Nejprve vysypeme všechny stdout do / dev / null. Potom ve druhé části říkáme bash, aby poslal stderr na stdout. V tomto příkladu není nic k výstupu. Pokud jste však zmatení, můžete vždy zkontrolovat, zda byl příkaz úspěšně spuštěn.
$ echo $?
Hodnota je 2, protože příkaz vygeneroval spoustu chyb.
Pokud máte tendenci zapomínat deskriptor souboru stdout a stderr, následující příkaz bude v pořádku. Je to obecnější formát předchozího příkazu. Oba stdout a stderr bude přesměrován na / dev / null.
$ grep -r ahoj / sys / &> / dev / null
Další příklady
To je zajímavý. Pamatujte si nástroj dd? Je to mocný nástroj pro převod a kopírování souborů. Další informace o dd. Pomocí dd můžeme otestovat rychlost sekvenčního čtení vašeho disku. Samozřejmě to není přesné měření. Pro rychlý test je to ale docela užitečné.
$ dd pokud =
Zde jsem použil Ubuntu 18.04.4 ISO jako velký soubor.
Podobně můžete také otestovat rychlost stahování vašeho připojení k internetu.
$ wget -O / dev / null
Závěrečné myšlenky
Doufejme, že máte jasnou představu o tom, co je tento soubor / dev / null. Je to speciální zařízení, které, pokud je na něj zapsáno, zahodí a při čtení z čte null. Skutečný potenciál této zajímavé funkce je v zajímavých bash skriptech.
Máte zájem o skriptování bash? Podívejte se na průvodce pro začátečníky skriptováním bash.
Užívat si!