/ usr / bin vs / usr / local / bin บน Linux


445

เหตุใดจึงมีหลายสถานที่ที่จะวางไบนารีใน Linux อย่างน้อยห้าเหล่านี้มี:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

และในบ็อกซ์ออฟฟิศของฉันฉันไม่มีสิทธิ์เขียนบางอย่าง

ไบนารี่ประเภทใดที่เข้ากับสิ่งเหล่านี้bin?


28
/usr/sbin/คุณลืม
Hello71

15
และ~/bin/สำหรับสิ่งของส่วนตัว
Calmarius

1
มีสถานที่น้อยลงในปัจจุบันตั้งแต่/binรวมกับ/usr/binและ/sbinรวมกับ/usr/sbinดู - กรณีสำหรับการผสาน usr /
Piotr Dobrogost

คำถามที่เกี่ยวข้อง: askubuntu.com/questions/308045/…
Gabriel Staples

@Calarius อะไร คุณไม่ควรใช้/usr/local/bin?
Pacerier

คำตอบ:


558
  1. /bin(และ/sbin) มีไว้สำหรับโปรแกรมที่จำเป็นต้องอยู่ใน/พาร์ติชันขนาดเล็กก่อนที่จะมีขนาดใหญ่/usrฯลฯ พาร์ทิชันถูกเมาท์ ทุกวันนี้ส่วนใหญ่จะทำหน้าที่เป็นที่ตั้งมาตรฐานสำหรับโปรแกรมหลักเช่น/bin/shแม้ว่าความตั้งใจดั้งเดิมอาจยังคงเกี่ยวข้องเช่นการติดตั้งบนอุปกรณ์ฝังตัวขนาดเล็ก

  2. /sbinแตกต่างจาก/binสำหรับโปรแกรมการจัดการระบบ (ปกติไม่ได้ใช้โดยผู้ใช้ทั่วไป) ที่จำเป็นก่อนที่/usrจะติดตั้ง

  3. /usr/bin ใช้สำหรับโปรแกรมผู้ใช้ปกติที่มีการจัดการการกระจาย

  4. มี/usr/sbinความสัมพันธ์แบบเดียวกันกับที่/usr/binเป็น/sbinไป/binได้

  5. /usr/local/binใช้สำหรับโปรแกรมผู้ใช้ปกติที่ไม่ได้รับการจัดการโดยผู้จัดการแพ็คเกจการแจกจ่ายเช่นแพ็คเกจที่รวบรวมในเครื่อง คุณไม่ควรติดตั้งลงในเครื่อง/usr/binเนื่องจากการอัพเกรดการแจกจ่ายในอนาคตอาจแก้ไขหรือลบออกโดยไม่มีการเตือน

  6. /usr/local/sbinในขณะที่คุณอาจจะสามารถคาดเดาที่จุดนี้คือการ/usr/local/binเป็นไป/usr/sbin/usr/bin

นอกจากนี้ยังมี/optแพคเกจที่ไม่ใช่เสาหินด้วยซ้ำ แต่ก่อนที่พวกมันจะถูกรวมเข้าด้วยกันการกระจายที่หลากหลายทำให้ Gnome และ KDE นั้นมีอยู่ โดยทั่วไปคุณควรสำรองไว้สำหรับแพ็คเกจของบุคคลที่สามที่มีขนาดใหญ่และมีพฤติกรรมไม่ดีเช่น Oracle


37
ฉันคิดว่าคำตอบนี้เป็นงานที่ยอดเยี่ยมในการจัดทำข้อตกลงร่วมกัน แต่โพสต์นี้จาก Rob Landley เป็นหนังสือที่ยอดเยี่ยมมากหากคุณต้องการข้อมูลเชิงลึกเกี่ยวกับเรื่องไร้สาระ ... lists.busybox.net/pipermail/busybox/2010-December /074114.html
Subfuzion

3
refspecs.linuxfoundation.org/fhs.shtmlสำหรับการอ้างอิงปัจจุบันซึ่งเป็นที่ยอมรับ ลิงก์โดย @kojiro ล้าสมัยและไม่มีข้อกำหนดใหม่
Didier A.

2
ฉันจะวางถังขยะที่ฉันดาวน์โหลดจากอินเทอร์เน็ตได้ที่ไหน จากคำอธิบายของคุณดูเหมือนว่าควรจะอยู่ใน / usr / local / bin หรือ / usr / bin / usr / bin เป็นสิ่งที่ฉันไม่ควรสัมผัสด้วยตนเองหรือไม่และให้เฉพาะตัวจัดการแพ็คเกจเล่นด้วย?
Didier A.

