किसी दिए गए प्रोग्राम द्वारा आवश्यक शेयर्ड लाइब्रेरी को दिखाने के लिए ldd कमांड का उपयोग करें। ldd कमांड यह पता लगाने के लिए उपयोगी है कि कब कोई लापता निर्भरता है। कमांड लापता फंक्शन और ऑब्जेक्ट को भी सूचीबद्ध करता है।
ldd कमांड सिंटैक्स
त्रुटियों से बचने के लिए ldd कमांड के लिए उचित सिंटैक्स का पालन करें:
ldd [OPTION]... FILE...
उपरोक्त कमांड में [OPTION] स्थान पर डाले गए उपलब्ध ldd कमांड स्विच में से एक या अधिक का उपयोग करें:
- --help: यह सहायता प्रिंट करें और बाहर निकलें।
- --version: संस्करण जानकारी प्रिंट करें और बाहर निकलें।
- -d, --data-relocs: डेटा रिलोकेशन प्रोसेस करें।
- -r, --function-relocs: डेटा और फंक्शन रिलोकेशन प्रोसेस करें।
- -u, --unused: अनयूज्ड डायरेक्ट डिपेंडेंसी प्रिंट करें।
- -v, --verbose: सभी जानकारी प्रिंट करें।
ldd कमांड का उपयोग कैसे करें
किसी प्रोग्राम के बारे में अधिक जानकारी प्राप्त करने के लिए निम्नलिखित कमांड निष्पादित करें:
ldd -v /path/to/program/executable
आउटपुट संस्करण जानकारी के साथ-साथ शेयर्ड लाइब्रेरी के पथ और पते दिखाता है, जैसे:
libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
यदि SO फाइल बिल्कुल मौजूद नहीं है, तो आप निम्नलिखित कमांड का उपयोग करके लापता लाइब्रेरी ढूंढ सकते हैं:
ldd -d path/to/program
आउटपुट निम्न के समान है:
linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => not found libc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000) /lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
कभी भी अविश्वसनीय प्रोग्राम के खिलाफ ldd कमांड न चलाएं क्योंकि ldd कमांड इसे निष्पादित कर सकता है। इसके बजाय, एक सुरक्षित विकल्प का उपयोग करें जो केवल डायरेक्ट डिपेंडेंसी दिखाता है न कि पूरा डिपेंडेंसी ट्री:
objdump -p /path/to/program | grep NEEDED
एप्लिकेशन का पथ कैसे ढूंढें
यदि आप ldd के साथ इसकी निर्भरता ढूंढना चाहते हैं तो आपको एप्लिकेशन का पूरा पथ प्रदान करना होगा, जिसे आप कई तरीकों से कर सकते हैं।
उदाहरण के लिए, फायरफॉक्स का पथ ढूंढने का तरीका यहां दिया गया है:
find / -name firefox
हालांकि, find कमांड के साथ समस्या यह है कि यह एक्जीक्यूटेबल और हर जगह सूचीबद्ध करता है जहां फायरफॉक्स स्थित है, जैसे:
/etc/skel/.mozilla/firefox /home//cache/mozilla/firefox /home//.mozilla/firefox /usr/bin/Firefox /usr/lib/Firefox /usr/lib/Firefox/Firefox
यह दृष्टिकोण थोड़ा ओवरकिल है और आपको अपना विशेषाधिकार बढ़ाने के लिए sudo कमांड का उपयोग करने की आवश्यकता हो सकती है, अन्यथा आपको बहुत सारे परमिशन-डिनाइड त्रुटियां मिलने की संभावना है।
इसके बजाय एप्लिकेशन का पथ ढूंढने के लिए whereis कमांड का उपयोग करना आसान है:
whereis firefox
इस बार आउटपुट ऐसा दिख सकता है:
/usr/bin/firefox /etc/firefox /usr/lib/firefox
फिर, फायरफॉक्स के लिए शेयर्ड लाइब्रेरी ढूंढने के लिए, निम्नलिखित कमांड दर्ज करें:
ldd /usr/bin/firefox
कमांड से आउटपुट कुछ इस तरह होगा:
linux-vdso.so.1 (0x00007ffff8364000) libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000) libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000) libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000) libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000) libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000) /lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)
Linux-vdso.so.1 लाइब्रेरी का नाम है और हेक्स नंबर वह पता है जहां लाइब्रेरी मेमोरी में लोड होती है।
कई लाइनों पर, => प्रतीक के बाद एक पथ होता है। यह फिजिकल बाइनरी का पथ है। हेक्स नंबर वह पता है जहां लाइब्रेरी लोड होती है।