Ús del comandament "ldd" a Linux

La comanda ldd es pot utilitzar per mostrar-vos les biblioteques compartides que necessiteu un programa determinat.

Això és útil per a treballar quan hi ha una dependència perduda i es pot utilitzar per enumerar les funcions i objectes que falten.

Sintaxi de comandaments ldd

Aquesta és la sintaxi correcta quan s'utilitza l'ordre ldd:

ldd [OPCIÓ] ... FITXER ...

Aquests són els commutadors de comandaments de ldd disponibles que es poden inserir al lloc [OPCIÓ] a l'ordre anterior:

- ajudar a imprimir aquesta ajuda i sortir --versió imprimiu la informació de la versió i sortiu -d, --data-relocs, processos de deslocalitzacions de dades, -r, --function-relocs de dades de processos i deslocalitzacions de funcions -u, --unused print dependències directes no utilitzades -v, --verbose imprimeix tota la informació

Com s'utilitza el comandament ldd

Podeu utilitzar la següent comanda per obtenir més informació de qualsevol ordre ldd:

ldd -v / path / to / program / executable

La sortida mostra la informació de la versió, així com les rutes i adreces a les biblioteques compartides, d'aquesta manera:

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

Si el fitxer SO no existeix, podeu trobar les biblioteques que falten utilitzant el següent comandament:

ldd -d ruta / a / programa

La sortida és similar a la següent:

linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => ​​no foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) / lib64 / ld-linux-x86 -64.so.2 (0x00007fd0c65fd000)

Important: mai executeu la comanda ldd contra un programa que no sigui de confiança, ja que la comanda podria executar-la. Aquesta és una alternativa més segura que només mostra les dependències directes i no tot l'arbre de dependències: objdump -p / path / to / program | grep NEEDED .

Com trobar el camí d'una aplicació

Heu de proporcionar la ruta completa a una aplicació si voleu trobar les seves dependències amb LD, que podeu fer de diverses maneres.

Per exemple, així és com trobaria la ruta a Firefox :

trobeu / -name firefox

El problema amb l'ordre find , però, és que no només mostrarà l'executable, sinó a tot arreu on es troba Firefox, com aquest:

Aquest enfocament és una mica excessiu i és possible que hagueu d'utilitzar l'ordre sudo per elevar els vostres privilegis, de manera que és probable que obtingueu molts errors de permís denegats.

En canvi, és molt més fàcil utilitzar la comanda whereis per trobar la ruta d'una aplicació:

on és firefox

Aquesta vegada, la sortida podria tenir aquest aspecte:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Tot el que heu de fer ara per trobar les biblioteques compartides per a Firefox és escriure el següent comandament:

ldd / usr / bin / firefox

La sortida de la comanda serà una cosa així:

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)

El linux-vdso.so.1 és el nom de la biblioteca i el número hexadecimal és l'adreça on es carregarà la biblioteca a la memòria.

Notaràs en moltes de les altres línies que el símbol => és seguit d'una ruta d'accés. Aquest és el camí al binari físic; el nombre hexadecimal és l'adreça on es carregarà la biblioteca.