/ ऑप्ट और / usr / स्थानीय के बीच क्या अंतर है?


403

फाइलसिस्टम पदानुक्रम मानक के अनुसार , /opt"ऐड-ऑन एप्लिकेशन सॉफ़्टवेयर पैकेजों की स्थापना" के लिए है। /usr/local"स्थानीय रूप से सॉफ़्टवेयर इंस्टॉल करते समय सिस्टम व्यवस्थापक द्वारा उपयोग के लिए" है। ये उपयोग के मामले बहुत समान लगते हैं। वितरण के साथ शामिल सॉफ्टवेयर आमतौर पर डिफ़ॉल्ट रूप से /usr/localया तो या /optकिसी विशेष कविता या कारण के साथ स्थापित करने के लिए कॉन्फ़िगर नहीं किया जाता है जिसके लिए उन्होंने चुना था।

क्या कुछ अंतर मुझे याद आ रहा है, या दोनों एक ही काम करते हैं, लेकिन ऐतिहासिक कारणों से मौजूद हैं?


3
मेरी समझ यह है कि फ़ाइल सिस्टम /usr/localका एक स्थानीय संस्करण /usrहै, जबकि /optमिस सामान के लिए जगह धारक है।
यासोसर


ऐतिहासिक कारणों पर ऑफ-टॉपिक: बिन, sbin, usr / bin, usr / sbin विभाजन को समझना
एलेक्सी

जवाबों:


357

जबकि दोनों को ऑपरेटिंग सिस्टम से संबंधित फ़ाइलों को शामिल करने के लिए डिज़ाइन किया गया है, /optऔर /usr/localफ़ाइलों के समान सेट को शामिल करने का इरादा नहीं है।

/usr/localसामान्य रूप से makeकमांड (जैसे, ./configure; make; make install) का उपयोग करके प्रशासक द्वारा निर्मित फ़ाइलों को स्थापित करने के लिए एक जगह है । यह विचार उन फाइलों के साथ टकराव से बचने के लिए है जो ऑपरेटिंग सिस्टम का हिस्सा हैं, जो या तो स्थानीय लोगों को अधिलेखित या अधिलेखित करेंगे अन्यथा (जैसे, स्थानीय विकल्प /usr/bin/fooहोने पर ओएस का हिस्सा है /usr/local/bin/foo)।

के तहत सभी फाइलें /usrOS उदाहरणों के बीच साझा करने योग्य होती हैं, हालांकि यह लिनक्स के साथ शायद ही कभी किया जाता है। यह एक ऐसा हिस्सा है जहां एफएचएस थोड़ा आत्म-विरोधाभासी है, जैसा /usrकि केवल पढ़ने के लिए परिभाषित किया गया है, लेकिन /usr/local/binसफल होने के लिए सॉफ्टवेयर की स्थानीय स्थापना के लिए पढ़ने-लिखने की जरूरत है। SVR4 फ़ाइल सिस्टम मानक, जो कि FHS 'प्रेरणा का मुख्य स्रोत था, इस मुद्दे को दूर करने के बजाय बचने /usr/localऔर उपयोग करने की सिफारिश कर रहा है /opt/local

/usr/localमूल बीएसडी से एक विरासत है। उस समय, /usr/binOS कमांड का स्रोत कोड था /usr/src/binऔर /usr/src/usr.bin, जबकि स्थानीय रूप से विकसित कमांड का स्रोत था /usr/local/src, और उनके बायनेरीज़ में /usr/local/bin। पैकेजिंग (तारकोल के बाहर) की कोई धारणा नहीं थी।

दूसरी ओर, /optअनबंडल्ड पैकेज (यानी पैकेज जो ऑपरेटिंग सिस्टम वितरण का हिस्सा नहीं है, लेकिन एक स्वतंत्र स्रोत द्वारा प्रदान किया गया है) को स्थापित करने के लिए एक निर्देशिका है, प्रत्येक अपने स्वयं के उपनिर्देशिका में। वे पहले से ही एक स्वतंत्र तीसरे पक्ष के सॉफ्टवेयर वितरक द्वारा प्रदान किए गए पूरे पैकेज बनाए गए हैं। /usr/localसामान के विपरीत , ये पैकेज निर्देशिका सम्मेलनों (या कम से कम उन्हें चाहिए) का पालन करते हैं। उदाहरण के लिए, इसमें someappस्थापित किया जाएगा /opt/someapp, इसकी एक कमांड होने के साथ /opt/someapp/bin/foo, इसकी कॉन्फ़िगरेशन फ़ाइल अंदर होगी /etc/opt/someapp/foo.confऔर इसकी लॉग इन फाइलें /var/opt/someapp/logs/foo.access


