Ano nga ba ang ginagawa ng 2> / dev / null?

What Exactly Does 2 Dev Null Do



Kung ikaw ay isang bagong gumagamit ng Linux o isang bihasang programmer ng bash, malamang na nakatagpo ka ng cryptic command 2> / dev / null. Bagaman ang utos na ito ay mukhang kumplikado sa tekniko, ang layunin nito ay napaka-simple. Ito ay tumutukoy sa isang null na aparato na ginagamit upang sugpuin ang mga output ng iba't ibang mga utos. Masisira ng artikulong ito ang bawat bahagi ng utos na 2> / dev / null, ipaliwanag ang layunin nito, at makita ang mga halimbawa kung paano ito ginagamit.

Null Device - ‘/ dev / null’

Ang lahat ng mga sistemang nakabatay sa Linux ay may tampok na tinatawag na virtual device. Ang mga virtual na aparato ay nakikipag-ugnay tulad ng aktwal na mga file sa operating system. Ang pagtatrabaho ng naturang mga virtual na aparato ay katulad ng mga totoong aparato; ginagamit ang mga ito upang magsulat at magbasa ng datos. Ang pangunahing pagkakaiba sa pagitan ng dalawa ay ang data para sa mga virtual na aparato ay ibinibigay ng operating system.







Ang / dev / null ay isang null na aparato – isang espesyal na uri ng virtual na aparato. Naroroon ito sa bawat sistema ng Linux, at ang layunin ng aparatong ito ay upang itapon ang anumang ipinadala dito at basahin ang End of File (EOF). Karamihan sa mga virtual na aparato ay ginagamit upang mabasa ang data; gayunpaman, ang / dev / null ay natatangi dahil ginagamit ito upang sugpuin ang anumang data na nakasulat dito. Sa mga simpleng salita, kumikilos ito bilang isang itim na butas para sa anumang data na nakasulat dito sa mga operating system ng Linux.



Ngayon, tingnan natin ang natitirang mga bahagi ng 2> / dev / null na utos



Taglarawan ng file - ‘2’

Ang bawat pagpapatupad ng utos sa Linux ay bumubuo ng tatlong nauugnay na mga file: karaniwang input, karaniwang output, at karaniwang mga file ng error. Ang operating system ng Linux ay tumutukoy sa bawat isa sa mga file na ito na may natatanging non-negatibong integer.





  • ‘0’ para sa karaniwang pag-input
  • '1' para sa karaniwang output
  • '2' para sa karaniwang error

Ang mga teknikal na termino para sa karaniwang pag-input, karaniwang output, at karaniwang mga stream ng error ay stdin, stdout, at stderr, ayon sa pagkakabanggit.

Alam namin na ang bilang na '2' sa utos na '2> / dev / null' ay tumutukoy sa karaniwang error (stderr) stream.



Operator ng pag-redirect ng file - ‘>’

Ang simbolo na '>' ay kilala bilang operator ng pag-redirect ng file. Ang layunin nito ay idirekta kung ano ang kaliwa nito sa mga utos sa kanang bahagi. Sa mas simpleng mga salita, ang anumang string ng data sa kaliwa ay ididirekta sa kanang bahagi ng operator.

Sa ngayon, naintindihan namin ang layunin sa likod ng bawat bahagi ng utos na 2> / dev / null. Ipinapadala nito ang error stream sa / dev / null, na itinapon ito. Sa madaling salita, ang utos na ito ay ginagamit upang itapon at sugpuin ang mga output ng error. Gayunpaman, kung ikaw ay isang bihasang beterano ng Linux, maaari mong tingnan ang mga nilalaman ng / dev / null file sa pamamagitan ng pagpapatakbo ng sumusunod na utos sa terminal:

$ls -ang /dev/wala

Karaniwang ginagamit ang utos na ito sa mga sitwasyon kung saan kailangan naming i-filter ang output batay sa mga error o kung nais naming itapon ang anumang output na nauugnay sa mga maling paglalarawan. Sa pagsulong, titingnan namin ang mga halimbawa ng paggamit nito sa isang Ubuntu system.

Gumagamit ng 2> / dev / null

