Lib, lib32, lib64, libx32 ve libexec arasındaki fark


41

64 bit Ubuntu 13.04 sistemim aşağıdaki dizinlere sahiptir /:

lib
lib32
lib64
libx32
libexec

Gelen /usrdizinde var:

lib
lib32
libx32
libexec

Bu, kolayca bir arama ile cevaplanabilecek bir şeye benziyordu, ancak bu dizinlerin paylaşılan kütüphaneleri (libexec hariç) saklaması dışında çevrimiçi hiçbir şey bulamadım. Ancak hangi paylaşılan kütüphaneler hangi klasörlere giriyor (lib32'de 32bit ve lib64'te 64 bit dışında)? Birisi bu dizinlerin tümü arasındaki farkı açıklayabilir mi?


Ve BSD, Fedora, AIX ve Solaris’in dizin yapılarında kendi kıvrımları var.

Yanıtlar:


39

Ah evet, Unixes ile uzun süre uğraştıysanız, bu çok kafa karıştırıcı bir parça. Çoğu Unix’in FHS - Dosya Sistemi Hiyerarşi Standardı’nı takip etmeye çalıştığı bir standart var .

Öncelikle , Fedora, CentOS ve RHEL Linux dağıtımları için FHS konusunda en çok tanıdığım Red Hat tabanlı dağıtımları kullanıyorum . Ancak Debian ve BSD tabanlı dağıtımları da kullandım ve bunların bir şeylerin nerede olduğu, dosya sistemi açısından farklı olduğu konusunda pek farklı değiller.

Şimdi sorularınıza. Bu dizin yapılarını gevşek bir şekilde düzenleyen FHS belgesine bir göz atardım . Genel olarak:

Rehber - /lib

Temel paylaşılan kütüphaneler ve çekirdek modülleri içerir.

Amaç: / lib dizini, sistemi başlatmak ve komutları kök dosya sisteminde çalıştırmak için gereken paylaşılan kütüphane resimlerini içerir. / bin ve / sbin içindeki ikili dosyalar ile.

Not1: Yalnızca / usr içindeki (herhangi bir X Window ikili dosyası gibi) ikili dosyalar için gerekli olan paylaşılan kütüphaneler / lib içinde olmamalıdır. Yalnızca / bin ve / sbin'de ikili dosyaları çalıştırmak için gereken paylaşılan kütüphaneler burada olabilir.

Not2: / lib 'in temel amacı, / bin & / sbin dizinlerine yerleştirilmiş araçlar için kütüphaneler içermesi göz önüne alındığında, / lib içindeki kütüphaneler 32-bit veya 64-bit olabilir.

Örneğin (Fedora 14 64-bit sistem)

$ 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

İşte benim / lib dosyalarından örnekleme

./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

Rehber - /lib<qual>

Alternatif format temel paylaşılan kütüphaneler (isteğe bağlı). Bunlar / lib32, / lib64 vb. Dizinleri olacaktır.

Amaç: Ayrı kütüphaneler gerektiren birden fazla ikili formatı destekleyen sistemlerde / lib dizininin bir veya daha fazla değişkeni olabilir. Bu, çoklu ikili formatları destekleyen, ancak aynı isimde kütüphaneler gerektiren sistemlerde 64 bit veya 32 bit desteği için kullanılır.

Not: Bu durumda, / lib32 ve / lib64 kütüphane dizinleri olabilir ve / lib bunlardan birine bir sembolik bağlantı kurar.

Rehber - /usr/lib

Programlama ve paketler için kütüphaneler.

Amaç: / usr / lib, doğrudan kullanıcılar veya kabuk komut dosyaları tarafından yürütülmesi amaçlanmayan nesne dosyalarını, kitaplıkları ve dahili ikili dosyaları içerir.

Not1: Çeşitli mimariden bağımsız uygulamaya özel statik dosyalar ve alt dizinler / usr / share içine yerleştirilmelidir.

Uygulamalar / usr / lib altındaki tek bir alt dizini kullanabilir. Bir uygulama bir alt dizin kullanıyorsa, uygulama tarafından özel olarak kullanılan tüm mimariye bağlı verilerin o alt dizine yerleştirilmesi gerekir.

Not2: Örneğin, Perl 5 modülleri ve kütüphaneleri için perl5 alt dizini.

Rehber - /usr/lib<qual>

Alternatif format kitaplıkları (isteğe bağlı).

Amaç: /usr/lib<qual> sembolik bağların olması /usr/lib<qual>/sendmailve /usr/lib<qual>/X11zorunlu olmaması dışında alternatif bir ikili format için / usr / lib ile aynı rolü oynar .

Not: / usr / lib'in /usr/lib<qual>aynı olduğu (birinin diğerine sembolik bir bağ olduğu) bu dosyalar ve uygulama başına alt dizinler mevcut olacaktır.

TLDR;

Genel olarak:

/ Bin veya / sbin dizinlerinde bir yürütülebilir dosya için gereken kitaplıklar varsa, bu kitaplıklar / lib * dizinlerinde olmalıdır.

Programları ve paketleri kullanmak için kütüphaneler varsa, / usr / lib / * dizinine girerler. Belirli bir kütüphanenin ihtiyaç duyduğu çalıştırılabilir dosyalar varsa, ancak bu çalıştırılabilir dosyaların doğrudan veya kök tarafından çağrılması gerekmiyorsa, / usr / libexec içine girerler.


Teşekkürler. Karşılık gelen lib <qual> klasörünün tersine, 32 bit veya 64 bit olan bir kitaplığın lib içine yerleştirileceğini açıklayabilir misiniz? Senin açıklamalarını pek anlamadım.
gsingh2011

/ Lib'in temel amacı, / bin ve / sbin içindeki araçlar için kütüphaneler içermektir. Verilen / lib hem 32 bit hem de 64 bit kütüphanelerin bir karışımını içerebilir. Bu yorumu cevaba da ekleyeceğim!
slm

Belki TLDR bölümünü en üste koyabilirim?
kevinarpe

1
Lib32 ve libx32 arasındaki fark nedir?
Mikko Rantalainen

2
libx32, x32 içindir . fileFarkı görmek için yardımcı programı bu dizinlerdeki kütüphanelerle kullanabilirsiniz .
elmicha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.