ความแตกต่างระหว่าง lib, lib32, lib64, libx32 และ libexec


41

ระบบ Ubuntu 13.04 64 บิตของฉันมีไดเรกทอรีดังต่อไปนี้/:

lib
lib32
lib64
libx32
libexec

ใน/usrไดเรกทอรีมี:

lib
lib32
libx32
libexec

ดูเหมือนว่าบางสิ่งที่สามารถตอบได้อย่างง่ายดายด้วยการค้นหา แต่ฉันไม่พบสิ่งใดออนไลน์นอกจากไดเรกทอรีเหล่านี้จะจัดเก็บไลบรารีที่ใช้ร่วมกัน (ยกเว้น libexec) แต่ไลบรารีที่แบ่งใช้ใดที่ไปในโฟลเดอร์ใด (นอกเหนือจาก 32 บิตใน lib32 และ 64 บิตใน lib64) มีคนอธิบายความแตกต่างระหว่างไดเรกทอรีทั้งหมดเหล่านี้ได้ไหม


และ BSD, Fedora, AIX และ Solaris มีการบิดของตัวเองในโครงสร้างไดเรกทอรี

คำตอบ:


39

อ่าใช่นี่เป็นส่วนที่สับสนมากถ้าคุณจัดการกับยูนิกซ์มานานพอสมควร มีมาตรฐานที่มากที่สุด Unixes "ลอง" ที่จะทำตามที่เรียกว่าเป็นระบบแฟ้มลำดับชั้นมาตรฐาน - FHS

ให้ฉันใช้ distros ตาม Red Hat เป็นส่วนใหญ่ฉันคุ้นเคยกับการใช้ FHSสำหรับ Fedora, CentOS และ RHEL Linux distros แต่ฉันเคยใช้ distros แบบ Debian & BSD เช่นกันและมันก็ไม่ได้มีความแตกต่างกันในแง่ของสิ่งที่ถูกเก็บไว้ระบบไฟล์ฉลาด

ตอนนี้คำถามของคุณ ฉันจะดูที่เอกสาร FHSซึ่งควบคุมโครงสร้างไดเรกทอรีเหล่านี้อย่างหลวม ๆ โดยทั่วไป:

ไดเรกทอรี - /lib

มี shared library ที่สำคัญและโมดูลเคอร์เนล

วัตถุประสงค์:ไดเร็กทอรี / lib มีอิมเมจไลบรารีที่แบ่งใช้เหล่านั้นซึ่งจำเป็นต่อการบูตระบบและรันคำสั่งในระบบไฟล์รูทเช่น โดยไบนารีใน / bin และ / sbin

Note1:ไลบรารีแบบแบ่งใช้ที่จำเป็นสำหรับไบนารีใน / usr (เช่นไบนารี X Window ใด ๆ ) ต้องไม่อยู่ใน / lib เฉพาะไลบรารีที่ใช้ร่วมกันที่จำเป็นในการเรียกใช้ไบนารีใน / bin และ / sbin อาจอยู่ที่นี่

Note2:เนื่องจากวัตถุประสงค์หลักของ / lib คือเพื่อให้มีไลบรารีสำหรับเครื่องมือที่ปรับใช้กับไดเร็กทอรี / bin & / sbin, ไลบรารีใน / lib สามารถเป็น 32- บิตหรือ 64- บิต

ตัวอย่างเช่น (ระบบ Fedora 14 64 บิต)

$ 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

นี่คือตัวอย่างของไฟล์จาก / lib ของฉัน

./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

ไดเรกทอรี - /lib<qual>

ไลบรารีที่แชร์ที่จำเป็นในรูปแบบอื่น (ไม่บังคับ) เหล่านี้จะเป็นไดเรกทอรี / lib32, / lib64 ฯลฯ

วัตถุประสงค์:อาจมีหนึ่งหรือหลายรูปแบบของไดเร็กทอรี / lib บนระบบที่รองรับรูปแบบไบนารีมากกว่าหนึ่งรูปแบบที่ต้องการไลบรารีแยกต่างหาก โดยทั่วไปจะใช้สำหรับการสนับสนุน 64- บิตหรือ 32- บิตบนระบบที่รองรับรูปแบบไบนารี่หลายรูปแบบ แต่ต้องการไลบรารีที่มีชื่อเดียวกัน

