/ Usr / sbin, / usr / स्थानीय / sbin और / usr / स्थानीय / बिन के अर्थ क्या हैं?


23

आइए सभी बिन और sbin फ़ोल्डरों (फाइलसिस्टम पदानुक्रम मानक से) के साथ स्पष्ट करें:

  • /bin सिस्टम-स्तरीय बायनेरिज़ के लिए है
  • /sbin बूट लोडर और सिस्टम प्रशासकों के लिए ज्यादातर सिस्टम-स्तरीय बायनेरिज़ के लिए है
  • /usr/bin आवश्यक बायनेरिज़ के लिए नहीं है
  • /usr/sbin- यह वह जगह है जहाँ गड़बड़ शुरू होती है - सिस्टम प्रशासकों के लिए आवश्यक उपकरण नहीं? इसका क्या मतलब है? प्रयोगों के लिए?
  • /usr/local/bin - इस फ़ोल्डर के बारे में कोई शब्द नहीं
  • /usr/local/sbin- स्थानीय रूप से स्थापित प्रणाली प्रशासन कार्यक्रम। फिर? कैसे के बारे में /usr/sbin?

तो सवाल यह है: क्यों कई निर्देशिकाएं हैं और क्या अर्थ हैं /usr/sbin, /usr/local/sbinऔर /usr/local/bin?

कई कार्यक्रम अभिलेखागार के माध्यम से वितरित किए जाते हैं और हमें उन्हें स्रोत कोड से बनाना होगा। आमतौर पर उनका मेकफाइल होता है इसलिए यह काफी आसान है। इस प्रक्रिया में usr / local / lib, usr / local / bin ... usr / local / जो भी दिए गए प्रोग्राम के लिए विशिष्ट फोल्डर बनाए बिना फाइल बनाना शामिल है।

ऐसा क्यों है?

मुझे लगता है कि यह सही नहीं है क्योंकि अगर हमें प्रोग्राम को हटाने की जरूरत है तो प्रोग्राम के निर्माता ने इसका ख्याल नहीं रखा, तो हमें इसकी हर फाइल को मैनुअली डिलीट करना होगा।


सर्गेई, कृपया सुपर उपयोगकर्ता पर पोस्ट लिखने के लिए मार्कडाउन सिंटैक्स का उपयोग करें । उनमें HTML होने से उन्हें सादे पाठ में पढ़ना और संपादित करना वास्तव में कठिन हो जाता है।
slhck

ठीक है, मैं कोशिश करूँगा
सर्गेई

मुझे डायरेक्टरी फाइलसिस्टम से नफरत है। क्यों किसी ने एक फाइल सिस्टम का आविष्कार नहीं किया है जहां फाइलों को केवल इसके बजाय टैग किया गया है? इसके शीर्ष पर, निर्देशिकाओं का कोई मतलब नहीं है क्योंकि इनोड्स फ़ाइलों को खंडित होने की अनुमति देते हैं। एक निर्देशिका को हार्ड ड्राइव मेमोरी स्पेस का एक आवंटित हिस्सा होना चाहिए, न कि कुछ पथ, ज्यादातर विभाजन की तरह।
जोकून

[FilesystemQA] पर यह विवरण है: askubuntu.com/questions/138547/…

Btw। स्थानीय रूप से निर्मित कार्यक्रमों के "अनइंस्टालबिलिटी" मुद्दों से निपटने का सामान्य तरीका वास्तव में उनके लिए स्थानीय पैकेज बनाना है। हालांकि, यह प्रक्रिया लिनक्स वितरण पर बहुत निर्भर है। मामले में आवेदन तैनाती के उस मोड का समर्थन करते हैं, जो फ्लैटपैक या डॉकर जैसे स्थापित पैकेजिंग सिस्टम में आधुनिक पूरक हैं।
लिनक्स-फैन

जवाबों:


23

1. निर्देशिका संरचना

इस फाइलसिस्टम पदानुक्रम मानक ( 2.3 पीडीएफ ) में शामिल किया जाना चाहिए

/ बिन / आवश्यक आदेश बायनेरिज़ जो एकल उपयोगकर्ता मोड में उपलब्ध होना चाहिए;
            सभी उपयोगकर्ताओं के लिए, जैसे, बिल्ली, ls, cp

/ sbin / आवश्यक प्रणाली बायनेरिज़, जैसे, init, ip, Mount।

/ usr / bin / गैर-आवश्यक कमांड बायनेरिज़ (एकल उपयोगकर्ता मोड में आवश्यक नहीं); 
            सभी उपयोगकर्ताओ के लिए

