मैं डेबियन सिस्टम के लिए एक डेमन प्रक्रिया लिख रहा हूं जिसमें यूनिक्स डोमेन सॉकेटC
का उपयोग किया गया है ।
यदि डेमॉन प्रक्रिया की वर्किंग डायरेक्टरी रूट डायरेक्टरी है, तो क्या फाइल सिस्टम पर सॉकेट लगाने के लिए एक मुहावरेदार डायरेक्टरी है?
मैं डेबियन सिस्टम के लिए एक डेमन प्रक्रिया लिख रहा हूं जिसमें यूनिक्स डोमेन सॉकेटC
का उपयोग किया गया है ।
यदि डेमॉन प्रक्रिया की वर्किंग डायरेक्टरी रूट डायरेक्टरी है, तो क्या फाइल सिस्टम पर सॉकेट लगाने के लिए एक मुहावरेदार डायरेक्टरी है?
जवाबों:
वे आमतौर पर /tmp
या उसके बाद एक उपनिर्देशिका में पाए जाते हैं। ध्यान दें कि सब कुछ /tmp
शटडाउन में क्षरण के अधीन है - ऐसा नहीं है कि यह जरूरी मिटा दिया गया है, बस सावधान रहें कि यह हो सकता है , इसलिए यदि आप इसका उपयोग करते हैं, तो जांचें कि क्या आपको हर बार अपना उपनिर्देशिका बनाना है। यदि आप अनुमतियों के माध्यम से पहुँच को प्रतिबंधित करना चाहते हैं, तो आप एक उपनिर्देशिका का उपयोग करना चाहते हैं, क्योंकि /tmp
दुनिया पढ़ने योग्य है।
/run
और /var/run
(जो एक साथ सहानुभूति हो सकती है) एक समान तरीके से उपयोग किए जाते हैं, लेकिन वे आम तौर पर tmpfs फाइल सिस्टम के रूप में माउंट किए जाते हैं - जिसका अर्थ है कि वे बूट पर बनाए गए हैं और मेमोरी में रहते हैं , डिस्क पर नहीं (इसलिए उपयोग न करें कि डंप करने की जगह के रूप में) डेटा की प्रचुर मात्रा में)। एक रनटाइम सॉकेट के लिए, यह शायद एक अच्छा विकल्प है।
ध्यान दें कि /run
, और सिवाय अन्य सभी निर्देशिकाओं का उल्लेख किया गया है /tmp
, केवल जड़ से लिखने योग्य हैं। एक सिस्टम प्रक्रिया के लिए, यह ठीक है, लेकिन यदि एप्लिकेशन को एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता द्वारा चलाया जा सकता है, तो आप या तो /tmp
कहीं एक स्थायी निर्देशिका का उपयोग करना या बनाना चाहते हैं और उस पर अनुमतियाँ सेट कर सकते हैं या उपयोगकर्ता के $ HOME में किसी स्थान का उपयोग कर सकते हैं।
स्थापना के दौरान /usr/share
(या /usr/local/share
) में एक निर्देशिका बनाना संभव है । निर्देशिकाएँ और सामग्री वहाँ संभवतः बूट के पार नहीं हैं क्योंकि वे /tmp
या में होंगे /run
। हालांकि, जैसा कि जोर्डनम टिप्पणियों में बताते हैं, /usr
केवल-पढ़ने के लिए माउंट किया जा सकता है और लिनक्स फाइलसिस्टम पदानुक्रम दिशानिर्देश इसे प्रतिबिंबित करते हैं । बेशक, यह केवल तभी पढ़ा जा सकता है जब आपका एप्लिकेशन इंस्टॉल हो, इसलिए यदि आप वहां सॉकेट बनाने में सहज हैं, तो आप इसे छोड़ सकते हैं और बाद में इसका उपयोग कर सकते हैं (आप तब भी सॉकेट को लिख पाएंगे फ़ाइल केवल पढ़ने के लिए है)।
यदि आप चाहते हैं कि बूटों में लगातार कुछ न हो, /etc
जो केवल रीड-माउंटेड न हो, एक काफी सुरक्षित शर्त है, क्योंकि यह अक्सर सिस्टम-वाइड कॉन्फ़िगरेशन और री-कॉन्फ़िगरेशन के लिए उपयोग किया जाता है। OTOH, ऐसी प्रणालियाँ होना संभव है जहाँ संपूर्ण रूट फाइलसिस्टम में अंतर्निहित डिवाइस केवल-पढ़ने के लिए है (उदाहरण के लिए, एम्बेडेड सिस्टम), दूसरे डिवाइस पर tmp और / run के साथ / (शायद: tmpfs मेमोरी में)। तो दो सबसे मजबूत रणनीति प्रतीत होगी:
अनुप्रयोग स्थापित होने पर सॉकेट को स्थायी स्थान पर स्थापित करें।
एक निर्देशिका बनाएँ /run
या /var/run
रनटाइम पर और सॉकेट को वहां रखें।
केवल उसी में काम करो /tmp
।
पहले वाले का लाभ यह है कि कोई भी बात नहीं है, एक बार ऐप इंस्टॉल हो जाने पर, आपके पास उपयोग करने के लिए एक सॉकेट होगा। दूसरे का लाभ यह है कि यह समझदार प्रोग्रामिंग के लिए अधिक अनुकूल हो सकता है। तीसरे का लाभ यह है कि सुपरसुसर विशेषाधिकारों की आवश्यकता नहीं है। यदि आप बाद में अपना विचार बदलते हैं, तो इसे एक कार्यान्वयन से दूसरे में बदलना आसान होना चाहिए।
अंत में, जैसा कि बैचैक्स लाया गया था, आपको कम से कम इसके लिए कॉन्फ़िगरेशन विकल्प की पेशकश करनी चाहिए, जो कि आपकी पसंद की डिफ़ॉल्ट पर वापस गिरती है।
/run
या /var/run
अक्सर रूट प्रक्रियाओं के लिए भी उपयोग किया जाता है।
/tmp
। मैं उसे संपादित करूँगा।
/usr
केवल पढ़ने के रूप में रखा जा सकता है। रनटाइम के दौरान फ़ाइलें कभी नहीं बनाई जानी चाहिए। अन्य सुझाव अच्छे हैं।
/tmp/.APPNAME/.APPSOCK
क्योंकि डेमॉन को लगातार डेटा की कोई आवश्यकता नहीं है।
/tmp
और /run
है कि केवल रूट पर लिखने की अनुमति है /run
।