/ usr / local / bin คืออะไร


85

ก่อนหน้าวันนี้ฉันใช้เทอร์มินัลเพื่อ จำกัด ขอบเขตการย้ายเข้าและออกจากไดเรกทอรีและเปลี่ยนวันที่ของไฟล์โดยใช้touchคำสั่ง ฉันได้ตระหนักถึงขอบเขตทั้งหมดของเทอร์มินัลหลังจากติดตั้งสคริปต์ที่สนุกสนานบน Mac และต้องchmod 755ใช้ไฟล์เพื่อให้สามารถเรียกใช้งานได้หลังจากนั้น

ฉันอยากรู้ว่า/usr/local/binมันคืออะไร /usr/ฉันถือว่าเป็นผู้ใช้คอมพิวเตอร์ ฉันไม่แน่ใจว่าทำไมถึง/local/อยู่ที่นั่น เห็นได้ชัดว่ามันย่อมาจากคอมพิวเตอร์ในระบบ แต่เนื่องจากมันอยู่บนคอมพิวเตอร์ (หรือเซิร์ฟเวอร์) มันจำเป็นจริงๆหรือ? จะไม่/usr/binเป็นไร

แล้วอะไร/binล่ะ เหตุใดพื้นที่นี้มักใช้สำหรับการติดตั้งสคริปต์ลงในเทอร์มินัล

คำตอบ:


77

/usr/local/bin ใช้สำหรับโปรแกรมที่ผู้ใช้ปกติสามารถใช้งานได้

  • /usr/localลำดับชั้นสำหรับการใช้งานโดยผู้ดูแลระบบเมื่อติดตั้งซอฟแวร์ในประเทศ
  • จะต้องปลอดภัยจากการเขียนทับเมื่อมีการอัพเดทซอฟต์แวร์ระบบ
  • มันอาจจะใช้สำหรับโปรแกรมและข้อมูลที่ใช้ร่วมกันได้ในหมู่กลุ่มของครอบครัว /usrแต่ไม่พบใน
  • ในประเทศซอฟต์แวร์ที่ติดตั้งจะต้องวางอยู่ภายใน/usr/localมากกว่า / usr /usrจนกว่าจะมีการติดตั้งจะเปลี่ยนหรืออัพเกรดซอฟต์แวร์ใน

แหล่งที่มานี้ช่วยอธิบายมาตรฐานลำดับชั้นของระบบแฟ้มในระดับที่ลึกกว่า

คุณอาจพบบทความนี้เกี่ยวกับการใช้งานและการใช้ในทางที่ผิดที่/usr/local/binน่าสนใจเช่นกัน


"" "เว้นแต่จะติดตั้งเพื่อแทนที่หรืออัปเกรดซอฟต์แวร์ใน / usr" "" หมายถึงอะไร
Pacerier

63

/ usr /, ฉันถือว่าเป็นผู้ใช้คอมพิวเตอร์

ปิด.

Unix เริ่มต้นจากระบบปฏิบัติการหลายผู้ใช้ดังนั้นจึงไม่ใช่ "ผู้ใช้" เป็น " ผู้ใช้ " เป็นพหูพจน์

ก่อนที่ AT&T Unix System V รีลีส 4 (SVR4) ออกมาในปี 1988 ด้วยเครื่องมือการจัดการผู้ใช้ที่เริ่มต้นในการสร้างโฮมไดเรกทอรีของผู้ใช้ใน/homeสถานที่ทั่วไปคือ. /usr¹ $HOMEไดเรกทอรีของคุณอาจ/usr/jfwอยู่ในกล่องSystem III

/usrยังมีแล้วเป็นตอนนี้/usr/bin, /usr/libประสบการณ์อื่น ๆ แสดงให้เห็นว่าแยกไดเรกทอรีบ้านเป็นเรื่องระบบการจัดการที่ดีเพื่อให้กับ/homeการเปลี่ยนแปลงนโยบายใน SVR4 /usrก็ทิ้งทุกอย่างตอนนี้เราคิดว่าเป็นที่อยู่ใน

