ความแตกต่างระหว่าง / bin, / sbin, / usr / bin, / usr / sbin, / usr / local / bin, / usr / local / sbin


282

ฉันมีหกไดเรกทอรีพร้อมไฟล์คำสั่ง เหล่านี้เป็น/bin, /sbin, /usr/bin, /usr/sbin, และ/usr/local/bin/usr/local/sbin

ความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร? หากฉันเขียนสคริปต์ของตัวเองฉันจะเพิ่มได้ที่ไหน


ที่เกี่ยวข้อง:


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

@ Keelan คำถามของคุณอยู่ใกล้กับคำถามที่ฉันโพสต์เมื่อปีที่แล้ว +: askubuntu.com/questions/830074/ …
WinEunuuchs2Unix

คำตอบ:


348

โปรดอ้างอิงFilesier Hierarchy Standard (FHS) สำหรับ Linuxสำหรับสิ่งนี้

  • /bin: สำหรับไบนารีที่สามารถใช้งานได้ก่อนที่/usrจะติดตั้งพาร์ติชัน สิ่งนี้ใช้สำหรับไบนารีเล็กน้อยที่ใช้ในการบูตระยะแรก ๆ หรือที่คุณต้องมีในการบูทโหมดผู้ใช้คนเดียว คิดว่าไบนารีเช่นcat, lsฯลฯ

  • /sbin : เหมือน แต่สำหรับไบนารีกับsuperuser (ราก) สิทธิพิเศษที่จำเป็น

  • /usr/bin: เช่นเดียวกับครั้งแรก แต่สำหรับไบนารีทั้งระบบทั่วไป

  • /usr/sbin : เหมือนข้างต้น แต่สำหรับไบนารีที่ต้องการสิทธิ์ superuser (root)


ถ้าฉันเขียนสคริปต์ของตัวเองฉันควรเพิ่มสิ่งเหล่านี้ที่ไหน?

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

สำหรับสคริปต์ที่ผู้ใช้กำหนดให้ใช้~/bin(โฟลเดอร์ bin ส่วนตัวในโฮมไดเร็กตอรี่ของคุณ)

FHS พูดว่า/usr/local:

ลำดับชั้นที่สามสำหรับข้อมูลท้องถิ่นเฉพาะกับโฮสต์นี้ bin/มักจะมีไดเรกทอรีย่อยเพิ่มเติมเช่น lib/, share/,


so / bin เป็นตำแหน่งที่ติดตั้งไฟล์แกนทั้งหมด เช่น ls, แมว, pwd, ฯลฯ ? ดังนั้น / usr / bin เป็นแอปที่ผู้ใช้ติดตั้งอยู่ที่ไหน ตัวอย่างของสิ่งที่ควรมีใน / usr / bin คืออะไร
Patoshi パトシ

1
การวางสคริปต์/binทำให้เกิดปัญหาหรือไม่? ฉันได้ย้ายสคริปต์ของฉันตามคำตอบของคุณ แต่ฉันก็ยังสงสัย
Rumesh

5
@RumeshSudhaharan คุณไม่ควรทำเช่นนั้นเพราะจัดการโดยการจัดการแพ็คเกจ หากแพ็กเกจอื่นต้องการใช้พา ธ นั้นแพ็กเกจนั้นจะเขียนทับไฟล์ของคุณ ไฟล์ในแพ็คเกจไม่สามารถซ้อนทับกัน (อย่างน้อยสำหรับที่เก็บข้อมูลอย่างเป็นทางการ) ดังนั้นคุณจะปลอดภัยมากขึ้นเมื่อติดตั้งในพา ธ โลคัล นอกจากนี้มันเป็นเพียงเพื่อความสะดวกและความปลอดภัยของคุณเอง ในเส้นทางท้องถิ่นคุณไม่สามารถทำให้ระบบสับสนและคุณไม่สามารถแทนที่ไบนารีของระบบโดยไม่ตั้งใจได้
gertvdijk

8
ฉันชอบคำอธิบายในหน้าข้อผิดพลาด:Severity:Serious Certainty:Certain
cutrightjm

