Pertama, mengapa ada yang terpisah /lib
dan /lib64
:
The Filesystem Hierarchy Standard
menyebutkan bahwa terpisah /lib
dan /lib64
eksis karena:
10.1. 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 berbagai format biner, tetapi membutuhkan pustaka dengan nama yang sama. Dalam hal ini, / lib32 dan / lib64 mungkin direktori pustaka, dan / lib symlink ke salah satunya.
Pada Slackware 14.2 saya misalnya ada /lib
dan /lib64
direktori masing-masing untuk pustaka 32-bit dan 64-bit meskipun
/lib
tidak sebagai symlink seperti yang disarankan oleh cuplikan FHS:
$ 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
Ada dua libc.so.6
perpustakaan di /lib
dan /lib64
.
Setiap biner ELF yang dibangun secara dinamis
berisi jalur hardcod ke interpreter, dalam hal ini salah satu
/lib/ld-linux.so.2
atau /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]
Tugas penerjemah adalah memuat pustaka bersama yang diperlukan. Anda bisa bertanya kepada penerjemah GNU perpustakaan apa yang akan dimuat tanpa menjalankan biner LD_TRACE_LOADED_OBJECTS=1
atau ldd
pembungkus:
$ 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)
Seperti yang Anda lihat, penerjemah yang diberikan tahu persis di mana mencari perpustakaan - Versi 32-bit mencari perpustakaan /lib
dan versi 64-bit mencari perpustakaan di /lib64
.
Standar FHS mengatakan hal berikut tentang /bin
:
/ bin berisi perintah yang dapat digunakan oleh administrator sistem dan oleh pengguna, tetapi yang diperlukan ketika tidak ada sistem file lain yang dipasang (misalnya dalam mode pengguna tunggal). Ini juga dapat berisi perintah yang digunakan secara tidak langsung oleh skrip.
IMO alasan mengapa tidak ada yang terpisah /bin
dan /bin64
adalah bahwa jika kita memiliki file dengan nama yang sama di kedua direktori ini kita tidak bisa menyebut salah satu dari mereka tidak langsung karena kita harus menempatkan /bin
atau /bin64
pertama dalam
$PATH
.
Namun, perhatikan bahwa di atas hanyalah konvensi - kernel Linux tidak terlalu peduli jika Anda memiliki /bin
dan terpisah /bin64
. Jika Anda menginginkannya, Anda dapat membuatnya dan mengatur sistem Anda sesuai.
Anda juga menyebutkan Android - perhatikan bahwa kecuali untuk menjalankan kernel Linux yang dimodifikasi itu tidak ada hubungannya dengan sistem GNU seperti Ubuntu - tidak ada glibc, tidak ada bash (secara default, Anda tentu saja dapat mengkompilasi dan menyebarkannya secara manual), dan juga struktur direktori sama sekali berbeda.
/bin
dan di/sbin
sana. Apa pertanyaannya? Apakah Anda bertanya tentang perbedaan antara/lib
dan/lib64
?