3
@DidierA ใส่ไว้ใน~/binและเพิ่มไดเรกทอรีนั้นลงใน PATH ของคุณในฐานะผู้ใช้ ... ขอบคุณสำหรับการบันทึกฉันลบความคิดเห็นที่ล้าสมัยอย่างจริงจังของฉัน
kojiro

3
ผมพบว่าคำตอบส่วนแรกของคำถามของฉันที่นี่: superuser.com/a/238993/425838 ลำดับความสำคัญขึ้นอยู่กับการสั่งซื้อในPATHตัวแปรระบบและecho $PATHสำหรับฉันแสดงให้เห็น/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesซึ่งหมายถึงการปฏิบัติที่/usr/local/binจะมีความสำคัญมากกว่าคน/usr/binที่มีความสำคัญมากกว่าคนที่/binมา
Gabriel Staples

65

ฉันขอแนะนำให้ดูที่หน้าคนลำดับชั้นของระบบไฟล์:

man hier

ซึ่งมีให้ออนไลน์เช่น: http://linux.die.net/man/7/hier


1
สิ่งนี้ไม่ตอบคำถามของผู้ใช้
Billy ONeal

14
หน้าคนมีรายการสำหรับแต่ละไดเรกทอรีถังอธิบายสิ่งที่พวกเขาเข้าไปซึ่งเป็นหนึ่งในคำถาม
davitenio

34

รายการFilesystem Hierarchy Standardใน Wikipedia ช่วยให้ฉันตอบคำถามเดียวกันเมื่อฉันมีรวมทั้งมีตารางอธิบายอย่างมาก

ข้อความที่ตัดตอนมาจากหน้า1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 สืบค้นเมื่อวันที่ 19 มิถุนายน 2019; ความคิดเห็น


17

sbinไดเรกทอรีมีโปรแกรมที่มักจะมีการบริหารระบบเท่านั้น โปรแกรมสำหรับผู้ใช้ทั่วไปไม่ควรเข้าไป

ไม่กี่โปรแกรมที่มีความจำเป็นในช่วงเริ่มต้นและสิ้นสุดในหรือ/bin/ /sbin/ต้องพร้อมใช้งานก่อนที่ระบบไฟล์จะถูกเมาท์ สิ่งที่ต้องการmountและfsckที่จำเป็นในการตรวจสอบและเมานต์ระบบไฟล์จะต้องมี

โปรแกรมแพคเกจส่วนใหญ่สิ้นสุดในและ/usr/bin/ /usr/sbin/สิ่งเหล่านี้อาจอยู่ในระบบไฟล์นอกเหนือจากระบบไฟล์รูท ในบางกรณีอาจอยู่ในไดรฟ์ที่เชื่อมต่อกับเครือข่าย

โปรแกรมท้องถิ่นและสคริปต์อยู่ในและ/usr/local/bin/ /usr/local/sbin/สิ่งนี้ระบุว่าเป็นมาตรฐานที่ไม่ชัดเจนและอาจใช้ได้เฉพาะในไซต์เท่านั้น

สำหรับคำอธิบายเพิ่มเติมลองใช้คำสั่งman hierที่ควรให้คำอธิบายของลำดับชั้นของระบบไฟล์ที่แนะนำสำหรับการกระจายของคุณ คุณอาจต้องการอ่านเกี่ยวกับลำดับขั้นของระบบไฟล์บน Wikipedia


1
+1 คำอธิบายที่กระชับจริง ๆ ถ้าด้านบนเล็กเกินไป
CppLearner

"โปรแกรมและสคริปต์ในเครื่องอยู่ใน / usr / local / bin / และ / usr / local / sbin /" - คุณหมายถึงโปรแกรมในพื้นที่เหมือนใน "ไม่ใช่ในทุกส่วนของระบบปฏิบัติการ แต่ฉันตัดสินใจที่จะติดตั้งและต้องการใช้งาน "?
Jim Aho

11

ในปี 1970 UNIXมีการปฏิบัติการอย่างเป็นทางการทั้งหมด/binและ/usr/binเป็นตำแหน่งที่อยู่ใต้ไดเรกทอรีภายในบ้านของผู้ใช้ (เช่น/usr/dmr) ที่ผู้ใช้ทุกคนสามารถจัดเก็บไบนารีของตัวเองซึ่งอาจเป็นที่สนใจของผู้อื่นเช่นกัน

