Folosind comanda "ldd" în Linux

Comanda ldd poate fi utilizată pentru a vă arăta bibliotecile partajate necesare unui anumit program.

Acest lucru este util pentru a lucra când există o dependență lipsă și poate fi folosită pentru a lista funcțiile și obiectele care lipsesc.

ldd Command Sintaxă

Aceasta este sintaxa potrivita atunci cand folositi comanda ldd:

ldd [OPTION] ... FILE ...

Iată comenzile de comandă ldd disponibile care pot fi inserate în locația [OPTION] din comanda de mai sus:

--help imprima acest ajutor și ieșire - versiunea de imprimare versiunea de imprimare și ieșire -d, --data-relocs proces de relocări de date -r, --function-relocs procesul de relocations de date și de funcții -u, --unless de imprimare dependente dependente neutilizate -v, --verbose imprimă toate informațiile

Cum se utilizează comanda ldd

Puteți utiliza următoarea comandă pentru a obține mai multe informații din orice comandă ldd:

ldd -v / path / to / program / executabil

Ieșirea prezintă informații despre versiune, precum și căile și adresele pentru bibliotecile partajate, cum ar fi:

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

Dacă fișierul SO nu există deloc, puteți găsi librăriile lipsă utilizând următoarea comandă:

ldd -d path / to / program

Ieșirea este similară cu următoarea:

linux-vdso.so.1 (0x00007ffc2936b000) /home/gary/demo/garylib.so => ​​nu a fost găsitlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000) / lib64 / ld-linux-x86 -64.so.2 (0x00007fd0c65fd000)

Important: Nu executați niciodată comanda ldd împotriva unui program de încredere, deoarece comanda ar putea să o execute. Aceasta este o alternativă mai sigură care arată doar dependențele directe și nu întregul arbore de dependență: objdump -p / path / to / program | grep NEVOIE .

Cum să găsiți calea către o aplicație

Trebuie să oferiți calea completă la o aplicație dacă doriți să găsiți dependențele sale cu ldd, pe care le puteți face în mai multe moduri.

De exemplu, așa veți găsi calea către Firefox :

găsiți / -name firefox

Problema cu comanda de găsire , totuși, este că nu va lista doar fișierul executabil, ci peste tot unde este localizat Firefox, după cum urmează:

Această abordare este un pic de depășire și este posibil să fie nevoie să utilizați comanda sudo pentru a vă ridica privilegiile, altfel este posibil să obțineți multe erori de permisiune respinse.

În schimb, este mult mai ușor să utilizați comanda whereis pentru a găsi calea unei aplicații:

whereis firefox

De data aceasta, ieșirea poate arăta astfel:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Tot ce trebuie să faceți acum pentru a găsi bibliotecile partajate pentru Firefox este să tastați următoarea comandă:

ldd / usr / bin / firefox

Ieșirea din comandă va fi ceva de genul:

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 este numele bibliotecii iar numărul hexazecimal este adresa unde va fi încărcată biblioteca în memorie.

Veți observa pe multe din celelalte linii că simbolul => este urmat de o cale. Aceasta este calea către binarul fizic; numarul hex este adresa unde se va incarca biblioteca.