আমার সিস্টেমটি কোন লাইব্রেরির সংস্করণ ব্যবহার করে?


43

আমার সিস্টেমটি ইউজারল্যান্ড সি লাইব্রেরিটি কী ব্যবহার করে তা আমি কীভাবে নিশ্চিতভাবে বলতে পারি? এই তথ্যের প্রয়োজনের সম্ভাব্য কারণগুলির মধ্যে রয়েছে:

  • আমি একটি বিশাল উত্স প্যাকেজটি ডাউনলোড করার বিষয়ে বিবেচনা করছি যা আমি নিশ্চিত যা সঠিক চেক করবে এবং একটি মিনিমিয়াম গ্রন্থাগার সংস্করণটি তালিকাভুক্ত করবে, তবে আমি কাজ করে কিনা তা আগে পরীক্ষা করে নিজেকে একটি সম্ভাব্য ঝামেলা বাঁচাতে চাই।

  • আমি সিস্টেমের প্যাকেজ ম্যানেজমেন্ট সিস্টেমের বাইরে চেষ্টা করতে এবং ইনস্টল করতে চাই এমন কয়েকটি তৃতীয় পক্ষের বাইনারিগুলির সাথে এবিআইয়ের সামঞ্জস্যতা সম্পর্কে উদ্বিগ্ন ।

  • আমার কাছে একটি উত্স প্যাকেজ রয়েছে যার ডকুমেন্টেশনে আমার সিস্টেমের লাইব্রেরির ন্যূনতম সংস্করণের প্রয়োজনীয়তার কথা উল্লেখ করা হয়েছে, তবে বিল্ড প্রক্রিয়াটি কোনও চেক সম্পাদন করে না।

  • আমি একটি নির্দিষ্ট সিস্টেমকে লক্ষ্য করে একটি ক্রস-সংকলক তৈরি করছি এবং সামনের সামঞ্জস্যের সমস্যার ঝুঁকি নিতে চাই না ।


কেন চেষ্টা করে দেখুন না। আমি জানি না যে সংস্করণটি আপনাকে সমস্ত কিছু বলে; প্যাচ কি? বা বিভ্রান্তিগুলি এবিআইয়ের পরিবর্তন সম্পর্কে সতর্ক? রফতানি প্রতীকগুলি সমাধান হয়েছে কিনা, বা এর মতো কিছু হচ্ছে না তা কি সমস্যা নয়?
ফাহিম মিঠা

সুন্দর উত্তর, কিন্তু কেউ ম্যাকের যেখানে কী নেই সেখানে কীভাবে এটি করবেন তা সম্বোধন করে না ldd। আমি নিশ্চিত না যে otool --versionএকই তথ্য প্রদান হিসাবে বিবেচিত হবে কিনা ।
dubiousjim

@ সন্দেহজনক জিম কেউ করতে পারে; শুধু আমাকে নয়, কারণ আমি কোনও ম্যাক ব্যবহারকারী নই। এখানে প্রায় আপনাকে বিশেষভাবে জিজ্ঞাসা করতে হতে পারে - সমস্যার অংশ সম্ভবত লোকেরা সাধারণত ওএসএক্সে প্লেইন সি বেশি ব্যবহার করেন না? তবে আমি নিশ্চিত যে এখানে নিয়মিত কেউ আছেন যারা জানেন। আপনি আড্ডায় এইটির জন্য একটি লিঙ্কও পোস্ট করতে পারেন এবং দেখুন কী ঘটেছিল, তবে সম্ভবত একটি নতুন, আরও নির্দিষ্ট প্রশ্নটি আরও ভাল।
স্বর্ণলোকস

উত্তর:


50

জিএনইউ / লিনাক্স সিস্টেমগুলি সাধারণত গ্লিবসি (ফেডোরা / রেডহ্যাট পরিবার, আর্চ) বা এর নিকটতম চাচাত ভাই, এল্লিবসি (দেবিয়ান / উবুন্টু পরিবার) ব্যবহার করে; যেহেতু eglibc এখন জন্য glibc ফিরে মার্জ করা হচ্ছে ( দেখুন EGLIBC 2.19 শাখা তৈরি হয়েছে "সংবাদ" এর অধীনে ), অদূর ভবিষ্যতে তারা আবার জন্য glibc হতে হবে।

