Správa souborů

Co je / dev / null a jak jej používat

Co je / dev / null a jak jej používat
Linux je zajímavý operační systém, který je hostitelem některých virtuálních zařízení pro různé účely. Pokud jde o programy spuštěné v systému, tato virtuální zařízení fungují, jako by to byly skutečné soubory. Nástroje mohou z těchto zdrojů požadovat a odesílat data. Data jsou generována operačním systémem namísto jejich čtení z disku.

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

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!

Jak používat Xdotool ke stimulaci kliknutí myší a klávesových zkratek v systému Linux
Xdotool je bezplatný a otevřený nástroj příkazového řádku pro simulaci kliknutí myší a stisknutí kláves. Tento článek se bude věnovat krátkému průvodc...
Top 5 ergonomických produktů pro počítačové myši pro Linux
Způsobuje dlouhodobé používání počítače bolest zápěstí nebo prstů? Trpíte ztuhlými klouby a neustále si musíte třást ruce? Cítíte pálivou bolest pokaž...
Jak změnit nastavení myši a touchpadu pomocí Xinput v Linuxu
Většina linuxových distribucí je ve výchozím nastavení dodávána s knihovnou „libinput“ pro zpracování vstupních událostí v systému. Může zpracovávat v...