อ่าใช่นี่เป็นส่วนที่สับสนมากถ้าคุณจัดการกับยูนิกซ์มานานพอสมควร มีมาตรฐานที่มากที่สุด 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