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

เมื่อวันที่ 30 พฤศจิกายน 2010 David Collier เขียนว่า:

ฉันสังเกตเห็นว่าใน busybox ลิงก์จะแบ่งออกเป็นสี่ไดเร็กทอรีนี้
มีกฎง่ายๆ ในการพิจารณาว่าไดเร็กทอรีใดที่ลิงก์ควรอยู่ ...
ตัวอย่างเช่น kill อยู่ใน /bin และ killall อยู่ใน /usr/bin... ฉันไม่เห็นตรรกะใดๆ ในการแบ่งส่วนนี้

คุณคงทราบดีว่า Ken Thompson และ Dennis Ritchie สร้าง Unix บน PDP-7 ในปี 1969 ดังนั้น ประมาณปี 1971 พวกเขาอัพเกรดเป็น PDP-11 พร้อมดิสก์ RK05 หนึ่งคู่ (ดิสก์ละ 1,5 เมกะไบต์)

เมื่อระบบปฏิบัติการเติบโตและไม่พอดีกับดิสก์ตัวแรกอีกต่อไป (ซึ่งเป็นที่ตั้งของรูท FS) พวกเขาย้ายส่วนไปยังส่วนที่สองซึ่งเป็นที่ตั้งของโฮมไดเร็กตอรี่ (ดังนั้นจุดเชื่อมต่อจึงถูกเรียกว่า /usr - จากคำว่า ผู้ใช้) พวกเขาทำซ้ำไดเร็กทอรี OS ที่จำเป็นทั้งหมดที่นั่น (/bin, /sbin, /lib, /tmp ...) และวางไฟล์ลงในดิสก์ใหม่เนื่องจากพื้นที่เก่าหมด จากนั้นพวกเขามีดิสก์แผ่นที่สาม ติดตั้งไว้ในไดเร็กทอรี /home และย้ายโฮมไดเร็กทอรีของผู้ใช้ไปที่นั่น เพื่อให้ OS สามารถนำพื้นที่ที่เหลือทั้งหมดบนดิสก์สองแผ่น และสิ่งเหล่านี้คือ สามเมกะไบต์ (ว้าว!).

แน่นอน พวกเขาต้องตั้งกฎว่า "เมื่อระบบปฏิบัติการบูท จะต้องสามารถ mount ดิสก์ตัวที่สองใน /usr ได้ ดังนั้นอย่าใส่โปรแกรมอย่างเช่น mount บนดิสก์ตัวที่สองใน /usr มิฉะนั้นคุณจะมี ปัญหาไก่กับไข่" มันง่ายมาก และนั่นคือใน Unix V6 เมื่อ 35 ปีที่แล้ว

การแยก /bin และ /usr/bin (และไดเร็กทอรีดังกล่าวทั้งหมด) เป็นมรดกของเหตุการณ์เหล่านั้น รายละเอียดการใช้งานจากยุค 70 ที่ข้าราชการคัดลอกมาหลายทศวรรษแล้ว พวกเขาไม่เคยถามคำถาม ทำไมพวกเขาเพิ่งทำมัน แผนกนี้หมดความหมายตั้งแต่ก่อนสร้างลีนุกซ์ด้วยซ้ำ ด้วยเหตุผลหลายประการ:

  1. เมื่อทำการบูท จะมีการใช้ initrd หรือ initramfs ซึ่งจะดูแลปัญหาเช่น "เราต้องการไฟล์นี้ก่อนอันนั้น" ดังนั้นเราจึงมี มีอยู่แล้ว ระบบไฟล์ชั่วคราวที่ใช้ในการโหลดทุกอย่างอื่น
  2. ไลบรารีที่ใช้ร่วมกัน (ซึ่งถูกเพิ่มเข้าไปใน Unix โดยพวกที่ Berkley) ไม่อนุญาตให้คุณเปลี่ยนเนื้อหาของ /lib และ /usr/lib โดยอิสระ สองส่วนนี้ต้องตรงกัน มิฉะนั้นจะไม่ทำงาน สิ่งนี้ไม่ได้เกิดขึ้นในปี 1974 เพราะพวกเขามีอิสระในตอนนั้นเนื่องจากการเชื่อมโยงแบบคงที่
  3. ฮาร์ดไดรฟ์ราคาถูกทำลายกำแพง 100 เมกะไบต์ในราวปี 1990 และในเวลาเดียวกันก็มีซอฟต์แวร์ปรับขนาดพาร์ติชัน (partition magic 3.0 ออกมาในปี 1997)

