तकनीकी शब्दों में, "/ dev/null" एक वर्चुअल डिवाइस फ़ाइल है। जहां तक कार्यक्रमों का संबंध है, इन्हें वास्तविक फाइलों की तरह ही माना जाता है। उपयोगिताएँ इस प्रकार के स्रोत से डेटा का अनुरोध कर सकती हैं, और ऑपरेटिंग सिस्टम उन्हें डेटा खिलाता है। लेकिन, डिस्क से पढ़ने के बजाय, ऑपरेटिंग सिस्टम इस डेटा को गतिशील रूप से उत्पन्न करता है। ऐसी फ़ाइल का एक उदाहरण “/dev/zero” है।
इस मामले में, हालांकि, आप एक डिवाइस फ़ाइल को लिखेंगे। आप जो कुछ भी "/ dev / null" को लिखते हैं, उसे छोड़ दिया जाता है, भुला दिया जाता है, शून्य में फेंक दिया जाता है। यह समझने के लिए कि यह क्यों उपयोगी है, आपको सबसे पहले Linux या *nix प्रकार के ऑपरेटिंग सिस्टम में मानक आउटपुट और मानक त्रुटि की बुनियादी समझ होनी चाहिए।
stdout और stder
एक कमांड-लाइन उपयोगिता दो प्रकार के आउटपुट उत्पन्न कर सकती है। मानक आउटपुट stdout को भेजा जाता है। त्रुटियाँ stderr को भेजी जाती हैं।
डिफ़ॉल्ट रूप से, stdout और stderr आपकी टर्मिनल विंडो (या कंसोल) से जुड़े होते हैं। इसका मतलब है कि stdout और stderr को भेजी गई कोई भी चीज़ आपकी स्क्रीन पर सामान्य रूप से प्रदर्शित होती है। लेकिन शेल पुनर्निर्देशन के माध्यम से, आप इस व्यवहार को बदल सकते हैं। उदाहरण के लिए, आप किसी फ़ाइल पर stdout को पुनर्निर्देशित कर सकते हैं। इस तरह, स्क्रीन पर आउटपुट प्रदर्शित करने के बजाय, यह आपके लिए बाद में पढ़ने के लिए एक फ़ाइल में सहेजा जाएगा - या आप स्टडआउट को किसी भौतिक डिवाइस, जैसे डिजिटल एलईडी या एलसीडी डिस्प्ले पर रीडायरेक्ट कर सकते हैं।
यदि आप और जानना चाहते हैं तो पाइप और पुनर्निर्देशन के बारे में एक पूरा लेख उपलब्ध है।
2>
के साथ आप मानक त्रुटि संदेशों को पुनर्निर्देशित करते हैं। उदाहरण:2>/dev/null
या2>/home/user/error.log
।1>
के साथ आप मानक आउटपुट को पुनर्निर्देशित करते हैं।&>
के साथ आप मानक त्रुटि और मानक आउटपुट दोनों को पुनर्निर्देशित करते हैं।
उस आउटपुट से छुटकारा पाने के लिए /dev/null का उपयोग करें जिसकी आपको आवश्यकता नहीं है
चूंकि आउटपुट दो प्रकार के होते हैं, मानक आउटपुट और मानक त्रुटि, पहला उपयोग केस एक प्रकार या दूसरे को फ़िल्टर करना है। एक व्यावहारिक उदाहरण के माध्यम से समझना आसान है। मान लें कि आप पावर सेटिंग्स को संदर्भित करने वाली फ़ाइलों को खोजने के लिए "/ sys" में एक स्ट्रिंग की तलाश कर रहे हैं।
grep -r power /sys/
बहुत सारी फाइलें होंगी जिन्हें एक नियमित, गैर-रूट उपयोगकर्ता नहीं पढ़ सकता है। इसके परिणामस्वरूप कई "अनुमति अस्वीकृत" त्रुटियां होंगी।
ये आउटपुट को अव्यवस्थित करते हैं और उन परिणामों को खोजना कठिन बनाते हैं जिनकी आप तलाश कर रहे हैं। चूंकि "अनुमति अस्वीकृत" त्रुटियां stderr का हिस्सा हैं, इसलिए आप उन्हें "/ dev/null" पर रीडायरेक्ट कर सकते हैं।
grep -r power /sys/ 2>/dev/null
जैसा कि आप देख सकते हैं, इसे पढ़ना बहुत आसान है।
अन्य मामलों में, रिवर्स करना उपयोगी हो सकता है:मानक आउटपुट को फ़िल्टर करें ताकि आप केवल त्रुटियां देख सकें।
ping google.com 1>/dev/null
ऊपर दिया गया स्क्रीनशॉट दिखाता है कि, पुनर्निर्देशित किए बिना, पिंग अपने सामान्य आउटपुट को प्रदर्शित करता है जब वह गंतव्य मशीन तक पहुंच सकता है। दूसरे कमांड में, नेटवर्क ऑनलाइन होने पर कुछ भी प्रदर्शित नहीं होता है, लेकिन जैसे ही यह डिस्कनेक्ट हो जाता है, केवल त्रुटि संदेश प्रदर्शित होते हैं।
आप stdout और stderr दोनों को दो अलग-अलग स्थानों पर पुनर्निर्देशित कर सकते हैं।
ping google.com 1>/dev/null 2>error.log
इस मामले में, स्टडआउट संदेश बिल्कुल भी प्रदर्शित नहीं होंगे, और त्रुटि संदेशों को "error.log" फ़ाइल में सहेजा जाएगा।
सभी आउटपुट को /dev/null पर रीडायरेक्ट करें
कभी-कभी सभी आउटपुट से छुटकारा पाना उपयोगी होता है। ऐसा करने के दो तरीके हैं।
grep -r power /sys/ >/dev/null 2>&1
स्ट्रिंग >/dev/null
इसका अर्थ है "stdout को /dev/null पर भेजें," और दूसरा भाग, 2>&1
, का अर्थ है stderr को stdout पर भेजना। इस मामले में आपको केवल "1" के बजाय स्टडआउट को "&1" के रूप में संदर्भित करना होगा। “2>1” लिखने से स्टडआउट को “1” नाम की फ़ाइल पर रीडायरेक्ट कर दिया जाएगा।
यहां ध्यान देने योग्य बात यह है कि आदेश महत्वपूर्ण है। अगर आप रीडायरेक्ट पैरामीटर को इस तरह उलट देते हैं:
grep -r power /sys/ 2>&1 >/dev/null
यह इरादा के अनुसार काम नहीं करेगा। ऐसा इसलिए है क्योंकि जैसे ही 2>&1
व्याख्या की जाती है, stderr को stdout पर भेजा जाता है और स्क्रीन पर प्रदर्शित किया जाता है। अगला, "/ dev/null" पर भेजे जाने पर स्टडआउट दबा दिया जाता है। अंतिम परिणाम यह है कि आप सभी आउटपुट को दबाने के बजाय स्क्रीन पर त्रुटियां देखेंगे। अगर आपको सही क्रम याद नहीं है, तो एक आसान रीडायरेक्ट है जो टाइप करना बहुत आसान है:
grep -r power /sys/ &>/dev/null
इस मामले में, &>/dev/null
"इस स्थान पर stdout और stderr दोनों को पुनर्निर्देशित करें" कहने के बराबर है।
अन्य उदाहरण जहां /dev/null पर रीडायरेक्ट करना उपयोगी हो सकता है
मान लें कि आप देखना चाहते हैं कि आपकी डिस्क अनुक्रमिक डेटा को कितनी तेज़ी से पढ़ सकती है। परीक्षण अत्यंत सटीक नहीं है लेकिन पर्याप्त सटीक है। आप dd
का उपयोग कर सकते हैं इसके लिए, लेकिन dd या तो stdout को आउटपुट करता है या किसी फ़ाइल को लिखने का निर्देश दिया जा सकता है। of=/dev/null
. के साथ आप dd को इस वर्चुअल फ़ाइल में लिखने के लिए कह सकते हैं। आपको यहां शेल पुनर्निर्देशन का उपयोग करने की भी आवश्यकता नहीं है। if=
पढ़ने के लिए इनपुट फ़ाइल का स्थान निर्दिष्ट करता है; of=
आउटपुट फ़ाइल का नाम निर्दिष्ट करता है, जहाँ लिखना है।
dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct
कुछ परिदृश्यों में, आप यह देखना चाहेंगे कि आप किसी सर्वर से कितनी तेजी से डाउनलोड कर सकते हैं। लेकिन आप अनावश्यक रूप से अपनी डिस्क पर नहीं लिखना चाहते हैं। बस इतना ही, नियमित फ़ाइल में न लिखें, "/dev/null" पर लिखें।
wget -O /dev/null https://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso
निष्कर्ष
उम्मीद है, इस लेख के उदाहरण आपको “/dev/null” का उपयोग करने के अपने स्वयं के रचनात्मक तरीके खोजने के लिए प्रेरित कर सकते हैं।
इस विशेष डिवाइस फ़ाइल के लिए एक दिलचस्प उपयोग-मामला जानें? नीचे एक टिप्पणी छोड़ें और ज्ञान साझा करें!