क्या / dev / null फ़ाइल में वास्तव में एक निश्चित आकार है?


23

मुझे अभी पता चला है कि /dev/nullयह एक फाइल है और डायरेक्टरी नहीं है।

मैं सोच रहा था कि यह एक वास्तविक फ़ाइल आकार है।

जवाबों:


35

/dev/nullवास्तव में एक फ़ाइल नहीं है। यह एक चरित्र डिवाइस है !

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

cअनुमतियाँ स्ट्रिंग का पहला अक्षर ( crw-rw-rw-) यह इंगित करता है। नियमित फ़ाइलों के लिए, यह एक -बजाय होगा।

तो आसान शब्दों में: /dev/nullएक फाइल नहीं है, लेकिन एक वर्चुअल डिवाइस फाइल सिस्टम में इस पथ पर मैप की जाती है, जिसका एक ही उद्देश्य है - डेटा को एक ब्लैक होल की तरह निगल और गायब करना।
हालांकि इसे इनपुट के रूप में भी इस्तेमाल किया जा सकता है, फिर यह एक खाली फाइल (आकार 0) की तरह काम करता है और तुरंत एक ईओएफ (फाइल का अंत) लौटाता है।

इसलिए आप वास्तव में यह नहीं कह सकते हैं कि /dev/nullएक विशिष्ट फ़ाइल आकार है, क्योंकि यह किसी भी भंडारण माध्यम पर एक नियमित फ़ाइल नहीं है।


इनपुट? यह एनयूएल पात्रों की अंतहीन सूची की आपूर्ति क्या करता है?
जोनाथन

@JonathonWisnoski मुझे ठीक से पता नहीं है और मैंने इसे इस तरह कभी इस्तेमाल नहीं किया है, इसलिए मैं आपको केवल स्टैकऑवरफ़्लो पर एक प्रश्न के लिए यह लिंक दे सकता हूं जहां इसे समझाया गया है।
बाइट कमांडर

7
@JonathonWisnoski, नहीं - यह इनपुट पर एक शून्य-आकार की फ़ाइल की तरह व्यवहार करता है, जिससे कि पहले पढ़ा गया यह रिपोर्ट करता है कि फ़ाइल EOF पर है।
Godlygeek

हां, यह सही है।
गॉडलीजेक

3
@JonathonWisnoski उस के लिए / देव / शून्य को देखते हैं।
पाओलो एबरमन

16

/dev/nullएक विशेष प्रकार की फाइल है जिसे " डिवाइस फाइल " कहा जाता है ।

डिवाइस फ़ाइलें कुछ कर्नेल फ़ंक्शन के लिए एक इंटरफ़ेस के रूप में कार्य करती हैं। वे केवल उस स्थान पर कब्जा कर लेते हैं जो निर्देशिका प्रविष्टि (" इनोड ") के लिए आवश्यक है, लेकिन कोई वास्तविक सामग्री नहीं है और वास्तविक फ़ाइल आकार नहीं है।

अन्य डिवाइस फाइलें उदाहरण के लिए /dev/sda(आमतौर पर एक एचडीडी या एसएसडी) हैं, /dev/zero(एक फ़ाइल जो शून्य के पढ़े जाने पर उत्पन्न होती है), या /dev/random(एक फ़ाइल जो पढ़ते समय यादृच्छिक डेटा उत्पन्न करती है)। वास्तव में सभी फाइलों के बारे में /dev/या तो डिवाइस फाइल या लिंक डिवाइस फाइल की ओर इशारा करते हैं।


जब मुझे इस उत्तर में से अधिकांश सही (+1) मिलते हैं, तो मुझे लगता है कि यह कहना थोड़ा भ्रामक है कि वे एक इनोड प्रविष्टि के आकार पर कब्जा कर लेते हैं। वे या तो किसी भी स्थान पर कब्जा नहीं करते हैं, अगर डिस्क स्थान की चर्चा करते हैं, या वे अधिक लेते हैं, अगर चरित्र उपकरणों के रूप में उनके पूरे कार्यान्वयन का जिक्र है।
कोस

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

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

क्या वास्तव में यह कहना सही है कि किसी फ़ाइल को उसके इनोड टेबल एंट्री द्वारा कब्जा कर लिया गया स्थान घेरता है? मुझे नहीं लगता कि यह आमतौर पर उन लोगों में शामिल है - जो लोग और सॉफ्टवेयर लोगों ने लिखे हैं - जब वे फ़ाइल आकार के बारे में बात करते हैं। विशेष रूप से, पूछना lsऔर duवर्ण विशेष उपकरण के आकार की रिपोर्ट करना /dev/nullया जैसे कि /dev/randomपैदावार 0
एलिया कगन

क्षमा करें, लेकिन मैंने इस उत्तर को अस्वीकार कर दिया, क्योंकि जब तक किसी ने मेरे द्वारा कही गई (जो मैं हो सकता है) गलत साबित कर दी, तब भी मुझे लगता है कि यह बताना सही नहीं है कि एक चरित्र उपकरण एक इनोड प्रविष्टि के स्थान पर कब्जा कर लेता है।
कोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.