1
ฉันใส่ไฟล์บางไฟล์ไว้ใน / usr / local / bin และฉันสามารถเรียกใช้งานได้ แต่ฉันไม่สามารถแก้ไขได้ls -laแสดงว่าไม่มีอะไร
M. Reza Nasirloo

6

ฉันมีคำถามที่คล้ายกันด้วยตัวเองเมื่อหนึ่งปีที่แล้ว +: ไดเรกทอรีที่ดีที่สุดในการวางสคริปต์ทุบตีของฉัน

ไดเรกทอรีระบบสำหรับไบนารี

man hier(ลำดับชั้น) แสดงรายการไดเรกทอรีทั้งหมด เพื่อให้ได้สิ่งที่ใช้สำหรับไบนารีเท่านั้น:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

จะวางสคริปต์ของคุณเองที่ไหน?

เพื่อให้ผู้ใช้ทุกคนเข้าถึงสคริปต์ของคุณคุณสามารถใส่พวกเขา/usr/local/binได้ โปรดทราบว่าคุณต้องsudoสามารถเข้าถึงเพื่อเพิ่ม / เปลี่ยนแปลงไฟล์ได้ที่นี่ ดู: มีสถานที่มาตรฐานสำหรับการวางสคริปต์ Linux ที่กำหนดเองหรือไม่?

สำหรับสคริปต์ ID /home/YOUR_NAME/binผู้ใช้ของคุณเองใส่ไว้ใน ~/.profileเก็บไว้ในใจคุณต้องสร้างไดเรกทอรีนี้เป็นครั้งแรกและสังข์ขั้วที่จะได้รับเส้นทางโดยอัตโนมัติติดตั้งโดย ดู: วิธีเพิ่ม / home / ชื่อผู้ใช้ / bin ไปยัง $ PATH ได้อย่างไร


สิ่งที่ฉันรู้ฉันไม่รู้

ฉันใคร่ครวญการบางส่วนของสคริปต์ทุบตีที่ซับซ้อนมากขึ้นของฉันในการขอให้อูบุนตูgithubและการตั้งค่าให้กับการติดตั้งสคริปต์บน นี่คือตัวอย่างบางส่วน:

ฉันคิดว่าสคริปต์ควรจะติดตั้ง/usr/binซึ่งอยู่ใน $ PATH แต่ฉันยังไม่แน่ใจในสถานที่ที่เหมาะสม


1
ฉันซาบซึ้งในความพยายามของคุณ แต่ส่วน "สิ่งที่ฉันรู้ว่าฉันไม่รู้" คุณตอบคำตอบของ gertvdijk ซ้ำแล้วซ้ำอีก
danzel

1
@danzel ฉันคิดว่าส่วนสำคัญคือman hierส่วนที่คำตอบของ gertvdijk ไม่ได้อยู่ เช่นคุณสามารถรับโครงสร้างลำดับชั้นของไดเรกทอรีในบรรทัดคำสั่งโดยไม่ต้องหันไปอ่านบนเว็บ (เช่นที่นี่)
WinEunuuchs2Unix

1
นั่นเป็นข้อมูลที่น่าสนใจฉันเห็นด้วย แต่ gertvdijk ได้กล่าวถึงมาตรฐานลำดับขั้นของระบบแฟ้ม (ซึ่งman hierเป็นข้อความที่ตัดตอนมาจาก IMO ไม่เพียงพอ) อย่างไรก็ตามนี่อาจเป็นความเห็นส่วนตัวของฉัน
danzel

@danzel ฉันเห็นด้วยกับเว็บไซต์ที่มีการวิเคราะห์เชิงลึกมากกว่าสิ่งที่อยู่ในฮาร์ดไดรฟ์ของเรา ฉันแค่พยายามชี้ให้เห็นว่าข้อมูลอยู่ในฮาร์ดไดรฟ์ของเราโดยไม่ต้องใช้อินเทอร์เน็ต นอกจากนี้การเชื่อมโยงวิกิพีเดียที่ยกมาเป็นหายไป /usr/X11R6/binและซึ่งรวมอยู่ใน/usr/local/bin man heir
WinEunuuchs2Unix

@ WinEunuuchs2Unix เป็นพาราล่าสุด ทำไมไม่/usr/local/binเพราะคุณไม่ใช่ผู้จัดการแพ็คเกจ
Pacerier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.