2>/dev/null वास्तव में क्या करता है?

What Exactly Does 2 Dev Null Do

चाहे आप एक नए लिनक्स उपयोगकर्ता हों या एक अनुभवी बैश प्रोग्रामर, यह अत्यधिक संभावना है कि आपने क्रिप्टिक कमांड 2>/dev/null का सामना किया हो। यद्यपि यह आदेश तकनीकी रूप से जटिल लगता है, लेकिन इसका उद्देश्य बहुत सरल है। यह एक नल डिवाइस को संदर्भित करता है जिसका उपयोग विभिन्न कमांड के आउटपुट को दबाने के लिए किया जाता है। यह आलेख 2>/dev/null कमांड के प्रत्येक भाग को तोड़ देगा, इसके उद्देश्य की व्याख्या करेगा, और इसका उपयोग कैसे किया जाएगा इसके उदाहरण देखेंगे।

नल डिवाइस - '/ dev/null'

सभी Linux-आधारित सिस्टम में एक विशेषता होती है जिसे वर्चुअल डिवाइस कहा जाता है। ये वर्चुअल डिवाइस ऑपरेटिंग सिस्टम में वास्तविक फाइलों की तरह इंटरैक्ट करते हैं। ऐसे आभासी उपकरणों का कार्य वास्तविक उपकरणों के समान है; उनका उपयोग डेटा लिखने और पढ़ने के लिए किया जाता है। दोनों के बीच मुख्य अंतर यह है कि वर्चुअल डिवाइस के लिए डेटा की आपूर्ति ऑपरेटिंग सिस्टम द्वारा की जाती है।







/dev/null एक नल डिवाइस है - एक विशेष प्रकार का वर्चुअल डिवाइस। यह प्रत्येक Linux सिस्टम में मौजूद होता है, और इस डिवाइस का उद्देश्य इसे भेजी गई किसी भी चीज़ को त्यागना और फ़ाइल का अंत (EOF) पढ़ना है। अधिकांश आभासी उपकरणों का उपयोग डेटा पढ़ने के लिए किया जाता है; हालाँकि, /dev/null अद्वितीय है क्योंकि इसका उपयोग उस पर लिखे गए किसी भी डेटा को दबाने के लिए किया जाता है। सरल शब्दों में, यह किसी भी डेटा के लिए ब्लैक होल के रूप में कार्य करता है जो इसे लिनक्स ऑपरेटिंग सिस्टम में लिखा जाता है।



अब, 2 > /dev/null कमांड के शेष भागों पर एक नजर डालते हैं



फाइल डिस्क्रिप्टर - '2'

लिनक्स में प्रत्येक कमांड निष्पादन तीन संबद्ध फाइलें उत्पन्न करता है: मानक इनपुट, मानक आउटपुट और मानक त्रुटि फ़ाइलें। लिनक्स ऑपरेटिंग सिस्टम इनमें से प्रत्येक फाइल को एक अद्वितीय गैर-ऋणात्मक पूर्णांक के साथ संदर्भित करता है।





  • मानक इनपुट के लिए '0'
  • मानक आउटपुट के लिए '1'
  • मानक त्रुटि के लिए '2'

मानक इनपुट, मानक आउटपुट और मानक त्रुटि धाराओं के लिए तकनीकी शब्द क्रमशः स्टड, स्टडआउट और स्टैडर हैं।

हम जानते हैं कि कमांड '2>/dev/null' में संख्या '2' मानक त्रुटि (stderr) स्ट्रीम को संदर्भित करती है।



फ़ाइल पुनर्निर्देशन ऑपरेटर - '>'

'>' प्रतीक को फ़ाइल पुनर्निर्देशन ऑपरेटर के रूप में जाना जाता है। इसका उद्देश्य यह निर्देशित करना है कि इसके बाईं ओर क्या है दाईं ओर के आदेशों के लिए। सरल शब्दों में, बाईं ओर डेटा की कोई भी स्ट्रिंग ऑपरेटर के दाईं ओर निर्देशित की जाएगी।

अब तक, हम 2>/dev/null कमांड के प्रत्येक घटक के पीछे के उद्देश्य को समझ चुके हैं। यह त्रुटि स्ट्रीम को /dev/null पर भेजता है, जो इसे छोड़ देता है। दूसरे शब्दों में, इस कमांड का उपयोग एरर आउटपुट को छोड़ने और दबाने के लिए किया जाता है। हालाँकि, यदि आप एक अनुभवी लिनक्स अनुभवी हैं, तो आप टर्मिनल में निम्न कमांड चलाकर /dev/null फ़ाइल की सामग्री को देख सकते हैं:

$रास -NS /देव/शून्य

यह कमांड आमतौर पर उन परिदृश्यों में उपयोग किया जाता है जहां हमें त्रुटियों के आधार पर आउटपुट को फ़िल्टर करने की आवश्यकता होती है या जब हम गलत विवरण से जुड़े किसी भी आउटपुट को छोड़ना चाहते हैं। आगे बढ़ते हुए, हम उबंटू सिस्टम पर इसके उपयोग के उदाहरण देखेंगे।

2>/dev/null . का उपयोग करना

