लघु संस्करण और आपके उत्तर के लंबे संस्करण हैं ...
लघु संस्करण:
जैसा कि आपके लिंक ने पहले ही कहा था, सिस्टम-वाइड , रीड-ओनली फ़ाइलों के /usr
लिए एक जगह है । तो आपका सारा स्थापित सॉफ्टवेयर वहां चला जाता है। यह सिवाय और के किसी भी नाम की नकल नहीं करता है , लेकिन, मूल रूप से, एक अलग उद्देश्य के साथ: केवल बायनेरिज़ और लाइब्रेरीज़ के लिए आवश्यक है , जबकि अन्य सभी निष्पादन योग्य और पुस्तकालयों के लिए है। (अब एक अच्छा लड़का बनो और इसके बारे में मत पूछो , यह सब के बाद का लघु संस्करण है)/
/bin
/lib
/bin, /lib
/usr/bin, /usr/lib
/sbin
आजकल, "बूटिंग के लिए आवश्यक" और नहीं के बीच का अंतर कम हो गया है, क्योंकि उबंटू सहित अधिकांश आधुनिक डिस्ट्रोस, ठीक से कई फ़ाइलों के बिना बूट नहीं कर सकते हैं /usr
। और इसीलिए विलय करने की दिशा में एक मजबूत आंदोलन है , /usr/bin
और /bin
शायद निकट भविष्य में (Ubuntu 12.10 शायद?) के /bin
लिए एक सहानुभूति होगी /usr/bin
।
लेकिन शायद आप भ्रमित कर रहे हैं /usr
और /usr/local
? क्योंकि हां, बहुत सारे डुप्लिकेट डायरेक्टरी नाम हैं (और होने चाहिए) । उस पर और बाद में ...
दीर्घ संस्करण:
70 के दशक में, यूनिक्स में (हां, यूनिक्स, लिनक्स से पहले का रास्ता), फ्लॉपी में बहुत कम जगह थी (कोई एचडी, याद है?), और एक निश्चित समय पर सिस्टम बायनेरिज़ संख्या और आकार में बहुत अधिक बढ़ गए एक बिंदु पर वे नहीं करेंगे? एक एकल डिस्क फिट करें, और डेवलपर्स को उन्हें कई मीडिया में विभाजित करना था और इस प्रकार उनके लिए नए माउंट पॉइंट बनाए। /bin
फाइलसिस्टम भरा हुआ था, इसलिए उन्होंने नए बायनेरिज़ को ... पर स्थापित किया /usr/bin
। और /usr
उस समय था, उनकी ... उपयोगकर्ता निर्देशिका!
लगभग (शर्मनाक और अक्सर एक मजाक / विद्या के रूप में बताया गया) विभाजन के बाद, उन्होंने यह तय करने के लिए "कृत्रिम" औचित्य (और मानदंड) बनाने शुरू किए कि क्या होगा /bin
और क्या होगा /usr/bin
। अनौपचारिक नियम था: "आवश्यक" सामान जाना है /bin
, "बाकी" जाता है /usr/bin
। उसी के साथ /lib
। /usr
उपयोगकर्ता-डायर के साथ मिश्रित प्रणाली-संबंधी डायरियों के साथ भीड़ बनने से पहले यह लंबे समय तक नहीं था । इस प्रकार /home
, सभी उपयोगकर्ता-संबंधित dirs रखने और /usr
केवल सिस्टम "सामान" के लिए साफ रखने के लिए पैदा हुआ था ।
एफएचएस के अस्तित्व में आने से पहले यह बहुत लंबा था। जब यह बनाया गया था, तो यह वर्तमान परंपरा को गले लगाता था (और औपचारिक रूप से) नाम रखता था /usr
, हालांकि उस समय इसका पहले से ही "उपयोगकर्ता" के साथ कोई लेना-देना नहीं था। तो हाँ, फैंसी नाम " U NIX s ource r epository" या " U NIX s ystem r esources" सभी बने हुए नाम हैं, और वैसे भी इसका नाम बदलने में बहुत देर हो चुकी है। (लेकिन /bin
इसमें विलीन होने में देर नहीं हुई )
"ठीक है, किस बारे में /usr/sbin
?" , तुम पूछो। अरे, मैं उम्मीद कर रहा था कि आप भूल गए थे। ठीक है ... /usr/sbin
कमांड के लिए है जो केवल root
उपयोगकर्ता द्वारा निष्पादित (या केवल तभी सार्थक हो सकता है) , जैसे mount
और fdisk
।
"लेकिन क्या यह लगभग वैसा ही नहीं है /bin
?" । हां, यकीन है, लेकिन ...
"रुको, फिर एक /sbin
भी क्यों है? कोई मतलब नहीं है!" । खैर, कि वजह से ... गलत है .. हम्म ..
देखो, तुम्हारे पीछे एक 3 सिर वाला बंदर!
ठीक है, उम्मीद है, आप काफी विचलित हो गए। आगे बढ़ते रहना...
(यदि आपको लगता है कि मैं धोखा दे रहा हूं, तो आप सही हैं। लेकिन "आधिकारिक" उत्तर "आवश्यक कमांड" है जिसे केवल रूट द्वारा निष्पादित किया जा सकता है और आपके माउंट होने से पहले भी उपलब्ध होना चाहिए /
)। सच्चाई यह है: लाइन वास्तव में धुंधली है, और बहुत सारी विरासत के नाम हैं जो सिर्फ "अटक" गए हैं और अब इससे छुटकारा पाना काफी कठिन है।
डॉक्स से मर्ज के लिए केस/usr
पर अधिक systemd
:
एक / बिन, / sbin और / lib से अलग / usr के लिए ऐतिहासिक औचित्य आज लागू नहीं होता है। वे तेज़ हार्ड डिस्क पर चयनित टूल को विभाजित करने के लिए विभाजित हो गए (जो छोटा था, क्योंकि यह अधिक महंगा था) और धीमी / usr विभाजन को माउंट करने के लिए आवश्यक सभी टूल शामिल करने के लिए। आज, पहले से ही बूट के दौरान एक अलग / usr विभाजन initramfs द्वारा माउंट किया जाना चाहिए, इस प्रकार विभाजन-बंद मट का औचित्य बनता है। इसके अलावा, यथास्थिति में / बिन और / एसबीएन में बहुत सारे उपकरण पहले से ही बिना पूर्व-घुड़सवार या यूएसआर के चलने की क्षमता खो देते हैं। ऑपरेटिंग सिस्टम को कई पदानुक्रमों पर फैलाने का कोई वैध कारण नहीं है, इसने अपना उद्देश्य खो दिया।
और /usr
रॉब लैंडली द्वारा विभाजन और इसके औचित्य के बारे में एक अद्भुत रीडिंग :
बिन समझे, sbin, usr / बिन, usr / sbin अलग
आजकल
वर्तमान में, निर्देशिकाओं के बारे में, इस तरह से सोचने का आपका सबसे अच्छा तरीका है:
/usr
- सभी सिस्टम-वाइड, रीड-ओनली फाइलें ओएस द्वारा स्थापित (या द्वारा प्रदान की गई)
/usr/local
- सिस्टम-वाइड, स्थानीय व्यवस्थापक द्वारा स्थापित केवल-पढ़ने के लिए फ़ाइलें (आमतौर पर, आप)। और यही कारण है कि ज्यादातर निर्देशिका नामों को /usr
यहां डुप्लिकेट किया गया है।
/opt
- सिस्टम-वाइड, रीड-ओनली और सेल्फ-निहित सॉफ़्टवेयर के लिए अत्याचार का मतलब है । यही कारण है कि सॉफ्टवेयर है कि पर अपनी फ़ाइलें विभाजित नहीं है, है bin
, lib
, share
, include
अच्छी तरह से व्यवहार की तरह सॉफ्टवेयर चाहिए।
~/.local
- प्रति उपयोगकर्ता प्रतिपक्ष /usr/local
, वह है: प्रत्येक उपयोगकर्ता द्वारा (और के लिए) स्थापित सॉफ्टवेयर
~/.local/opt
- प्रति उपयोगकर्ता प्रतिरूप /opt
तो सॉफ्टवेयर कहाँ स्थापित करें?
उपरोक्त सूची पहले से ही ओरेकल JDK प्रश्न का आधा उत्तर है, कम से कम यह कई सुराग देता है। चेकलिस्ट "मुझे सॉफ़्टवेयर X कहां स्थापित करना चाहिए?" गुज़रना:
क्या यह पूरी तरह से स्व-निहित, एकल निर्देशिका सॉफ़्टवेयर है, जैसे कि ग्रहण आईडीई और अन्य डाउनलोड किए गए जावा ऐप, और आप चाहते हैं कि यह सभी उपयोगकर्ताओं के लिए उपलब्ध हो? फिर अंदर स्थापित करें/opt
ऊपर के समान, लेकिन आप अन्य उपयोगकर्ताओं के बारे में परवाह नहीं करते हैं और मैं अकेले आपके उपयोगकर्ता के लिए इंस्टॉल करना चाहता हूं? फिर अंदर स्थापित करें~/.local/opt
इसकी फ़ाइलों को कई डायरियों की तरह विभाजित किया गया है, जैसे bin
और share
, जैसे पारंपरिक सॉफ्टवेयर को संकलित और स्थापित किया गया है ./configure && make && sudo make install
, और सभी उपयोगकर्ताओं के लिए उपलब्ध होना चाहिए? फिर अंदर स्थापित करें/usr/local
उपरोक्त के समान, लेकिन केवल आपके उपयोगकर्ता के लिए? फिर अंदर स्थापित करें~/.local
ओएस द्वारा स्थापित सॉफ्टवेयर, या पैकेज प्रबंधकों (जैसे सॉफ्टवेयर सेंटर) के माध्यम से, और, सबसे महत्वपूर्ण बात यह है कि अद्यतन प्रबंधक को एक नए संस्करण में अपग्रेड करते समय किसी भी स्थानीय संशोधन को अधिलेखित किया जा सकता है ? यह जाता है/usr
टिप्पणियाँ:
यह बताता है कि संकलित सॉफ़्टवेयर के लिए डिफ़ॉल्ट इंस्टॉल प्रीफ़िक्स क्यों है /usr/local
, और आपको इसे ./configure --prefix=$HOME/.local
केवल अपने उपयोगकर्ता के लिए सॉफ़्टवेयर इंस्टॉल करते समय क्यों बदलना चाहिए
आपने देखा होगा कि उपरोक्त सभी निर्देशिकाएं केवल-पढ़ने के अलावा (निश्चित रूप से, जब आप सॉफ़्टवेयर स्थापित / हटाते हैं)। लिखने योग्य फाइलें (जैसे कॉन्फिग फाइल) आमतौर पर /etc
(सिस्टम-वाइड सॉफ़्टवेयर के लिए) और ~/.config
(प्रति-उपयोगकर्ता सेटिंग्स के लिए) जाती हैं। हालांकि कई विरासत सॉफ्टवेयर (और, दुर्भाग्य से, कुछ आधुनिक भी) ~/.<software-name>
बिल और डायरियों और फाइलों के साथ अपने घर के फ़ोल्डर को अव्यवस्थित करते हैं।
~/.local
और ~/.config
एफएचएस विनिर्देश का हिस्सा नहीं हैं। FHS उपयोगकर्ता के होम फ़ोल्डर के साथ सौदा नहीं करता है। वे एक्सडीजी का एक प्रयास है, एक अन्य मानक संगठन जो डेस्कटॉप वातावरण (जैसे गनोम, केडीई, और यूनिटी) की ओर जाता है, उपयोगकर्ता के घर की संरचना के बारे में कुछ सम्मेलनों को स्थापित करने का प्रयास करता है। सभी सॉफ़्टवेयर इसका पालन नहीं करते हैं (उदाहरण के लिए, ~/.local/bin
उपयोगकर्ता के डिफ़ॉल्ट में नहीं है $PATH
, जबकि तर्क द्वारा इसे करना चाहिए) , और कोई भी उपयोगकर्ता इसका पालन करने के लिए मजबूर नहीं होता है, लेकिन यदि वे करते हैं तो दोनों कई अंतर-लाभकारी लाभ प्राप्त करते हैं।
मुझे उम्मीद है कि इससे चीजों को थोड़ा स्पष्ट करने में मदद मिलेगी। कुछ भी पूछने के लिए स्वतंत्र महसूस करें ताकि मैं उत्तर को बेहतर बना सकूं!
(और मुझे यह भी उम्मीद है कि शुद्धतावादी मुझे इस तरह की एक अनौपचारिक भाषा और स्पष्टीकरण के लिए नहीं मारेंगे। यह जानबूझकर था, और इसमें निश्चित रूप से कई अशुद्धियाँ हैं, लेकिन मेरा मानना है कि यह एक अच्छा तरीका है कि एक नवागंतुक को संक्षिप्त अवलोकन समझ है। निर्देशिका तर्कसंगत)