সঠিক সংস্করণটি যাচাই করার সহজ উপায়টি হ'ল জিজ্ঞাসা করা ldd, কোনটি সি লাইব্রেরির সাহায্যে পাঠানো হয় ।

ফেডোরায় 20:

> ldd --version
ldd (GNU libc) 2.18

এটি গ্লিবসি 2.18 18

রাস্পবিয়ান অন (এআরএমভি 6 ব্রডকম এসসির জন্য ডেবিয়ান 7 বন্দর):

> ldd --version
ldd (Debian EGLIBC 2.13-38+rpi2) 2.13

এটি উদাহরণস্বরূপ 2.13।

যদি কোনও কারণে আপনি কিছু অংশ মিশ্রিত করেছেন এবং কিছু মিল করেছেন বা অন্যথায় নিশ্চিত না হন তবে lddআপনি সরাসরি সি লাইব্রেরিকে জিজ্ঞাসা করতে পারেন।

> whereis libc.so
libc: /usr/lib64/libc.a /usr/lib64/libc.so /usr/share/man/man7/libc.7.gz

এগুলির মধ্যে কোনওটিই কার্যকরযোগ্য নয় তবে তারা কোথায় খুঁজে পাবেন সে সম্পর্কে একটি সূত্র সরবরাহ করে।

> $(find /usr/lib64/ -executable -name "*libc.so*") --version
GNU C Library (GNU libc) stable release version 2.18, by Roland McGrath et al.

তবে এটি অগত্যা এত সহজ নয়, কারণ সি লাইব্রেরিতে whereisএটি কোথাও খুঁজে পাওয়া যায় না can

> whereis libc.so
libc: /usr/share/man/man7/libc.7.gz

দুর্ভাগ্যক্রমে, ম্যান পৃষ্ঠাটি কোনও সংস্করণ নম্বর সরবরাহ করে না। lddএখনও কার্যকর হয়, যেহেতু সিস্টেমে যে কোনও কার্যকরী, গতিযুক্তভাবে এক্সিকিউটেবল লিঙ্কযুক্ত (যেমন, প্রায় সমস্ত কিছু /usr/bin) সি লাইব্রেরিতে লিঙ্ক করবে।

> ldd /usr/bin/touch
    /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6eed000)
    librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xb6ed0000)
    libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6da1000)
    /lib/ld-linux-armhf.so.3 (0xb6efb000)
    libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6d82000)

libc.so.6 তৃতীয় লাইনে আছে।

> /lib/arm-linux-gnueabihf/libc.so.6 --version
GNU C Library (Debian EGLIBC 2.13-38+rpi2) stable release version 2.13, by Roland McGrath et al.

কোন জিএনইউ / লিনাক্স সিস্টেমকে "স্বাভাবিক" করে তোলে? মাসল ব্যবহার করে বিতরণ সম্পর্কে কী ?
এলিয়ট ফ্রিশ

1
@ElliottFrisch এটা এ, "স্বাভাবিক জিএনইউ / লিনাক্স" হিসাবে (বিশেষণ, বিশেষ্য) (হয়, আমি নিশ্চিত) জিএনইউ / লিনাক্স প্রয়োগ করতে, সিস্টেম যা থেকে হতে পারে জন্যই ছিল না ব্যবহার (ঙ) জন্য glibc কিন্তু না জিএনইউর বাকী স্ট্যাক (ব্যাশ, বাইনুটিসস ইত্যাদি) ব্যবহার করুন। আমি সেই "অস্বাভাবিক" জিএনইউ / লিনাক্স সিস্টেমগুলি বিবেচনা করব। তবে আমি "স্বাভাবিক" সরিয়ে এটিকে "জিএনইউ / লিনাক্স সিস্টেমগুলি সাধারণত ব্যবহার করে ..." এ পরিবর্তন করেছি। দ্রষ্টব্য আমি ইচ্ছাকৃতভাবে প্রশ্নটি ওপেন ডাব্লুআরটি ওএসের নির্দিষ্ট বিবরণে রেখেছি (কোনও লিনাক্স বা জিএনইউ বা গ্লিবসি ট্যাগ নেই), সুতরাং আপনি যদি ইউএন্ডএল-এর উপযুক্ত কোনও সিস্টেম সম্পর্কিত কোনও উত্তর যুক্ত করতে চান তবে দয়া করে করুন।
সোনারলোকস

