सॉफ्टवेयर खुद को / usr / lib में क्यों स्थापित करता है?


11

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

मुझे पूरा यकीन था कि / ऑप्ट मेरे आवेदन के लिए सही स्थान था। लेकिन मेरे डेबियन फाइल सिस्टम की जांच करने के बाद, मुझे अब यकीन नहीं है: बहुत सारे सॉफ्टवेअर वास्तव में / usr / lib में स्थापित हैं! कुछ नाम: MySQL, MySQLWorkbench, Nautilus, Rythmbox ...

FHS के अनुसार, / usr / lib "प्रोग्रामिंग और संकुल के लिए पुस्तकालय" और ( "वस्तु फ़ाइलों, पुस्तकालयों, और आंतरिक बाइनरी है कि उपयोगकर्ताओं को या शेल स्क्रिप्ट से सीधे क्रियान्वित किया जा करने का इरादा नहीं होती हैं" को रोकने के लिए माना जाता है यहाँ देखें )।

मेरे डेबियन सर्वर के बहुत सारे सॉफ्टवेयर्स / usr / lib में स्थित लाइब्रेरी या आंतरिक बायनेरिज़ नहीं हैं, बल्कि पूर्ण उपयोगकर्ता निष्पादन योग्य सॉफ्टवेयर्स हैं!

मैं अभी भी अपने आवेदन को / ऑप्ट में स्थापित करने के लिए ट्रैक पर हूँ। लेकिन मैं वास्तव में यह समझना चाहूंगा कि क्या यह सही है और, सबसे ऊपर, क्यों

अपनी तरह की सलाह के लिए अग्रिम धन्यवाद,

एरिक।


2
स्पॉट चेकिंग, मैं जो बता सकता है MySQLWorkbench / usr / lib के तहत केवल लाइब्रेरी स्थापित करता है। क्या आपको लगता है कि / usr / lib में "पूर्ण-उपयोगकर्ता का निष्पादन योग्य सॉफ़्टवेयर" है?
मार्क वैगनर

एप्लिकेशन मेनू में स्थित वास्तविक शॉर्टकट / usr / lib में स्थित एक बाइनरी को इंगित करता है, अगर मुझे सही याद है।
एरिक मोरैंड

आप उलझन में हैं कि आपके द्वारा सूचीबद्ध सॉफ़्टवेयर कहाँ स्थापित है। यहाँ लिस्टिंग के लिंक हैं अगर MySQL और Nautilus के लिए फाइल। ध्यान दें कि जैसे FHS कहता है कि फाइल को / etc, / usr / bin, / usr / lib आदि के बीच विभाजित किया गया है। packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
sciurus

जवाबों:


6

Filesystem Heirarchy Standard को समझने की असली कुंजी यह जान रही है कि यह नेटवर्क फाइल सिस्टम को ध्यान में रखकर बनाया गया है।

एक ही OS, रिलीज़ और आर्किटेक्चर की प्रत्येक मशीन के लिए, आप NFS के माध्यम से साझा कर सकते हैं और इसे माउंट कर सकते हैं।
/ usr नेटवर्क स्टैक आरंभीकृत होने के बाद आरोहित (पुनः) है।

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or

क्या आप स्थानीय / दूरस्थ और r - r / w मानकों के लिए एक लिंक प्रदान करने का मन करेंगे?
कैप्टन जिराफ

क्या इसका मतलब है कि किसी भी नेटवर्क में हर लिनक्स सर्वर या वर्कस्टेशन के लिए एक एकल / usr "रिपॉजिटरी" हो सकता है?
एरिक मोरैंड

1
यह कुछ काम लेता है, लेकिन हाँ, आप कर सकते हैं। जब हार्ड ड्राइव वापस आती है तो यह किसी भी बड़े रोलआउट के लिए आदर्श था।
Dan Garthwaite

@ eric-morand FHS से: "/ usr फाइलसिस्टम का दूसरा प्रमुख भाग है। / usr साझा करने योग्य, रीड-ओनली डेटा है। इसका मतलब है कि / Fr को विभिन्न FHS-कम्प्लाइंस होस्ट्स के बीच साझा करने योग्य होना चाहिए और उन्हें लिखा नहीं जाना चाहिए। कोई भी जानकारी जो होस्ट-विशिष्ट है या समय के साथ बदलती है, कहीं और संग्रहीत होती है। " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite

ओह। उपरोक्त टिप्पणी @CaptainGiraffe
Dan Garthwaite

12

अंतर यह है कि सिस्टम के हिस्से के रूप में/usr स्थापित संकुल को धारण करने के लिए है । डेबियन / उबंटू रिपॉजिटरी, पीपीए आदि से आपको मिलने वाले पैकेज यहां जाएं। जबकि /optअसंबद्ध तीसरे पक्ष के अनुप्रयोगों के लिए है जो वितरण के पैकेज वितरण प्रक्रिया के माध्यम से वितरित नहीं किए जाते हैं।

यदि आप .deb या .rpm पैकेज वितरित करते हैं, तो अंतत: आपके सॉफ्टवेयर को आधिकारिक रिपॉजिटरी में शामिल करने के लिए एक आंख की ओर, आपको स्थापित करना चाहिए /usr। अन्यथा स्थापित करें /opt। किसी भी स्थिति में, आपके आवेदन को किसी भी मनमाने स्थान पर चलाने के लिए संकलित करने में सक्षम होना चाहिए (जैसे कि जीएनयू ऑटोलिस्ट्स की मदद से)।


