Poiščite knjižnice programa v skupni rabi z ukazom 'ldd'

Uporabi ldd ukaz za prikaz knjižnic v skupni rabi, ki jih zahteva kateri koli program. Ukaz ldd je uporaben za delo, ko manjka odvisnost. The ukaz navaja tudi manjkajoče funkcije in predmete.

Sintaksa ukaza ldd

Upoštevajte pravilno sintakso za ukaz ldd, da se izognemo napakam:

ldd [MOŽNOST]... MAPA...

Uporabite eno ali več razpoložljivih ukaznih stikal ldd, vstavljenih na mesto [OPTION] v zgornjem ukazu:

  • --help: natisnite to pomoč in zapustite.
  • --version: natisnite informacije o različici in zapustite.
  • -d, --data-relocs: Obdelava premestitev podatkov.
  • -r, --function-relocs: Obdelava podatkov in funkcij.
  • -u, --unused: Natisnite neuporabljene neposredne odvisnosti.
  • -v, --verbose: natisnite vse informacije.

Kako uporabljati ukaz ldd

Za več informacij o programu izvedite naslednji ukaz:

ldd -v /pot/do/program/izvedljiva

Izhod prikazuje informacije o različici ter poti in naslove do knjižnic v skupni rabi, kot je ta:

libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
Ukaz Linux ldd

Če datoteka SO sploh ne obstaja, lahko poiščete manjkajoče knjižnice z naslednjim ukazom:

ldd -d pot/do/program

Izhod je podoben naslednjemu:

linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => ​​ni mogoče najti libc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
Manjka ukaz Linux ldd

Nikoli ne zaženite ukaza ldd proti nezaupljivemu programu, ker ga lahko izvede ukaz ldd. Namesto tega uporabite varnejšo alternativo, ki prikazuje samo neposredne odvisnosti in ne celotnega drevesa odvisnosti:

objdump -p /pot/do/program | grep POTREBNO
Alternativa Linuxu objdump ldd

Kako najti pot do aplikacije

Če želite poiskati njene odvisnosti z ldd, morate zagotoviti celotno pot do aplikacije, kar lahko storite na več načinov.

Tako je na primer najti pot do Firefox:

najdi / -ime firefox

Težava z ukaz najdivendar je, da navaja izvedljivo datoteko in povsod, kjer se Firefox nahaja, takole:

/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox

Ta pristop je malce pretiran in morda boste morali uporabiti ukaz sudo da bi dvignili svoje privilegije, sicer boste verjetno dobili napake z zavrnjenim dovoljenjem človeka.

Namesto tega je lažje uporabljati kjer je ukaz za iskanje poti aplikacije:

kje je firefox

Tokrat bi lahko izhod izgledal takole:

/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Linux whereis ukaz

Nato, da poiščete knjižnice v skupni rabi za Firefox, vnesite naslednji ukaz:

ldd /usr/bin/firefox

Izhod ukaza bo nekako takole:

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 je ime knjižnice, šestnajstiška številka pa je naslov, kamor se knjižnica naloži v pomnilnik.

V mnogih vrsticah, => simbolu sledi pot. To je pot do fizične binarnosti. Šestnajstiška številka je naslov, kamor je knjižnica naložena.