मुझे यूनिक्स आधारित ऐप्स के लिए अपना एप्लिकेशन कैश कहां रखना चाहिए?


10

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

जवाबों:


12

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

कुछ उदाहरण:

  • उबंटू पर, 64-बिट लाइब्रेरी / usr / lib या usr / lib / x86_64-linux / और 32-बिट लाइब्रेरी / usr / lib32 में जाते हैं
  • फेडोरा पर, 64-बिट पुस्तकालय / usr / lib64 में जाते हैं और 32-बिट पुस्तकालय / usr / lib में जाते हैं
  • फेडोरा के पास अब कोई / परिवाद या / बिन की धारणा नहीं है (वे समकक्ष / usr निर्देशिकाओं में केवल सहानुभूति रखते हैं)
  • अधिकांश लिनक्स डिस्ट्रोस उपयोगकर्ता-स्थापित सॉफ़्टवेयर (जो कि पैकेज प्रबंधक द्वारा प्रदान नहीं किया गया सॉफ़्टवेयर है) / usr / लोकल / (lib, बिन, इत्यादि, var, और इसी तरह / usr / लोकल /) में इंस्टॉल करना पसंद करते हैं
  • कई लिनक्स डिस्ट्रोस कैश के लिए / var / कैश का उपयोग करते हैं, हालांकि अगर यह "क्षणिक" है (इससे कोई फर्क नहीं पड़ता कि यह खो जाता है), इसे / tmp में संग्रहीत किया जा सकता है
  • कुछ "एप्लिकेशन एक फ़ोल्डर में" प्रकार के एप्लिकेशन सब कुछ / उप ऑप्ट (विशेषकर क्लिकवैप इंस्टालर) के एक उपनिर्देशिका में संग्रहीत करते हैं
  • कुछ एप्लिकेशन उपयोगकर्ता की ~ निर्देशिका (आमतौर पर / घर / उपयोगकर्ता नाम) के एक उपनिर्देशिका में स्थापित होते हैं
  • सोलारिस पर, मैंने / srv को / ऑप्ट या कभी-कभी / srv www- रूट के समान उपयोग किया है

इसका उत्तर यह है कि किसी भी ऑपरेटिंग सिस्टम पर कुछ भी स्टोर करने के लिए विहित, सामाजिक रूप से स्वीकार्य, अच्छी तरह से एकीकृत सम्मेलन, चाहे वह लिनक्स, बीएसडी, सोलारिस, एचपी-यूएक्स आदि का डिस्ट्रो हो, सटीक परिस्थितियों पर निर्भर है । विशेष रूप से:

  • पैकेज कैसे वितरित किया जाता है?
  • क्या उपयोगकर्ता को इसे स्थापित करने के लिए रूट एक्सेस की आवश्यकता है?
  • क्या पैकेज सिस्टम पर पहले से मौजूद अन्य पैकेजों पर निर्भर करता है या एकीकृत होता है, जैसे एक प्लगइन या ऐड-ऑन?
  • क्या पैकेज वितरण के अपस्ट्रीम रिपॉजिटरी में एकीकृत होने जा रहा है, ताकि उपयोगकर्ता किसी वेबसाइट को इंस्टॉलर डाउनलोड किए बिना इसे कमांड की तरह उपयोग कर सकें apt-getया yumइसे सीधे इंस्टॉल कर सकें?
  • क्या सॉफ्टवेयर प्रत्येक अलग-अलग उपयोगकर्ता के लिए अलग कॉन्फ़िगरेशन होगा जो कंप्यूटर का संचालन करता है?
  • क्या सॉफ्टवेयर में वैश्विक कॉन्फ़िगरेशन सेटिंग्स होंगी जो केवल प्रशासक (रूट) द्वारा ही होनी चाहिए?
  • क्या सॉफ़्टवेयर को init सिस्टम (जैसे बूट पर शुरू करने के लिए) के साथ एकीकृत करने की आवश्यकता है?

सभी कारकों पर विचार किए बिना इसके लिए कोई सीधा जवाब नहीं है। हालाँकि, उबंटू 12.04 के लिए, विशेष रूप से , यदि आप .debएक पीपीए में वितरित की जाने वाली फ़ाइल में अपने पैकेज का निर्माण कर रहे हैं या उबंटू के अपने पैकेज रिपॉजिटर्स ( mainया universe) में जमा करने के लिए , तो मैं आपको सलाह दूंगा कि कैश को स्टोर किया जाए /var/cache। लेकिन यह केवल उबंटू के लिए है और आपको निश्चित रूप से इस धारणा को लागू नहीं करना चाहिए कि हर डिस्ट्रो या यूनिक्स-आधारित ओएस इस स्वीकार्य पर विचार करेगा।

इसके अलावा, अगर सिस्टम के बूटों में कैश डेटा को बचाने के कोई फायदे नहीं हैं, तो मुझे लगता है कि यह / tmp में भी हो सकता है।

