यदि आपने किसी भी लम्बाई के लिए यूनिक्स से निपटा है, तो हाँ यह एक बहुत ही भ्रमित करने वाला हिस्सा है। एक मानक है जो ज्यादातर यूनिक्स FHS - फाइलसिस्टम पदानुक्रम मानक का पालन करने की "कोशिश" करता है ।
यह देखते हुए कि मैं मुख्य रूप से Red Hat आधारित डिस्ट्रोस का उपयोग करता हूँ, मैं फेडोरा, CentOS और RHEL Linux डिस्ट्रोस के लिए FHS पर उनके ले जाने से सबसे अधिक परिचित हूँ । लेकिन मैंने डेबियन और बीएसडी आधारित डिस्ट्रोस का उपयोग किया है और वे सभी अलग नहीं हैं जहां चीजें रखी जाती हैं, फाइलसिस्टम वार।
अब आपके प्रश्नों के लिए। मैं एफएचएस दस्तावेज़ पर एक नज़र डालूंगा , जो इन निर्देशिका संरचनाओं को शिथिल रूप से नियंत्रित करता है। सामान्य रूप में:
निर्देशिका - /lib
आवश्यक साझा पुस्तकालय और कर्नेल मॉड्यूल शामिल हैं।
उद्देश्य: / कार्यकारी निर्देशिका में सिस्टम साझा करने और रूट फाइल सिस्टम में कमांड चलाने के लिए आवश्यक साझा लाइब्रेरी चित्र हैं, अर्थात। बायनेरिज़ द्वारा / बिन और / साइबिन में।
नोट 1: साझा लाइब्रेरी जो केवल बायनेरिज़ के लिए आवश्यक हैं / usr (जैसे कि कोई एक्स विंडो बायनेरिज़) / परिवाद में नहीं होना चाहिए। केवल बायनेरिज़ को / bin और / sbin में चलाने के लिए आवश्यक साझा लाइब्रेरी यहाँ हो सकती हैं।
Note2: / lib के प्राथमिक उद्देश्य को देखते हुए निर्देशिकाओं / बिन & / sbin पर तैनात उपकरणों के लिए पुस्तकालयों को शामिल करना है, / lib में पुस्तकालय 32-बिट या 64-बिट हो सकते हैं।
उदाहरण के लिए (फेडोरा 14 64-बिट सिस्टम)
$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
यहाँ मेरे / lib से फाइलों का नमूना लिया गया है
./libpam.so.0.82.2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libplc4.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libidn.so.11.6.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./upstart/telinit: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/runlevel: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/shutdown: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/reboot: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./libdb-4.8.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./firmware/mixart/miXart8.elf: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
./libtinfo.so.5.7: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
निर्देशिका - /lib<qual>
वैकल्पिक प्रारूप आवश्यक साझा पुस्तकालय (वैकल्पिक)। ये निर्देशिका / lib32, / lib64 आदि होंगे।
उद्देश्य: प्रणालियों पर एक या एक से अधिक संस्करण हो सकते हैं / अलग-अलग पुस्तकालयों की आवश्यकता वाले एक से अधिक द्विआधारी प्रारूप का समर्थन करने वाली प्रणालियों पर काम करते हैं। यह आमतौर पर 64-बिट या 32-बिट सिस्टम के लिए उपयोग किया जाता है जो कई द्विआधारी स्वरूपों का समर्थन करता है, लेकिन एक ही नाम के पुस्तकालयों की आवश्यकता होती है।
नोट: इस मामले में, / lib32 और / lib64 लाइब्रेरी निर्देशिका हो सकते हैं, और उनमें से किसी एक के लिए एक सहानुभूति का परिवाद कर सकते हैं।
निर्देशिका - /usr/lib
प्रोग्रामिंग और पैकेज के लिए पुस्तकालय।
उद्देश्य: / usr / lib में ऑब्जेक्ट फ़ाइलें, लाइब्रेरीज़ और आंतरिक बायनेरीज़ शामिल हैं, जिन्हें उपयोगकर्ताओं या शेल स्क्रिप्ट द्वारा सीधे निष्पादित करने का इरादा नहीं है।
Note1: विविध वास्तुकला-स्वतंत्र अनुप्रयोग-विशिष्ट स्थिर फ़ाइलों और उपनिर्देशिकाओं को / usr / शेयर में रखा जाना चाहिए।
अनुप्रयोग एकल उपनिर्देशिका / usr / lib के तहत उपयोग कर सकते हैं। यदि कोई एप्लिकेशन उपनिर्देशिका का उपयोग करता है, तो अनुप्रयोग द्वारा विशेष रूप से उपयोग किए जाने वाले सभी आर्किटेक्चर-निर्भर डेटा को उस उपनिर्देशिका के भीतर रखा जाना चाहिए।
नोट 2: उदाहरण के लिए, पर्ल 5 मॉड्यूल और लाइब्रेरी के लिए perl5 उपनिर्देशिका।
निर्देशिका - /usr/lib<qual>
वैकल्पिक प्रारूप पुस्तकालय (वैकल्पिक)।
उद्देश्य: /usr/lib<qual>
एक वैकल्पिक द्विआधारी प्रारूप के लिए / usr / lib के रूप में एक ही भूमिका करता है, सिवाय इसके कि प्रतीकात्मक लिंक /usr/lib<qual>/sendmail
और /usr/lib<qual>/X11
आवश्यक नहीं हैं।
नोट: वह मामला जहां / usr / lib और /usr/lib<qual>
समान हैं (एक दूसरे के लिए एक प्रतीकात्मक लिंक है) ये फाइलें और प्रति-अनुप्रयोग उपनिर्देशिकाएं मौजूद होंगी।
TLDR;
सामान्य रूप में:
यदि ऐसी लाइब्रेरीज़ हैं जो / bin या / sbin निर्देशिकाओं में निष्पादन योग्य द्वारा आवश्यक हैं, तो उन पुस्तकालयों को / lib * निर्देशिकाओं में जाना चाहिए।
यदि उपयोग कार्यक्रम और पैकेज के लिए पुस्तकालय हैं, तो वे / usr / lib / * में जाते हैं। यदि निष्पादन योग्य हैं जो किसी विशेष पुस्तकालय द्वारा आवश्यक हैं, लेकिन ये निष्पादन योग्य नहीं हैं कि उपयोगकर्ताओं को सीधे या मूल रूप से बुलाया जाए, तो वे / usr / libexec में जाते हैं।