Snažím se pochopit koncept speciálních souborů na Linuxu. Nicméně mít speciální soubor v /dev
Zdá se to být hloupé, když by jeho funkce mohla být implementována hrstkou řádků v C, pokud vím.
Navíc byste jej mohli použít v podstatě stejným způsobem, tj. potrubím do null
místo přesměrování do /dev/null
. Existuje nějaký konkrétní důvod, proč to mít jako soubor? Nezpůsobuje z něj vytvoření souboru mnoho dalších problémů, například příliš mnoho programů, které přistupují ke stejnému souboru?
Přijatá odpověď:
Kromě výkonových výhod používání zařízení se speciálním znakem je hlavní výhodou modularita . /dev/null lze použít téměř v jakémkoli kontextu, kde se očekává soubor, nejen v prostředí shell. Zvažte programy, které přijímají soubory jako parametry příkazového řádku.
# We don't care about log output.
$ frobify --log-file=/dev/null
# We are not interested in the compiled binary, just seeing if there are errors.
$ gcc foo.c -o /dev/null || echo "foo.c does not compile!".
# Easy way to force an empty list of exceptions.
$ start_firewall --exception_list=/dev/null
To vše jsou případy, kdy by použití programu jako zdroje nebo jímky bylo extrémně těžkopádné. I v případě shell pipeline mohou být stdout a stderr přesměrovány na soubory nezávisle, což je se spustitelnými soubory jako jímkami obtížné:
# Suppress errors, but print output.
$ grep foo * 2>/dev/null