सबसे पहले, अलग क्यों हैं /lib
और /lib64
:
फ़ाइल-सिस्टम अनुक्रम स्टैंडर्ड
कहा गया है कि अलग /lib
और /lib64
अस्तित्व है क्योंकि:
10.1। ऐसे सिस्टम पर एक / एक से अधिक संस्करण हो सकते हैं, जो अलग-अलग पुस्तकालयों की आवश्यकता वाले एक से अधिक द्विआधारी प्रारूप का समर्थन करते हैं। (...) यह आमतौर पर 64-बिट या 32-बिट सिस्टम के लिए उपयोग किया जाता है जो कई बाइनरी प्रारूपों का समर्थन करता है, लेकिन एक ही नाम के पुस्तकालयों की आवश्यकता होती है। इस मामले में, / lib32 और / lib64 लाइब्रेरी निर्देशिका हो सकते हैं, और / / उनमें से एक के लिए सहानुभूति का परिवाद कर सकते हैं।
मेरी स्लैकवेयर 14.2 पर उदाहरण के लिए देखते हैं /lib
और /lib64
32-बिट और 64-बिट पुस्तकालयों के लिए निर्देशिका क्रमशः भले ही
/lib
एक सिमलिंक के रूप में के रूप में FHS झलकी सुझाव है कि नहीं है:
$ ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 12 Aug 11 2016 /lib/libc.so.6 -> libc-2.23.so
$ ls -l /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 Aug 11 2016 /lib64/libc.so.6 -> libc-2.23.so
libc.so.6
में /lib
और दो पुस्तकालय हैं /lib64
।
प्रत्येक गतिशील बनाया
ELF बाइनरी
इस मामले या तो में, दुभाषिया के लिए एक हार्डकोडेड पथ है
/lib/ld-linux.so.2
या /lib64/ld-linux-x86-64.so.2
:
$ file main
main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, not stripped
$ readelf -a main | grep 'Requesting program interpreter'
[Requesting program interpreter: /lib/ld-linux.so.2]
$ file ./main64
./main64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, not stripped
$ readelf -a main64 | grep 'Requesting program interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
दुभाषिया का काम आवश्यक साझा पुस्तकालयों को लोड करना है। आप एक GNU दुभाषिया से पूछ सकते हैं कि एक लायब्रेरी का उपयोग करके LD_TRACE_LOADED_OBJECTS=1
या एक ldd
आवरण के बिना भी किन पुस्तकालयों को लोड किया जाएगा :
$ LD_TRACE_LOADED_OBJECTS=1 ./main
linux-gate.so.1 (0xf77a9000)
libc.so.6 => /lib/libc.so.6 (0xf760e000)
/lib/ld-linux.so.2 (0xf77aa000)
$ LD_TRACE_LOADED_OBJECTS=1 ./main64
linux-vdso.so.1 (0x00007ffd535b3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f56830b3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f568347c000)
जैसा कि आप देख सकते हैं कि एक दिया गया दुभाषिया बिल्कुल जानता है कि पुस्तकालयों की तलाश कहाँ है - 32-बिट संस्करण पुस्तकालयों के लिए दिखता है /lib
और 64-बिट संस्करण पुस्तकालयों के लिए दिखता है /lib64
।
FHS मानक निम्नलिखित के बारे में कहता है /bin
:
/ बिन में ऐसे कमांड होते हैं जिनका उपयोग सिस्टम एडमिनिस्ट्रेटर और यूजर्स दोनों के द्वारा किया जा सकता है, लेकिन जब किसी अन्य फाइल सिस्टम को माउंट नहीं किया जाता है (जैसे सिंगल यूजर मोड में)। इसमें ऐसे कमांड भी हो सकते हैं जो स्क्रिप्ट द्वारा अप्रत्यक्ष रूप से उपयोग किए जाते हैं।
IMO कारण है कि कोई अलग नहीं है /bin
और /bin64
यह है कि अगर हमारे पास इन दोनों निर्देशिकाओं में एक ही नाम वाली फ़ाइल है, तो हम अप्रत्यक्ष रूप से उनमें से एक को नहीं बुला सकते हैं क्योंकि हमें पहले
/bin
या अंदर डालना होगा ।/bin64
$PATH
हालांकि, ध्यान दें कि उपरोक्त सिर्फ सम्मेलन है - लिनक्स कर्नेल वास्तव में परवाह नहीं करता है यदि आपके पास अलग है /bin
और /bin64
। यदि आप उन्हें चाहते हैं, तो आप उन्हें बना सकते हैं और उसी के अनुसार अपना सिस्टम सेटअप कर सकते हैं।
आपने एंड्रॉइड का भी उल्लेख किया - ध्यान दें कि एक संशोधित लिनक्स कर्नेल को चलाने के अलावा इसका GNU सिस्टम जैसे Ubuntu से कोई लेना-देना नहीं है - कोई ग्लिबक, कोई बैश (डिफ़ॉल्ट रूप से, आप निश्चित रूप से इसे मैन्युअल रूप से संकलित और तैनात कर सकते हैं), और निर्देशिका संरचना भी पूरी तरह से अलग है।
/bin
और/sbin
वहां दोनों देखता हूं । प्रश्न क्या है? क्या आप/lib
और के बीच अंतर के बारे में पूछ रहे हैं/lib64
?