Sử dụng lệnh "ldd" trong Linux

Lệnh ldd có thể được sử dụng để hiển thị cho bạn các thư viện được chia sẻ theo yêu cầu của bất kỳ chương trình nào.

Điều này rất hữu ích khi làm việc khi có sự thiếu phụ thuộc và có thể được sử dụng để liệt kê các hàm và đối tượng bị thiếu.

Cú pháp lệnh ldd

Đây là cú pháp thích hợp khi sử dụng lệnh ldd:

ldd [TÙY CHỌN] ... TẬP_TIN ...

Dưới đây là các công tắc lệnh ldd có sẵn có thể được chèn vào vị trí [OPTION] trong lệnh trên:

--help in trợ giúp này và thoát - phiên bản in phiên bản đảo ngược và thoát -d, --data-relocs quá trình di chuyển dữ liệu -r, --function-relocs xử lý dữ liệu và chức năng relocations -u, --unused print unused direct dependencies -v, --verbose in tất cả thông tin

Cách sử dụng lệnh ldd

Bạn có thể sử dụng lệnh sau để có thêm thông tin từ bất kỳ lệnh ldd nào:

ldd -v / path / to / program / executable

Đầu ra hiển thị thông tin phiên bản cũng như đường dẫn và địa chỉ cho các thư viện được chia sẻ, như sau:

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

Nếu tệp SO không tồn tại chút nào, bạn có thể tìm thấy các thư viện bị thiếu bằng cách sử dụng lệnh sau:

ldd -d đường dẫn / đến / chương trình

Đầu ra tương tự như sau:

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

Quan trọng: Không bao giờ chạy lệnh ldd đối với một chương trình không đáng tin cậy vì lệnh này thực sự có thể thực thi nó. Đây là một thay thế an toàn hơn chỉ hiển thị các phụ thuộc trực tiếp chứ không phải toàn bộ cây phụ thuộc: objdump -p / path / to / program | grep CẦN .

Cách tìm đường dẫn đến ứng dụng

Bạn phải cung cấp đường dẫn đầy đủ tới một ứng dụng nếu bạn muốn tìm các phụ thuộc của nó với ldd, mà bạn có thể thực hiện một số cách.

Ví dụ, đây là cách bạn sẽ tìm thấy đường dẫn đến Firefox :

tìm / firefox tên

Tuy nhiên, vấn đề với lệnh find là nó sẽ không chỉ liệt kê tệp thực thi mà ở mọi nơi mà Firefox được đặt, như sau:

Cách tiếp cận này là một chút quá mức cần thiết và bạn có thể cần phải sử dụng lệnh sudo để nâng cao đặc quyền của mình, nếu không bạn sẽ có nhiều lỗi bị từ chối.

Thay vào đó sử dụng lệnh whereis để tìm đường dẫn của ứng dụng dễ dàng hơn nhiều:

whereis firefox

Lần này đầu ra có thể trông như thế này:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Tất cả những gì bạn phải làm bây giờ để tìm các thư viện được chia sẻ cho Firefox là gõ lệnh sau đây:

ldd / usr / bin / firefox

Đầu ra từ lệnh sẽ giống như sau:

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 là tên của thư viện và số hex là địa chỉ nơi thư viện sẽ được nạp vào bộ nhớ.

Bạn sẽ nhận thấy trên nhiều dòng khác mà biểu tượng => được theo sau bởi một đường dẫn. Đây là đường dẫn đến nhị phân vật lý; số hex là địa chỉ nơi thư viện sẽ được tải.