ในขณะที่ทั้งสองถูกออกแบบมาเพื่อให้มีไฟล์ที่ไม่ได้เป็นของระบบปฏิบัติการ/opt
และ/usr/local
ไม่ได้ตั้งใจที่จะมีไฟล์ชุดเดียวกัน
/usr/local
เป็นสถานที่สำหรับติดตั้งไฟล์ที่สร้างโดยผู้ดูแลระบบโดยทั่วไปจะใช้make
คำสั่ง (เช่น./configure; make; make install
) แนวคิดคือการหลีกเลี่ยงการปะทะกับไฟล์ที่เป็นส่วนหนึ่งของระบบปฏิบัติการซึ่งอาจถูกเขียนทับหรือเขียนทับโลคัลมิฉะนั้น (เช่น/usr/bin/foo
เป็นส่วนหนึ่งของระบบปฏิบัติการในขณะที่/usr/local/bin/foo
เป็นทางเลือกในท้องถิ่น)
ไฟล์ทั้งหมดภายใต้/usr
สามารถใช้ร่วมกันได้ระหว่างอินสแตนซ์ของระบบปฏิบัติการแม้ว่าจะไม่ค่อยมีใน Linux นี่เป็นส่วนที่ FHS ขัดแย้งกันเองเล็กน้อยตามที่/usr
กำหนดให้เป็นแบบอ่านอย่างเดียว แต่/usr/local/bin
ต้องอ่านแบบเขียนเพื่อให้การติดตั้งซอฟต์แวร์ในท้องถิ่นสำเร็จ มาตรฐานระบบไฟล์ SVR4 ซึ่งเป็นแรงบันดาลใจหลักของ FHS แนะนำให้หลีกเลี่ยง/usr/local
และใช้/opt/local
แทนเพื่อเอาชนะปัญหานี้
/usr/local
เป็นมรดกจาก BSD ดั้งเดิม ในเวลานั้นซอร์สโค้ดของ/usr/bin
คำสั่งระบบปฏิบัติการอยู่ใน/usr/src/bin
และ/usr/src/usr.bin
ในขณะที่แหล่งที่มาของคำสั่งที่พัฒนาในประเทศอยู่ใน/usr/local/src
และไบนารีของพวกเขา/usr/local/bin
มา ไม่มีความคิดเกี่ยวกับบรรจุภัณฑ์ (tarballs ภายนอก)
ในทางตรงกันข้าม/opt
เป็นไดเรกทอรีสำหรับการติดตั้งแพคเกจ unbundled (เช่นแพคเกจไม่ได้เป็นส่วนหนึ่งของการกระจายระบบปฏิบัติการ แต่จัดทำโดยแหล่งที่มาอิสระ) แต่ละคนในไดเรกทอรีย่อยของตัวเอง พวกเขาสร้างแพคเกจทั้งหมดแล้วโดยผู้จัดจำหน่ายซอฟต์แวร์บุคคลที่สามที่เป็นอิสระ /usr/local
แพ็กเกจเหล่านี้จะแตกต่างจากของอื่น ๆ ตามแพ็คเกจ (หรืออย่างน้อยก็ควร) ยกตัวอย่างเช่นsomeapp
จะได้รับการติดตั้งใน/opt/someapp
หนึ่งของการเป็นคำสั่ง/opt/someapp/bin/foo
, แฟ้มการกำหนดค่าของมันจะเป็นในและไฟล์บันทึกใน/etc/opt/someapp/foo.conf
/var/opt/someapp/logs/foo.access
/usr/local
เป็นระบบโลคัลเวอร์ชัน/usr
ในขณะที่/opt
เป็นตัวยึดตำแหน่งสำหรับสิ่งอื่น ๆ