/usrยังคงมีเหตุผลที่ดีที่จะใช้ชื่อนี้: สิ่งที่ถูกทิ้งไว้ข้างหลังคือไฟล์ที่ไม่จำเป็นต้องใช้งานจนกว่าระบบจะถูกบูตขึ้นมาไกลพอที่จะรองรับการใช้งานแบบอินเตอร์แอคทีฟตามปกติ กล่าวคือสิ่งที่เหลือไว้คือส่วนที่ผู้ใช้โฟกัสของระบบปฏิบัติการ นั่นหมายความว่า/usrอาจจะเกี่ยวกับปริมาณทางกายภาพที่แตกต่างกันซึ่งเป็นสิ่งที่ดีกลับไปในสมัยที่92 MB ฮาร์ดดิสก์ไดรฟ์ขนาดของเครื่องซักผ้า

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

รสชาติ Unix หลายตอนนี้ไม่สนใจหลักการออกแบบนี้เก่าตั้งแต่ระบบฝังตัวเล็ก ๆ ยังมีที่ว่างพอสำหรับทั้งไฟล์ปริมาณรากแบบดั้งเดิมและทั้งหมดของ/usrบนvolume.³เดียว Red Hat Enterprise Linux, Solaris และ Cygwin symlink /binไป/usr/binและ/libไป/usr/libเพื่อให้ไม่มี ความแตกต่างระหว่างไดเรกทอรีเหล่านี้อีกต่อไป

... / local / ... หมายถึงคอมพิวเตอร์ในพื้นที่ ...

ใช่. มันหมายถึงความจริงที่ว่าไฟล์ที่อยู่ภายใต้/usr/localควรจะเป็นเฉพาะกับระบบเดียวที่ ไฟล์ที่อยู่ในลักษณะทั่วไปควรอยู่ที่อื่น

สิ่งนี้ยังมีรากฐานในทางที่ระบบยูนิกซ์ใช้กันทั่วไปเมื่อหลายสิบปีก่อนเมื่อทั้งหมดนี้ได้มาตรฐาน อีกครั้งฮาร์ดดิสก์ของเวลามีขนาดใหญ่แพงมากและเก็บไว้เล็กน้อยตามมาตรฐานของวันนี้ เพื่อประหยัดเงินและพื้นที่บนดิสก์ห้องปฏิบัติการคอมพิวเตอร์ที่เต็มไปด้วยกล่อง Unix มักจะแบ่งปัน/usrNFS หรือโปรโตคอลการแชร์ไฟล์เครือข่ายอื่น ๆ ส่วนใหญ่ดังนั้นแต่ละกล่องไม่จำเป็นต้องมีสำเนาซ้ำซ้อนของตัวเอง⁴ไฟล์เฉพาะของไฟล์เดียว กล่องจะไปอยู่ภายใต้ซึ่งจะเป็นปริมาณที่แยกต่างหากจาก/usr/local/usr

มรดกทางประวัติศาสตร์นี้เป็นเหตุผลว่าทำไมจึงยังคงเป็นค่าเริ่มต้นสำหรับซอฟต์แวร์ Unix บุคคลที่สามส่วนใหญ่ที่จะติดตั้ง/usr/localเมื่อติดตั้งด้วยมือ ซอฟต์แวร์ส่วนใหญ่ดังกล่าวจะช่วยให้คุณติดตั้งแพคเกจที่อื่น แต่ด้วยการไม่เลือกตัวเลือกคุณจะได้รับค่าเริ่มต้นที่ปลอดภัยซึ่งไม่รบกวนการติดตั้งทั่วไปอื่น ๆ ด้วยจุดประสงค์ที่เฉพาะเจาะจงมากขึ้น

มีเหตุผลที่ดีในการติดตั้งซอฟต์แวร์ที่อื่นแทน แอปเปิ้ลทีม MacOS ไม่นี้เมื่อพวกเขาสร้างการพูดbashจากรหัสที่มา GNU ทุบตี พวกเขาใช้/เป็นคำนำหน้าการติดตั้งเอาชนะเริ่มต้นเพื่อให้ทุบตีจบลงใน/usr/local/bin

อีกตัวอย่างหนึ่งคือวิธีที่ระบบ Linux เก่าแยกซอฟต์แวร์ GUI ออก/usr/X11R6เพื่อแยกมันออกจากบรรทัดคำสั่งดั้งเดิมและcursesซอฟต์แวร์ที่ใช้ สิ่งนี้ทำได้โดยการแทนที่/usr/localคำนำหน้าเริ่มต้นด้วย. /usr/X11R6