/ usr / sbin / गैर-आवश्यक प्रणाली बायनेरिज़, जैसे विभिन्न नेटवर्क-सेवाओं के लिए डेमॉन।

/ usr / स्थानीय / स्थानीय डेटा के लिए तृतीयक पदानुक्रम, इस होस्ट के लिए विशिष्ट। 
            आमतौर पर आगे उपनिर्देशिकाएँ हैं, जैसे, बिन /, परिवाद /, शेयर /

2. स्थापना

मैं जहाँ भी संभव हो एक पैकेज प्रबंधक का उपयोग करता हूं (जैसे yum या apt-get)। यह बहुत बड़ी संख्या में अनुप्रयोगों के लिए संभव है, कुछ मामलों में आपको एक भंडार जोड़ना पड़ सकता है। मेरी दूसरी पसंद निम्न स्तर के पैकेज होंगे जैसे RPM और स्रोत से संकलन मेरा अंतिम उपाय होगा (लेकिन कुछ लोग इसे पसंद करते हैं)

कुछ पैकेज प्रबंधक RPM से स्थापित कर सकते हैं (जैसे yum install oddity.rpm)

यदि आप स्रोत से संकलित कर रहे हैं, तो यह संभवतः अपना खुद का पैकेज बनाने के लिए एक बड़ा कदम नहीं है ताकि सिस्टम इंस्टॉलर को पता चले कि आपने क्या किया है।

तब आपकी समस्या कम हो जाती है उदा yum remove packagename

विकल्प यह है कि किए गए सभी sadadmin गतिविधियों के बारे में अच्छा प्रलेखन रखें (मैं वैसे भी एक पाठ फ़ाइल में एक पत्रिका रखता हूं)


3
मुझे अभी भी usr / sbin, usr / local / bin और usr / local / sbin के बीच अंतर नहीं मिलता है। usr / स्थानीय को इस होस्ट के लिए विशिष्ट कहा जाता है, usr / sbin, usr / bin भी होस्ट के लिए विशिष्ट नहीं हैं? दूसरा सवाल उन कार्यक्रमों के बारे में था जो रिपोज में नहीं हैं - स्थापना रद्द करें हमेशा काम नहीं करता है - इसलिए मैंने पूछा कि उन लोगों को कैसे हटाया जाए?
सर्गेई

3
@Sergey यह ऐतिहासिक है। /usr/(s)binएक नेटवर्क फाइल सिस्टम से आरोहित किया जाना है। यही कारण है कि मशीन को बूट करने के लिए आवश्यक हर चीज को अंदर होना चाहिए था /(s)bin। अधिकांश भाग के /usr/localलिए अब उन प्रोग्रामों के लिए उपयोग किया जाता है जिन्हें आप पैकेज मैनेजर के बाहर स्थापित करते हैं (जो आपको नहीं करना चाहिए)।
Let_Me_Be

मैन्युअल रूप से इंस्टॉल किए गए प्रोग्रामों के लिए जिन्हें आपको अब नियमित डिलीट (rm) करने की आवश्यकता नहीं है। / usr / स्थानीय नेटवर्क बूटिंग सिस्टम के लिए मशीन विशिष्ट डेटा के लिए है / अक्सर एक नेटवर्क शेयर में usr। @Let_Me_Be पैकेज मैनेजर के बाहर से प्रोग्राम इंस्टॉल करना पूरी तरह से ठीक है और अक्सर इसकी आवश्यकता होती है।
लैमर बी

@ समाज: यदि आपके पास दो कंप्यूटर हैं, जो एक ही माध्यम से स्थापित हैं और बाद में मैन्युअल रूप से उनमें से किसी एक में कुछ सॉफ़्टवेयर जोड़ते हैं, तो परंपरागत रूप से यह / usr / स्थानीय में चला जाएगा क्योंकि यह उस मशीन के लिए स्थानीय है और "मानक" का हिस्सा नहीं है। विक्रेता द्वारा प्रदान किए गए कार्यक्रमों का सेट। जैसा कि दूसरों ने कहा है, यह ऐतिहासिक अभ्यास आजकल पैकेज बिल्डरों द्वारा बहुत अधिक नहीं है - मुझे लगता है कि मानक रिपॉजिटरी में सॉफ्टवेयर को प्रभावी ढंग से उपयोगकर्ता द्वारा स्थापित स्थानीय अनुकूलन के बजाय विक्रेता द्वारा आपूर्ति किए गए वैकल्पिक सॉफ़्टवेयर के रूप में अधिक व्यवहार किया जाता है।
RedGrittyBrick

