ก่อนทำไมมีแยก/libและ/lib64:
ระบบแฟ้มลำดับชั้นมาตรฐาน
กล่าวว่าแยกต่างหาก/libและ/lib64อยู่เพราะ:
10.1 อาจมีตัวแปรหนึ่งตัวหรือมากกว่าของไดเร็กทอรี / lib บนระบบที่สนับสนุนรูปแบบไบนารีมากกว่าหนึ่งรูปแบบที่ต้องการไลบรารีแยกต่างหาก (... ) วิธีนี้ใช้สำหรับการสนับสนุน 64- บิตหรือ 32- บิตบนระบบที่รองรับรูปแบบไบนารี่หลายรูปแบบ แต่ต้องการไลบรารีที่มีชื่อเดียวกัน ในกรณีนี้ / lib32 และ / lib64 อาจเป็นไดเรกทอรีไลบรารีและ / lib เป็น symlink หนึ่งในนั้น
ใน Slackware 14.2 ของฉันมี/libและ/lib64
ไดเรกทอรีสำหรับไลบรารี 32- บิตและ 64- บิตตามลำดับแม้ว่า
/libจะไม่ได้เป็น symlink ตามที่ข้อมูลโค้ด 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
มีสองเป็นlibc.so.6ห้องสมุดในและ/lib/lib64
แต่ละเอลฟ์ไบนารีที่สร้างขึ้นแบบไดนามิก
มีเส้นทางฮาร์ดโค้ดไปที่ล่ามในกรณีนี้อย่างใดอย่างหนึ่ง
/lib/ld-linux.so.2หรือ/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]
งานของล่ามคือการโหลดไลบรารีที่ใช้ร่วมกันที่จำเป็น คุณสามารถถามล่าม GNU ว่าจะโหลดไลบรารีใดโดยไม่ต้องใช้ไบนารีโดยใช้LD_TRACE_LOADED_OBJECTS=1หรือlddwrapper:
$ 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)
ในขณะที่คุณสามารถเห็นล่ามที่กำหนดจะรู้ว่าจะหาไลบรารี่ได้ที่ไหน - เวอร์ชั่น 32 บิตค้นหาไลบรารี่ใน/libและ 64- บิตมองหา/lib64ไลบรารี่ใน
มาตรฐาน FHS บอกเกี่ยวกับสิ่งต่อไปนี้/bin:
/ bin มีคำสั่งที่อาจใช้โดยทั้งผู้ดูแลระบบและผู้ใช้ แต่จำเป็นต้องใช้เมื่อไม่มีการติดตั้งระบบไฟล์อื่น (เช่นในโหมดผู้ใช้คนเดียว) มันอาจมีคำสั่งที่ใช้งานโดยอ้อมโดยสคริปต์
IMO เหตุผลที่ว่าทำไมไม่มีการแยกจากกัน/binและ/bin64ก็คือว่าถ้าเรามีไฟล์ที่มีชื่อเดียวกันทั้งในไดเรกทอรีเหล่านี้เราไม่สามารถเรียกหนึ่งของพวกเขาทางอ้อมเพราะเราจะต้องใส่/binหรือเป็นครั้งแรกใน/bin64
$PATH
แต่แจ้งให้ทราบว่าข้างต้นเป็นเพียงการประชุม - ลินุกซ์เคอร์เนลไม่สนใจจริงๆถ้าคุณมีแยกต่างหากและ/bin /bin64หากคุณต้องการคุณสามารถสร้างและติดตั้งระบบของคุณได้
คุณยังกล่าวถึง Android - โปรดทราบว่ายกเว้นการใช้เคอร์เนล Linux ที่แก้ไขแล้วมันไม่มีส่วนเกี่ยวข้องกับระบบ GNU เช่น Ubuntu - ไม่มี glibc ไม่มีการทุบตี (โดยค่าเริ่มต้นแน่นอนคุณสามารถรวบรวมและปรับใช้ด้วยตนเอง) และโครงสร้างไดเรกทอรี แตกต่างอย่างสิ้นเชิง
/binและ/sbinมี คำถามคืออะไร? คุณถามถึงความแตกต่างระหว่าง/libและ/lib64?