Ah ya ini adalah bagian yang sangat membingungkan jika Anda sudah berurusan dengan Unix untuk waktu yang lama. Ada standar yang sebagian besar Unix "coba" ikuti disebut FHS - Filesystem Hierarchy Standard .
Mengingat saya terutama menggunakan distro berbasis Red Hat Saya paling akrab dengan mereka mengambil FHS untuk distro Fedora, CentOS, dan RHEL Linux. Tapi saya sudah menggunakan distro berbasis Debian & BSD juga dan mereka tidak jauh berbeda dalam hal di mana semuanya disimpan, bijaksana filesystem.
Sekarang untuk pertanyaan Anda. Saya akan melihat dokumen FHS , yang secara longgar mengatur struktur direktori ini. Secara umum:
Direktori - /lib
Berisi pustaka bersama penting dan modul kernel.
Tujuan: Direktori / lib berisi gambar-gambar perpustakaan bersama yang diperlukan untuk mem-boot sistem dan menjalankan perintah di sistem file root, yaitu. oleh binari di / bin dan / sbin.
Catatan1: Pustaka bersama yang hanya diperlukan untuk binari di / usr (seperti binari X Window) tidak boleh di / lib. Hanya pustaka bersama yang diperlukan untuk menjalankan binari di / bin dan / sbin mungkin ada di sini.
Note2: Mengingat tujuan utama / lib adalah untuk berisi pustaka untuk alat yang digunakan untuk direktori / bin & / sbin, pustaka di / lib dapat berupa 32-bit atau 64-bit.
Misalnya (Fedora 14 sistem 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
Berikut adalah contoh file dari 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
Direktori - /lib<qual>
Format alternatif pustaka bersama yang penting (opsional). Ini akan menjadi direktori / lib32, / lib64, dll.
Tujuan: Mungkin ada satu atau lebih varian direktori / lib pada sistem yang mendukung lebih dari satu format biner yang membutuhkan pustaka yang terpisah. Ini biasanya digunakan untuk dukungan 64-bit atau 32-bit pada sistem yang mendukung banyak format biner, tetapi membutuhkan pustaka dengan nama yang sama.
Catatan: Dalam hal ini, / lib32 dan / lib64 mungkin direktori pustaka, dan / lib symlink ke salah satunya.
Direktori - /usr/lib
Perpustakaan untuk pemrograman dan paket.
Tujuan: / usr / lib termasuk file objek, pustaka, dan binari internal yang tidak dimaksudkan untuk dieksekusi langsung oleh pengguna atau skrip shell.
Catatan1: File statis dan subdirektori khusus arsitektur-independen aplikasi-spesifik harus ditempatkan di / usr / share.
Aplikasi dapat menggunakan subdirektori tunggal di bawah / usr / lib. Jika aplikasi menggunakan subdirektori, semua data yang bergantung pada arsitektur yang digunakan secara eksklusif oleh aplikasi harus ditempatkan di dalam subdirektori itu.
Note2: Misalnya, subdirektori perl5 untuk modul dan pustaka Perl 5.
Direktori - /usr/lib<qual>
Pustaka format alternatif (opsional).
Tujuan: /usr/lib<qual>
melakukan peran yang sama dengan / usr / lib untuk format biner alternatif, kecuali bahwa tautan simbolis /usr/lib<qual>/sendmail
dan /usr/lib<qual>/X11
tidak diperlukan.
Catatan: Kasus di mana / usr / lib dan /usr/lib<qual>
sama (satu adalah tautan simbolis ke yang lain) file-file ini dan subdirektori per-aplikasi akan ada.
TLDR;
Secara umum:
Jika ada pustaka yang dibutuhkan oleh executable di direktori / bin atau / sbin, pustaka tersebut harus berada di direktori / lib *.
Jika ada pustaka untuk menggunakan program dan paket mereka masuk / usr / lib / *. Jika ada file executable yang diperlukan oleh perpustakaan tertentu, tetapi file executable ini tidak seharusnya dipanggil oleh pengguna secara langsung atau dengan root, mereka dapat dijalankan di / usr / libexec.