चूँकि हम जानते हैं कि कमांड 2>/dev/null का उपयोग त्रुटियों को दूर करने के लिए किया जाता है, यह हमेशा अन्य कमांड के साथ संयोजन में उपयोग किया जाएगा। हम निम्नलिखित उदाहरणों में एक समान दृष्टिकोण देखेंगे। आप टर्मिनल को या तो एप्लिकेशन मेनू के माध्यम से एक्सेस करके या कीबोर्ड शॉर्टकट Ctrl + Alt + T का उपयोग करके खोल सकते हैं।

पहले उदाहरण में, हम एक यादृच्छिक स्ट्रिंग (इस मामले में helloworld) के लिए /sys/ निर्देशिका में खोज करेंगे। खोज के लिए आदेश grep है, और इसका तर्क खोज स्ट्रिंग होगा। अपनी स्ट्रिंग खोजने के लिए निम्न आदेश दर्ज करें।

$पकड़ -आरनमस्ते दुनिया/sys/

यह खोज कमांड कई त्रुटियों को प्रदर्शित करने के लिए बाध्य है क्योंकि इसका उपयोग बिना रूट एक्सेस के किया जा रहा है। हम इन त्रुटियों को त्यागने के लिए 2>/dev/null कमांड का उपयोग करके इसकी एरर स्ट्रीम /dev/null को भेजेंगे।

$पकड़ -आरनमस्ते दुनिया/sys/ 2> /देव/शून्य

हम देख सकते हैं कि कमांड का आउटपुट पिछले वाले की तुलना में बहुत अधिक स्वच्छ और सरल है। कारण यह है कि त्रुटियों को 2> / देव / नल का उपयोग करके त्याग दिया जा रहा है, और चूंकि grep कमांड हमारे स्ट्रिंग 'हेलोवर्ल्ड' से मेल खाने वाली कोई फ़ाइल नहीं ढूंढ पा रहा था, यह कोई आउटपुट नहीं दिखाता है।

/dev/null के उपयोग को बेहतर ढंग से समझने के लिए, हम किसी भी वेबसाइट (हमारे मामले में google.com) को पिंग करने के निम्नलिखित उदाहरण को देखेंगे। आप निम्न आदेश निष्पादित करके google.com को पिंग कर सकते हैं:

$गुनगुनाहटGoogle.com

यदि हम सभी विफल पिंग्स को बाहर करना चाहते हैं, तो हम 2>/dev/null कमांड का उपयोग कर सकते हैं:

$गुनगुनाहटGoogle.com2> /देव/शून्य

इस मामले में, मानक त्रुटि स्ट्रीम (जो google.com को विफल पिंग्स दिखाती है) वर्चुअल डिवाइस /dev/null पर भेजी जाती है जो उन्हें छोड़ देता है।

हालांकि, अगर हम केवल असफल पिंग्स देखना चाहते हैं, तो हम निम्न आदेश निष्पादित कर सकते हैं:

$गुनगुनाहटGoogle.com1> /देव/शून्य

यहां, हम मानक आउटपुट स्ट्रीम (stdout) को /dev/null डिवाइस पर भेजते हैं जो इसे छोड़ देता है। नतीजतन, हमारे पास केवल वही पिंग्स बचे हैं जो google.com सर्वर तक पहुंचने में विफल रहे। हालांकि, हमारे मामले में, कोई असफल पिंग्स नहीं थे। हम विभिन्न स्थानों पर stdout और stderr को भी निर्देशित कर सकते हैं। यह उपयोगी है अगर हम आउटपुट को छोड़ना चाहते हैं और लॉग में त्रुटियों को स्टोर करना चाहते हैं या इसके विपरीत। आप पिंग कमांड के मानक आउटपुट को त्यागते समय विफल पिंग्स को त्रुटि लॉग में संग्रहीत करने के लिए निम्न कमांड चला सकते हैं:

$गुनगुनाहटGoogle.com1> /देव/शून्य2>त्रुटि लॉग

अवसरों पर, आप कमांड के सभी आउटपुट (मानक आउटपुट और मानक त्रुटियों सहित) को दबाना चाह सकते हैं। हम इसे थोड़ा अलग तरीके से /dev/null डिवाइस का उपयोग करके प्राप्त कर सकते हैं। आप सभी आउटपुट को दबाने के लिए निम्न कमांड टाइप कर सकते हैं:

$गुनगुनाहटGoogle.com> /देव/शून्य2> और1

ध्यान दें कि यहां आदेशों का क्रम बहुत महत्वपूर्ण है। पिंग कमांड को निष्पादित करने के बाद, '>/dev/null' सिस्टम को आउटपुट को दबाने के लिए कहता है, और '2>&1' मानक त्रुटि स्ट्रीम को मानक आउटपुट पर निर्देशित करता है। इस तरह, कमांड के सभी आउटपुट को छोड़ दिया जाता है।

निष्कर्ष

हमने इस लेख में 2>/dev/null कमांड और सरल उदाहरणों को विच्छेदित किया है, और उम्मीद है, अब आप समझ गए होंगे कि इसका प्रत्येक बिट क्या करता है। हालाँकि, यह सिर्फ हिमशैल का सिरा है; बैश प्रोग्रामिंग में कई तरह से नल उपकरणों का उपयोग किया जाता है। कुछ अधिक उन्नत उपयोगों में फ़ाइल अस्तित्व की जाँच करना, पैकेज इंस्टॉलेशन को स्वचालित करना और स्क्रिप्ट को अवांछित अपवादों में चलने से बचाना शामिल है।