İlk olarak, neden ayrı olduklarını /lib
ve /lib64
:
Dosya Sistemi Hiyerarşi Standart
bu ayrı söz /lib
ve /lib64
mevcut oldukları için:
10.1. 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. Bu durumda, / lib32 ve / lib64 kütüphane dizinleri olabilir ve / lib bunlardan birine bir sembolik bağlantı kurar.
Benim Slackware 14.2 Açık örneğin vardır /lib
ve /lib64
32-bit ve 64-bit kütüphaneler için dizinleri sırasıyla rağmen
/lib
FHS öneririm pasajı gibi bir sembolik bağ olarak değil:
$ ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 12 Aug 11 2016 /lib/libc.so.6 -> libc-2.23.so
$ ls -l /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 Aug 11 2016 /lib64/libc.so.6 -> libc-2.23.so
Orada ikisidir libc.so.6
içinde kütüphaneler /lib
ve /lib64
.
Dinamik olarak oluşturulmuş her bir
ELF ikilisi
, bu durumda ya
/lib/ld-linux.so.2
da /lib64/ld-linux-x86-64.so.2
:
$ file main
main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, not stripped
$ readelf -a main | grep 'Requesting program interpreter'
[Requesting program interpreter: /lib/ld-linux.so.2]
$ file ./main64
./main64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, not stripped
$ readelf -a main64 | grep 'Requesting program interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
Tercümanın görevi gerekli paylaşılan kütüphaneleri yüklemek. Bir GNU yorumlayıcısına, bir ikili dosya LD_TRACE_LOADED_OBJECTS=1
veya bir ldd
sarmalayıcı kullanmadan bile hangi kitaplıkların yükleneceğini sorabilirsiniz :
$ LD_TRACE_LOADED_OBJECTS=1 ./main
linux-gate.so.1 (0xf77a9000)
libc.so.6 => /lib/libc.so.6 (0xf760e000)
/lib/ld-linux.so.2 (0xf77aa000)
$ LD_TRACE_LOADED_OBJECTS=1 ./main64
linux-vdso.so.1 (0x00007ffd535b3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f56830b3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f568347c000)
Gördüğünüz gibi, belirli bir tercüman kütüphaneleri nerede arayacağınızı tam olarak bilir - 32 bitlik sürüm kütüphaneleri arar /lib
ve 64 bitlik sürüm kütüphaneleri arar /lib64
.
FHS standardı aşağıdakiler hakkında şunları söylüyor /bin
:
/ bin, hem sistem yöneticisi tarafından hem de kullanıcılar tarafından kullanılabilecek, ancak başka hiçbir dosya sistemi monte edilmediğinde gerekli olan komutları içerir (örneğin, tek kullanıcı modunda). Ayrıca, komut dosyaları tarafından dolaylı olarak kullanılan komutları da içerebilir.
Orada ayrı neden IMO nedeni /bin
ve /bin64
bu dizinlerin her iki dosyayı aynı adla olsaydı biz koymak zorunda birşey olduğu dolaylı bunlardan biri arayamadım ki /bin
ya /bin64
ilk
$PATH
.
Ancak, yukarıda sadece kongre olduğunu haber olduğunu - Ayrı varsa Linux çekirdeği gerçekten umursamıyor /bin
ve /bin64
. Onları istiyorsanız, onları oluşturabilir ve sisteminizi buna göre ayarlayabilirsiniz.
Ayrıca Android'den bahsettiniz - değiştirilmiş bir Linux çekirdeğini çalıştırmak dışında, Ubuntu gibi GNU sistemleriyle hiçbir ilgisi olmadığını unutmayın - glibc yok, bash yok (varsayılan olarak, elbette manuel olarak derleyebilir ve dağıtabilirsiniz) ve ayrıca dizin yapısı tamamen farklı.
/bin
ve/sbin
orada. Soru nedir? Eğer arasındaki fark hakkında soruyorsun/lib
ve/lib64
?