V Linuxu jsou programy velmi běžně přístupné pomocí příkazového řádku a výstup jako takový se zobrazuje na obrazovce terminálu. Výstup se skládá ze dvou částí:STDOUT (Standardní výstup ), který obsahuje informační protokoly a zprávy o úspěchu, a STDERR (Standardní chyba ), který obsahuje chybové zprávy.
Výstup mnohokrát obsahuje mnoho informací, které nejsou relevantní a zbytečně zatěžují systémové prostředky. Zejména v případě složitých automatizačních skriptů, kde je spouštěno mnoho programů za sebou, je zobrazený protokol obrovský.
V takových případech můžeme využít pseudozařízení soubor ‘/dev/null k přesměrování výstupu. Když je výstup přesměrován na /dev/null , je okamžitě zahozen, takže nedochází k žádnému využití zdrojů.
Podívejme se, jak přesměrovat výstup na /dev/null v Linuxu.
Vezměme si příklad příkazu mv, který se pokouší přesunout dva soubory do určitého adresáře, kde se jeden soubor úspěšně přesune (zobrazí STDOUT ) a druhý zobrazí chybu při pohybu (zobrazí STDERR ).
$ mv -v tmp.c /etc/apt/sources.list /tmp
Poznámka :'-v'
argument k mv zobrazí protokol úspěchu při přesunutí souboru. Bez příznaku se do STDOUT nevytiskne nic .
Nyní pro přesměrování pouze STDOUT na /dev/null , tj. chcete-li zahodit standardní výstup, použijte následující:
$ mv -v tmp.c /etc/apt/sources.list /tmp 1>/dev/null
Co znamená „1>/dev/null“?
Zde '1'
označuje STDOUT , což je standardní celé číslo přidělené Linuxem pro totéž. Operátor '>'
, nazývaný operátor přesměrování, zapisuje data do souboru. Soubor zadaný v tomto případě je /dev/null . Data jsou tedy nakonec vyřazena.
Pokud byl místo /dev/null zadán jakýkoli jiný soubor , standardní výstup by byl zapsán do tohoto souboru.
Podobně přesměrovat pouze STDERR na /dev/null , použijte celé číslo '2'
místo '1'
. Celé číslo '2'
znamená standardní chybu.
$ mv -v tmp.c /etc/apt/sources.list /tmp 2>/dev/null
Jak můžete vidět, standardní chyba se nyní na terminálu nezobrazuje, protože je zahozena v /dev/null .
Nakonec zlikvidujte obě STDOUT a STDERR současně použijte následující:
$ mv -v tmp.c /etc/apt/sources.list /tmp &>/dev/null
Znak ampersand ('&')
označuje, že standardní výstup i standardní chyba musí být přesměrovány na /dev/null a vyřazeny. Na posledním snímku obrazovky tedy nevidíme vůbec žádný výstup vytištěný na obrazovce.
Závěr
V tomto článku jsme viděli, jak přesměrovat výstup na /dev/null . Totéž lze použít buď v příkazu, nebo ve složitých skriptech Bash, které generují velké množství protokolu. V případě, že skript potřebuje ladění nebo je třeba jej otestovat; v takových případech je protokol vyžadován pro správné zobrazení a analýzu chyb.
V případech, kdy je výstup již znám a očekáván, lze jej zahodit pomocí /dev/null . Pokud máte nějaké dotazy nebo zpětnou vazbu, dejte nám vědět v komentářích níže!