Skip to content

Het ‘ldd’-commando gebruiken in Linux

12 de juli de 2021
find shared libraries ldd command 4017941 565ec6c33676418f9c18a5603b7d275f

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.