Dahil alam namin na ang utos 2> / dev / null ay ginagamit upang itapon ang mga error, palagi itong gagamitin kasabay ng iba pang mga utos. Makakakita kami ng isang katulad na diskarte sa mga sumusunod na halimbawa. Maaari mong buksan ang terminal alinman sa pamamagitan ng pag-access nito sa pamamagitan ng menu ng mga application o paggamit ng keyboard shortcut Ctrl + Alt + T.

Sa unang halimbawa, magsasagawa kami ng isang paghahanap sa direktoryo / sys / para sa isang random na string (helloworld sa kasong ito). Ang utos para sa paghahanap ay grep, at ang argumento nito ay ang string ng paghahanap. Ipasok ang sumusunod na utos upang maghanap para sa iyong string.

$mahigpit na pagkakahawak -rhelloworld/sys/

Ang utos sa paghahanap na ito ay nakasalalay upang ipakita ang maraming mga error dahil ginagamit ito nang walang pag-access sa root. Ipapadala namin ang error stream nito sa / dev / null sa pamamagitan ng paggamit ng utos 2> / dev / null upang itapon ang mga error na ito.

$mahigpit na pagkakahawak -rhelloworld/sys/ 2> /dev/wala

Maaari naming makita na ang output ng utos ay mas neater at mas simple kaysa sa huling. Ang dahilan ay ang mga error ay itinatapon ng paggamit ng 2> / dev / null, at dahil ang grep command ay hindi makahanap ng anumang file na tumutugma sa aming string na 'helloworld', hindi ito nagpapakita ng anumang output.

Upang maunawaan ang paggamit ng / dev / null nang mas mahusay, titingnan namin ang sumusunod na halimbawa ng pag-ping sa anumang website (google.com sa aming kaso). Maaari mong i-ping ang google.com sa pamamagitan ng pagpapatupad ng sumusunod na utos:

$pingGoogle com

Kung nais naming ibukod ang lahat ng nabigong mga ping, maaari naming gamitin ang 2> / dev / null na utos:

$pingGoogle com2> /dev/wala

Sa kasong ito, ang karaniwang stream ng error (na nagpapakita ng mga nabigong mga ping sa google.com) ay ipinadala sa virtual na aparato / dev / null na itinapon ang mga ito.

Gayunpaman, kung nais naming makita lamang ang mga nabigong mga ping, maaari naming maisagawa ang sumusunod na utos:

$pingGoogle com1> /dev/wala

Dito, ipinapadala namin ang karaniwang output stream (stdout) sa / dev / null na aparato na itinapon ito. Dahil dito, naiwan lamang kami sa mga ping na nabigong maabot ang server ng google.com. Gayunpaman, sa aming kaso, walang mga nabigong mga ping. Maaari din nating idirekta ang stdout at stderr sa iba't ibang mga lokasyon. Nakatutulong ito kung nais nating itapon ang mga output at mag-imbak ng mga error sa isang log o kabaligtaran. Maaari mong patakbuhin ang sumusunod na utos upang iimbak ang mga nabigong mga ping sa isang error log habang itinatapon ang karaniwang output ng ping command:

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

Sa mga okasyon, baka gusto mong supilin ang lahat ng output ng isang utos (kasama ang karaniwang output at karaniwang mga error). Maaari nating makamit ito sa pamamagitan ng paggamit ng / dev / null na aparato sa isang bahagyang naiibang pamamaraan. Maaari mong i-type ang sumusunod na utos upang sugpuin ang lahat ng output:

$pingGoogle com> /dev/wala2> &1

Tandaan na ang pagkakasunud-sunod ng mga utos dito ay napakahalaga. Matapos maipatupad ang ping command, sasabihin ng '> / dev / null' ang system na sugpuin ang output, at ididirekta ng '2> & 1' ang karaniwang stream ng error sa karaniwang output. Sa ganitong paraan, ang lahat ng output ng utos ay itinapon.

Konklusyon

Pinaghiwalay namin ang utos ng 2> / dev / null at simpleng mga halimbawa sa artikulong ito, at sana, naintindihan mo ngayon kung ano ang ginagawa ng bawat piraso nito. Gayunpaman, ito ay lamang ang dulo ng malaking bato ng yelo; null aparato ay ginagamit sa isang maraming mga paraan sa bash programa. Ang ilan sa mga mas advanced na paggamit ay kasama ang pagsuri sa pagkakaroon ng file, pag-automate ng mga pag-install ng package, at pag-iwas sa mga script mula sa pagtakbo sa mga hindi nais na pagbubukod.