1
আপনি এটির মতো দেখতে পেয়েছি এবং আমি সংস্করণটি অনুসন্ধান করেছি, এটি উপলভ্য এক্সটেনশনগুলিও মুদ্রিত করেছে! (আমার ক্ষেত্রে স্টাবস, ক্রিপ্ট, লিবিডন, নেটিভ থ্রেড এবং বাইন্ড) এবং এবিআই: লিবিসি এবিআই: অনন্য আইএফইউএনসি উল্লেখ করা হয়েছে।

দেবিয়ান /lib/`uname -m`*পথ ব্যবহার করে। সুতরাং পোর্টেবল উপায় হতে হবে: find /lib/`uname -m`* /usr/lib* -executable -name "*libc.so*" | xargs --version। সুন্দর ব্যাখ্যার জন্য ধন্যবাদ।
পেভিক

@pevik: ভুল, তে এটি এর /lib/arm-linux-gnueabihf/libc.so.6 আর্ম এবং /lib/armv7l/libc.so.6
quandary

14

একটি সিস্টেম আসলে একটি সি লাইব্রেরিতে সীমাবদ্ধ নয়। বেশিরভাগ, যদিও প্রাথমিকভাবে কেবলমাত্র একটি ব্যবহার করা হয়, এটি ডিফল্ট সংকলকও ব্যবহার করে। এবং যেহেতু আপনি সংকলনের জন্য উত্স কোডটি ডাউনলোড করছেন, এটিই আপনার সাথে সংশ্লিষ্ট।

একটি তুচ্ছ প্রোগ্রাম দিয়ে শুরু করুন:

#include <stdio.h>
int main() {
    printf("Hello, world\n");
    return 0;
}

আপনি উত্স কোডের জন্য যে সংকলকটি ব্যবহার করতে যাচ্ছেন তা ব্যবহার করে এটি সংকলন করুন, তারপরে lddসি লাইব্রেরিটি কোথায় তা সন্ধানের জন্য ব্যবহার করুন:

$ ldd ./libc-test 
        linux-vdso.so.1 (0x00007fff2e5fe000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8c8ad98000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f8c8b171000)

আপনার এখন সি লাইব্রেরির পথ রয়েছে। প্যাকেজটি খুঁজে পেতে আপনি এটি আপনার প্যাকেজ ম্যানেজারে দেখতে পারেন (যেমন, dpkg -S /lib/x86_64-linux-gnu/libc.so.6বা rpm -q -f /lib/x86_64-linux-gnu/libc.so.6)।

কমপক্ষে eglibc / glibc এর ক্ষেত্রে, আপনি এটি চালাতে পারেন:

$ /lib/x86_64-linux-gnu/libc.so.6  
GNU C Library (Debian EGLIBC 2.18-4) stable release version 2.18, by Roland McGrath et al.
Copyright (C) 2013 Free Software Foundation, Inc.

পরিশেষে, আপনি আপনার কাছ থেকে সংকেত সনাক্ত করুন পেতে পারেন যদি দেখতে পারে objdump -p /lib/x86_64-linux-gnu/libc.so.6দেখলেই, সংস্করণ সংজ্ঞা অধ্যায়:

Version definitions:
1 0x01 0x0865f4e6 libc.so.6
2 0x00 0x09691a75 GLIBC_2.2.5
3 0x00 0x09691a76 GLIBC_2.2.6
⋮
21 0x00 0x06969197 GLIBC_2.17
        GLIBC_2.16 
