Computer >> Máy Tính >  >> Hệ thống >> Linux

Sử dụng lệnh ldd trong Linux

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)
Sử dụng lệnh ldd trong Linux

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)
Sử dụng lệnh ldd trong Linux

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
Sử dụng lệnh ldd trong Linux

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
Sử dụng lệnh ldd trong Linux

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.