Perbedaan antara lib, lib32, lib64, libx32, dan libexec

41

Sistem 64 bit Ubuntu 13.04 saya memiliki direktori berikut di /:

lib
lib32
lib64
libx32
libexec

Dalam /usrdirektori ada:

lib
lib32
libx32
libexec

Ini sepertinya sesuatu yang dapat dengan mudah dijawab dengan pencarian, tetapi saya tidak menemukan apa pun secara online, selain itu direktori ini menyimpan perpustakaan bersama (kecuali libexec). Tapi pustaka bersama mana yang masuk folder mana (selain 32bit di lib32 dan 64 bit di lib64)? Bisakah seseorang menjelaskan perbedaan antara semua direktori ini?

gsingh2011
sumber
Dan BSD, Fedora, AIX dan Solaris memiliki tikungan sendiri ke struktur direktori.

Jawaban:

39

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>/sendmaildan /usr/lib<qual>/X11tidak 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.

slm
sumber
Terima kasih. Bisakah Anda mengklarifikasi kapan perpustakaan yang 32 bit atau 64 bit akan ditempatkan ke lib sebagai lawan dari itu sesuai lib folder <qual>? Saya tidak mendapatkan penjelasan Anda.
gsingh2011
Tujuan utama dari / lib adalah untuk berisi pustaka untuk alat-alat yang ada di / bin dan / sbin. Mengingat bahwa / lib dapat berisi campuran perpustakaan 32-bit & 64-bit. Saya akan menambahkan komentar ini ke jawabannya juga!
slm
Mungkin menempatkan bagian TLDR di bagian atas?
kevinarpe
1
Apa perbedaan antara lib32 dan libx32?
Mikko Rantalainen
2
libx32 untuk x32 . Anda dapat menggunakan fileutilitas dengan perpustakaan di direktori ini untuk melihat perbedaannya.
elmicha