Mi az / dev / null és hogyan segíthet neked?

Ha már vannak fogalmaink a GNU / Linux könyvtárfáról, akkor legalább ismernünk kell a / dev / referenciát, amely gyakorlatilag ott van, ahol az összes fájl hardver eszközök.

Ha a könyvtárba nézünk / dev / látni fogunk egy "fájlt", amelyet hívnak null, de ha meg akarjuk nyitni a tartalma megtekintéséhez, a rendszer azt mondja nekünk, hogy ez nem lehetséges, mivel nem hétköznapi tartalom. Azért csatoltam a file szót, mert amint mindannyian tudjátok a Linux esetében, mindent (hardvert és szoftvert) fájlként képviselünk.

Ez Daniel Durante közreműködése, így a heti versenyünk egyik nyertese lett: «Ossza meg, mit tud a Linuxról«. Gratulálok Danielnek!

Milyen eszköznek felel meg a / dev / null?

Gyakorlati célokból képzeljen el egy szemetesedényt, egy feneketlen gödröt vagy a világűrbe, ahová bármit is bedobhatna anélkül, hogy visszanyerné (bármennyire is próbálkoznak a NASA srácai).

De ha már vannak olyan parancsaim, mint az rm, miért akarok valami újat törölni?

Mivel mindkét "fekete lyuk" működése teljesen más: hogyan írná felül a parancs normál kimenetét egy parancsfájlban futás közben? Itt jön be a / dev / null.

Nézzük meg egy példával.

Létrehoztunk egy teszt nevű fájlt, amely a "Hello World" karakterláncot tartalmazza. Ha a fájl tartalmát a parancssorban akarjuk képviselni, akkor a következőképpen tehetjük meg:

felhasználó @ laptop: ~ $ macska teszt
Helló Világ

Ha a fájl nem létezik, vagy tesztként nevezik (a végén 's' van), akkor a következő hibát kapjuk a konzolon:

felhasználó @ laptop: ~ $ macska teszt
cat: tesztek: A fájl vagy könyvtár nem létezik

Mit tehetnénk a hibaüzenet elkerülése érdekében? Nos, egyszerűen irányítsa át a parancs kimenetét hiba esetén egy "szemetesre", vagyis a / dev / null helyre

Hogyan adhatjuk meg hiba esetén? Itt adhatja meg a program standard bemeneti, kimeneti és hibaértékeit: STDIN, STDOUT és STDERR (amelyek helyettesíthetők 0, 1 és 2 helyettesítéssel). Ilyen módon, ha ...

felhasználó @ laptop: ~ $ cat tesztek 2> / dev / null
felhasználó @ laptop: ~ $

… Látni fogjuk, hogy a hibaüzenet nem jelenik meg a konzolon.

Vigyázni kell, mert a szintaxis elengedhetetlen: a 2. és> karakter között nem szabad szóköz lenni. Ellenkező esetben a következőket adná:

felhasználó @ laptop: ~ $ cat tesztek 2> / dev / null
cat: tesztek: A fájl vagy könyvtár nem létezik
cat: 2: A fájl vagy könyvtár nem létezik

Ezzel szemben a> és / dev / null közötti szóköz nem befolyásolja negatívan az eredményt.

Használhatjuk a hibák átirányítását is például a naplófájl hibáinak rögzítésére az alábbiak szerint:

user @ laptop: ~ $ cat tesztek 2> err.log

Egy másik érdekes eset az eredmények összegyűjtése egy másik fájlban, mindaddig, amíg nem fordul elő hiba, amire tennénk:

user @ laptop: ~ $ cat test 1> output_result 2> err.log

Végül érdemes feltenni a «> / dev / null 2> & 1» kifejezést, amelyben a standard kimenet és a hibakimenet egyesül, átirányítva őket úgy, hogy semmilyen esetben sem kapják meg a kimeneti információkat.