แน่นอน เนื่องจากมีการแบ่งแยก บางคนจึงคิดกฎขึ้นมาเพื่อเหตุผล เช่นเดียวกับพาร์ติชั่นรูทที่จำเป็นสำหรับคุณสมบัติทั่วไปของระบบปฏิบัติการทุกประเภท และคุณต้องใส่ไฟล์ในเครื่องของคุณใน /usr หรือใส่ / สิ่งที่ AT&T แจกจ่าย และใน /usr สิ่งที่แจกจ่าย IBM AIX หรือ Dec Ultrix หรือ SGI Irix ที่เพิ่มเข้ามา และ /usr/local มีไฟล์เฉพาะสำหรับระบบของคุณ แล้วมีคนตัดสินใจว่า /usr/local ไม่ใช่ที่ที่เหมาะสมในการติดตั้งซอฟต์แวร์ใหม่ ดังนั้นมาเพิ่ม /opt กัน! ฉันจะไม่แปลกใจถ้า /opt/local ปรากฏขึ้นด้วย ...

แน่นอน ตลอดระยะเวลา 30 ปี เนื่องจากการแบ่งแยกนี้ กฎเฉพาะการแจกจ่ายที่น่าสนใจทุกประเภทจึงเกิดขึ้นและหายไป ตัวอย่างเช่น "/tmp ถูกล้างเมื่อรีบูต แต่ /usr/tmp ไม่ใช่" (และใน Ubuntu ไม่มี /usr/tmp ตามหลักการ และใน Gentoo /usr/tmp เป็นลิงก์สัญลักษณ์ไปยัง /var/tmp ซึ่งตอนนี้อยู่ภายใต้กฎนั้น และไม่ถูกล้างเมื่อรีบูต ใช่ สิ่งนี้ ก่อนหน้านี้มันเกิดขึ้นที่รูท FS เป็นแบบอ่านอย่างเดียว และจากนั้นคุณไม่จำเป็นต้องเขียนอะไรไปที่ /usr เช่นกัน แต่คุณต้องเขียนไปที่ /var เป็นพื้น ไม่สามารถเขียนได้ยกเว้นใน /etc ซึ่งบางครั้งพยายามย้ายไปที่ /var ...)

ข้าราชการเช่น Linux Foundation (ซึ่งกลืน Free Standards Group ไปในช่วงการขยายตัวเมื่อหลายปีก่อน) ยินดีที่จะจัดทำเอกสารและทำให้กฎเหล่านี้ซับซ้อนโดยไม่ต้องพยายามค้นหาว่าทำไมพวกเขาถึงอยู่ที่นั่น สิ่งที่พวกเขาไม่ทราบก็คือ Ken และ Dennis เพิ่งย้ายส่วนหนึ่งของ OS ไปยังไดเร็กทอรีหลักเนื่องจากดิสก์ RK05 บน PDP-11 มีขนาดเล็กเกินไป

ฉันค่อนข้างแน่ใจว่า busybox วางไฟล์ในลักษณะเดียวกับที่พัฒนาขึ้นในอดีต ไม่มีเหตุผลที่แท้จริงที่จะทำเช่นนั้นจนถึงตอนนี้ โดยส่วนตัวแล้วฉันเพิ่งสร้างลิงก์ /bin, /sbin และ /lib ไปยังไดเร็กทอรีที่คล้ายกันใน /usr ท้ายที่สุดแล้ว คนที่ทำงานกับซอฟต์แวร์ฝังตัวพยายามที่จะเข้าใจและทำให้ง่ายขึ้น ...

ที่มา: will.com

เพิ่มความคิดเห็น