Pontosan mit csinál a 2>/dev/null?

What Exactly Does 2 Dev Null Do



Akár új Linux felhasználó, akár tapasztalt bash programozó, nagy valószínűséggel találkozott a 2>/dev/null titkos paranccsal. Bár ez a parancs technikailag bonyolultnak tűnik, célja nagyon egyszerű. Ez egy null eszközre vonatkozik, amelyet különféle parancsok kimeneteinek elnyomására használnak. Ez a cikk lebontja a 2>/dev/null parancs egyes részeit, elmagyarázza annak célját, és példákat talál a használatára.

Null eszköz - '/dev/null'

Minden Linux-alapú rendszer rendelkezik virtuális eszközöknek nevezett funkcióval. Ezek a virtuális eszközök úgy működnek egymással, mint a tényleges fájlok az operációs rendszerben. Az ilyen virtuális eszközök működése hasonló a valódi eszközökhöz; adatok írására és olvasására szolgálnak. A kettő közötti fő különbség az, hogy a virtuális eszközök adatait az operációs rendszer szolgáltatja.







A/dev/null egy null eszköz - egy speciális típusú virtuális eszköz. Ez minden Linux rendszerben jelen van, és ennek az eszköznek az a célja, hogy eldobjon mindent, amit küldött, és olvassa el a fájl végét (EOF). A legtöbb virtuális eszközt az adatok olvasására használják; a /dev /null azonban egyedülálló, mivel a hozzá írt adatok elnyomására szolgál. Egyszerűen fogalmazva, fekete lyukként működik minden olyan adat számára, amelyet Linux operációs rendszerekben írnak hozzá.



Most nézzük meg a 2> /dev /null parancs többi részét



Fájlleíró - '2'

A Linux minden parancsfuttatása három kapcsolódó fájlt hoz létre: standard bemenet, szabványos kimenet és szabványos hibafájlok. A Linux operációs rendszer mindegyik fájlra egyedi, nem negatív egész számmal hivatkozik.





  • „0” a standard bemenethez
  • „1” a standard kimenethez
  • „2” standard hiba esetén

A szabványos bemenet, a standard kimenet és a szabványos hibaáramok technikai feltételei stdin, stdout és stderr.

Tudjuk, hogy a „2>/dev/null” parancsban a „2” szám a standard hiba (stderr) adatfolyamra vonatkozik.



Fájl átirányítási operátor - '>'

A '>' szimbólum fájlátirányítási operátor néven ismert. Célja, hogy a bal oldalán lévőket a jobb oldali parancsokhoz irányítsa. Egyszerűbben fogalmazva, minden bal oldali adatsor a kezelő jobb oldalára kerül.

Eddig megértettük a 2>/dev/null parancs egyes összetevőinek céljait. A hibafolyamot elküldi a /dev /null címre, amely elveti. Más szóval, ez a parancs a hibakimenetek elvetésére és elnyomására szolgál. Ha azonban tapasztalt Linux -veterán, a /dev /null fájl tartalmát a terminál következő parancsának futtatásával tekintheti meg:

$ls -az /dev/nulla

Ezt a parancsot általában olyan esetekben használjuk, amikor a kimenetet hibák alapján kell szűrnünk, vagy ha el akarjuk dobni a hibás leírásokhoz kapcsolódó kimeneteket. A továbblépés során példákat fogunk nézni annak használatára Ubuntu rendszeren.

A 2>/dev/null használatával

Mivel tudjuk, hogy a 2>/dev/null parancsot használják a hibák elvetésére, mindig más parancsokkal együtt fogjuk használni. Hasonló megközelítést fogunk látni a következő példákban. A terminált megnyithatja az alkalmazások menüből való eléréssel vagy a Ctrl + Alt + T billentyűparancsokkal.

Az első példában a / sys / könyvtárban keresünk egy véletlen karakterláncot (ebben az esetben a helloworld). A keresési parancs grep, és annak argumentuma a keresési karakterlánc lesz. Írja be a következő parancsot a karakterlánc kereséséhez.

$markolat -rHelló Világ/sys/

Ez a keresési parancs számos hibát jelenít meg, mivel root hozzáférés nélkül használják. A hibafolyamot a/dev/null címre küldjük a 2>/dev/null paranccsal, hogy elutasítsuk ezeket a hibákat.

$markolat -rHelló Világ/sys/ 2> /dev/nulla

Láthatjuk, hogy a parancs kimenete sokkal tisztább és egyszerűbb, mint az előző. Ennek az az oka, hogy a hibákat a 2> /dev /null használatával kell elvetni, és mivel a grep parancs nem talált a „helloworld” karakterláncunknak megfelelő fájlt, nem jelenít meg kimenetet.

A /dev /null használatának jobb megértése érdekében megvizsgáljuk a következő példát bármely webhely pingálására (esetünkben a google.com). A következő parancs végrehajtásával pingálhatja a google.com webhelyet:

$pingGoogle com

Ha ki akarjuk zárni az összes sikertelen pinget, használhatjuk a 2>/dev/null parancsot:

$pingGoogle com2> /dev/nulla

Ebben az esetben a szokásos hibafolyamat (amely a sikertelen pingeket mutatja a google.com -nak) a virtuális eszközre /dev /null kerül elküldésre, amely ezeket elveti.

Ha azonban csak a sikertelen pingeket szeretnénk látni, akkor a következő parancsot hajthatjuk végre:

$pingGoogle com1> /dev/nulla

Itt elküldjük a szabványos kimeneti adatfolyamot (stdout) a /dev /null eszközre, amely elveti azt. Következésképpen csak azok a ping -ek maradnak, amelyek nem tudták elérni a google.com szervert. Esetünkben azonban nem voltak sikertelen pingek. Az stdout -ot és a stderr -t különböző helyekre is irányíthatjuk. Ez akkor hasznos, ha el akarjuk dobni a kimeneti adatokat, és a hibákat naplóban tároljuk, vagy fordítva. A következő parancs futtatásával tárolhatja a sikertelen pingeket egy hibanaplóban, miközben elveti a ping parancs szabványos kimenetét:

$pingGoogle com1> /dev/nulla2>error.log

Előfordulhat, hogy a parancs minden kimenetét le szeretné tiltani (beleértve a szabványos kimenetet és a standard hibákat is). Ezt elérhetjük a /dev /null eszköz kissé eltérő módon történő használatával. Az összes parancs leállításához írja be a következő parancsot:

$pingGoogle com> /dev/nulla2> &1

Vegye figyelembe, hogy a parancsok sorrendje itt nagyon fontos. A ping parancs végrehajtása után a „>/dev/null” utasítja a rendszert, hogy tiltsa le a kimenetet, a „2> & 1” pedig a szabványos hibaáramot a standard kimenetre irányítja. Ily módon a parancs minden kimenete elvetésre kerül.

Következtetés

Ebben a cikkben a 2>/dev/null parancsot és az egyszerű példákat boncolgattuk, és remélhetőleg most már érti, hogy minden egyes része mit tesz. Ez azonban csak a jéghegy csúcsa; A null eszközöket sokféleképpen használják a bash programozás során. A fejlettebb alkalmazások közé tartozik a fájlok létezésének ellenőrzése, a csomagok telepítésének automatizálása és a szkriptek elkerülése a nem kívánt kivételekbe való bejutástól.