Ko tieši dara 2>/dev/null?

What Exactly Does 2 Dev Null Do



Neatkarīgi no tā, vai esat jauns Linux lietotājs vai pieredzējis bash programmētājs, ļoti iespējams, ka esat saskāries ar noslēpumainu komandu 2>/dev/null. Lai gan šī komanda izskatās tehniski sarežģīta, tās mērķis ir ļoti vienkāršs. Tas attiecas uz nulles ierīci, ko izmanto, lai apspiestu dažādu komandu izvadi. Šajā rakstā tiks sadalīta katra 2>/dev/null komandas daļa, izskaidrots tās mērķis un apskatīti tās izmantošanas piemēri.

Nulles ierīce - “/dev/null”

Visām sistēmām, kuru pamatā ir Linux, ir funkcija, ko sauc par virtuālajām ierīcēm. Šīs virtuālās ierīces mijiedarbojas kā faktiskie faili operētājsistēmā. Šādu virtuālo ierīču darbība ir līdzīga reālām ierīcēm; tos izmanto datu rakstīšanai un lasīšanai. Galvenā atšķirība starp abiem ir tas, ka virtuālo ierīču datus piegādā operētājsistēma.







/dev/null ir nulles ierīce - īpašs virtuālās ierīces veids. Tas ir pieejams katrā Linux sistēmā, un šīs ierīces mērķis ir izmest visu, kas tai nosūtīts, un izlasīt faila beigas (EOF). Lielākā daļa virtuālo ierīču tiek izmantotas datu lasīšanai; tomēr /dev /null ir unikāls, jo to izmanto, lai apspiestu visus tajā ierakstītos datus. Vienkārši sakot, tas darbojas kā melnais caurums visiem datiem, kas tajā ir ierakstīti Linux operētājsistēmās.



Tagad apskatīsim atlikušās komandas 2> /dev /null daļas



Faila apraksts - “2”

Katra komandu izpilde Linux ģenerē trīs saistītos failus: standarta ievade, standarta izvade un standarta kļūdu faili. Linux operētājsistēma atsaucas uz katru no šiem failiem ar unikālu, negatīvu veselu skaitli.





  • “0” standarta ievadei
  • “1” standarta izvadei
  • “2” par standarta kļūdu

Standarta ievades, standarta izvades un standarta kļūdu plūsmu tehniskie termini ir attiecīgi stdin, stdout un stderr.

Mēs zinām, ka skaitlis “2” komandā “2>/dev/null” attiecas uz standarta kļūdu (stderr) plūsmu.



Failu novirzīšanas operators - “>”

Simbols “>” ir pazīstams kā failu novirzīšanas operators. Tās mērķis ir novirzīt to, kas atrodas pa kreisi, uz komandām labajā pusē. Vienkāršāk sakot, jebkura datu virkne pa kreisi tiks novirzīta operatora labajā pusē.

Līdz šim mēs esam sapratuši katras komandas 2>/dev/null komponentes mērķi. Tas nosūta kļūdu straumi uz /dev /null, kas to atmet. Citiem vārdiem sakot, šī komanda tiek izmantota, lai atmestu un izslēgtu kļūdu izvadi. Tomēr, ja esat pieredzējis Linux veterāns, varat apskatīt /dev /null faila saturu, terminālī palaižot šādu komandu:

$ls -viņi /dev/null

Šo komandu parasti izmanto gadījumos, kad mums ir jāfiltrē izlaide, pamatojoties uz kļūdām, vai ja mēs vēlamies atmest jebkuru izvadi, kas saistīta ar kļūdainiem aprakstiem. Virzoties uz priekšu, mēs aplūkosim piemērus par tā izmantošanu Ubuntu sistēmā.

Izmantojot 2>/dev/null