22 0x00 0x06969198 GLIBC_2.18
        GLIBC_2.17 
23 0x00 0x0963cf85 GLIBC_PRIVATE
        GLIBC_2.18 

লক্ষ করুন যে কীভাবে GLIBC_2.18 চিহ্নের তালিকাভুক্ত চিহ্নগুলির মধ্যে অতি সাম্প্রতিক সংস্করণ সংখ্যা রয়েছে এবং লাইব্রেরির সংস্করণটি প্রকৃতপক্ষে 2.18 18 এটি উদাহরণস্বরূপ, যদিও (এটি লক্ষ্য হ'ল গ্লিবসি ২.১18 এর সাথে বাইনারি-সামঞ্জস্যপূর্ণ, তাই এটি একই প্রতীক সংস্করণগুলি ব্যবহার করে)।

আপনি stringsএটি সম্পর্কে কিছু জানতে ব্যবহার করার চেষ্টা করতে পারেন । আপনি একটি দীর্ঘতম ন্যূনতম দৈর্ঘ্য ( -n) নির্দিষ্ট করতে চান বা কোনও কিছুর সন্ধানের জন্য গ্রেপ ব্যবহার করতে পারেন:

$ strings  /lib/x86_64-linux-gnu/libc.so.6 | grep 'version [0-9]'
$ strings  /lib/x86_64-linux-gnu/libc.so.6 | grep -iC1 'copyright'

দু'জনেই এই উদাহরণস্বরূপ কাজ করে।

দ্রষ্টব্য: দেবিয়ান প্যাকেজ ইউটিলিটিটি হুডের নীচে dpkg-shlibdepsব্যবহার objdumpকরে ডেবিয়ান লাইব্রেরি প্যাকেজগুলিতে সজ্জিত চিহ্ন সম্পর্কিত তথ্য সহ বাইনারি ডেবিয়ান প্যাকেজগুলি নির্মাণের সময় প্রয়োজনীয় ন্যূনতম সংস্করণ নির্ধারণ করতে। মূলত, এটি বাইনারি দেবিয়ান প্যাকেজ দ্বারা রফতানি করা প্রতীকগুলির দিকে নজর দেয় এবং তারপরে গ্রন্থাগারগুলির সর্বনিম্ন সংস্করণগুলি পাওয়া যায় যা এই চিহ্নগুলি ধারণ করে।


9

সুস্পষ্ট উত্তরটি যদিও সর্বাধিক বিস্তৃত নয়, তা হ'ল আপনার প্যাকেজ পরিচালককে পরীক্ষা করা, যেমন

rpm -qi glibc
dpkg -l libc6

(দুঃখের বিষয়, গ্লিবসি-তে একটি পিকনফিগ .pcফাইল নেই, এটি একটি চালকবিহীন pkgconfig --modversion glibc।) @ জ্নুকের দুর্দান্ত getconfপরামর্শটিও দেখুন।

সবচেয়ে সহজ কেসিসিপি + গ্লিবিসি সহ কেস, এবং আমি প্রথমে যেটি ব্যবহার করি তা হ'ল কেবল মৃত্যুদন্ড কার্যকর করা libc.so, যেমন এখানে অন্যান্য উত্তরগুলির কয়েকটিতে বর্ণিত। কোনও যুক্তি পাস করার দরকার নেই, এটি ডিফল্টরূপে এর সংস্করণটি আউটপুট করে। এটি glibc-2.1 (glibc-2.0 seg-faults) হিসাবে কাজ করে, যদিও এরপরে ফিরে আসার পরে আপনি glibcbugসংস্করণটি নিশ্চিত করতে (এখন অবসরপ্রাপ্ত) স্ক্রিপ্টটি পরীক্ষা করতে পারেন )। এই পদ্ধতিটি সাম্প্রতিক (> 0.9.15) মসল-লিবিসি-র সংস্করণগুলির সাথেও কাজ করে (যা আজ 20 শে মার্চ ঠিক 1.0 গেছে)। এটি uClibc এর সাথে কাজ করে না, এটি segfaults।

আপনার ঠিক কী করতে gccচলেছে তা জানার একটি সহজ উপায় হ'ল সংকলন:

#include <gnu/libc-version.h>
#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("%s %s\n",gnu_get_libc_version(),gnu_get_libc_release());
    printf("glibc v%i %i.%i\n",__GNU_LIBRARY__,__GLIBC__,__GLIBC_MINOR__);
    return 0;
}

