ldd . का प्रयोग करें किसी दिए गए कार्यक्रम के लिए आवश्यक साझा पुस्तकालयों को दिखाने के लिए आदेश। लापता निर्भरता होने पर काम करने के लिए ldd कमांड उपयोगी है। कमांड लापता कार्यों और वस्तुओं को भी सूचीबद्ध करता है।
ldd कमांड सिंटैक्स
त्रुटियों से बचने के लिए ldd कमांड के लिए उचित सिंटैक्स का निरीक्षण करें:
ldd [OPTION]... FILE...
एक या अधिक उपलब्ध ldd कमांड स्विच का उपयोग करें, जो ऊपर दिए गए कमांड में [OPTION] स्पॉट में डाले गए हैं:
- --help:इस सहायता को प्रिंट करें और बाहर निकलें।
- --संस्करण:संस्करण की जानकारी प्रिंट करें और बाहर निकलें।
- -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 foundlibc.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
हालाँकि, खोज कमांड के साथ समस्या यह है कि यह निष्पादन योग्य और हर जगह जहाँ फ़ायरफ़ॉक्स स्थित है, इस तरह सूचीबद्ध करता है:
/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 लाइब्रेरी का नाम है और हेक्स नंबर वह पता है जहां लाइब्रेरी को मेमोरी में लोड किया जाता है।
कई पंक्तियों में, => एक पथ के बाद प्रतीक है। यह भौतिक बाइनरी का मार्ग है। हेक्स नंबर वह पता है जहां पुस्तकालय लोड होता है।