এখানে `/ lib` এবং` / lib64` কেবলমাত্র `/ bin` আছে কেন?


27

আমার ল্যাপটপে:

$ cat /etc/issue  
Ubuntu 18.04 LTS \n \l

লাইব্রেরির জন্য দুটি আলাদা ফোল্ডার রয়েছে x86এবং x86_64:

~$ ls -1 /  
bin
lib
lib64
sbin
...

বাইনারিগুলির জন্য কেন কেবল একটি ডিরেক্টরি বিদ্যমান?

পিএস আমিও অ্যান্ড্রয়েডে আগ্রহী কিন্তু আমি আশা করি উত্তরটি একই রকম হওয়া উচিত।


1
শুধু একটিতে? আমি উভয় /binএবং /sbinসেখানে দেখতে । প্রশ্নটা কি? আপনি /libএবং এর মধ্যে পার্থক্য সম্পর্কে জিজ্ঞাসা করছেন /lib64?
কুসালানন্দ

2
@Kusalananda, আমি বলতে চাইছি কোন স্বাধীন ফোল্ডারের জন্য যে x86_64(তন্ন তন্ন জন্য /binকোন /sbin)।
গ্লটটন

7
আইএমও ওপি জানতে চায় না কেন নেই /bin64
আরকাদিউস দ্রবকিজিক

প্রায় 32 টি-বিট এবং -৪-বিট সংস্করণ (WINE) উভয় ব্যবহার করে উপকার পাওয়া যায় এমন এক অ্যাপ্লিকেশনটি বিভিন্ন নামের বাইনারি ( wine*32এবং wine*64) রেখে এর চারপাশে চলে আসে ।
Ignacio Vazquez-Abram

1
@ IgnacioVazquez-Abram: এটিও বলা দরকার যে আপনি বাইনারিগুলি লাইব্রেরির সাথে সংযুক্ত করেন, বিপরীতে নয়। সুতরাং বাইনারিগুলি 32/64-সাক্ষ্য দ্বারা বিভাজন করা উচিত নয়।
স্মি

উত্তর:


25

প্রথমত, কেন পৃথক /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। আপনি যদি এগুলি চান তবে আপনি সেগুলি তৈরি করতে পারেন এবং সে অনুযায়ী আপনার সিস্টেম সেটআপ করতে পারেন।

আপনি অ্যান্ড্রয়েডের কথাও উল্লেখ করেছেন - নোট করুন যে পরিবর্তিত লিনাক্স কার্নেল চালানো ছাড়া উবুন্টুর মতো জিএনইউ সিস্টেমের সাথে এর কোনও যোগসূত্র নেই - কোনও গলিবিক, কোনও বাশ (ডিফল্টরূপে, আপনি অবশ্যই এটি নিজেই সংকলন এবং স্থাপন করতে পারেন), এবং ডিরেক্টরি কাঠামো সম্পূর্ণ ভিন্ন।


আপনার ls -lউদাহরণগুলি বিশেষত জার্মানি নয়। কী কার্যকর হবে তা হ'ল আউটপুট ls -l /lib /lib64, যা সম্ভবত এটি দেখায় যে /libনিজেই একটি সিএমলিংক।
ক্রাইলিস

আপনি বোঝাতে চেয়েছিলেন ls -ldএবং না, /libএটি আমার Slackware 14.2সিস্টেমে কোনও সিমিলিংক নয় ।
আরকাদিউস দ্রবকিজিক

গ্রন্থাগারগুলির বিভিন্ন md5sums রয়েছে: dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6, 987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
আরকাদিউস দ্রবকিজিক

2
সেক্ষেত্রে ইন-ডিরেক্টরিতে থাকা প্রতীকগুলি দেখানো উদ্ধৃতিটির সাথে সংযুক্ত হয় না।
ক্রাইলিস -হান ধর্মঘট-

1
সুরক্ষা গর্তের কারণে LD_TRACE_LOADED_OBJECTS = 1 অপ্রচলিত এবং ldd এটি আর ব্যবহার করে না। কারণ: এলডিডি / পাথ / টু / ম্যালিয়াসিয়াস-স্ট্যাটিক-বাইনারি সিস্টেমগুলি গ্রহণ করার জন্য ব্যবহৃত হত কারণ সিসাদমিনগণ কেবল বাইনারি চালাবেন না তা দেখার জন্য ldd আশা করছিলেন। এছাড়াও, স্থির কিনা তা পরীক্ষা করা অপর্যাপ্ত কারণ এর পরিবর্তে দূষিত লোডার ব্যবহার করতে বাইনারি তৈরি করা যেতে পারে।
জোশুয়া

22

কারণটি হ'ল lib / lib64 ডিরেক্টরিগুলিতে এমন ফাইল থাকতে পারে যা একই নাম হতে পারে কারণ সেগুলি বিভিন্ন প্রোগ্রামের সাথে ভাগ করা লাইব্রেরি। তাদের পৃথক ডিরেক্টরিতে রেখে দেওয়া বিরোধের সমাধান করে। একই সিস্টেমে একই নামযুক্ত এক্সিকিউটেবলগুলি বিতরণের জন্য (সাধারণত ...) কোনও ভাল কারণ নেই যা 32/64-বিট, তবে যেহেতু এক্সিকিউটেবলের মিশ্রণ থাকতে পারে, তাই ভাগ করা লাইব্রেরিগুলি সরবরাহ করতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.