( গ্লিবিসি <stdio.h>সহ , <features.h>প্রাসঙ্গিক জি এল এল বি সি ম্যাক্রো সংজ্ঞায়িত করে, আপনাকে <gnu/libc-version.h>ফাংশন ঘোষণার জন্য প্রয়োজন ))

আপনি অবশ্যই সঠিক সংকলক (এবং পতাকা) ব্যবহার করছেন তা ধরে নিয়ে এটি আরও জটিল কেসগুলি (একাধিক লিবিসি এবং / অথবা একাধিক সংকলক) ধরে ches (আমি সন্দেহ করি যে এটি যদিও উদাহরণস্বরূপ এবং গ্লিব্যাকের মধ্যে পার্থক্য করবে না))

আপনি যদি নিশ্চিত হন যে আপনি গ্লিবসি (বা উদাহরণস্বরূপ) ব্যবহার করছেন তবে ldসংস্করণটিও নিশ্চিত করবে (দুঃখিত, এটি সঠিক নয়)।

যদি __GNU_LIBRARY__সংজ্ঞায়িত না করা হয় তবে আপনি ত্রুটিগুলি পেয়ে যাবেন, তবে এখন পরিকল্পনা বি এর সময় এসেছে

gcc -dumpmachineযেমন সাহায্য করতে পারে, যেমন uclibc এর জন্য এটির -uclibcপ্রত্যয় রয়েছে, যেমনটি পারে gcc -dumpspecs | grep dynamic-linker। এটি এবিআইকে বোঝাতেও পারে।

gcc -print-file-name=libc.soসংকলক " -lc" এর জন্য কোন ফাইলটি ব্যবহার করবে তা আপনাকে বলবে , এটি অবশ্যই আপনার জিসিসি ইনস্টলেশনের মধ্যে একটি লিঙ্কার-স্ক্রিপ্ট যা আপনি এটি সরল পাঠ্য হিসাবে পড়তে পারেন। এটি সঠিক পথ প্রদর্শন করবে libc.so। এটাও যদি আপনি চান পতাকা পার করছি কাজ করবে -m32বা -m64

ঘটনা আপনি ব্যবহার করছেন uclibc (যেমন OpenWRT দ্বারা এবং আরো ব্যবহৃত), এটা সংজ্ঞায়িত __UCLIBC_MAJOR__, __UCLIBC_MINOR__এবং __UCLIBC_SUBLEVEL__সেইসাথে __UCLIBC__মধ্যে <features.h>, তাই এটি সহজে সি উপরের কোড স্নিপেট উপর একটি ছোটখাট প্রকরণ ব্যবহার শনাক্ত হচ্ছে। সামঞ্জস্যের স্বার্থে, ইউসিপ্লিবক উপরের ব্যবহার অনুসারে জিএনইউ / জিএলবিসি ম্যাক্রোগুলিও সংজ্ঞায়িত করতে পারে, এটি বর্তমানে গ্লিবসি -২.২ হওয়ার ভান করে। এটি বর্তমানে বাস্তবায়ন না gnu_get_libc_X()ফাংশন, কিন্তু এটি করে বাস্তবায়ন getconfযা ভুল পথে চালিত হতে পারে (আমি সন্দেহ এটির জন্য একটি খালি উত্তর ফেরৎ getconf GNU_LIBC_VERSION, আমার build env আজ মুখ ভার করে আছে তাই আমি নিশ্চিত করতে।)

সম্ভাব্য ইভেন্টে আপনি ডায়েটলিবিসি ব্যবহার করছেন , চলমান diet -vসংস্করণটি প্রদর্শিত হবে।

