Sử dụng ldd lệnh để hiển thị các thư viện được chia sẻ theo yêu cầu của bất kỳ chương trình nhất định nào. Lệnh ldd rất hữu ích để giải quyết khi thiếu phần phụ thuộc. Lệnh này cũng liệt kê các chức năng và đối tượng bị thiếu.
Cú pháp lệnh ldd
Tuân thủ cú pháp thích hợp cho lệnh ldd để tránh lỗi:
ldd [OPTION]... FILE...
Sử dụng một hoặc nhiều công tắc lệnh ldd có sẵn, được chèn vào vị trí [TÙY CHỌN] trong lệnh trên:
- --help:In phần trợ giúp này và thoát.
- --version:In thông tin phiên bản và thoát.
- -d, --data-relocs:Xử lý việc di chuyển dữ liệu.
- -r, - Chức năng-relocs:Xử lý dữ liệu và vị trí chức năng.
- -u, --unused:In các phần phụ thuộc trực tiếp không sử dụng.
- -v, --verbose:In tất cả thông tin.
Cách sử dụng lệnh ldd
Thực thi lệnh sau để nhận thêm thông tin về chương trình:
ldd -v /path/to/program/executable
Đầu ra hiển thị thông tin phiên bản cũng như các đường dẫn và địa chỉ đến các thư viện được chia sẻ, như sau:
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 hoàn toàn không tồn tại, 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 path/to/program
Đầ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)
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 ldd có thể thực thi nó. Thay vào đó, hãy sử dụng một giải pháp 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 NEEDED
Cách tìm đường dẫn đến ứng dụng
Bạn phải cung cấp đường dẫn đầy đủ đến một ứng dụng nếu bạn muốn tìm các phần phụ thuộc của nó với ldd, bạn có thể thực hiện theo một số cách.
Ví dụ:đây là cách tìm đường dẫn đến Firefox:
find / -name firefox
Tuy nhiên, vấn đề với lệnh find là nó liệt kê tệp thực thi và ở mọi nơi mà Firefox được đặt, như sau:
/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox
Cách tiếp cận này hơi 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ác đặc quyền của mình, nếu không, bạn có thể gặp phải lỗi do con người từ chối cấp phép.
Thay vào đó, sẽ dễ dàng hơn khi sử dụng lệnh whereis để tìm đường dẫn của ứng dụng:
whereis firefox
Lần này đầu ra có thể giống như sau:
/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Sau đó, để tìm các thư viện được chia sẻ cho Firefox, hãy nhập lệnh sau:
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 được tải vào bộ nhớ.
Trên nhiều dòng, => biểu tượng được theo sau bởi một đường dẫn. Đây là đường dẫn đến hệ nhị phân vật lý. Số hex là địa chỉ nơi thư viện được tải.