Kaj točno počne 2>/dev/null?

What Exactly Does 2 Dev Null Do



Ne glede na to, ali ste nov uporabnik Linuxa ali izkušen programer bash, je zelo verjetno, da ste naleteli na skrivnostni ukaz 2>/dev/null. Čeprav je ta ukaz tehnično kompleksen, je njegov namen zelo preprost. Nanaša se na ničelno napravo, ki se uporablja za zatiranje izhodov različnih ukazov. Ta članek bo razčlenil vsak del ukaza 2>/dev/null, razložil njegov namen in prikazal primere njegove uporabe.

Ničelna naprava - '/dev/null'

Vsi sistemi, ki temeljijo na Linuxu, imajo funkcijo, imenovano virtualne naprave. Te virtualne naprave medsebojno delujejo kot dejanske datoteke v operacijskem sistemu. Delovanje takšnih virtualnih naprav je podobno dejanskim napravam; uporabljajo se za pisanje in branje podatkov. Glavna razlika med obema je, da podatke za virtualne naprave dobavlja operacijski sistem.







/dev/null je ničelna naprava - posebna vrsta navidezne naprave. Prisoten je v vsakem sistemu Linux in namen te naprave je, da zavrže vse, kar mu je poslano, in prebere konec datoteke (EOF). Večina virtualnih naprav se uporablja za branje podatkov; vendar je /dev /null edinstven, saj se uporablja za zatiranje vseh podatkov, ki so vanj zapisani. Preprosto povedano, deluje kot črna luknja za vse podatke, ki so vanj zapisani v operacijskih sistemih Linux.



Zdaj pa si oglejmo preostale dele ukaza 2> /dev /null



Deskriptor datoteke - '2'

Vsaka izvedba ukaza v Linuxu ustvari tri povezane datoteke: standardni vhod, standardni izhod in datoteke standardnih napak. Operacijski sistem Linux se nanaša na vsako od teh datotek z edinstvenim ne-negativnim celim številom.





  • '0' za standardni vnos
  • '1' za standardni izhod
  • '2' za standardno napako

Tehnični izrazi za standardni vnos, standardni izhod in standardni tok napak so stdin, stdout in stderr.

Vemo, da se številka '2' v ukazu '2>/dev/null' nanaša na tok standardne napake (stderr).



Operater preusmeritve datotek - '>'

Simbol '>' je znan kot operater preusmeritve datotek. Njegov namen je usmeriti levo na ukaze na desni strani. Preprosteje povedano, vsak niz podatkov na levi bo usmerjen na desno stran operaterja.

Doslej smo razumeli namen vsake komponente ukaza 2>/dev/null. Pošlje tok napak na /dev /null, ki ga zavrže. Z drugimi besedami, ta ukaz se uporablja za zavračanje in zatiranje izhodov napak. Če pa ste izkušen veteran Linuxa, si lahko ogledate vsebino datoteke /dev /null tako, da v terminalu zaženete naslednji ukaz:

$ls - /dev/nič

Ta ukaz se običajno uporablja v scenarijih, kjer moramo filtrirati izhod glede na napake ali kadar želimo zavreči vse rezultate, povezane z napačnimi opisi. V prihodnje si bomo ogledali primere njegove uporabe v sistemu Ubuntu.

Z uporabo 2>/dev/null

Ker vemo, da se ukaz 2>/dev/null uporablja za zavračanje napak, se bo vedno uporabljal skupaj z drugimi ukazi. Podoben pristop bomo videli v naslednjih primerih. Terminal lahko odprete tako, da do njega dostopate prek menija aplikacij ali uporabite bližnjico na tipkovnici Ctrl + Alt + T.

V prvem primeru bomo v imeniku / sys / iskali naključni niz (v tem primeru helloworld). Ukaz za iskanje je grep, njegov argument pa bo iskalni niz. Če želite poiskati niz, vnesite naslednji ukaz.

$oprijem -rPozdravljen, svet/sys/

Ta iskalni ukaz mora prikazati številne napake, saj se uporablja brez korenskega dostopa. Njegov tok napak bomo poslali/dev/null z ukazom 2>/dev/null, da zavržemo te napake.

$oprijem -rPozdravljen, svet/sys/ 2> /dev/nič

Vidimo lahko, da je izpis ukaza veliko bolj natančen in enostavnejši od zadnjega. Razlog je v tem, da se napake zavržejo z uporabo 2> /dev /null, in ker ukaz grep ni mogel najti nobene datoteke, ki bi se ujemala z našim nizom 'helloworld', ne prikaže nobenega izhoda.

Da bi bolje razumeli uporabo /dev /null, bomo pogledali naslednji primer pinganja katerega koli spletnega mesta (v našem primeru google.com). Za ping google.com lahko izvedete naslednji ukaz:

$pingGoogle com

Če želimo izključiti vse neuspešne pinge, lahko uporabimo ukaz 2>/dev/null:

$pingGoogle com2> /dev/nič

V tem primeru se standardni tok napak (ki prikaže neuspešne pinge na google.com) pošlje navidezni napravi /dev /null, ki jih zavrže.

Če pa želimo videti samo neuspešne pinge, lahko izvedemo naslednji ukaz:

$pingGoogle com1> /dev/nič

Tukaj pošljemo standardni izhodni tok (stdout) na /dev /null napravo, ki ga zavrže. Posledično nam ostanejo le še pingi, ki niso dosegli strežnika google.com. Vendar v našem primeru ni bilo neuspešnih pingov. Stdout in stderr lahko usmerimo tudi na različne lokacije. To je v pomoč, če želimo zavreči izpis in napake shraniti v dnevnik ali obratno. Za zagon neuspelih pingov v dnevnik napak lahko zaženete naslednji ukaz, pri tem pa zavržete standardni izhod ukaza ping:

$pingGoogle com1> /dev/nič2>error.log

Včasih boste morda želeli zavreči vse izpise ukaza (vključno s standardnim izhodom in standardnimi napakami). To lahko dosežemo z uporabo naprave /dev /null na nekoliko drugačen način. Za zatiranje vseh izhodov lahko vnesete naslednji ukaz:

$pingGoogle com> /dev/nič2> &1

Upoštevajte, da je vrstni red ukazov tukaj zelo pomemben. Po izvedbi ukaza ping '>/dev/null' sistemu pove, naj zavira izhod, '2> & 1' pa usmerja standardni tok napak na standardni izhod. Na ta način se zavrže ves izhod ukaza.

Zaključek

V tem članku smo razčlenili ukaz 2>/dev/null in preproste primere. Upajmo, da zdaj razumete, kaj počne vsak njegov del. Vendar je to le vrh ledene gore; ničelne naprave se pri programiranju bash uporabljajo na različne načine. Nekatere naprednejše uporabe vključujejo preverjanje obstoja datotek, avtomatizacijo namestitve paketov in izogibanje skriptam nalet na neželene izjeme.