(এফডাব্লুআইডাব্লু, অটোকনফ ব্যবহার করে সফ্টওয়্যার নিয়ে বেশ কয়েক বছর ধরে আমার চেক-ইন গ্লাবসি বৈশিষ্ট্যগুলির চেয়ে চেক-করা-প্রয়োজনীয়তা gccএবং g++প্রয়োজনীয়তা নিয়ে বেশি সমস্যা হয়েছে more )


5

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

দুঃখের বিষয়, নিশ্চিত হওয়ার একমাত্র উপায় হ'ল চেষ্টা করা।


+1 আসলে পশ্চাদপদ সামঞ্জস্যতা সম্পর্কিত তাদের একটি চার্ট রয়েছে এবং আমি একমাত্র কারণ ধরে নেব যে এটি সমস্ত 100% নয় মূলত জিএনইউ এক্সটেনশানগুলি শোষণকারী কোডের কারণে। যাইহোক, ফরোয়ার্ড সামঞ্জস্যতা সম্পর্কে আমি সচেতন এমন কোনও চার্ট নেই , যেহেতু আপনি নোট হিসাবেই আসল উদ্বেগ।
সোনারলোকস

5

(এটি মূলত সোনারলকসের জবাব হিসাবে একই তবে হুডের নীচে কী চলছে তার আরও কিছু ব্যাখ্যা দিয়ে))

জিএনইউ libc.so.6লিবিসি-র জন্য মূল শেয়ার্ড লাইব্রেরি, (লিনাক্সে; হার্টের একটি আলাদা সোনাম রয়েছে) রয়েছে, এমন অস্বাভাবিক সম্পত্তি রয়েছে (ভাগ করা লাইব্রেরির জন্য) যা আপনি এটিকে এক্সিকিউটেবল হিসাবে ডেকে আনতে পারেন। আপনি যদি এটি করেন তবে এটি চালানোর সময় GNU ইউটিলিটিগুলি সাধারণত কীভাবে মুদ্রণ করে তা প্রিন্ট করে --version:

$ /lib/x86_64-linux-gnu/libc.so.6 
GNU C Library (Debian EGLIBC 2.18-4) stable release version 2.18, by Roland McGrath et al.
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.8.2.
Compiled on a Linux 3.12.6 system on 2014-03-02.
Available extensions:
    crypt add-on version 2.1 by Michael Glad and others
    GNU Libidn by Simon Josefsson
    Native POSIX Threads Library by Ulrich Drepper et al
    BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

তবে অবশ্যই যে ডিরেক্টরিটিতে libc.so.6জীবন নেই $PATH, সুতরাং আপনাকে এটি কোথায় সন্ধান করতে হবে তা জানতে হবে। এটা তোলে হতে পারে /lib, /lib64, /usr/lib, অথবা (এই ক্ষেত্রে হিসাবে) এমনকি wackier কিছু। সুবিধাজনকভাবে, lddআপনাকে বলবে:

$ ldd /bin/sh | grep libc
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5660b93000)

এটি কাজ করার জন্য অবশ্যই আপনাকে গতিশীলভাবে সংযুক্ত বাইনারি এক্সিকিউটেবলের পুরো পথের নাম জানতে হবে। shএক্সিকিউটেবল হতে নিশ্চিত করা হয় /bin(কারণ অনেক #!স্ক্রিপ্ট এটা হতে আশা), এবং নিজেই একটি হতে পারে না #!স্ক্রিপ্ট। এটি স্ট্যাটিকালি লিঙ্কযুক্ত হতে পারে, তবে আমি এমন কোনও সিস্টেমের মুখোমুখি হইনি যা বহু বছরে তা করে।

আপনি যদি uClibc বা musl বা আরও কিছু বিদেশী কিছু নিয়ে চলছেন তবে আমি কী করব তা আমি জানি না।


2
হ্যাঁ, আপনি না আছে থেকে / বিন / sh বা যাই হোক না কেন সম্পূর্ণ পাথ জানতে। আপনি সবসময় পারেন $ ldd $(which sh) | grep libc। : ডি
ম্যাট নর্ডহফ

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