Tā kā mēs zinām, ka komanda 2>/dev/null tiek izmantota kļūdu atmešanai, tā vienmēr tiks izmantota kopā ar citām komandām. Turpmākajos piemēros mēs redzēsim līdzīgu pieeju. Termināli var atvērt, piekļūstot tam, izmantojot programmu izvēlni, vai izmantojot īsinājumtaustiņu Ctrl + Alt + T.

Pirmajā piemērā mēs / sys / direktorijā veiksim nejaušas virknes meklēšanu (šajā gadījumā helloworld). Meklēšanas komanda ir grep, un tās arguments būs meklēšanas virkne. Ievadiet šādu komandu, lai meklētu virkni.

$satvēriens -rSveika pasaule/sys/

Šī meklēšanas komanda noteikti parādīs daudzas kļūdas, jo tā tiek izmantota bez saknes piekļuves. Mēs nosūtīsim tās kļūdu straumi uz/dev/null, izmantojot komandu 2>/dev/null, lai atmestu šīs kļūdas.

$satvēriens -rSveika pasaule/sys/ 2> /dev/null

Mēs redzam, ka komandas izvade ir daudz kārtīgāka un vienkāršāka nekā pēdējā. Iemesls ir tāds, ka kļūdas tiek atmestas, izmantojot 2> /dev /null, un, tā kā komanda grep nevarēja atrast nevienu failu, kas atbilstu mūsu virknei “helloworld”, tā nerāda nekādu izvadi.

Lai labāk izprastu /dev /null lietojumu, mēs aplūkosim šādu piemēru, kā pingēt jebkuru vietni (mūsu gadījumā google.com). Varat pingēt google.com, izpildot šādu komandu:

$pingGoogle com

Ja mēs vēlamies izslēgt visus neveiksmīgos pingus, mēs varam izmantot komandu 2>/dev/null:

$pingGoogle com2> /dev/null

Šādā gadījumā standarta kļūdu straume (kas parāda neveiksmīgos pingus google.com) tiek nosūtīta uz virtuālo ierīci /dev /null, kas tās atmet.

Tomēr, ja mēs vēlamies redzēt tikai neveiksmīgos pingus, mēs varam izpildīt šādu komandu:

$pingGoogle com1> /dev/null

Šeit mēs nosūtām standarta izvades plūsmu (stdout) uz /dev /null ierīci, kas to izmet. Līdz ar to mums paliek tikai tie ping, kas neizdevās sasniegt google.com serveri. Tomēr mūsu gadījumā nebija neveiksmīgu ping. Mēs varam arī novirzīt stdout un stderr uz dažādām vietām. Tas ir noderīgi, ja vēlamies izmest izvadi un saglabāt kļūdas žurnālā vai otrādi. Varat palaist šādu komandu, lai kļūdu žurnālā saglabātu neveiksmīgos pingus, vienlaikus atmetot ping komandas standarta izvadi:

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

Dažos gadījumos jūs varat apspiest visas komandas izvadi (ieskaitot standarta izvadi un standarta kļūdas). Mēs to varam sasniegt, izmantojot /dev /null ierīci nedaudz savādāk. Lai izslēgtu visu izvadi, varat ierakstīt šādu komandu:

$pingGoogle com> /dev/null2> &1

Ņemiet vērā, ka komandu secība šeit ir ļoti svarīga. Pēc ping komandas izpildīšanas “>/dev/null” liek sistēmai izslēgt izvadi, un “2> & 1” novirza standarta kļūdu plūsmu uz standarta izvadi. Tādā veidā tiek izmesta visa komandas izvade.

Secinājums

Šajā rakstā mēs esam sadalījuši komandu 2>/dev/null un vienkāršus piemērus, un cerams, ka tagad jūs saprotat, ko katrs no tiem dara. Tomēr šī ir tikai aisberga redzamā daļa; nulles ierīces bash programmēšanā tiek izmantotas daudzos veidos. Daži no sarežģītākajiem lietojumiem ietver faila esamības pārbaudi, pakotņu instalēšanas automatizēšanu un izvairīšanos no skriptu nevēlamiem izņēmumiem.