লিনাক্সের গতিশীল লিঙ্কারটি যে ক্রমটি অনুসন্ধান করে সেটিকে কী নির্দেশ দেওয়া হয়?


14

এটি কোনও সদৃশ নয় কারণ এটি ব্যবহার করার সময় আমি লক্ষ্য করেছি এমন একটি অদ্ভুততার সাথে সম্পর্কিত /etc/ld.so.conf

ডায়নামিক লিঙ্কার লাইব্রেরির জন্য যে পাথগুলিতে অনুসন্ধান করে সেগুলি পেতে, আমি কমান্ডটি চালাই ldconfig -v | grep -v "^"$'\t' | sed "s/:$//g"। কখন /etc/ld.so.confএতে কোনও পাথ তালিকাভুক্ত নেই। পূর্ববর্তী কমান্ড থেকে আউটপুট হয়

/lib
/usr/lib

আমি অনুভব করেছি যে এটি /libপ্রথমে এবং তারপরে অনুসন্ধান করে /usr/lib। আমি যখন কোনও নতুন পাথ যুক্ত করি, যেমন /usr/local/lib, তে /etc/ld.so.confএবং তারপরে পুনরায় তৈরি করি /etc/ld.so.cache, তখন আউটপুট হয়ে ldconfig -v | grep -v "^"$'\t' | sed "s/:$//g"যায়

/usr/local/lib
/lib
/usr/lib

আমি এইটিকে অদ্ভুত বলে মনে করি কারণ যদি আমি সঠিক হয় যে তালিকাবদ্ধ ডিরেক্টরিগুলি অনুসন্ধান করা ক্রমটি নীচ থেকে নীচে হয়, তবে অতিরিক্ত ডিরেক্টরিগুলি আগে /libএবং অনুসন্ধান করা হয় /usr/lib। অতিরিক্ত ডিরেক্টরি বিশ্বস্ত ডিরেক্টরি আগে অনুসন্ধান করা হয় যে তার নিজের উপর অদ্ভুত নয়, কিন্তু যখন /libসামনে অনুসন্ধান করা হয় /usr/lib, যে অদ্ভুত কারণ /bin& /sbinপরে অনুসন্ধান করা হয় /usr/bin& /usr/sbinমধ্যে PATH

এমনকি তালিকাভুক্ত পাথগুলি ldconfig -v | grep -Ev "^"$'\t' | sed "s/:$//g"নীচে থেকে উপরের দিকে অনুসন্ধান করা হলেও এটি এখনও একটি ক্রমানুক্রমিক অর্ডার হবে কারণ অতিরিক্ত ডিরেক্টরিগুলি বিশ্বস্তগুলির পরে অনুসন্ধান করা হবে এবং /libপরে অনুসন্ধান করা হবে /usr/lib

সুতরাং, ld.soলাইব্রেরির জন্য পাথ সন্ধান করার ক্রমটি কী? কেন /libআগে অনুসন্ধান করা হয় /usr/lib? যদি তা না হয়, তবে অতিরিক্ত ডিরেক্টরি কেন অনুসন্ধান করা হবে /lib?

উত্তর:


17

ক্রমটি ডায়নামিক লিঙ্কারের ম্যানুয়ালটিতে নথিভুক্ত করা হয়, যা ld.so। এটাই:

  1. ডিরেক্টরি থেকে LD_LIBRARY_PATH;
  2. ডিরেক্টরি থেকে /etc/ld.so.conf;
  3. /lib;
  4. /usr/lib

(আমি কিছুটা সরল করছি, সম্পূর্ণ বিবরণের জন্য ম্যানুয়ালটি দেখুন))

অর্ডারটি তখন অর্থবোধ করে যখন আপনি বিবেচনা করেন যে কোনও কাস্টম লাইব্রেরি সহ একটি ডিফল্ট লোকালিকায় লাইব্রেরিকে ওভাররাইড করার একমাত্র উপায়। LD_LIBRARY_PATHএটি একটি ব্যবহারকারী সেটিংস, এটি অন্যের সামনে আসতে হবে। /etc/ld.so.confএটি একটি স্থানীয় সেটিং, এটি অপারেটিং সিস্টেমের ডিফল্টর আগে আসে। সুতরাং একটি ব্যবহারকারী হিসাবে, আমি যদি একটি লাইব্রেরির বিভিন্ন সংস্করণ সহ একটি প্রোগ্রাম চালাতে চাই, আমি LD_LIBRARY_PATHসেই ভিন্ন লাইব্রেরির সংস্করণটির অবস্থানটি সহ প্রোগ্রামটি চালাতে পারি । এবং প্রশাসক হিসাবে, আমি লাইব্রেরির একটি আলাদা সংস্করণ লিখতে /usr/local/libএবং তালিকাভুক্ত /usr/local/libকরতে পারি /etc/ld.so.conf