53
/ usr / स्थानीय, स्वयं के लिए, घर के अंदर, संकलित और बनाए रखा सॉफ्टवेयर। / ऑप्ट नॉन-सेल्फ, एक्सटर्नल, प्रीपैकेड बाइनरी / एप्लिकेशन बंडल इंस्टॉलेशन एरिया के लिए है। हममम ... हमारे पास C: \ प्रोग्राम फाइल के लिए सब कुछ नहीं है ;-)
निखिल मुले

2
"दूसरी ओर, / ऑप्ट एक निर्देशिका है जहाँ अनब्लॉक पैकेज को स्थापित करना है" यहाँ 'अनबंडल्ड' पैकेज का क्या मतलब है?
केविन व्हीलर

1
@KevinWheeler जो अगले वाक्य में समझाया गया है। Unbundled का मतलब है कि संकुल ऑपरेटिंग सिस्टम वितरण का हिस्सा नहीं है, लेकिन एक स्वतंत्र स्रोत द्वारा प्रदान किया गया है।
jlliagre

2
@jlliagre सेंटोस डॉक्स * राज्य "उदाहरण के लिए, यदि / usr / निर्देशिका दूरस्थ होस्ट से केवल-पढ़ने के लिए NFS शेयर के रूप में मुहिम की जाती है, तो अभी भी / usr / स्थानीय निर्देशिका के तहत एक पैकेज या प्रोग्राम स्थापित करना संभव है" मुझे नहीं पता कि कौन सही है, लेकिन ऐसा उस क्षेत्र के बारे में आपके दावे के विपरीत प्रतीत होता है जहां FHS कमजोर है। (* स्रोत centos.org/docs/5/html/5.1/Deployment_Guide/… )
केविन व्हीलर

1
@ केविनव्हीलर ठीक यही कमजोरी है जिसका मैं जिक्र कर रहा हूं। एक पैकेज या एक प्रोग्राम को रिमोट में स्थापित करना, केवल-पढ़ने के लिए निर्देशिका केवल असंभव है। वर्कअराउंड / usr / लोकल पर एक स्थानीय फाइल सिस्टम को माउंट करना होगा, लेकिन यह ठीक से डिज़ाइन की गई चीज़ की तुलना में एक काम की तरह दिखता है।
jlliagre

84

बुनियादी अंतर यह है कि /usr/localसॉफ्टवेयर सिस्टम पैकेजर द्वारा प्रबंधित नहीं है, लेकिन फिर भी मानक यूनिक्स तैनाती नियमों का पालन करता है।

इसलिए आपके पास है /usr/local/bin, /usr/local/sbin /usr/local/includeआदि ...

/optदूसरी ओर सॉफ्टवेयर के लिए है जो इसका पालन नहीं करता है और एक अखंड फैशन में तैनात है। इसमें आमतौर पर वाणिज्यिक और / या क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर शामिल होते हैं जो "विंडोज" शैली में पैक किए जाते हैं।


12
मैं आपके अखंड बिंदु के बारे में असहमत हूं। FHS मानक का कहना है कि / ऑप्ट उपनिर्देशिकाओं में स्थापित संकुल के पास उनकी मेजबान विशिष्ट फ़ाइलें होनी चाहिए, क्रमशः / ऑप्ट आउट, विन्यास फाइल के लिए / etc / opt / package / log /, / sp / और लॉग, स्पूल और इसी तरह के लिए पैकेज। / ऑप्ट वास्तव में / usr / स्थानीय की तुलना में यूनिक्स तैनाती नियमों के करीब है, जो एक निर्देशिका के तहत सब कुछ डालते हैं जो केवल पढ़ने के लिए होना चाहिए लेकिन स्पष्ट कारणों के लिए नहीं हो सकता है।
जुल्गीरे

5
ज़रूर, अगर मैं एक ऑप्ट पैकेज बना रहा था और एफएचएस अनुपालन का दावा करना चाहता था। अन्यथा मानक अधिक है जिसे आप "दिशानिर्देश" कहेंगे। सिर्फ इसलिए कि NetBeans उपयोग नहीं करता है / etc / opt / netbeans मुझे इसे सिस्टम-वाइड या $ HOME / .local / ऑप्ट-इन के लिए एकल-उपयोगकर्ता में रखने से रोकने वाला नहीं है।
जाल

