Skip to content

Het ‘ldd’-commando gebruiken in Linux

12 de juli de 2021

Gebruik de ldd commando om de gedeelde bibliotheken te tonen die vereist zijn voor een bepaald programma. Het ldd-commando is handig om te bepalen wanneer er een afhankelijkheid ontbreekt. De opdracht vermeldt ook ontbrekende functies en objecten.

ldd-opdrachtsyntaxis

Let op de juiste syntaxis voor het ldd-commando om fouten te voorkomen: ldd [OPTION]… HET DOSSIER…

Gebruik een of meer van de beschikbare ldd-opdrachtschakelaars, ingevoegd in de [OPTION] plek in het bovenstaande commando:

  • –help: druk deze help af en sluit af.
  • –version: versie-informatie afdrukken en afsluiten.
  • -d, –relocs: Verplaatsingen van gegevens verwerken.
  • -r, –function-relocs: Procesgegevens en functieverhuizingen.
  • -u, –unused: Druk ongebruikte directe afhankelijkheden af.
  • -v, –verbose: alle informatie afdrukken.

Hoe de ldd-opdracht te gebruiken

Voer de volgende opdracht uit om meer informatie over een programma te krijgen: ldd -v /path/to/program/executable

De uitvoer toont versie-informatie evenals de paden en adressen naar de gedeelde bibliotheken, zoals deze: libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

Als het SO-bestand helemaal niet bestaat, kunt u de ontbrekende bibliotheken vinden met de volgende opdracht: ldd -d path/to/program

De uitvoer is vergelijkbaar met het volgende: linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => ​​niet gevondenlibc.so.6 => usr/lib/libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)

Linux ldd-opdracht ontbreekt

Voer nooit het ldd-commando uit tegen een niet-vertrouwd programma, omdat het ldd-commando het zou kunnen uitvoeren. Gebruik in plaats daarvan een veiliger alternatief dat alleen de directe afhankelijkheden toont en niet de hele afhankelijkheidsboom: objdump -p /path/to/program | grep NODIG

Linux objdump ldd alternatief

Het pad naar een toepassing vinden

U moet het volledige pad naar een toepassing opgeven als u de afhankelijkheden met ldd wilt vinden, wat u op verschillende manieren kunt doen. Zo vindt u bijvoorbeeld het pad naar Firefox: find / -name firefox

Het probleem met het find-commando is echter dat het het uitvoerbare bestand en overal waar Firefox zich bevindt opsomt, zoals dit: /etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox

Deze aanpak is een beetje overdreven en je moet misschien het sudo-commando gebruiken om je privileges te verhogen, anders krijg je waarschijnlijk man-permissie-geweigerde fouten. Het is in plaats daarvan gemakkelijker om de opdracht whereis te gebruiken om het pad van een toepassing te vinden: whereis firefox

Deze keer zou de uitvoer er als volgt uit kunnen zien: /usr/bin/firefox
/etc/firefox
/usr/lib/firefox

Linux whereis commando

Voer vervolgens de volgende opdracht in om de gedeelde bibliotheken voor Firefox te vinden: ldd /usr/bin/firefox

De uitvoer van de opdracht zal er ongeveer zo uitzien: 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 is de naam van de bibliotheek en het hexadecimale nummer is het adres waarnaar de bibliotheek in het geheugen wordt geladen. Op veel lijnen is de => symbool wordt gevolgd door een pad. Dit is het pad naar het fysieke binaire. Het hexadecimale nummer is het adres waar de bibliotheek is geladen.