Što točno radi 2>/dev/null?

What Exactly Does 2 Dev Null Do

Bilo da ste novi korisnik Linuxa ili iskusni bash programer, velika je vjerojatnost da ste naišli na kriptičnu naredbu 2>/dev/null. Iako ova naredba izgleda tehnički složena, njezina je svrha vrlo jednostavna. Odnosi se na nulti uređaj koji se koristi za potiskivanje izlaza različitih naredbi. Ovaj članak će raščlaniti svaki dio naredbe 2>/dev/null, objasniti njezinu svrhu i vidjeti primjere kako se koristi.

Nulti uređaj - '/dev/null'

Svi sustavi temeljeni na Linuxu imaju značajku koja se naziva virtualni uređaji. Ovi virtualni uređaji međusobno djeluju poput stvarnih datoteka u operacijskom sustavu. Rad takvih virtualnih uređaja sličan je stvarnim uređajima; koriste se za pisanje i čitanje podataka. Glavna razlika između ova dva je u tome što podatke za virtualne uređaje isporučuje operacijski sustav.



/dev/null je nulti uređaj - posebna vrsta virtualnog uređaja. Prisutan je u svakom Linux sustavu, a svrha ovog uređaja je odbaciti sve što mu se pošalje i pročitati kraj datoteke (EOF). Većina virtualnih uređaja koristi se za čitanje podataka; međutim, /dev /null je jedinstven jer se koristi za potiskivanje svih podataka koji su mu zapisani. Jednostavnim riječima, djeluje kao crna rupa za sve podatke koji se na nju upišu u operacijskim sustavima Linux.



Pogledajmo sada preostale dijelove naredbe 2> /dev /null



Deskriptor datoteke - '2'

Svako izvršavanje naredbi u Linuxu generira tri povezane datoteke: standardni ulaz, standardni izlaz i datoteke standardnih pogrešaka. Operacijski sustav Linux odnosi se na svaku od ovih datoteka s jedinstvenim nenegativnim cijelim brojem.

  • '0' za standardni ulaz
  • '1' za standardni izlaz
  • '2' za standardnu ​​pogrešku

Tehnički izrazi za standardni ulaz, standardni izlaz i tokove pogrešaka su stdin, stdout i stderr.

Znamo da se broj '2' u naredbi '2>/dev/null' odnosi na standardni tok pogreške (stderr).



Operator preusmjeravanja datoteka - '>'

Simbol '>' poznat je kao operator preusmjeravanja datoteka. Njegova je svrha usmjeriti ono što je s njegove lijeve strane na naredbe s desne strane. Jednostavnije rečeno, bilo koji niz podataka s lijeve strane bit će usmjeren na desnu stranu operatora.

Do sada smo razumjeli svrhu iza svake komponente naredbe 2>/dev/null. On šalje tok pogreške na /dev /null, koji ga odbacuje. Drugim riječima, ova se naredba koristi za odbacivanje i suzbijanje grešaka. Međutim, ako ste iskusni veteran Linuxa, možete pogledati sadržaj /dev /null datoteke pokretanjem sljedeće naredbe u terminalu:

$ls - /dev/null

Ova se naredba obično koristi u scenarijima u kojima moramo filtrirati izlaz na temelju pogrešaka ili kada želimo odbaciti bilo koji izlaz povezan s pogrešnim opisima. Naprijed ćemo pogledati primjere njegove uporabe na Ubuntu sustavu.

Korištenje 2>/dev/null

Budući da znamo da se naredba 2>/dev/null koristi za odbacivanje pogrešaka, uvijek će se koristiti zajedno s drugim naredbama. Sličan pristup vidjet ćemo u sljedećim primjerima. Terminal možete otvoriti bilo da mu pristupite putem izbornika aplikacija ili pomoću prečaca na tipkovnici Ctrl + Alt + T.

U prvom primjeru provest ćemo pretraživanje u / sys / direktoriju za slučajni niz (u ovom slučaju helloworld). Naredba za pretraživanje je grep, a njezin argument bit će niz za pretraživanje. Unesite sljedeću naredbu za traženje niza.

$zahvat -rPozdrav svijete/sys/

Ova naredba pretraživanja mora prikazati brojne pogreške jer se koristi bez root pristupa. Poslat ćemo njegov tok pogrešaka u/dev/null pomoću naredbe 2>/dev/null da odbacimo te pogreške.

$zahvat -rPozdrav svijete/sys/ 2> /dev/null

Možemo vidjeti da je izlaz naredbe mnogo uredniji i jednostavniji od posljednje. Razlog je taj što se pogreške odbacuju pomoću 2> /dev /null, a budući da naredba grep nije uspjela pronaći nijednu datoteku koja odgovara našem nizu 'helloworld', ne prikazuje izlaz.

Kako bismo bolje razumjeli upotrebu /dev /null, pogledat ćemo sljedeći primjer pingiranja bilo koje web stranice (u našem slučaju google.com). Možete pingati google.com izvršavanjem sljedeće naredbe:

$pingGoogle com

Ako želimo isključiti sve neuspjele pingove, možemo koristiti naredbu 2>/dev/null:

$pingGoogle com2> /dev/null

U ovom slučaju, standardni tok pogreške (koji prikazuje neuspjele pingove na google.com) šalje se virtualnom uređaju /dev /null koji ih odbacuje.

Međutim, ako želimo vidjeti samo neuspješne pingove, možemo izvršiti sljedeću naredbu:

$pingGoogle com1> /dev/null

Ovdje šaljemo standardni izlazni tok (stdout) na /dev /null uređaj koji ga odbacuje. Slijedom toga, preostaju nam samo pingovi koji nisu uspjeli doći do poslužitelja google.com. Međutim, u našem slučaju nije bilo neuspjelih pingova. Također možemo usmjeriti stdout i stderr na različita mjesta. Ovo je korisno ako želimo odbaciti izlazne podatke i pohraniti pogreške u dnevnik ili obrnuto. Možete pokrenuti sljedeću naredbu za spremanje neuspjelih pingova u dnevnik pogrešaka dok odbacujete standardni izlaz naredbe ping:

$pingGoogle com1> /dev/null2>greška.log

U nekim ćete slučajevima možda htjeti potisnuti sav izlaz naredbe (uključujući standardni izlaz i standardne pogreške). To možemo postići korištenjem /dev /null uređaja na malo drugačiji način. Možete utipkati sljedeću naredbu da biste potisnuli sav izlaz:

$pingGoogle com> /dev/null2> &1

Imajte na umu da je redoslijed naredbi ovdje vrlo važan. Nakon izvršavanja naredbe ping, '>/dev/null' govori sustavu da potisne izlaz, a '2> & 1' usmjerava standardni tok pogreške na standardni izlaz. Na taj se način odbacuje sav izlaz naredbe.

Zaključak

Razdvojili smo naredbu 2>/dev/null i jednostavne primjere u ovom članku, i nadamo se da ste sada shvatili što svaki dio toga čini. Međutim, ovo je samo vrh ledenog brijega; nulti uređaji koriste se na mnoštvo načina u bash programiranju. Neke od naprednijih upotreba uključuju provjeru postojanja datoteke, automatiziranje instalacije paketa i izbjegavanje nailaska skripti na neželjene iznimke.