Di laptop saya:
$ cat /etc/issue
Ubuntu 18.04 LTS \n \l
Ada dua folder berbeda untuk perpustakaan x86
dan x86_64
:
~$ ls -1 /
bin
lib
lib64
sbin
...
Mengapa untuk binari hanya ada satu direktori?
NB Saya juga tertarik dengan Android tapi saya harap jawabannya harus sama.
linux
android
architecture
Gluttton
sumber
sumber
/bin
dan di/sbin
sana. Apa pertanyaannya? Apakah Anda bertanya tentang perbedaan antara/lib
dan/lib64
?x86_64
(tidak untuk/bin
tidak untuk/sbin
)./bin64
.wine*32
danwine*64
).Jawaban:
Pertama, mengapa ada yang terpisah
/lib
dan/lib64
:The Filesystem Hierarchy Standard menyebutkan bahwa terpisah
/lib
dan/lib64
eksis karena: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: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
: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
atauldd
pembungkus: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
: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.
sumber
ls -l
Contoh Anda tidak terlalu erat. Apa yang akan berguna adalah output darils -l /lib /lib64
, yang mungkin menunjukkan bahwa/lib
dirinya adalah sebuah symlink.ls -ld
, dan tidak,/lib
bukan symlink diSlackware 14.2
sistem saya .dfd029d25c58831bc5db671aec99a36f /lib64/libc.so.6
,987e7b736f316cc8da87ca2f38dae93e /lib/libc.so.6
.Alasannya adalah bahwa direktori lib / lib64 dapat berisi file yang kebetulan memiliki nama yang sama karena itu adalah perpustakaan yang dibagikan dengan berbagai program. Menempatkan mereka di direktori terpisah menyelesaikan konflik. Tidak ada (biasanya ...) tidak ada alasan yang baik untuk mendistribusikan executable dengan nama yang sama pada sistem yang sama yaitu 32/64-bit, tetapi karena mungkin ada campuran executable, perpustakaan bersama harus disediakan.
sumber