และ / bin คืออะไร

มันสั้นสำหรับ "ไบนารี" ซึ่งในบริบทนี้หมายถึง "ไฟล์ที่ไม่ใช่ข้อความธรรมดา" ไฟล์ดังกล่าวส่วนใหญ่เป็นไฟล์เรียกทำงานบนกล่อง Unix ดังนั้นคำทั้งสองนี้จึงมีความหมายเหมือนกันในบางวงการ ("โปรดสร้างเลขฐานสองสำหรับฉันสำหรับ RHEL 7, Fred")

ไฟล์ข้อความบนกล่อง Unix อาศัยอยู่ที่อื่น: /etc, /usr/include, /usr/shareฯลฯ

กาลครั้งหนึ่งแม้แต่เชลล์สคริปต์ - ซึ่งเป็นไฟล์ข้อความล้วน - ถูกเก็บไว้นอกbinไดเรกทอรี แต่บรรทัดนี้ก็เบลอเช่นกัน ทุกวันนี้binไดเรกทอรีต่างๆมักจะมีไฟล์ที่สามารถใช้งานได้ทุกประเภทไม่ว่าจะเป็น "ไบนารี" หรือไม่ก็ตาม⁶


เชิงอรรถและการแยกย่อย :

  1. ธรรมชาติดั้งเดิมของเครื่องมือการจัดการผู้ใช้ก่อนที่จะ SVR4 หมายความว่าHOME=/usr/$NAMEรูปแบบการบันทึกเป็นแบบแผนเท่านั้นแทนที่จะบังคับใช้โดยเครื่องมือซอฟต์แวร์เป็นค่าเริ่มต้น

    คุณสามารถดูสิ่งนี้ได้ในหน้า 4-8 ของ " คำแนะนำผู้ดูแลระบบ AT&T Unix V 3.2 : ที่นี่คุณจะเห็น AT&T แนะนำ/usr/$NAMEแบบแผนเก่าใน Unix เวอร์ชันหลักสุดท้ายก่อนที่ SVR4 จะออกมา

    มันค่อนข้างธรรมดาในระบบ Unix ที่เก่ากว่าสำหรับผู้ดูแลระบบเพื่อเลือกรูปแบบที่แตกต่างกัน ผู้คนเป็นคนนั่นหมายถึงแผนการที่แตกต่างกันมากมายได้ถูกประดิษฐ์ขึ้น

    โครงการหนึ่งที่ฉันมาข้ามก่อนที่จะกลายเป็นมาตรฐานเป็น/home/$NAME/u/$NAME

    ระบบผมใช้อีกในช่วงปี 1990 มีผู้ใช้จำนวนมากที่พวกเขาไม่สามารถพอดีทั้งหมดไดเรกทอรีบ้านบนปริมาณทางกายภาพเดียวดังนั้นพวกเขาใช้ในโครงการเช่น/u1/$NAME, /u2/$NAMEและอื่น ๆ เท่าที่ผมจำ ดิสก์โฮมไดเร็กตอรี่ของคุณจบลงที่ใดเป็นเรื่องที่มีเนื้อที่ว่างในตอนที่สร้างบัญชีของคุณ

  2. คุณสามารถบู๊ตกล่อง macOS ในโหมดผู้ใช้คนเดียวโดยกดค้างไว้Cmd-Sขณะบูทเครื่อง ปล่อยให้ไปเมื่อหน้าจอเปลี่ยนเป็นสีดำและคุณเห็นข้อความสีเทาอ่อนปรากฏขึ้น มันเหมือนกับการทำงานภายใต้ Terminal แต่มันใช้งานได้ทั้งหน้าจอเพราะ GUI ยังไม่เริ่ม

    rootระวังคุณกำลังทำงานเป็น

    พิมพ์ "exit" ที่พร้อมต์รูทของผู้ใช้คนเดียวเพื่อออกจากโหมดผู้ใช้คนเดียวและทำการบู๊ตต่อไปในโหมดผู้ใช้หลายคน

  3. ระบบปฏิบัติการ Unixy ที่ยังคงปรากฏขึ้นเพื่อป้องกันไม่ให้ไฟล์โหมดผู้ใช้คนเดียวที่สำคัญ/usrอาจไม่จริงวันนี้ ฉันเคยแสดงผล FreeBSD 9 กล่องไม่สามารถบูตได้โดยการย้าย/usrไปที่ปริมาณ ZFS ฉันลืมไปว่าฟีเจอร์ ZFS-on-root ไม่ได้ลงจอดจนกว่า FreeBSD 10 จะสร้างCatch 22 : ระบบปฏิบัติการจำเป็นต้องใช้ไฟล์/usrเพื่อติดตั้ง/usr!

    นั่นเป็นสิ่งที่แย่มาก แต่ถ้า FreeBSD 9 ยังคงเก็บข้อมูลการบูตผู้ใช้คนเดียวเอา/usrไว้ เนื่องจากมันจะไม่สามารถบู๊ตได้แม้แต่โหมดผู้ใช้คนเดียวโดย/usrไม่สามารถถอดออกได้ชัดเจนว่าประเพณีนั้นถูกละเมิดอย่างใด ฉันต้องบูตจากซีดีกู้คืนเพื่อให้ระบบสำรองอีกครั้ง

  4. นี่คือสิ่งที่เราได้รับ/usr/share: มันแยกไฟล์ที่สามารถแบ่งปันได้ระหว่างกล่อง Unix ที่มีประเภทโปรเซสเซอร์ที่แตกต่างกัน โดยทั่วไปแล้วไฟล์ข้อความ: หน้าคนพจนานุกรม ฯลฯ

  5. "X11R6" อ้างถึงเวอร์ชันของX Window Systemหนุน Linux GUIs ในเวลาที่การประชุมนี้แพร่หลาย ระบบ Linux ทั่วไปหยุดแยก GUI ซอฟต์แวร์เกี่ยวกับเวลา X11R6 ถูกแทนที่ด้วยX.Org

  6. ระบบยูนิกซ์เดิมเก็บไว้เชลล์สคริปต์หลักของพวกเขาในการ/etcในการสั่งซื้อเพื่อหลีกเลี่ยงการ commingling /binพวกเขาด้วยไบนารีจริงใน


