Mi az /dev /null és hogyan kell használni

What Is Dev Null How Use It



A Linux egy érdekes operációs rendszer, amely számos virtuális eszközt tárol számos célra. Ami a rendszerben futó programokat illeti, ezek a virtuális eszközök úgy viselkednek, mintha valódi fájlok lennének. Az eszközök adatokat kérhetnek és táplálhatnak ezekből a forrásokból. Az adatokat az operációs rendszer generálja, ahelyett, hogy lemezről olvasná őket.

Ilyen például a /dev /null. Ez egy speciális fájl, amely minden egyes Linux rendszerben megtalálható. A legtöbb virtuális fájltól eltérően azonban olvasás helyett írásra használják. Bármit is ír a /dev /null -nak, elveti, és elfelejti az űrbe. UNIX rendszerben null eszközként ismert.







Miért akarsz eldobni valamit az űrbe? Nézzük meg, mi a /dev /null és annak használata.



Előfeltételek

Mielőtt mélyen belevetnénk magunkat a /dev /null használatába, tisztán kell látnunk a stdout és stderr adatfolyam. Nézd meg ezt részletes útmutató stdin , stderr , és stdout .



Gyorsan frissítsünk. Amikor parancssori segédprogram fut, két kimenetet generál. A kimenet erre megy stdout és a hiba (ha keletkezett) a következőre megy stderr . Alapértelmezés szerint mindkét adatfolyam a terminálhoz van társítva.





Például a következő parancs kinyomtatja a karakterláncot az idézőjelben. Itt a kimenet itt tárolódik stdout .

$kidobtaHelló Világ



A következő parancs megmutatja a korábban futtatott parancs kilépési állapotát.

$kidobta $?

Mivel az előző parancs sikeresen futott, a kilépési állapot 0. Máskülönben a kilépési állapot más lesz. Mi történik, ha érvénytelen parancsot próbál futtatni?

$ adfadsf
$kidobta $?

Most tudnunk kell a fájlleíróról. A UNIX ökoszisztémában ezek egy fájlhoz rendelt egész értékek. Mindkét stdout (fájlleíró = 1) és stderr (fájlleíró = 2) rendelkezik egy konkrét fájlleíróval. A fájlleíró (ebben a helyzetben az 1. és 2.) használatával átirányíthatjuk a stdout és stderr más fájlokhoz.

Kezdőként a következő példa átirányítja a stdout parancsot szöveges fájlba. Itt nem adtuk meg a fájlleírót. Ha nincs megadva, a bash fogja használni stdout alapértelmezés szerint.

$kidobtaHelló Világ>log.txt

A következő parancs átirányítja a stderr szöveges fájlba.

$asdfadsa2>error.txt

A /dev /null használatával

A kimenet átirányítása a /dev /null mappába

Most készen állunk megtanulni a /dev /null használatát. Először nézzük meg a normál kimenet és a hiba szűrésének módját. A következő parancsban a grep megpróbál karakterláncot keresni (ebben az esetben hello) a /sys könyvtárban.

$markolat -rHelló/sys/

Azonban sok hibát generál, mivel root jogosultság nélkül a grep nem fér hozzá számos fájlhoz. Ebben az esetben az engedély megtagadott hibákat eredményez. Most az átirányítás segítségével tisztább kimenetet kaphatunk.

$markolat -rHelló/sys/ 2> /dev/nulla

A kimenet sokkal jobban néz ki, ugye? Semmi! Ebben az esetben a grep nem fér hozzá sok fájlhoz, és azok, amelyek hozzáférhetők, nem rendelkeznek a hello karakterlánccal.

A következő példában pingáljuk a Google -t.

$pingGoogle com

Azonban nem akarjuk látni a sikeres ping eredményeket. Ehelyett csak a hibákra szeretnénk koncentrálni, amikor a ping nem tudta elérni a Google -t. Hogyan tegyük ezt?

$pingGoogle com1> /dev/nulla

Itt a tartalma stdout a /dev /null mappába kerülnek, csak a hibák maradnak.

Az összes kimenet átirányítása a /dev /null mappába

Bizonyos helyzetekben előfordulhat, hogy a kimenet egyáltalán nem hasznos. Az átirányítás segítségével az összes kimenetet az ürességbe dobhatjuk.

$markolat -rHelló/sys/ > /dev/nulla2> &1

Szegjük meg ezt a parancsot egy kicsit. Először is kidobjuk az összeset stdout ide /dev /null. Aztán a második részben azt mondjuk a bash -nak, hogy küldjön stderr nak nek stdout . Ebben a példában nincs mit kiadni. Ha azonban zavarban van, mindig ellenőrizheti, hogy a parancs sikeresen futott -e.

$kidobta $?

Az érték 2, mert a parancs sok hibát generált.

Ha hajlamos elfelejteni a fájl leíróját stdout és stderr , a következő parancs jól működik. Ez az előző parancs általánosabb formátuma. Mindkét stdout és stderr át lesz irányítva a /dev /null mappába.

$markolat -rHelló/sys/ &> /dev/nulla

Más példák

Ez egy érdekes. Emlékszel a dd eszközre? Ez egy hatékony eszköz a fájlok konvertálására és másolására. További információ a dd -ről. A dd használatával tesztelhetjük a lemez szekvenciális olvasási sebességét. Ez persze nem pontos mérés. Egy gyors teszthez azonban nagyon hasznos.

$dd ha=<big_file> nak,-nek=/dev/nullaállapot= haladásbs= 1Miflag= közvetlen

Itt az Ubuntu 18.04.4 ISO -t használtam nagy fájlként.

Hasonlóképpen kipróbálhatja az internetkapcsolat letöltési sebességét is.

$wget -VAGY /dev/nulla<big_file_link>

Végső gondolatok

Remélhetőleg egyértelműen érti, hogy mi ez a /dev /null fájl. Ez egy speciális eszköz, amely, ha rá van írva, eldobja, és ha onnan olvassa, nullát olvas. Ennek az érdekes funkciónak az igazi potenciálja az érdekes bash szkriptekben rejlik.

Érdekel a bash scriptelés? Nézze meg kezdő útmutató a bash scripteléshez .

Élvezd!