क्या लिनक्स में / dev / null के बराबर निर्देशिका है?


84

किसी एप्लिकेशन को कॉन्फ़िगर करते समय, /dev/nullयदि आप एप्लिकेशन को खाली फ़ाइल पढ़ने के लिए चाहते हैं, तो आप अक्सर कॉन्फ़िगरेशन फ़ाइल के रूप में उपयोग कर सकते हैं। लेकिन, यदि एप्लिकेशन निर्देशिका से फ़ाइलों की सूची पढ़ता है, तो आप इस ट्रिक का उपयोग नहीं कर सकते। आपको इसे पढ़ने के लिए एक खाली निर्देशिका देने की आवश्यकता होगी।

मैं सोच रहा था: क्या लिनक्स के पास एक डिफ़ॉल्ट खाली निर्देशिका है जिसका उपयोग ऐसे उद्देश्यों के लिए किया जा सकता है? मुझे पता है कि ओपनएसएसएच थोड़ी देर के लिए इस्तेमाल किया / वार / खाली है, और मैं निश्चित रूप से खुद एक खाली डायर बना सकता हूं, लेकिन शायद एफएचएस ने इसके लिए एक मानक निर्देशिका निर्दिष्ट की है?


8
मेरे सिस्टम पर, /var/emptyखाली नहीं है, लेकिन इसमें एक फ़ोल्डर है sshd, जिसे आप संभवतः उपयोग नहीं करना चाहते हैं।
11

12
बस एक बिंदु: लिखने के/dev/null लिए पढ़ने के लिए विशेष पहलू इतना नहीं है लिखा हुआ डेटा /dev/nullगायब हो जाता है। इसलिए, एक निर्देशिका समतुल्य एक ऐसी जगह mv yourfile /dev/emptyहोगी, जहां आपकी फ़ाइल को हटाने का परिणाम होगा।
वाइल्डकार्ड 21

4
@Wildcard मुझे लगता है कि आप मतलब है mv yourfile /dev/empty/। यदि आप करते हैं mv yourfile /dev/empty, तो आप विशेष निर्देशिका को बदलने की कोशिश कर रहे हैं।
Rhymoid

6
@ जूल्स नहीं, यह नहीं है। आप के साथ कुछ भी आरंभ नहीं कर सकते हैं /dev/nullऔर ddक्योंकि ddइससे पहले कि यह एक भी बाइट लिखा है एक EOF मिल जाएगा। मुझे लगता है कि आप सोच रहे हैं /dev/zero, जिसका उपयोग अक्सर किसी विशेष संख्या में शून्य को भरने या उत्पन्न करने के लिए किया जाता है।
जॉनसन

2
@MichealJohnson तुम सही हो, मेरी गलती है, मैं उलझन /dev/nullमें था /dev/zero
जूल्स

जवाबों:


66

FHS कोई "मानक" खाली निर्देशिका प्रदान करता है।

लिनक्स सिस्टम के लिए एक निर्देशिका प्रदान करना आम है /var/empty, लेकिन यह निर्देशिका FHS में परिभाषित नहीं है और वास्तव में खाली नहीं हो सकती है। इसके बजाय, कुछ डेमॉन यहां अपनी खाली निर्देशिका बनाएंगे। उदाहरण के लिए, Opensh /var/empty/sshdविशेषाधिकार अलगाव के लिए खाली निर्देशिका का उपयोग करता है ।

यदि खाली निर्देशिका की आपकी आवश्यकता क्षणिक है, तो आप एक उपनिर्देशिका के रूप में /runया स्वयं एक खाली निर्देशिका बना सकते हैं /tmp। यदि आप प्रोग्राम के बाहर ऐसा कर रहे हैं, तो आप इसके लिए उपयोग कर सकते हैं mktemp -d, या mkdtemp(3)अपने प्रोग्राम के अंदर C फ़ंक्शन का उपयोग कर सकते हैं । हालाँकि यदि आपको हमेशा खाली निर्देशिका की आवश्यकता होती है, तो /var/emptyओपनश करता है के तहत एक बनाने पर विचार करें ।

इस उपयोग के मामले में, के तहत एक निर्देशिका बनाना /tmpसंभवतः सबसे अच्छा फिट है, हालांकि व्यवहार में यह बहुत मायने नहीं रखता है कि आपने इसे कहाँ रखा है।


5
मैं उपनिर्देशिका बनाने की सिफारिश नहीं करूंगा /var/empty, क्योंकि इसका उपयोग करने वाले किसी भी कार्यक्रम (जैसे कि डिफ़ॉल्ट डिफ़ॉल्ट में ओपनएसएसएच ) से यह वास्तव में खाली होने की उम्मीद हो सकती है। (यह /var/empty/sshdबात एक अजीब /var/run/sshd
रेडहैट-इस्म के रूप में

3
@IlmariKaronen आपके द्वारा लिंक किया गया बिट कोड आपके ASSS का समर्थन नहीं करता है कि OpenSSH /var/emptyखाली होने की उम्मीद करता है। क्या इसके लिए कोई और जगह चाहिए?
माइकल हैम्पटन

2
@ इल्मारिकारोन एचएम, वह दस्तावेज पुराना है। यह संदर्भित करता है, /var/emptyलेकिन कोड वास्तव में उपयोग करता है /var/empty/sshd। पुनः प्रयास करें। :)
माइकल हैम्पटन

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

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

37

आप mktemp -dडिफ़ॉल्ट रूप से, सुरक्षित अनुमतियों के साथ एक नया खाली अस्थायी निर्देशिका बनाने के लिए उपयोग कर सकते हैं /tmp/। उपयोगिता नई निर्देशिका के पथ को आउटपुट करेगी STDOUT, इसलिए यह शेल में उपयोगी है।

यह वैसे भी एक systemd यूनिट फ़ाइल से अधिक पोर्टेबल है।


हां, आप कर सकते हैं, लेकिन यह अव्यवहारिक है यदि उस निर्देशिका को एक कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट किया जाना है। आप उसके लिए एक स्थायी डायर चाहते हैं।
रोलावनमीयर

22

इस यूनिक्स प्रश्न में "ब्लैकहोल" निर्देशिका बनाने के लिए कुछ सुझाव हैं, जिसमें एक nullfs FUSE फाइल सिस्टम भी शामिल है


1
मैं नहीं जानता कि क्यों mktemp / mkdtemp उत्तर को इतनी भारी मात्रा में उत्कीर्ण किया जाता है जब यह सही उत्तर होता है। nullfs / dev / null के समतुल्य है।
chx

11

सेवाओं के लिए systemd PrivateTmpनिजी /tmpऔर /var/tmpनिर्देशिकाएँ बनाने का विकल्प प्रदान करता है जो उस सेवा के लिए नाम स्थान के बाहर की प्रक्रियाओं द्वारा साझा नहीं की जाती हैं और जो खाली (शुरू में) होनी चाहिए।

[Service]
ExecStart=...
PrivateTmp=yes 

7
प्रोग्राम अन्य अस्थायी फ़ाइलों को बना सकता है, इसलिए आप मान नहीं सकते /tmpकि यह केवल नामांकित है क्योंकि यह खाली है।
माइकल हैम्पटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.