3
ชอบรูปของเครื่องซักผ้า!
asgs

@Warren ระบบ OS เด่นก่อน System III คืออะไร
Pacerier

@Pacerier: UNIX เวอร์ชัน 1 ถึง 7, UNIX / 32V, 1BSD ถึง 4BSD ไม่รวมการเผยแพร่แบบจุดของ 4BSD (4.1BSD เป็นแบบจำลองพร้อมกับ AT&T Unix System III) และ PWB Unix แหล่ง ทำไมคุณถามและสิ่งที่เกี่ยวข้องกับคำถามนี้
Warren Young

@Warren ดีพวกเขาอาจได้รับผลกระทบ defacto "ระบบการตั้งชื่อไดเรกทอรี" อย่างใด
Pacerier

@Pacerier: ฉันจะยืนตามคำเรียกร้องของฉัน: ไม่มี "มาตรฐาน" ก่อนที่ System V จะมีเพียงอนุสัญญาและแนวทางปฏิบัติในท้องถิ่นเท่านั้น
Warren Young

9

ฉันอยากจะแนะนำอ้างอิงถึงWikipediaสำหรับคำถามที่เกี่ยวข้องกับโครงสร้างโดยทั่วไปจะครอบคลุมพื้นฐาน

อย่างไรก็ตามเพื่อตอบคำถามของคุณโดยตรง:

  • / usr คือไลบรารีระบบและไฟล์ปฏิบัติการที่ไม่สำคัญ
  • / usr / local เป็นอีกครั้งอย่างหลวม ๆ สำหรับห้องสมุดที่ไม่ใช่ระบบและปฏิบัติการ

นี่คือเหตุผลที่คุณมักจะพบโครงสร้างที่คล้ายกันระหว่างสอง; / usr / {ท้องถิ่น /} {ถัง sbin, lib} เป็นสิ่งใหม่สำหรับเชลล์บิตนั้นด้วย {} คือการขยายเชลล์ ลองดำเนินการ

ls -ld /usr/{,local/}{bin,sbin,lib}

จากเชลล์ในเครื่องของคุณเพื่อดูว่ามันทำงานอย่างไร


9