ध्यान दें कि आप अपने प्रोग्राम का उपयोग करने वाली हर प्रकार की फ़ाइल के लिए इन पाथिंग कन्वेंशन की समस्याओं में भाग लेने जा रहे हैं : साझा डेटा, निष्पादन योग्य फाइलें, लाइब्रेरीज़, फ़ाइल्स, इमेज, साउंड, वेब पेज और ऑन और ऑन। इसलिए मुझे आश्चर्य होगा, यदि आप कैश फ़ाइलों के बारे में पूछ रहे हैं, तो आप अन्य फ़ाइल प्रकारों को संभालने की योजना कैसे बना रहे हैं। क्या आप सिर्फ भोली धारणाएं बना रहे हैं और उम्मीद कर रहे हैं कि कोई भी आपसे असहमत नहीं है? यदि आपने कोई उबंटू डॉक्स या मानकों को नहीं पढ़ा है, जिसमें यह सुझाव दिया गया है कि उन्हें कहाँ रखा जाए, तो यह केवल एक बात या किसी अन्य बात को मान लेना एक बुरा विचार है। उदाहरण के लिए, हमेशा / usr / lib में लाइब्रेरीज़ चिपके रहना एक गलती हो सकती है, क्योंकि स्थिति के आधार पर वे कहीं और हो सकती हैं।

इसके अतिरिक्त, एक सॉफ्टवेयर डेवलपर के रूप में, मुझे लगता है कि करने के लिए सबसे ज़िम्मेदार चीज़ एंड-यूज़र को यह तय करने की अनुमति है कि उनकी फ़ाइलों को कहाँ रखा जाए। आप डिफॉल्ट सेट कर सकते हैं, लेकिन उपयोगकर्ता (और वितरक) बिल्ड को अपने डिस्ट्रो के साथ फिट करने के लिए अनुकूलित और कर सकते हैं।

ऐसा करने का सबसे आसान तरीका जीएनयू ऑटोकॉन्फ़ का उपयोग करके अपने कार्यक्रम का निर्माण करना है । ऑटोकॉन्फ़ एक बिल्ड सिस्टम है जहाँ उपयोगकर्ता डिफॉल्ट से दूर विभिन्न "डायरेक्टरी टाइप्स" के रास्तों को बदलने के लिए बिल्ड स्क्रिप्ट को कमांड-लाइन आर्ग्युमेंट पास कर सकता है। लगभग हर डिस्ट्रीब्यूशन में हर ऑटोकॉन्फ़ पैकेज के लिए एक बिल्ड स्क्रिप्ट होती है जो प्रत्येक प्रकार के लिए डिस्ट्रो-उपयुक्त पारंपरिक निर्देशिकाओं को सेट करती है। यहां तक ​​कि उनके पास विशेष रूप से कैश के लिए एक निर्देशिका प्रकार है: शेयर्डस्टेडिर


पहले आपके जवाब के लिए बहुत बहुत धन्यवाद, वास्तव में बहुत विस्तृत। एप्लिकेशन की प्रकृति (माणिक) एपीआई कॉल को कैश करना है जो स्थिर सामग्री परोसता है। यह माणिक अनुप्रयोग है, और जो मैंने आपके डिस्क कैश के लिए आपके उत्तर स्थान पर पढ़ा है, वह /tmpफ़ोल्डर होगा । आपके प्रश्नों के उत्तर होंगे (डाउनलोड, नहीं, नहीं, नहीं, नहीं, नहीं, नहीं)। संभवतः अधिकांश लोगों के लिए निष्कर्ष निकालना सामान्य लगता है, /tmpलेकिन मैं यूनिक्स सिस्टम के लिए नया हूं और ubuntu ओएस आधारित सम्मेलन मेरे लिए अपरिचित हैं। यह रत्न के लिए दिलचस्प विचार को खोलता है ताकि अज्ञेय डिस्क कैशिंग (उपयोगकर्ता अज्ञेयवादी) की अनुमति दे सके। धन्यवाद, +1 मुझसे।
डॉल्फिन

ध्यान दें कि अधिकांश लिनक्स डिस्ट्रोस पर स्थापित रूबी मणि प्रणाली में एक बहुत ही विशिष्ट निर्देशिका होती है जहां gemउपकरण द्वारा रत्न स्थापित किए जाते हैं । हालाँकि, संभवत: उसी निर्देशिका के भीतर रनटाइम पर फाइलें बनाना उचित नहीं होगा जहां आपका एप्लिकेशन रत्न द्वारा डाउनलोड किया गया हो। दूसरी ओर, यदि आप एक उपयोगकर्ता के रूप में ऐप चला रहे हैं, तो आपको एक निर्देशिका की आवश्यकता है जो उपयोगकर्ताओं के लिए रीड-राइट हो , और इसका अर्थ है कि अनुमतियों को बदलना (जिसमें समूह बनाने के लिए इंस्टॉल-टाइम पर और भी अधिक सिस्टम एकीकरण कार्य करने की आवश्यकता है आदि), या एक वैश्विक पठन-लेखन निर्देशिका का उपयोग कर, जैसे / tmp।
ऑलिक्विक्सोटिक

आप नहीं कर सकते हैं, और करने के लिए डेटा नहीं लिखना चाहिए /usr, /libया /binआपके आवेदन से।
ctrl-alt-delor-
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.