หมายเหตุ:ในกรณีนี้ / lib32 และ / lib64 อาจเป็นไดเรกทอรีไลบรารีและ / lib เป็น symlink หนึ่งในนั้น

ไดเรกทอรี - /usr/lib

ไลบรารีสำหรับการเขียนโปรแกรมและแพ็คเกจ

วัตถุประสงค์: / usr / lib รวมถึงวัตถุไฟล์ไลบรารีและไบนารีภายในที่ไม่ได้ตั้งใจให้เรียกใช้งานโดยตรงจากผู้ใช้หรือเชลล์สคริปต์

Note1:ไฟล์และไดเรกทอรีย่อยเฉพาะแอปพลิเคชั่นที่เป็นสถาปัตยกรรมอิสระต้องอยู่ใน / usr / share

แอปพลิเคชันอาจใช้ไดเรกทอรีย่อยเดียวภายใต้ / usr / lib หากแอปพลิเคชันใช้ไดเรกทอรีย่อยข้อมูลทั้งหมดขึ้นอยู่กับสถาปัตยกรรมที่ใช้โดยเฉพาะแอปพลิเคชันจะต้องอยู่ในไดเรกทอรีย่อยนั้น

Note2:ตัวอย่างเช่นไดเรกทอรีย่อย perl5 สำหรับโมดูลและไลบรารี Perl 5

ไดเรกทอรี - /usr/lib<qual>

ไลบรารีรูปแบบสำรอง (เป็นทางเลือก)

วัตถุประสงค์: /usr/lib<qual>ดำเนินการบทบาทเดียวกับ / usr / lib สำหรับรูปแบบไบนารีทางเลือกยกเว้นว่าลิงก์สัญลักษณ์/usr/lib<qual>/sendmailและ/usr/lib<qual>/X11ไม่จำเป็นต้องใช้

หมายเหตุ:กรณีที่ / usr / lib และ/usr/lib<qual>เหมือนกัน (หนึ่งเป็นลิงค์สัญลักษณ์ไปยังอีก) ไฟล์เหล่านี้และไดเรกทอรีย่อยต่อการสมัครจะมีอยู่

TLDR;

โดยทั่วไป:

หากมีไลบรารีที่ต้องการโดยไฟล์เรียกทำงานในไดเร็กทอรี / bin หรือ / sbin ไลบรารีเหล่านั้นควรอยู่ในไดเร็กทอรี / lib *

หากมีไลบรารี่สำหรับใช้งานโปรแกรมและแพ็คเกจพวกมันจะอยู่ใน / usr / lib / * หากมีไฟล์เรียกทำงานที่ต้องการโดยไลบรารีเฉพาะ แต่ไฟล์ปฏิบัติการเหล่านี้ไม่ควรถูกเรียกโดยผู้ใช้โดยตรงหรือโดยรูทไฟล์เหล่านั้นจะอยู่ใน / usr / libexec


ขอบคุณ คุณสามารถอธิบายได้ไหมว่าเมื่อใดที่ไลบรารีที่เป็น 32 บิตหรือ 64 บิตจะถูกวางลงใน lib ซึ่งต่างจากโฟลเดอร์ lib <qual> ที่เกี่ยวข้อง ฉันไม่ได้รับคำอธิบายของคุณเลย
gsingh2011

วัตถุประสงค์หลักของ / lib คือเพื่อให้มีไลบรารีสำหรับเครื่องมือที่อยู่ใน / bin และ / sbin ระบุว่า / lib สามารถมีทั้งไลบรารีแบบ 32- บิตและ 64- บิต ฉันจะเพิ่มความคิดเห็นนี้เพื่อคำตอบเช่นกัน!
slm

อาจวางส่วน TLDR ที่ด้านบนหรือไม่
kevinarpe

1
ความแตกต่างระหว่าง lib32 และ libx32 คืออะไร?
Mikko Rantalainen

2
libx32 สำหรับx32 คุณสามารถใช้fileยูทิลิตีกับไลบรารีในไดเรกทอรีเหล่านี้เพื่อดูความแตกต่าง
elmicha
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.