เมื่อวันที่ 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 ที่ข้าราชการคัดลอกมาหลายทศวรรษแล้ว พวกเขาไม่เคยถามคำถาม ทำไมพวกเขาเพิ่งทำไป การแบ่งแยกนี้ไม่สมเหตุสมผลอีกต่อไปแล้ว แม้กระทั่งก่อนหน้านี้ Linux ถูกสร้างขึ้นด้วยเหตุผลหลายประการ:
- เมื่อทำการบูท จะมีการใช้ initrd หรือ initramfs ซึ่งจะดูแลปัญหาเช่น "เราต้องการไฟล์นี้ก่อนอันนั้น" ดังนั้นเราจึงมี มีอยู่แล้ว ระบบไฟล์ชั่วคราวที่ใช้ในการโหลดทุกอย่างอื่น
- ไลบรารีที่ใช้ร่วมกัน (ซึ่งถูกเพิ่มเข้าไปใน Unix โดยพวกที่ Berkley) ไม่อนุญาตให้คุณเปลี่ยนเนื้อหาของ /lib และ /usr/lib โดยอิสระ สองส่วนนี้ต้องตรงกัน มิฉะนั้นจะไม่ทำงาน สิ่งนี้ไม่ได้เกิดขึ้นในปี 1974 เพราะพวกเขามีอิสระในตอนนั้นเนื่องจากการเชื่อมโยงแบบคงที่
- ฮาร์ดไดรฟ์ราคาถูกทำลายกำแพง 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 ซึ่งอยู่ภายใต้กฎเดียวกันและจะไม่ถูกล้างเมื่อรีบูตเครื่อง ใช่แล้ว นี่เป็นกรณีที่เกิดขึ้นก่อน tmpfs นอกจากนี้ยังอาจเกิดขึ้นได้ว่าระบบไฟล์รูทเป็นแบบอ่านอย่างเดียว ในกรณีนี้คุณไม่ควรเขียนอะไรลงใน /usr แต่ควรเขียนลงใน /var หรือ / แทน เป็นพื้น ไม่สามารถเขียนได้ยกเว้นใน /etc ซึ่งบางครั้งพยายามย้ายไปที่ /var ...)
ข้าราชการเช่น Linux มูลนิธิ (ซึ่งได้รวมกลุ่ม Free Standards Group เข้าไปด้วยในระหว่างการขยายตัวเมื่อหลายปีก่อน) ยินดีที่จะบันทึกและทำให้กฎเหล่านี้ซับซ้อนขึ้นโดยไม่พยายามทำความเข้าใจที่มาของมันเลย พวกเขาไม่รู้ด้วยซ้ำว่าเคนและเดนนิสเพียงแค่ย้ายส่วนหนึ่งของระบบปฏิบัติการไปยังไดเร็กทอรีบ้านของพวกเขาเพราะดิสก์ RK05 บน PDP-11 มีขนาดเล็กเกินไป
ฉันค่อนข้างแน่ใจว่า busybox วางไฟล์ในลักษณะเดียวกับที่พัฒนาขึ้นในอดีต ไม่มีเหตุผลที่แท้จริงที่จะทำเช่นนั้นจนถึงตอนนี้ โดยส่วนตัวแล้วฉันเพิ่งสร้างลิงก์ /bin, /sbin และ /lib ไปยังไดเร็กทอรีที่คล้ายกันใน /usr ท้ายที่สุดแล้ว คนที่ทำงานกับซอฟต์แวร์ฝังตัวพยายามที่จะเข้าใจและทำให้ง่ายขึ้น ...
ที่มา: will.com
