Skip to main content

ค้นหาไลบรารีที่ใช้ร่วมกันของโปรแกรมด้วยคำสั่ง "ldd"

[0.16.0] สอนใช้คำสั่งต่างๆ Commands ต่างๆ คีย์ลัดต่างๆ @p @a @e @r ~ ~ ~ (มิถุนายน 2025)

[0.16.0] สอนใช้คำสั่งต่างๆ Commands ต่างๆ คีย์ลัดต่างๆ @p @a @e @r ~ ~ ~ (มิถุนายน 2025)
Anonim

ใช้ ldd คำสั่งเพื่อแสดงไลบรารีที่ใช้ร่วมกันที่จำเป็นโดยโปรแกรมใด ๆ ที่กำหนด - มีประโยชน์สำหรับการทำงานออกเมื่อมีการพึ่งพาที่ขาดหายไป คำสั่งยังแสดงรายการฟังก์ชันและออบเจกต์ที่ขาดหายไป

ldd คำสั่งไวยากรณ์

สังเกตไวยากรณ์ที่เหมาะสมสำหรับคำสั่ง ldd เพื่อหลีกเลี่ยงข้อผิดพลาด:

ldd OPTION … FILE …

ใช้สวิตช์คำสั่ง ldd ที่มีอยู่หนึ่งชุดหรือมากกว่านั้นแทรกลงใน OPTION จุดในคำสั่งดังกล่าว:

- ช่วยเหลือ พิมพ์ความช่วยเหลือนี้และออก --version | พิมพ์ข้อมูลเกี่ยวกับรุ่นและออก -d, --data-relocs | ประมวลผล relocations ข้อมูล -r, - ฟังก์ชัน - relocs | ข้อมูลกระบวนการและ relocations ฟังก์ชั่น -u, - ไม่ได้ใช้ | พิมพ์การอ้างอิงโดยตรงที่ไม่ได้ใช้ - v, - verbose | พิมพ์ข้อมูลทั้งหมด

วิธีการใช้คำสั่ง ldd

ดำเนินการคำสั่งต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรม:

$ ldd -v / path / to / program / executable

ผลลัพธ์แสดงข้อมูลเวอร์ชันรวมทั้งเส้นทางและที่อยู่ไปยังไลบรารีที่ใช้ร่วมกันเช่น:

$ ldd 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 เส้นทางไป / โปรแกรม

ผลลัพธ์จะคล้ายกับต่อไปนี้:

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 // แคช / 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 คือชื่อของไลบรารีและเลขฐานสิบหกคือที่อยู่ที่ห้องสมุดจะถูกโหลดลงในหน่วยความจำ

คุณจะสังเกตเห็นหลายบรรทัดอื่น ๆ ที่มีสัญลักษณ์ => ตามเส้นทาง นี่คือเส้นทางไปยังไบนารีทางกายภาพ เลขฐานสิบหกคือที่อยู่ที่ห้องสมุดจะถูกโหลด