Lệnh ldd trong Linux

Giới thiệu

Trong lab này, chúng ta sẽ khám phá lệnh ldd của Linux, một công cụ hữu ích để xác định các phụ thuộc thư viện động của một tệp nhị phân. Chúng ta sẽ bắt đầu bằng cách tìm hiểu mục đích của lệnh ldd, sau đó học cách sử dụng nó để khắc phục sự cố thiếu các phụ thuộc. Kiến thức này rất cần thiết cho việc quản lý phần mềm và khắc phục sự cố hiệu quả trên các hệ thống Linux.

Lab này sẽ bao gồm các bước sau:

  1. Tìm hiểu Mục đích của Lệnh ldd
  2. Xác định Phụ thuộc Động của một Tệp Nhị phân
  3. Khắc phục Sự cố Thiếu Phụ thuộc

Lệnh ldd là một công cụ có giá trị, nhưng điều quan trọng cần lưu ý là nó có thể yêu cầu cài đặt thêm các gói trên một số bản phân phối Linux và nó đã bị phản đối để ủng hộ các công cụ hiện đại hơn trên một số phiên bản Linux mới hơn. Tuy nhiên, nó vẫn là một lệnh thiết yếu và được sử dụng rộng rãi cho nhiều người dùng và systemadmin Linux.

Tìm hiểu Mục đích của Lệnh ldd

Trong bước này, chúng ta sẽ khám phá mục đích của lệnh ldd trong Linux. Lệnh ldd là một công cụ cho phép bạn xác định các phụ thuộc thư viện động của một tệp nhị phân.

Đầu tiên, hãy tạo một chương trình C đơn giản sử dụng một thư viện động:

// hello.c
#include <stdio.h>
#include <mylib.h>

int main() {
    print_message();
    return 0;
}

Bây giờ, hãy biên dịch chương trình và sử dụng ldd để kiểm tra các phụ thuộc của nó:

$ gcc -o hello hello.c -L. -lmylib
$ ldd hello
        linux-vdso.so.1 (0x00007ffff7ffd000)
        libmylib.so => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f7a5f0000)
        /lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f7f7a7c0000)

Đầu ra cho thấy tệp nhị phân hello phụ thuộc vào thư viện động libmylib.so, thư viện này không được tìm thấy. Đây là một vấn đề thường gặp khi làm việc với các thư viện động và lệnh ldd có thể giúp bạn xác định và khắc phục các sự cố như vậy.

Ví dụ đầu ra:

        linux-vdso.so.1 (0x00007ffff7ffd000)
        libmylib.so => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f7a5f0000)
        /lib64/ld-linux-x86-64.so.2 => /lib/x86_64-linux-x86-64.so.2 (0x00007f7f7a7c0000)

Lệnh ldd là một công cụ có giá trị để hiểu các phụ thuộc động của một tệp nhị phân, điều này rất cần thiết cho việc quản lý phần mềm và khắc phục sự cố hiệu quả.

Xác định Phụ thuộc Động của một Tệp Nhị phân

Trong bước này, chúng ta sẽ học cách sử dụng lệnh ldd để xác định các phụ thuộc động của một tệp nhị phân.

Đầu tiên, hãy tạo một chương trình C đơn giản sử dụng một thư viện động:

// hello.c
#include <stdio.h>
#include <mylib.h>

int main() {
    print_message();
    return 0;
}

Bây giờ, hãy biên dịch chương trình và sử dụng ldd để kiểm tra các phụ thuộc của nó:

$ gcc -o hello hello.c -L. -lmylib
$ ldd hello
        linux-vdso.so.1 (0x00007ffff7ffd000)
        libmylib.so => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f7a5f0000)
        /lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f7f7a7c0000)

Đầu ra cho thấy tệp nhị phân hello phụ thuộc vào thư viện động libmylib.so, thư viện này không được tìm thấy. Điều này có nghĩa là tệp nhị phân hello sẽ không thể chạy chính xác cho đến khi sự phụ thuộc bị thiếu được giải quyết.

Ví dụ đầu ra:

        linux-vdso.so.1 (0x00007ffff7ffd000)
        libmylib.so => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f7a5f0000)
        /lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f7f7a7c0000)

Lệnh ldd là một công cụ mạnh mẽ để xác định các phụ thuộc động của một tệp nhị phân, điều này rất cần thiết cho việc khắc phục sự cố và quản lý các phụ thuộc phần mềm.

Khắc phục Sự cố Thiếu Phụ thuộc

Trong bước này, chúng ta sẽ học cách khắc phục sự cố thiếu các phụ thuộc bằng lệnh ldd.

Hãy tiếp tục với ví dụ từ bước trước. Chúng ta có một tệp nhị phân hello phụ thuộc vào thư viện động libmylib.so, nhưng thư viện này không được tìm thấy.

Đầu tiên, hãy thử định vị thư viện bị thiếu:

$ sudo find / -name libmylib.so
/usr/local/lib/libmylib.so

Thư viện nằm trong thư mục /usr/local/lib. Bây giờ, hãy thử chạy lại tệp nhị phân hello:

$ ldd hello
        linux-vdso.so.1 (0x00007ffff7ffd000)
        libmylib.so => /usr/local/lib/libmylib.so (0x00007f7f7a5f0000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f7a7c0000)
        /lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f7f7a8e0000)
$ ./hello
Hello, World!

Lệnh ldd bây giờ cho thấy rằng thư viện libmylib.so đã được tìm thấy và tệp nhị phân hello chạy thành công.

Ví dụ đầu ra:

        linux-vdso.so.1 (0x00007ffff7ffd000)
        libmylib.so => /usr/local/lib/libmylib.so (0x00007f7f7a5f0000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f7a7c0000)
        /lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f7f7a8e0000)

Trong ví dụ này, chúng ta có thể khắc phục sự cố thiếu phụ thuộc bằng cách định vị thư viện libmylib.so và đảm bảo rằng nó có sẵn trong đường dẫn tìm kiếm thư viện của hệ thống.

Lệnh ldd là một công cụ có giá trị để xác định và khắc phục các sự cố thiếu phụ thuộc, điều này rất cần thiết cho việc quản lý và triển khai phần mềm hiệu quả.

Tóm tắt

Trong lab này, chúng ta đã khám phá mục đích và cách sử dụng lệnh ldd trong Linux. Lệnh ldd là một công cụ có giá trị để xác định các phụ thuộc thư viện động của một tệp nhị phân, điều này rất cần thiết cho việc quản lý phần mềm và khắc phục sự cố hiệu quả. Chúng ta đã tạo một chương trình C đơn giản sử dụng một thư viện động, sau đó sử dụng ldd để kiểm tra các phụ thuộc của nó. Đầu ra cho thấy chương trình phụ thuộc vào thư viện động libmylib.so, thư viện này không được tìm thấy, làm nổi bật một vấn đề thường gặp khi làm việc với các thư viện động. Hiểu các phụ thuộc động của một tệp nhị phân là rất quan trọng để giải quyết các vấn đề như vậy và đảm bảo chức năng phù hợp của các ứng dụng phần mềm.

400+ câu lệnh phổ biến trong Linux