धन्यवाद। अभी, मेरे पास आधिकारिक रिपॉजिटरी में अपने ऐप को शामिल करने की कोई योजना नहीं है।
एरिक मोरैंड

क्या / usr / स्थानीय के बारे में, फिर? या वह असतत है
हारून कोपले

@AaronCopley /usr/localइस प्रश्न की गुंजाइश नहीं थी। लेकिन यह तीसरे पक्ष के सॉफ़्टवेयर के लिए है जो स्थानीय व्यवस्थापक संकलित करता है और स्थापित करता है।
माइकल हैम्पटन

इसलिए मैंने पूछा कि क्या इसे असतत माना जाएगा।
आरोन कोपले

2

आप अपनी लाइब्रेरियों को <prefix>/lib, अपनी बायनेरीज़ को <prefix>/bin, अपनी हेडर फ़ाइलों को <prefix>/include, मैन पेजों में prefix/[share/]man, pkgconfig फ़ाइलों में <prefix>/lib/pkgconfigया <prefix/share/pkgconfigअपनी cmake .m4 फ़ाइलों में स्थापित करते हैं।<prefix>/share/aclocal

फिर पैकेज मैनेजर को उपसर्ग पर निर्णय लेने दें। यदि आप आरपीएम / डिबेट स्वयं वितरित कर रहे हैं, /usrतो उपसर्ग के लिए एक अच्छा विकल्प है।

./configure --prefix=~/.local/ अभी भी काम करना चाहिए, इसलिए कृपया कहीं भी अपना रास्ता हार्डकोडिंग न करें!

कुछ पुस्तकालयों को किसी अन्य उपकरण में लपेटा जाता है जो उन्हें एक पुस्तकालय के रूप में भी निष्पादन योग्य और उपयोग करने योग्य बनाता है, लेकिन वे अभी भी पुस्तकालय हैं, और आपके $ पेट में नहीं हैं, इसलिए मुझे उन्हें लगता है कि यह ठीक है।


1

मैं सुझाव दूंगा कि आप अपने ऐप को / ऑप्ट के तहत इंस्टॉल करने से बचें। कारण 1: कुछ डिस्ट्रोस डिफ़ॉल्ट रूप से / ऑप्ट नहीं करते हैं कारण 2: / usr / lib पुस्तकालयों के लिए एक मानक मार्ग है {यदि अन्य अनुप्रयोगों को आपके पुस्तकालय का उपयोग करने की आवश्यकता है तो आपको अपने पुस्तकालय पथ को मैन्युअल रूप से / etc / ldconfig} में जोड़ने की आवश्यकता है / विकल्प जब आपके पास स्टैंडअलोन एप्लिकेशन होते हैं जो आप मैन्युअल रूप से इंस्टॉल करते हैं और आप यह जानना चाहते हैं कि वे कहाँ स्थित हैं

एक कारण यह है कि पूरी तरह से निष्पादित निष्पादन योग्य / usr / lib के तहत स्थित हैं कि वे अन्य लिपियों से उपयोग किए जाते हैं। {उदाहरण के लिए बैश स्क्रिप्ट सीधे एपीआई का उपयोग नहीं कर सकते हैं। इस कारण से इस एपी के आसपास एक "रैपर" बनाने और स्क्रिप्ट के तर्कों के रूप में मापदंडों को धक्का देने के लिए एक सामान्य चाल है}


2
मैं असहमत हूं। यदि वह / ऑप्ट में इंस्टॉल करना चाहता है, तो पैकेज मैनेजर डायरेक्टरी बनाएगा, ताकि यह एक नॉन इश्यू हो। इसके अलावा, / usr / lib में स्थापित बायनेरिज़ एक बुरा विचार है।
वाल्टर

साभार @Nikolaidis Fotis लेकिन मेरे मामले में, मेरे ऐप में एक सार्वजनिक पुस्तकालय नहीं है और इसका उपयोग अन्य अनुप्रयोगों द्वारा नहीं किया जाएगा।
एरिक मोरैंड

0

कृपया, इसे / ऑप्ट में स्थापित करें।

वैसे भी बहुत सारे लिनक्स अनुप्रयोग समान बनाते हैं जो कि 90 के दशक में विंडोज डेवलपर्स ने बनाए थे।

हमारे सामान को C: \ windows में स्थापित करें ताकि यह सरल (और थोड़ा तेज) खोजने में सरल और आसान हो। फिर 15 साल का DLL नरक आया क्योंकि विभिन्न सॉफ्टवेयर पैकेजों को एक ही पुस्तकालयों के विभिन्न संस्करणों की आवश्यकता थी (जो कि विंडोज में पुस्तकालयों का संस्करण नहीं था)।

जब तक आप वास्तविक सिस्टम सॉफ़्टवेयर नहीं लिख रहे हैं, तब तक इसे / ऑप्ट में रखें, ताकि लोग बेहतर तरीके से ट्रैक कर सकें कि किसने क्या स्थापित किया है।


4
यह विंडोज नहीं है। हमारे पास पैकेज मैनेजर हैं जो काम करते हैं और यह वास्तव में एक समस्या नहीं है।
माइकल हैम्पटन

यदि आप वास्तव में एक ही पेड़ में सब कुछ होने के बारे में चिंतित हैं, तो निक्स पैकेज प्रबंधक को देखें। दोनों दुनिया के सर्वश्रेष्ठ, अगर आप मुझसे पूछें।
TheSola10
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.