Ką tiksliai daro 2>/dev/null?

What Exactly Does 2 Dev Null Do



Nesvarbu, ar esate naujas „Linux“ vartotojas, ar patyręs „bash“ programuotojas, labai tikėtina, kad susidūrėte su paslaptinga komanda 2>/dev/null. Nors ši komanda atrodo techniškai sudėtinga, jos tikslas yra labai paprastas. Tai reiškia nulinį įrenginį, kuris naudojamas slopinti įvairių komandų išėjimus. Šiame straipsnyje bus išskaidyta kiekviena 2>/dev/null komandos dalis, paaiškinta jos paskirtis ir pateikiami pavyzdžiai, kaip ji naudojama.

Nulinis įrenginys - „/dev/null“

Visos „Linux“ sistemos turi funkciją, vadinamą virtualiais įrenginiais. Šie virtualūs įrenginiai sąveikauja kaip tikri operacinės sistemos failai. Tokių virtualių įrenginių veikimas yra panašus į realius įrenginius; jie naudojami duomenims rašyti ir skaityti. Pagrindinis skirtumas tarp šių dviejų yra tas, kad virtualių įrenginių duomenis teikia operacinė sistema.







/dev/null yra nulinis įrenginys - specialus virtualiojo įrenginio tipas. Tai yra visose „Linux“ sistemose, o šio įrenginio tikslas yra išmesti viską, kas jam siunčiama, ir perskaityti failo pabaigą (EOF). Dauguma virtualių įrenginių naudojami duomenims skaityti; tačiau /dev /null yra unikalus, nes jis naudojamas bet kokiems į jį įrašytiems duomenims slopinti. Paprastais žodžiais tariant, ji veikia kaip juodoji skylė bet kokiems duomenims, įrašytiems į ją „Linux“ operacinėse sistemose.



Dabar pažvelkime į likusias komandos 2> /dev /null dalis



Failo aprašas - „2“

Kiekvienas komandų vykdymas „Linux“ generuoja tris susijusius failus: standartinį įvestį, standartinį išvestį ir standartinius klaidų failus. „Linux“ operacinė sistema nurodo kiekvieną iš šių failų su unikaliu neneigiamu sveiku skaičiumi.





  • „0“ standartiniam įėjimui
  • „1“ - standartinė išvestis
  • „2“ už standartinę klaidą

Techniniai standartinės įvesties, standartinės išvesties ir standartinių klaidų srautų terminai yra atitinkamai stdin, stdout ir stderr.

Mes žinome, kad skaičius „2“ komandoje „2>/dev/null“ reiškia standartinės klaidos (stderr) srautą.



Failų peradresavimo operatorius - „>“

„>“ Simbolis yra žinomas kaip failų peradresavimo operatorius. Jo tikslas yra nukreipti tai, kas yra kairėje, į komandas dešinėje pusėje. Paprasčiau tariant, bet kokia duomenų eilutė kairėje bus nukreipta į dešinę operatoriaus pusę.

Iki šiol mes supratome kiekvieno komandos 2>/dev/null komponento tikslą. Jis siunčia klaidų srautą į /dev /null, kuris ją atmeta. Kitaip tariant, ši komanda naudojama atmesti ir slopinti klaidų rezultatus. Tačiau, jei esate patyręs „Linux“ veteranas, galite peržiūrėti failo /dev /null turinį vykdydami šią komandą terminale:

$ls -jie /dev/nulis

Ši komanda paprastai naudojama tais atvejais, kai turime filtruoti išvestį pagal klaidas arba kai norime atmesti bet kokią išvestį, susijusią su klaidingais aprašymais. Toliau apžvelgsime jo naudojimo Ubuntu sistemoje pavyzdžius.

Naudojant 2>/dev/null

Kadangi žinome, kad komanda 2>/dev/null naudojama klaidoms atmesti, ji visada bus naudojama kartu su kitomis komandomis. Panašų požiūrį pamatysime tolesniuose pavyzdžiuose. Terminalą galite atidaryti pasiekdami jį per programų meniu arba naudodami sparčiuosius klavišus Ctrl + Alt + T.

Pirmame pavyzdyje mes / sys / kataloge atliksime atsitiktinės eilutės paiešką (šiuo atveju „helloworld“). Paieškos komanda yra grep, o jos argumentas bus paieškos eilutė. Norėdami ieškoti eilutės, įveskite šią komandą.

$suimti -rLabas pasauli/sys/

Ši paieškos komanda turi parodyti daugybę klaidų, nes ji naudojama be root prieigos. Mes išsiųsime jo klaidų srautą į/dev/null naudodami komandą 2>/dev/null, kad pašalintume šias klaidas.

$suimti -rLabas pasauli/sys/ 2> /dev/nulis

Matome, kad komandos išvestis yra daug tvarkingesnė ir paprastesnė nei paskutinė. Priežastis ta, kad klaidos pašalinamos naudojant 2> /dev /null, ir kadangi komanda grep negalėjo rasti jokio failo, atitinkančio mūsų eilutę „helloworld“, ji nerodo jokios išvesties.

Kad geriau suprastume /dev /null naudojimą, panagrinėsime šį bet kurios svetainės (mūsų atveju google.com) pingavimo pavyzdį. Galite įkelti ping google.com vykdydami šią komandą:

$pingGoogle com

Jei norime neįtraukti visų nepavykusių pingų, galime naudoti komandą 2>/dev/null:

$pingGoogle com2> /dev/nulis

Šiuo atveju standartinis klaidų srautas (kuriame rodomi nepavykę ping'ai google.com) siunčiamas į virtualų įrenginį /dev /null, kuris juos pašalina.

Tačiau, jei norime matyti tik nepavykusius pingus, galime vykdyti šią komandą:

$pingGoogle com1> /dev/nulis

Čia mes siunčiame standartinį išvesties srautą (stdout) į /dev /null įrenginį, kuris jį pašalina. Todėl mums lieka tik tie ping'ai, kurių nepavyko pasiekti google.com serverio. Tačiau mūsų atveju nepavyko nepavykusių pingų. Taip pat galime nukreipti stdout ir stderr į skirtingas vietas. Tai naudinga, jei norime atmesti išvestį ir įrašyti klaidas žurnale arba atvirkščiai. Galite paleisti šią komandą, norėdami išsaugoti nesėkmingus ping'us klaidų žurnale, atmesdami standartinę „ping“ komandos išvestį:

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

Kartais galbūt norėsite slopinti visą komandos išvestį (įskaitant standartinę išvestį ir standartines klaidas). Tai galime pasiekti naudodami /dev /null įrenginį šiek tiek kitaip. Norėdami užblokuoti visą išvestį, galite įvesti šią komandą:

$pingGoogle com> /dev/nulis2> &1

Atminkite, kad komandų tvarka čia yra labai svarbi. Vykdžius ping komandą, „>/dev/null“ nurodo sistemai slopinti išvestį, o „2> & 1“ nukreipia standartinę klaidų srautą į standartinę išvestį. Tokiu būdu visa komandos išvestis atmetama.

Išvada

Šiame straipsnyje mes išskyrėme komandą 2>/dev/null ir paprastus pavyzdžius, ir tikimės, kad dabar jūs suprantate, ką daro kiekvienas jos bitas. Tačiau tai tik ledkalnio viršūnė; null įrenginiai yra naudojami įvairiais būdais programuojant „bash“. Kai kurie pažangesni naudojimo būdai yra failų egzistavimo tikrinimas, paketų diegimo automatizavimas ir scenarijų išvengimas nepageidaujamų išimčių.