বিশ্বাস এর মধ্যে প্রবেশ করে না। এই অনুসন্ধানের পথে তালিকাভুক্ত যে কোনও ডিরেক্টরিতে বিশ্বাসযোগ্য হতে হবে, কারণ কোনও লাইব্রেরি সেখান থেকে লোড হওয়া শেষ হতে পারে। তত্ত্ব অনুসারে, আপনি আপনার সিস্টেমে সমস্ত প্রোগ্রাম দ্বারা ব্যবহৃত "আরও বিশ্বাসের প্রয়োজন" লাইব্রেরির নাম তালিকাভুক্ত করতে পারেন এবং নিশ্চিত করতে পারেন যে এই সমস্ত গ্রন্থাগারগুলি "সবচেয়ে বিশ্বস্ত" ডিরেক্টরিতে উপস্থিত রয়েছে এবং তারপরে "স্বল্প বিশ্বস্ত" ডিরেক্টরিগুলি থাকবে না যদি তারা "কম বিশ্বাসের প্রয়োজন" প্রোগ্রামগুলি ব্যতীত অনুসন্ধানের পথে আরও নির্ভরযোগ্য ডিরেক্টরিগুলির পরে আসে তবে ব্যবহার করুন। তবে তা অত্যন্ত নাজুক হবে। এটি বেশ অর্থহীনও হবে: যদি কোনও আক্রমণকারী কোনও মান LD_LIBRARY_PATHবা একটি উপাদান ইনজেক্ট করতে পারে /etc/ld.so.confতবে অবশ্যই তাদের স্বেচ্ছাসেবক কোড কার্যকর করার আরও একটি সরাসরি পথ রয়েছে, যেমন এর মান ইনজেকশন হিসাবে PATHofLD_PRELOADইত্যাদির সাহায্যে লাইব্রেরি লোড পাথের উপর নির্ভর করে যখন কার্যকরকরণ কোনও ট্রাস্টের সীমানা অতিক্রম করে, অর্থাত্ অতিরিক্ত সুযোগ-সুবিধা (যেমন সেটুয়েড / সেটজিড প্রোগ্রাম, বা এর মাধ্যমে sudo) চালানোর সময় কোনও প্রোগ্রাম চালায় । এই ক্ষেত্রে যা হয় তা LD_LIBRARY_PATHহ'ল ফাঁকা।

/libবনাম হিসাবে /usr/lib, এটি খুব বেশি গুরুত্ব দেয় না: সেগুলি একই সত্তা (অপারেটিং সিস্টেম) সরবরাহ করেছে এবং উভয়ের মধ্যে উপস্থিত একটি লাইব্রেরি থাকা উচিত নয়। এটি /libপ্রথমে তালিকাবদ্ধ করে তোলে কারণ এটি একটি (খুব ক্ষুদ্র) পারফরম্যান্স সুবিধা সরবরাহ করে: বেশিরভাগ ক্ষেত্রে ব্যবহৃত লাইব্রেরিগুলি, বিশেষত ছোট বেসিক প্রোগ্রামগুলি দ্বারা ব্যবহৃত লাইব্রেরিগুলি (যার জন্য লোড টাইম বড়, দীর্ঘের চেয়ে মোট চলমান সময়ের একটি উচ্চতর ভগ্নাংশ হয় -রানিং প্রোগ্রাম), এ অবস্থিত /lib


যদি একাধিক ডিরেক্টরিগুলি এলডি_লিবিআরআরএআইপিএটিএচে তালিকাভুক্ত থাকে তবে তাদের কোন ক্রমে অনুসন্ধান করা হবে?
আরজেন্টাম 2f

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