/usr/local/bin แสดงให้เห็นถึงราก UNIX- รูปแบบของ Mac OS ล่าสุด (BSD ของมันอยู่ที่นั่น)

  • "usr" ย่อมาจาก UNIX System Resources นี่คือตำแหน่งที่เก็บโปรแกรมระบบและไลบรารี
  • "ท้องถิ่น" หมายถึงทรัพยากรที่ไม่ได้จัดส่งพร้อมกับการแจกแจงมาตรฐานและโดยทั่วไปแล้วจะรวบรวมและดูแลรักษาในแต่ละไซต์
  • "bin" หมายถึง executables ที่คอมไพล์ด้วยไบนารี

สิ่งนี้มีการเปลี่ยนแปลงตั้งแต่การเริ่มต้นใช้งาน UNIX ไปจนถึง Linux และ BSD แต่การประชุมยังคงอยู่ ตอนนี้/usr/binจะใช้สำหรับ "โปรแกรมหลัก" หรือโปรแกรมหลักและไลบรารีซึ่ง/usr/local/binจะใช้สำหรับโปรแกรมและไลบรารีที่ไม่สำคัญ


12
ฉันใช้ Unix มาไม่นานหลังจากกำแพงเบอร์ลินล่มสลายและฉันไม่เคยได้ยินชื่อ "Unix System Resources" สำหรับ "usr" จนถึงทุกวันนี้ มันเป็นตัวย่อ "usr" มีชื่อเพราะเป็นที่ตั้งของโฮมไดเรกทอรีผู้ใช้ นั่นคือถ้าคุณมีการเข้าสู่ระบบในกล่อง System III เก่าไดเรกทอรีการทำงานเริ่มต้นของคุณจะเป็น/usr/nzwulfinค่าเริ่มต้น อีกโครงการทั่วไป ก่อนที่/homeแผนSVR4 จะเป็น/uไป /u/d5/tangentระบบหนึ่งที่ผมใช้ในช่วงต้นมีผู้ใช้จำนวนมากดังนั้นพวกเขาจึงจำเป็นดิสก์ทางกายภาพหลายสำหรับการจัดเก็บไฟล์ของผู้ใช้เพื่อให้พวกเขามีสิ่งที่ต้องการ
Warren Young

3
@Warren ฉันไม่เคยได้ยินมาก่อนและเดินไปรอบ ๆ Google ในขณะที่; ดูเหมือนว่ามีตัวย่อหลายตัวอยู่บ้าง
Michael Mrozek

4

/usr/local/bin เป็นตำแหน่งเริ่มต้นที่เป็นที่นิยมที่สุดสำหรับไฟล์ที่ปฏิบัติการได้โดยเฉพาะอย่างยิ่งโอเพนซอร์ส

อย่างไรก็ตามนี่เป็นตัวเลือกที่ไม่ดีนักในระบบ Unix ที่/usrได้รับการสร้างมาตรฐานในช่วงต้นยุค 90 เพื่อให้มีลำดับชั้นของไฟล์ที่เป็นของระบบปฏิบัติการและสามารถใช้ร่วมกับหลายระบบโดยใช้ระบบปฏิบัติการนั้น

เนื่องจากไฟล์เหล่านี้เป็นแบบสแตติก/usrระบบไฟล์จึงสามารถเมาต์แบบอ่านอย่างเดียว /usr/localกำลังเอาชนะมาตรฐานนี้เนื่องจากเป็นแบบโลคัลที่ไม่ได้แบ่งใช้ดังนั้นจึงต้องมีการอ่าน - เขียนเพื่ออนุญาตการคอมไพล์ภายในเครื่องและไม่ได้เป็นส่วนหนึ่งของระบบปฏิบัติการ สิ่งที่แย่เกินไปไม่/opt/localได้ถูกเลือกแทน ...


1

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

แยกให้แน่ใจว่าคุณให้/homeพาร์ทิชันของตัวเองด้วยเหตุผลนี้เช่นกัน


0

คำตอบนี้อาจเป็นประโยชน์เช่นกัน

/ usr / local

แนวคิดดั้งเดิมที่อยู่เบื้องหลัง/usr/localคือการมีไดเร็กทอรี ('local') '/ usr' แยกต่างหากในทุก ๆ เครื่อง/usrซึ่งอาจติดตั้งแบบอ่านอย่างเดียวจากที่อื่น /usrเป็นชุดโครงสร้างของ

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

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

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