3

सभी * / sbin निर्देशिका में सामान केवल सिस्टम प्रशासक के लिए उपयोगी होते हैं। यदि आप एक सामान्य उपयोगकर्ता हैं तो आप उन्हें अपने पेट से बाहर रख सकते हैं।

यदि आपके पास एकल डिस्क पर एकल यूनिक्स मशीन है, तो विभिन्न निर्देशिकाएं बहुत मायने नहीं रखती हैं, लेकिन यदि आपके पास एक बड़ी प्रणाली और अलग विभाजन हैं, तो अधिक समझ में आता है। याद रखें कि 80 और 90 के दशक में जब सिस्टम कुछ अलग थे, तो इनमें से बहुत सारी आदतें बन गईं थीं।

/sbinहो जाता है बहुत छोटे। ये उपयोगिताओं हैं जिनकी आपको आवश्यकता होती है जब आप वास्तव में hosed होते हैं। आप इसे रूट / / lib के साथ न्यूनतम रूट विभाजन पर डालेंगे। / Sbin में चीजें सभी वैधानिक रूप से लिंक हुआ करती थीं, क्योंकि यदि आपका / usr विभाजन hosed है, तो कोई भी गतिशील रूप से लिंक किए गए एप्लिकेशन बेकार हैं। fsck यहाँ है और सांख्यिकीय रूप से जुड़ा हुआ है। यदि आपके पास / usr पर निर्भरता है, तो जाहिर है आप fsck / usr / नहीं कर सकते। बेशक, यदि रूट विभाजन hosed है, तो आप बहुत खराब हैं। यही कारण है कि यह इतना छोटा विभाजन है - यहां बहुत कम ब्लॉकों का उपयोग करके एक खराब डिस्क ब्लॉक की बाधाओं को कम करें।

/usr/sbinबायनेरिज़ सामान्य sysadmin उपकरण हैं जहां आप कम से कम एकल उपयोगकर्ता मोड में आ सकते हैं और अपने सभी संस्करणों को माउंट कर सकते हैं। उन्हें गतिशील रूप से जुड़े रहने की अनुमति है।

/ Sbin (well, / sbin on / partition) और / usr के लिए अलग-अलग विभाजन भी अधिक समझ में आता है जब आपको याद है कि बैकअप समय और टेप दोनों के लिए बहुत महंगा था। यदि वे अलग-अलग विभाजन पर थे, तो आप उन्हें अलग तरीके से शेड्यूल कर सकते हैं।

/usr/localएक नेटवर्क फाइल सिस्टम हो सकता है। इसलिए स्थानीय स्तर पर लिखित sysadmin उपकरण जो कई मशीनों में साझा किए जा सकते हैं, कभी-कभी / usr / स्थानीय / sbin में जाते हैं। जाहिर है कोई भी नेटवर्क फिक्सिंग बर्तन वहां नहीं जा सकता।

फिर, बहुत सी चीजों ने कई संस्करणों के साथ प्रबंधित मशीनों पर नेटवर्क वाले वातावरण में बड़ी मशीनों पर अधिक समझ बनाई, कम रूट विभाजन पर एक लिनक्स मशीन के साथ इतना कम।


2

सुपरसुसर पर आपका वास्तव में एक अलग प्रश्न होना चाहिए। यह पहले से असंबंधित है।

हाँ, सभी जगह फाइल बेकार है। यही कारण है कि कई पैकेजिंग समाधान हैं। RedHat ने RPM बनाया जिसका उपयोग हर जगह किया जाता है। सोलारिस के पास उनका पैकेज प्रारूप था। एचपी / यूएक्स उनके पास था, और उपयुक्त और कई अन्य पैकेज प्रारूप हैं। उचित स्थानों (/ usr / bin, / usr / lib) के रूप में चीजों को उपयुक्त रखें, लेकिन आसान जोड़ और हटाने की अनुमति दें।

स्रोत के लिए, ऐसे उपकरण होते थे, जो आपको / usr / लोकल की उप-श्रेणी में कॉन्फ़िगर और इंस्टॉल करने देते थे और यह आपके लिए / usr / local / bin के लिए सहानुभूति को संभालता था। पैकेज टूल्स के व्यापक प्रसार के बाद से, यह कम आवश्यक है, और मैं उनके नामों को भूल गया।

