প্রথমত, কেন পৃথক /lib
এবং /lib64
:
ফাইলসিস্টেম শ্রেণীক্রম স্ট্যান্ডার্ড
উল্লেখ করেছেন যে পৃথক /lib
এবং /lib64
থাকবেই কারণ:
10.1। সিস্টেমে / lib ডিরেক্টরিতে এক বা একাধিক বৈকল্পিক থাকতে পারে যা পৃথক গ্রন্থাগারগুলির জন্য একাধিক বাইনারি ফর্ম্যাট সমর্থন করে। (...) এটি সাধারণত 64-বিট বা 32-বিট সমর্থনের জন্য এমন সিস্টেমে ব্যবহৃত হয় যা একাধিক বাইনারি ফর্ম্যাটগুলিকে সমর্থন করে তবে একই নামের লাইব্রেরিগুলির প্রয়োজন। এই ক্ষেত্রে, / lib32 এবং / lib64 লাইব্রেরি ডিরেক্টরি হতে পারে এবং তাদের মধ্যে একটিতে একটি লিখিত লিঙ্ক থাকে b
আমার স্ল্যাকওয়ারে 14.2 উদাহরণস্বরূপ এখানে
32-বিট এবং -৪-বিট লাইব্রেরির জন্য যথাক্রমে ডিরেক্টরি /lib
এবং /lib64
ডিরেক্টরি রয়েছে যদিও
/lib
এফএইচএস স্নিপেটের পরামর্শ হিসাবে সিমলিংক হিসাবে নয়:
$ 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
।
প্রতিটি গতিশীলভাবে নির্মিত
ইএলএফ বাইনারিতে
দোভাষীর একটি হার্ডকোডযুক্ত পথ থাকে, এক্ষেত্রে হয়
/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]
দোভাষীর কাজ হ'ল প্রয়োজনীয় শেয়ার্ড লাইব্রেরি লোড করা। আপনি কোনও জিএনইউ ইন্টারপ্রেটারকে জিজ্ঞাসা করতে পারেন কোনও বাইনারি 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
।
এফএইচএস স্ট্যান্ডার্ড নিম্নলিখিত সম্পর্কে নিম্নলিখিত বলে /bin
:
/ বিনে কমান্ড রয়েছে যা সিস্টেম অ্যাডমিনিস্ট্রেটর এবং ব্যবহারকারী উভয়ই দ্বারা ব্যবহৃত হতে পারে, তবে অন্য কোনও ফাইল-সিস্টেম মাউন্ট না করা অবস্থায় (যেমন একক ব্যবহারকারী মোডে) প্রয়োজন হয় which এটিতে কমান্ডগুলি থাকতে পারে যা স্ক্রিপ্টগুলি দ্বারা অপ্রত্যক্ষভাবে ব্যবহৃত হয়।
আইএমও কেন কোনও আলাদা থাকার কারণ নেই /bin
এবং /bin64
তা হ'ল যদি আমাদের উভয় ডিরেক্টরিতে একই নামের ফাইল থাকে তবে আমরা তাদের একটিকে অপ্রত্যক্ষভাবে কল করতে পারি নি কারণ আমাদের রাখতে হবে /bin
বা /bin64
প্রথমে রাখতে হবে
$PATH
।
তবে খেয়াল করুন যে উপরেরটি কেবল কনভেনশন - লিনাক্স কার্নেলটি আলাদা না থাকলে /bin
এবং প্রকৃতপক্ষে যত্ন করে না /bin64
। আপনি যদি এগুলি চান তবে আপনি সেগুলি তৈরি করতে পারেন এবং সে অনুযায়ী আপনার সিস্টেম সেটআপ করতে পারেন।
আপনি অ্যান্ড্রয়েডের কথাও উল্লেখ করেছেন - নোট করুন যে পরিবর্তিত লিনাক্স কার্নেল চালানো ছাড়া উবুন্টুর মতো জিএনইউ সিস্টেমের সাথে এর কোনও যোগসূত্র নেই - কোনও গলিবিক, কোনও বাশ (ডিফল্টরূপে, আপনি অবশ্যই এটি নিজেই সংকলন এবং স্থাপন করতে পারেন), এবং ডিরেক্টরি কাঠামো সম্পূর্ণ ভিন্ন।
/bin
এবং/sbin
সেখানে দেখতে । প্রশ্নটা কি? আপনি/lib
এবং এর মধ্যে পার্থক্য সম্পর্কে জিজ্ঞাসা করছেন/lib64
?