ผลที่ได้จากการเปิดครั้งนี้/usr/binคือลานขยะของซอฟต์แวร์ที่ไม่มีเอกสารดังนั้นผู้Stephen Bourneเขียนจึงcron scriptตรวจสอบไบนารีใหม่ทุกคืนและลบไบนารีทั้งหมดที่ไม่มีเอกสารหรืออัปเดตโดยไม่อัปเดตเอกสารของพวกเขา

ในช่วงปลายปี 1970 ที่/usr/binได้รับการรวมอยู่ในการกระจายฐาน OS และคนเริ่มที่จะใช้เพื่อวัตถุประสงค์ในการเปิดก่อนหน้านี้/usr/local/bin/usr/bin

หลังจากผ่านไประยะหนึ่ง sysadmins ใช้/usr/local/binในการจัดเก็บnon-localซอฟต์แวร์ที่นำเข้าจากเครือข่าย (เช่น USENET) และเนื่องจาก บริษัท UNIX ไม่ชอบที่จะทำซ้ำข้อผิดพลาดเช่นเดียวกับ/usr/binอีกครั้งมีการประชุมลำดับชั้นของระบบไฟล์ประมาณปี 1987 เพื่อยกเลิก/usr/local/binและใช้/opt/<vendor>/binแทน

น่าเสียดายที่ Linux distros ไม่ปฏิบัติตามการตัดสินใจนี้ ....


ในขณะที่น่าสนใจมากสิ่งนี้ไม่ได้พยายามตอบคำถามที่ถามซึ่งไม่เกี่ยวกับ/optและไม่เกี่ยวกับ UNIX แต่เกี่ยวกับ Linux เหมือนกับการตอบว่า "ทำไมรถยนต์ถึงมีล้อ 4 ล้อ" ด้วย "จักรยานมี 2! น่าเศร้าที่รถยนต์ไม่ได้" ซึ่งไม่ได้ช่วยให้ OP เข้าใจว่าทำไมรถยนต์ถึงมี 4.
terdon

2
หากคุณไม่สามารถใช้คำอธิบายที่ให้ไว้เป็นคำอธิบายพื้นหลังของ Linux และข้อเท็จจริงที่ว่า Linux ชอบเลียนแบบ UNIX คุณอาจขาดพื้นหลังที่จำเป็น
schily

1
น่าสนใจ แต่มีบางอย่างที่ฉันสับสนและอาจเป็นเพียงประวัติศาสตร์เท่านั้น วันนี้การดาวน์โหลดถังขยะออนไลน์และถัง บริษัท ไม่แตกต่างกันมาก หาก Joe Blow สร้างโปรแกรมและฉันดาวน์โหลดมาทำไมไม่ใส่ไว้ใน / opt / JowBlow / bin แทนที่จะเป็น / usr / local / bin มันเป็นเรื่องของการให้บริการที่เชื่อถือได้เมื่อเทียบกับไม่น่าเชื่อถือ? ดูเหมือนจะไม่สมเหตุสมผลสำหรับฉัน
Didier A.

1
ฉันหวังว่าฉันจะรู้ประวัติ 'แน่นอน' นี้ไม่กี่ปีหลัง a) ฉันสงสัยว่าทำไม AIX หลีกเลี่ยง / usr / local, ใช้ / opt / IBM และ / opt / ibm และ bullfreeware ใช้ / opt / freeware - และทำไมฉันควรใช้เส้นทางที่แตกต่างกัน (ไม่ใช่แค่ / opt / * sbin) สำหรับกึ่งความเกี่ยวข้องกับ Linux - เครื่องมือ GNU ที่ดีกว่า - ค่าเริ่มต้น - คำนำหน้าในเครื่องมืออัตโนมัติคือ / usr / local autotools ที่แย่เกินไป (automake, autoconf ฯลฯ ไม่ทำตาม ... . แต่เราทุกคนอยู่รอดและเรียนรู้ว่า distrub อยู่ที่ไหน || ผู้ขายวางโปรแกรมของพวกเขาไว้
Michael Felt

เราจะมีอีกหนึ่งการประชุมเหล่านี้ได้ไหม? เพียงแค่คราวนี้ฟังทุกคน!
MemphiZ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.