1
@ जाला मुझे लगता है कि आपकी अंतिम टिप्पणी मुझे निर्देशित की गई थी, इसलिए कृपया ओपी या उत्तर लेखक को किसी अन्य को उत्तर देते समय @ xxx का उपयोग करें। के बारे में / etc / opt, FHS यह नहीं कहता है कि यह एक अनुशंसित स्थान (एक दिशानिर्देश के रूप में) है, लेकिन एक अनिवार्य स्थान है। आप या Netbeans डेवलपर उस मानक का उल्लंघन करने के लिए स्वतंत्र हैं क्योंकि इसे लागू करने के लिए कोई प्राधिकारी नहीं है, लेकिन इसे गलत मत करना यह जाने का तरीका है। यह सिर्फ एक दुर्भाग्यपूर्ण गलतफहमी या जानबूझकर उल्लंघन है।
jlliagre

8
@jlliagre मेरे सिस्टम के व्यवस्थापक के रूप में, FHS दिशानिर्देशों का एक सेट है। मोनोलिथिक / ऑप्ट / <पैकेज> या / ऑप्ट / <प्रदाता> सॉफ्टवेयर डालने के लिए / ऑप्ट निर्देशिका सामान्य ज्ञान अच्छी तरह से स्थापित जगह है। जब मैं एक पैकेज स्थापित करता हूं जो <पैकेज | प्रदाता> / सभी / डेटा / आवश्यक / से / समर्थन का उपयोग करना चाहता है, तो यह ऑप्ट / में जा रहा है, भले ही प्रदाता नवीनतम FHS के हर विवरण का पालन करने में विफल हो। मैं एक ईमेल भेज सकता हूं या बग की रिपोर्ट कर सकता हूं, लेकिन मैं अपने सिस्टम में FHS के बारे में बेहतर महसूस करने के लिए उस अखंड पैकेज को कहीं और नहीं रखने जा रहा हूं।
JLA

1
@jlliagre मैंने बहुत सारी चीजें / ऑप्ट में स्थापित की हैं और कोई फाइल / etc / opt में नहीं बनाई गई है। करनी चाहिए?
erm3nda

18

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


9
ओह प्रिय। मुझे अपने आप को "पवित्र युद्ध" में खींचने का मतलब नहीं था।
पैच

13

मेरे लिए, व्यक्तिगत रूप से, यह वही है जो बिल ने @ फिल्फ़ के लिंक में कहा है:

एक विकास प्रणाली, या एक सैंडबॉक्स में, एक / ऑप्ट निर्देशिका होने से जहां आप बस चीजों को टॉस कर सकते हैं और देख सकते हैं कि क्या वे काम करते हैं पूरी तरह से समझ में आता है। मुझे पता है कि मैं खुद को आज़माने के लिए पैकेजिंग चीजों के प्रयास से नहीं गुजरने वाला हूं। यदि एप्लिकेशन काम नहीं करता है, तो आप बस / ऑप्ट / मायस्टैप निर्देशिका को आरएम कर सकते हैं और यह एप्लिकेशन इतिहास है। जब आप एक बड़ी परिनियोजन चला रहे हों, तो पैकेजिंग को समझ में आ सकता है (कई बार जब मैं पैकेज ऐप्स करता हूं), लेकिन बहुत बार, यह / ऑप्ट में सामान टॉस करना अच्छा होता है।

दुर्भाग्यवश, अधिकांश make installस्क्रिप्ट्स फाइलों को धक्का देकर /usr/localसिर्फ़ एक सिम्कल बनाने के बजाय वहां ले जाती हैं: - / /


2
क्या उल्लेख होगा? यदि आप वैसे भी सिमलिंक बनाने जा रहे हैं, तो मूल फ़ाइल को पहले स्थान पर क्यों नहीं रखा जाए?
Let_Me_Be

8
make installफ़ाइलों को धकेलने वाले लक्ष्य पर टिप्पणी करने के लिए /usr/local; यह कार्यक्षमता स्क्रिप्ट के --prefix=लिए एक कमांड लाइन पैरामीटर पास करके आसानी से परिवर्तनशील है ./configure, या यदि कोई ./configureस्क्रिप्ट नहीं है , तो आप एक पैरामीटर को makeलक्ष्य पर पास कर सकते हैं जैसे make --prefix=/usr install:।
सीन सी।

3
क्या $ PATH में शामिल मानक निर्देशिका का विकल्प चुना गया है? मुझे पता है / usr / स्थानीय है।
लॉरेंस

5
@Let_Me_Be लाभ यह होगा कि पुराने संस्करणों को रखना बहुत आसान है। मान लीजिए कि मैं 'foo', में स्थित के 2 संस्करण है चलो /opt/foo-1.1और /opt/foo-1.2। जब मैं अपग्रेड करता हूं, तो foo-1.2 के अंक fooमें सिम्लिंक /usr/local/bin। यदि किसी कारण से मुझे रोलबैक करने की आवश्यकता होती है, तो मैं सिमिलिंक को एक के साथ बदल देता हूं जो इसके बजाय foo-1.1 को इंगित करता है। यदि 1.2 कई हफ्तों के बाद ठीक है, तो एक त्वरित rm -rf /opt/foo-1.1पुराने संस्करण को जल्दी और सफाई से हटा देता है।
पेपोलुआन

