ใช้ ldd คำสั่งแสดงไลบรารีที่แบ่งใช้ตามโปรแกรมที่กำหนด คำสั่ง ldd มีประโยชน์สำหรับการทำงานเมื่อไม่มีการพึ่งพาอาศัยกัน คำสั่งยังแสดงรายการฟังก์ชันและอ็อบเจ็กต์ที่ขาดหายไป
ไวยากรณ์คำสั่ง ldd
สังเกตไวยากรณ์ที่เหมาะสมสำหรับคำสั่ง ldd เพื่อหลีกเลี่ยงข้อผิดพลาด:
ldd [OPTION]... FILE...
ใช้สวิตช์คำสั่ง ldd ที่มีอยู่อย่างน้อยหนึ่งตัว โดยแทรกลงในจุด [OPTION] ในคำสั่งด้านบน:
- --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 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 ซึ่งคุณสามารถทำได้หลายวิธี
ตัวอย่างเช่น วิธีค้นหาเส้นทางไปยัง Firefox:
find / -name firefox
อย่างไรก็ตาม ปัญหาของคำสั่ง find คือมันแสดงรายการปฏิบัติการและทุกที่ที่ 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
จากนั้น หากต้องการค้นหาไลบรารีที่ใช้ร่วมกันสำหรับ 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 คือชื่อของไลบรารี และเลขฐานสิบหกคือที่อยู่ที่โหลดไลบรารีลงในหน่วยความจำ
ในหลายบรรทัด => สัญลักษณ์ตามด้วยเส้นทาง นี่คือเส้นทางสู่เลขฐานสองทางกายภาพ เลขฐานสิบหกคือที่อยู่ที่โหลดไลบรารี