Sự khác biệt giữa lib, lib32, lib64, libx32 và libexec


41

Hệ thống Ubuntu 13.04 64 bit của tôi có các thư mục sau /:

lib
lib32
lib64
libx32
libexec

Trong /usrthư mục có:

lib
lib32
libx32
libexec

Điều này có vẻ như là một cái gì đó có thể dễ dàng được trả lời bằng một tìm kiếm, nhưng tôi không tìm thấy gì trực tuyến, ngoài những thư mục này lưu trữ các thư viện chia sẻ (trừ libexec). Nhưng thư viện chia sẻ nào đi trong thư mục nào (ngoài 32 bit trong lib32 và 64 bit trong lib64)? Ai đó có thể giải thích sự khác biệt giữa tất cả các thư mục này?


Và BSD, Fedora, AIX và Solaris có các vòng xoắn riêng cho các cấu trúc thư mục.

Câu trả lời:


39

À đúng, đây là một phần rất khó hiểu nếu bạn đã xử lý Unix trong bất kỳ khoảng thời gian nào. Có một tiêu chuẩn mà hầu hết các Unix "cố gắng" tuân theo được gọi là FHS - Tiêu chuẩn phân cấp hệ thống tập tin .

Do tôi chủ yếu sử dụng các bản phân phối dựa trên Red Hat mà tôi quen thuộc nhất với việc họ sử dụng FHS cho các bản phân phối Fedora, CentOS và RHEL Linux. Nhưng tôi cũng đã sử dụng các bản phân phối dựa trên Debian & BSD và chúng không khác nhau về mặt lưu giữ mọi thứ, hệ thống tập tin khôn ngoan.

Bây giờ đến câu hỏi của bạn. Tôi sẽ xem tài liệu FHS , nơi chi phối lỏng lẻo các cấu trúc thư mục này. Nói chung:

Danh mục - /lib

Chứa các thư viện chia sẻ cần thiết và các mô-đun hạt nhân.

Mục đích: Thư mục / lib chứa những hình ảnh thư viện dùng chung cần thiết để khởi động hệ thống và chạy các lệnh trong hệ thống tập tin gốc, tức là. bởi nhị phân trong / bin và / sbin.

Lưu ý1: Các thư viện được chia sẻ chỉ cần thiết cho các nhị phân trong / usr (chẳng hạn như bất kỳ nhị phân X Window nào) không được nằm trong / lib. Chỉ các thư viện dùng chung cần có để chạy nhị phân trong / bin và / sbin mới có thể ở đây.

Lưu ý2: Với mục đích chính của / lib là chứa các thư viện cho các công cụ được triển khai vào thư mục / bin & / sbin, các thư viện trong / lib có thể là 32 bit hoặc 64 bit.

Ví dụ: (hệ thống Fedora 14 64 bit)

$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

Đây là một mẫu của các tệp từ my / lib

./libpam.so.0.82.2:             ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libplc4.so:                   ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libidn.so.11.6.1:             ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./upstart/telinit:              ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/runlevel:             ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/shutdown:             ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/reboot:               ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./libdb-4.8.so:                 ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./firmware/mixart/miXart8.elf:  ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
./libtinfo.so.5.7:              ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

Danh mục - /lib<qual>

Định dạng thay thế thư viện chia sẻ thiết yếu (tùy chọn). Đây sẽ là các thư mục / lib32, / lib64, v.v.

Mục đích: Có thể có một hoặc nhiều biến thể của thư mục / lib trên các hệ thống hỗ trợ nhiều định dạng nhị phân yêu cầu các thư viện riêng biệt. Điều này thường được sử dụng để hỗ trợ 64 bit hoặc 32 bit trên các hệ thống hỗ trợ nhiều định dạng nhị phân, nhưng yêu cầu các thư viện cùng tên.

Lưu ý: Trong trường hợp này, / lib32 và / lib64 có thể là các thư mục thư viện và / lib một liên kết tượng trưng đến một trong số chúng.

Danh mục - /usr/lib

Thư viện lập trình và gói.

Mục đích: / usr / lib bao gồm các tệp đối tượng, thư viện và các tệp nhị phân nội bộ không được thực hiện trực tiếp bởi người dùng hoặc tập lệnh shell.

Lưu ý1: Các tệp tĩnh và thư mục con dành riêng cho ứng dụng kiến ​​trúc khác phải được đặt trong / usr / share.

Các ứng dụng có thể sử dụng một thư mục con duy nhất trong / usr / lib. Nếu một ứng dụng sử dụng thư mục con, tất cả dữ liệu phụ thuộc vào kiến ​​trúc được sử dụng riêng cho ứng dụng phải được đặt trong thư mục con đó.

Lưu ý2: Ví dụ: thư mục con perl5 cho các mô-đun và thư viện Perl 5.

Danh mục - /usr/lib<qual>

Thư viện định dạng thay thế (tùy chọn).

Mục đích: /usr/lib<qual> thực hiện vai trò tương tự như / usr / lib cho định dạng nhị phân thay thế, ngoại trừ các liên kết tượng trưng /usr/lib<qual>/sendmail/usr/lib<qual>/X11không bắt buộc.

Lưu ý: Trường hợp / usr / lib và /usr/lib<qual>giống nhau (một là liên kết tượng trưng cho nhau) các tệp này và các thư mục con trên mỗi ứng dụng sẽ tồn tại.

TLDR;

Nói chung:

Nếu có các thư viện được yêu cầu bởi một tệp thực thi trong các thư mục / bin hoặc / sbin, thì các thư viện đó sẽ nằm trong các thư mục / lib *.

Nếu có thư viện để sử dụng các chương trình và gói, chúng sẽ vào / usr / lib / *. Nếu có các tệp thực thi cần thiết cho một thư viện cụ thể, nhưng các tệp thực thi này không giả sử được người dùng gọi trực tiếp hoặc bằng root, họ sẽ truy cập vào / usr / libexec.


Cảm ơn. Bạn có thể làm rõ mặc dù khi một thư viện 32 bit hoặc 64 bit sẽ được đặt vào lib trái ngược với thư mục lib <Qual> tương ứng của nó không? Tôi không nhận được lời giải thích của bạn.
gsingh2011

Mục đích chính của / lib là chứa các thư viện cho các công cụ nằm trong / bin và / sbin. Cho rằng / lib có thể chứa hỗn hợp cả thư viện 32 bit và 64 bit. Tôi cũng sẽ thêm nhận xét này vào câu trả lời!
slm

Có thể đặt phần TLDR ở đầu?
kevinarpe

1
Sự khác biệt giữa lib32 và libx32 là gì?
Mikko Rantalainen

2
libx32 dành cho x32 . Bạn có thể sử dụng filetiện ích với các thư viện trong các thư mục này để thấy sự khác biệt.
elmicha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.