7
@ultrasawblade नहीं, यह नहीं है। और कभी नहीं होना चाहिए सब के बाद, एफएचएस के अनुसार, / ऑप्ट को पैकेज के नाम वाले उप-विभाजनों में विभाजित किया जाना चाहिए। PATH में सब कुछ समेटना आपदा का एक निश्चित तरीका है। इसके बजाय, ऐप्स को स्वयं को / ऑप्ट के तहत स्थापित करना चाहिए, और अपने उपयोगकर्ता-इनवॉल्ड प्रोग्राम को / usr / लोकल / बिन (या बायबिन) में सिमिलिंक करना चाहिए।
पेपुलुआन

11

पहले, मुझे नहीं लगता कि कोई सख्त जवाब है; अलग-अलग प्रशासकों की अपनी पृष्ठभूमि के अनुसार अलग-अलग राय होगी। ऐतिहासिक रूप से, /usr/localपहले आया था; यह बर्कले, IIRC में अधिवेशन था। सिस्टम V के विकास के दौरान एक बिंदु पर, अगर मुझसे गलती नहीं हुई है (यह सब बहुत समय पहले की बात है, और मैंने नोट्स नहीं लिए), एक निर्णय था या /usrकेवल-पढ़ने के लिए माउंट करने में सक्षम होने की इच्छा थी , जिसका मतलब है कि आप इसमें नया सॉफ़्टवेयर नहीं जोड़ सकते हैं; हो सकता है कि /opt इसका आविष्कार क्यों किया गया था। जैसा कि होता है, बस इतना सा मौजूदा सॉफ्टवेयर था जो इस बात को लिखता था /usrकि यह विचार वास्तव में कभी जमीन पर नहीं उतरता।

मेरी व्यक्तिगत प्राथमिकता /optप्रत्येक उत्पाद के लिए एक अलग उपनिर्देशिका के साथ है; यह एक उत्पाद को हटाने का एक सरल मामला है rm -fr। लेकिन अगर आपके सभी सॉफ्टवेयर एक अच्छे पैकेज मैनेजर के माध्यम से स्थापित होते हैं, तो इससे कोई फर्क नहीं पड़ता है, और यदि आप जो सॉफ़्टवेयर स्थापित करते हैं, वह इन सम्मेलनों का कड़ाई से पालन नहीं करता है, और कॉन्फ़िगरेशन और इस तरह के तहत कहीं लिखता है /usr, तो यह या तो मायने नहीं रखता है, हालांकि विपरीत कारणों से।


1
"" आपका सभी सॉफ्टवेयर एक अच्छे पैकेज मैनेजर के माध्यम से स्थापित है "" यह असंभव है जब तक कि आप केवल उपयोग किए गए सॉफ़्टवेयर का उपयोग नहीं करते हैं।
पचेरियर

1
@ स्पेसर यह संभव है, यह निर्भर करता है कि आप किस डिस्ट्रो का उपयोग कर रहे हैं। जो भी सॉफ्टवेयर है, वह शायद आर्क यूजर रिपॉजिटरी में है, और यदि ऐसा नहीं है, तो पीकेजीबीयूएलडी लिखना अपेक्षाकृत आसान है।
StarlitGhost

9

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

सीधे शब्दों में कहें - /usr/localऔर इसके सभी बच्चे डायर उपयुक्त एनवी संस्करण में हैं जैसे PATHऔर MANPATH, और /usr/local/lib{,64}ldconfig ( /etc/ld.so.conf.d/) में हैं।

/opt/OTOH नहीं है - जो सिस्टम में सह-अस्तित्व के लिए कई संस्करणों या परस्पर विरोधी पैकेजों की आवश्यकता होने पर दोनों लाभप्रद है, लेकिन इसके लिए कुछ प्रकार के पर्यावरण प्रबंधन (जैसे, पर्यावरण-मॉड्यूल या सॉफ़्टवेयर संग्रह ) की आवश्यकता होती है, और इसमें नुकसान यह है कि यह संभावित रूप से "बेकार" होगा "साझा पुस्तकालयों को डुप्लिकेट करके भंडारण स्थान, क्योंकि प्रत्येक स्थापना /optपूरी तरह से स्वयं में निहित हो सकती है।

/usr/localकाम की साझा प्रकृति के लिए, यह माना जाता है कि उदाहरण के लिए बायनेरिज़ सीधे /usr/local/bin(और मैन पेज टू उपयुक्त /usr/local/share/man/...) के बजाय स्थापित होते हैं /usr/local/app/{bin,share/man,...}

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