À đú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
và /usr/lib<qual>/X11
khô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.