कुछ लोग / ऑप्ट / पॅकेजेनम स्थापित करना पसंद करते हैं और वहां सब कुछ एक साथ रखते हैं। अच्छा: सब कुछ एक निर्देशिका में है और एक स्थापना रद्द है rm -rf /opt/packagename। इस के लिए downsides को जोड़ने / / packagename / bin हर किसी के पेट में जोड़ने के लिए कर रहे हैं, और तथ्य यह है कि लोगों को आमतौर पर एक अलग विभाजन पर नहीं डाल / चुनते हैं, और आप रूट विभाजन को भरने।


1
RPM का उपयोग हर जगह किया जाता है? क्या यह सच नहीं होगा कि डेबियन प्रारूप का उपयोग हर जगह किया जाता है?
इकोनॉस्टल

मैं तर्क दूंगा कि आरपीएम डीईबी जितना ही सब कुछ है। यह बहुत निर्भर करता है कि आप कहां काम करते हैं: ओपन सोर्स समुदाय में, मुझे लगता है कि डेबियन-आधारित पैकेज के साथ लिनक्स डेस्कटॉप और लिनक्स सर्वर की ओर झुकाव है। कॉर्पोरेट वातावरण में, लिनक्स अक्सर Red Hat संगत (यानी CentOS, RHEL, Oracle Linux आदि) के बराबर होता है या इसे "Red Hat या SLES" के रूप में परिभाषित किया जाता है और इस प्रकार सभी RPM :)
linux-fan

1

मेरी निर्देशिका के अर्थों पर ध्यान दें (डेबियन जीएनयू लिनक्स के साथ अनुभव से) यह है:

पहला भेद: sसुपरयुसर के लिए है

sएक binनिर्देशिका से पहले यह इंगित करता है कि इसमें ऐसे उपकरण हैं जो सामान्य रूप से केवल प्रशासकों के लिए उपयोगी हैं। ध्यान दें कि उदा ifconfigभी इस श्रेणी से संबंधित है और मैं ifconfigएक नियमित उपयोगकर्ता के रूप में आह्वान करना पसंद करता हूं (यह जांचने के लिए कि क्या मुझे एक आईपी पता / नेटवर्क कनेक्टिविटी मिली है) जो इस अंतर को उतना कठिन नहीं बनाता जितना यह प्रतीत हो सकता है।

दूसरा अंतर: local"स्थानीय डेटा" के लिए है

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

यह बहस योग्य है कि क्या /usr/localसामान्य /usrसंरचना से मौजूदा फ़ाइलों को ओवरराइड करना चाहिए , देखें कि क्या किसी के पेट में / usr / बिन से आगे / usr / स्थानीय / बिन होना खतरनाक है? इस पर कुछ विवरण के लिए।

तीसरा भेद: शीर्ष स्तर /binऔर /sbinनिर्देशिका।

डेबियन पर, वास्तव में एक तथाकथित UsrMerge है । पहले बूट प्रक्रिया में जो अंतर /binऔर /sbinउपलब्ध थे उनका उपयोग किया जाता था ( /usrएक नेटवर्क डिवाइस या विभिन्न विभाजन, RAID आदि पर होने के बारे में सोचें ), लेकिन आजकल कुछ लिनक्स सिस्टम अच्छी तरह से बूट होते हैं /usrजिसके बिना मैं शीर्ष के बीच अंतर पर विचार करूंगा- स्तर और /usrनिर्देशिका लिनक्स के लिए बड़े पैमाने पर ऐतिहासिक हित के लिए।

अंत में: "बिखरने" फाइलों की खूबियां और समस्याएं।

