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>/sendmail
ve /usr/lib<qual>/X11
zorunlu 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.