वास्तव में इसका कोई "एक सच" जवाब नहीं है। लिनक्स की बिखरी हुई फाइल प्रणाली के फायदे ये हैं:

  • सभी बायनेरिज़ कुछ निर्देशिकाओं में रहते हैं। इसका मतलब है कि आप शेल से हर प्रोग्राम को कॉल कर सकते हैं। विंडोज की तुलना करें, जहां %PATH%किसी को भी रुचि के किसी भी कार्यक्रम को जोड़ने के लिए हमेशा पर्यावरण चर को संपादित करना होगा । मैंने विंडोज पर बहुत लंबा पथ वातावरण देखा है।

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

  • जैसा कि लिनक्स को डिज़ाइन किया गया है कि अधिकांश सिस्टम फ़ाइलों को पैकेज मैनेजर वैसे भी ट्रैक करते हैं , उपयोगकर्ता के दृष्टिकोण से फ़ाइलों का अवलोकन रखने की कोई आवश्यकता नहीं है।

  • एफएचएस मानकीकरण के कारण, दस्तावेज़ीकरण केंद्रीय स्थानों में भी रहता है man, जैसे सिस्टम की अनुमति देता है , infoऔर अपेक्षित के रूप में काम करने के लिए सहायक README फाइलें।

  • एक निश्चित स्थान पर स्थापित किए जा रहे प्रोग्राम पर भरोसा करना आसान है। हर कोई राईट #!/bin/sh -eया स्क्रिप्ट की शुरुआत में इसी तरह की है और यह सिर्फ काम करता है । एक ऐसी प्रणाली पर विचार करें जहां शेल एक अलग निर्देशिका में जाएगा: किसी को यह कैसे पता चलेगा कि वह क्या नाम रखेगा? यदि दिलचस्पी है, तो विंडोज पर पर्ल या लाटेक को स्थापित करने के विभिन्न तरीकों की जांच करें कि यह कितना जटिल हो सकता है ...

अब तक मैंने जो नुकसान पाए हैं, वे ये हैं:

  • आम तौर पर, "विंडोज़ के लिए पोर्टेबल एप्लिकेशन" के अर्थ में "आंशिक रूप से" अनुप्रयोगों को चलाना कठिन होता है। लिनक्स पर, प्रोग्राम को केवल दूसरे कंप्यूटर पर कॉपी करना उतना आसान नहीं है ... किसी को पैकेज की आवश्यकता होती है (जिसे रूट अनुमतियों की आवश्यकता होती है) या LD_LIBRARY_PATHरीक्रूर किए गए पुस्तकालयों के लिए अलग-अलग खोज पथों को इंगित करने के लिए आवेदन करना पड़ता है।

  • एक ही कार्यक्रम के कई संस्करणों को स्थापित करने के लिए स्पष्ट रूप से समर्थित होने की आवश्यकता है, जबकि "प्रति कार्यक्रम एक निर्देशिका" वाले सिस्टम पर यह अक्सर एक समस्या से कम नहीं होता है।

  • पैकेज मैनेजर के बिना फाइलों का प्रबंधन त्रुटि-प्रवण है (जैसा कि पहले ही उल्लेख किया गया है)।


0

आपके दूसरे प्रश्न का उत्तर देने के लिए:
आमतौर पर प्रोग्राम एक तथाकथित पैकेज मैनेजर के साथ वितरित किए जाते हैं । एक पैकेज मैनेजर आमतौर पर बाइनरी पैकेज (एक निश्चित प्लेटफ़ॉर्म के लिए संकलित सॉफ़्टवेयर) लेता है और इसे निर्देशिकाओं के आसपास टॉस करता है (कुछ ऐसे हैं जो स्रोत कोड डाउनलोड करते हैं, इसे अपनी मशीन पर संकलित करते हैं और इसे स्थापित करते हैं)। इस प्रकार, पैकेज प्रबंधक जानता है कि कुछ "प्रोग्राम" (पैकेज) से संबंधित फाइलें कहां रहती हैं, और जब आप पैकेज को निकालना चाहते हैं, तो पैकेज मैनेजर सब कुछ साफ करने का ध्यान रखता है।
यहां तक ​​कि जब आप अपने साथ स्रोत कोड संकलित करते हैं

make

और इसके साथ स्थापित करें

make install

आप आमतौर पर कर सकते हैं

make uninstall

जो फाइल सिस्टम से फाइल को डिलीट करता है।


मेक अनइंस्टॉल केवल प्रोग्रामर में किया जा सकता है इस प्रक्रिया को मेक फाइल में जोड़ा गया। सवाल था - उन लोगों को कैसे हटाया जाए जहां अनइंस्टॉल करना काम नहीं करता है?
सर्गेई

1
सही है, लेकिन मुझे लगता है कि मेकफाइल में स्थापना रद्द किए बिना एक गंभीर परियोजना को ढूंढना काफी मुश्किल है (कभी भी इसके साथ कोई समस्या नहीं थी)। यदि आप स्रोत से संकलित करते हैं, और मेकफाइल की स्थापना रद्द नहीं होती है, तो मुझे लगता है कि यह करने का एक आसान तरीका नहीं है, लेकिन आप अभी भी एक स्क्रिप्ट लिख सकते make installहैं जो आउटपुट को पार्स करती है और वहां मौजूद फाइलों को हटा देती है।
मतेज रिपिनि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.