ข้อดีของโครงสร้างระบบไฟล์ Unix คืออะไร


9

ถ้าฉันติดตั้งแอปพลิเคชั่นใน Linux เช่น Debian / Gnu Linux ไฟล์ของแอปพลิเคชันจะถูกคัดลอกไปยังไดเรกทอรีต่าง ๆ ในระบบไฟล์

สคริปต์บางตัวจะเข้าสู่/ usr / share .. / usr / localไฟล์อื่น ๆ ลงใน/ var .. / log .. etc /และอื่น ๆ

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

แต่คำถามของฉันคือข้อดีของโครงสร้างไดเรคทอรีนั้นคืออะไร? หรือเป็นเพียงมรดกของยุคยูนิกซ์เก่า ๆ (เช่นเมื่อเปรียบเทียบกับการใช้งาน windows เดียวซึ่งไฟล์ทั้งหมดสำหรับแอปพลิเคชันอยู่ใน "โฟลเดอร์" หนึ่งโฟลเดอร์เท่านั้น)

คำตอบ:


9

สิ่งที่ฉันคิดว่าเป็นข้อดีที่สุดคือคิดว่าไฟล์ที่คล้ายกันนั้นอยู่ในแผนผังไดเรกทอรีเดียวกัน แฟ้มการกำหนดค่าอยู่ใน/etcไฟล์และ / หรือเวลาทำงานไฟล์ร่องรอยอยู่ในการเข้าสู่ระบบ/var/log, executables อาศัยอยู่ใน/usr/binข้อมูลเวลาทำงานเช่น PID /var/runไฟล์ในชีวิต คุณต้องการที่จะรู้ว่ามีอะไรในไฟล์การกำหนดค่า NTP? เปลี่ยนไดเรกทอรีไปและทำ/etc ls ntp*คุณต้องการให้บางโปรแกรมดูไฟล์ที่ปฏิบัติการได้เพื่อให้ไวรัสระบบไฟล์บางไฟล์ไม่แพร่เชื้อ ทุกอย่างใน/usr/binและ/usr/local/binต้องดู

ข้อได้เปรียบที่สองที่ฉันคิดได้ก็คือรูปแบบของ Unix ขององค์กรจะส่งเสริมการแยกข้อมูลและปฏิบัติการได้ ไฟล์สั่งการทำงานอยู่ในไดเรกทอรีที่อยู่ห่างจากที่แม่แบบอาศัย ( /usr/shareอาจ) และอยู่ห่างจากที่ข้อมูลอาศัยอยู่ การแยกดังกล่าวอาจเป็นสาเหตุว่าทำไม Unix / Linux / * BSD มีความต้านทานต่อไวรัสระบบไฟล์มากกว่า Windows หรือ Pre-OSX Mac รุ่นเก่า


นั่นคือจุดที่ดี ทำไมการแยกไฟล์ที่เรียกใช้งานได้และ data-, template-, config- เป็นเหตุผลในการป้องกันไวรัสมากขึ้น?
Jan Koester

3
ไวรัสและเวิร์มจำนวนมาก (แต่ไม่ใช่ทั้งหมด) แพร่กระจายไปทั่วโลกเนื่องจากความสามารถในการเปลี่ยนข้อมูลเป็นปฏิบัติการได้: สแต็คโอเวอร์โฟลว์และการฉีด SQL และการฉีดโค้ดทั้งหมดทำงานด้วยวิธีนี้ ไวรัสมาโคร "Word" แพร่กระจายอย่างน้อยส่วนหนึ่งเป็นเพราะมาโคร "Word" รวมอยู่ในไฟล์. doc การแยกข้อมูลจากไฟล์ที่เรียกใช้งานได้นั้นเป็นระดับหนึ่งของการปกป้องวางข้อมูลไว้ในไดเรกทอรีหนึ่งสามารถใช้งานได้ในหนึ่งวินาทีแม่แบบในลำดับที่ 3 การตั้งค่าในลำดับที่ 4 จะช่วยลดอุปสรรคและทำให้ข้อมูลสับสน
Bruce Ediger

2
อาร์กิวเมนต์การแยกข้อมูลและปฏิบัติการได้นั้นไร้สาระสมบูรณ์ การจัดระเบียบระบบไฟล์นั้นเพื่อประโยชน์ของมนุษย์ มันไม่เหมือนว่ามีการแยกทางกายภาพระหว่างบิตที่ป้องกันไม่ให้พวกเขาให้ cooties กันหรืออะไรก็ตาม ความปลอดภัยของ UNIX นั้นดีกว่าในอดีตเนื่องจากรูปแบบการอนุญาตที่แข็งแกร่งกว่าและมีการบังคับใช้อย่างเข้มงวดมากขึ้นโดยทั่วไป
ปุย

filesystems เฉพาะกิจ @fluffy เสนอแยกเล็กน้อยที่แข็งแกร่ง แต่จุดนั้นเป็นเพียงบางส่วนที่สงสัยในขณะที่มันเป็นไปไม่ได้ที่จะแยก/bin, จาก/etc /
jw013

@fluffy - เห็นด้วยไม่มีการแยก "ทางกายภาพ" อยู่หรือเป็นไปได้ แต่มันเป็นชื่อแยก มัลแวร์ต้องค้นหาในสารบบอื่น (แทนที่จะเป็น "." หรือ dirname $ 0 หรืออย่างอื่น) เพื่อค้นหาแม่แบบหรือข้อมูลอื่น ๆ มันไม่ใช่การรักษาความปลอดภัยที่แน่นอนการปิดหน้าต่างกระจกก็คือความปลอดภัยแน่นอน ความปลอดภัยเป็นสิ่งที่ดีทางเศรษฐกิจโดยมีมูลค่าส่วนเพิ่มสำหรับแต่ละหน่วยงานเพิ่มเติม ทุก ๆ เล็กน้อยช่วย
Bruce Ediger

11

ไม่ว่าจะเลือกองค์กรแบบใดมันจะทำให้บางสิ่งง่ายขึ้นและบางสิ่งก็ยากขึ้น

การจัดระเบียบไฟล์ตามประเภทวิธี Unix (เข้าbin, man, lib/python, ... ), ทำให้ง่ายต่อการใช้ไฟล์ หากคุณต้องการเรียกใช้คำสั่งคุณจะรู้ว่าจะหาได้ที่ไหนไม่ว่าแพคเกจใดจะมีให้ หากคุณต้องการค้นหาเอกสารทั้งหมดในที่เดียว หากบางโปรแกรมจัดเตรียมโมดูลการเน้นไวยากรณ์ของ Vim ฟังก์ชันการเติม zsh หรือการรวม Python ไฟล์ที่เกี่ยวข้องจะอยู่ในตำแหน่งที่ vim / zsh / python สามารถค้นหาได้

Unix ยังจัดระเบียบไฟล์ตามรูปแบบการใช้งาน แฟ้มการกำหนดค่าไปใน/etcไฟล์ที่ไม่ได้มีการเปลี่ยนแปลงในการดำเนินงานปกติไปและไฟล์ที่มีการเปลี่ยนแปลงโดยอัตโนมัติไป/usr ข้อมูลของผู้ใช้ไปตาม/var /homeสิ่งนี้มีประโยชน์มากสำหรับการจัดการการกำหนดค่า (จัดการสิ่งที่อยู่ใน/etcรายการแพ็คเกจที่ติดตั้งไว้) นอกจากนี้ยังมีประโยชน์ในการกำหนดกลยุทธ์การสำรองข้อมูล: มีอะไรใน/etcและ/homeมีความสำคัญอย่างยิ่งในขณะที่สิ่งที่อยู่ใน/usrนั้นสามารถดาวน์โหลดได้ง่ายอีกครั้ง

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

ตรงกันข้ามกับ Windows Windows เริ่มต้นโดยไม่มีการจัดการแพ็คเกจและแต่ละแอปพลิเคชันได้สร้างไดเรกทอรีของตัวเองที่อื่น โดยปกติไฟล์ทั้งหมดจะอยู่ในไดเรกทอรีนั้น: โปรแกรมข้อมูลคงที่ข้อมูลผู้ใช้ ... ยกเว้นบางครั้งสำหรับไลบรารีที่โปรแกรมจะวางลงในไดเรกทอรีระบบทั่วไปโดยไม่คำนึงถึงข้อขัดแย้ง (“ DLL hell”) เมื่อเวลาผ่านไป Windows กลายเป็นผู้ใช้หลายคนต้องการแยกไดเรกทอรีผู้ใช้จากไดเรกทอรีระบบ Windows ยังสร้างศูนย์กลางสำหรับไฟล์การกำหนดค่า (Unix's /etc) และข้อมูลระบบบางอย่าง (Unix's)/var) รีจิสทรี นี่เป็นสิ่งประดิษฐ์ทางประวัติศาสตร์ส่วนใหญ่เนื่องจากการขาดการจัดการแพคเกจและประวัติต้นเป็นระบบผู้ใช้คนเดียว วิธีการของ Windows มีข้อ จำกัด มากมาย: มันไม่ทำให้แพคเกจซอฟต์แวร์โต้ตอบได้ง่าย ตัวอย่างเช่นซอฟต์แวร์ที่ติดตั้งส่วนใหญ่ไม่ได้ลงเอยด้วยเส้นทางการค้นหาคำสั่งเริ่มต้นดังนั้นมันจึงทำงานได้ไม่ดีกับรูปแบบการเขียนสคริปต์ โดยทั่วไปแล้วตัวติดตั้งจะมีไอคอนเมนูเป็นกรณีพิเศษโดยดรอปไว้ในไดเรกทอรีระบบแยกต่างหาก (à Unix!)

ข้อ จำกัด ของวิธีการ Unix คือมันไม่อนุญาตการอยู่ร่วมกันของแพ็คเกจหลายรุ่นได้อย่างง่ายดายซึ่งเป็นปัญหาโดยเฉพาะอย่างยิ่งในขณะที่กำลังอัปเกรดแพ็คเกจ วิธีที่จะได้รับสิ่งที่ดีที่สุดของโลกทั้งสองคือการแกะกล่องบรรจุในไดเรกทอรีของตัวเอง ( /optโครงสร้าง) และสร้างฟอเรสต์ของลิงก์สัญลักษณ์จากไดเรกทอรีแพ็คเกจไปยัง/usrโครงสร้าง นี่คือสิ่งที่ซอฟต์แวร์เช่นStowไม่

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


1
น่ากลัว ในความคิดของฉันมันเคยง่ายต่อการจัดการแพคเกจที แอดเวนต์ของรีจิสทรีหน้าต่างเปลี่ยนทั้งหมดนั้นแล้วบางส่วน ไม่เพียง แต่มันมหึมาและเขาวงกต - มันยังมีเจตนาด้วย - ด้วยค่าบางค่าในโค้ดไบต์ขณะที่บางค่าไม่ได้และไม่มีการสัมผัสที่แท้จริงหรือเหตุผลในการสร้างโครงสร้าง ฉันเดาว่าเป็นวิธีที่จะเป็นถ้าคุณต้องการพัฒนาระบบปฏิบัติการที่มีการจัดการและปกป้องความลับทางการค้าและวิธีการที่เป็นกรรมสิทธิ์: สร้างความสับสน
mikeserv

3

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

ข้อดีอีกอย่างคือไดเรกทอรีต่าง ๆ สามารถติดตั้งบนไดรฟ์ข้อมูล / ระบบไฟล์ที่ปรับให้เหมาะสมกับข้อมูลของไดเรกทอรี ตัวอย่างเช่นtmpfsสำหรับ/run; และ/sbinในสื่อ / ROM แบบอ่านอย่างเดียว

นอกจากนี้ไดรฟ์สามารถเป็นท้องถิ่นหรือระยะไกลส่วนบุคคลหรือใช้ร่วมกัน

ขั้นสุดท้ายให้ดูที่Application Directoryสำหรับวิธีการทางเลือก (กล่าวถึงโดย @fluffy) ที่ใช้ใน UNIX (OS X .app), Linux ( ROX Desktop ) และ Windows ( PortableApps.com )


1

ไม่มีข้อดีใด ๆ สำหรับเค้าโครงนี้นอกเหนือจากการคาดเดาได้ง่ายว่าไฟล์ที่ใช้ร่วมกันและไฟล์กำหนดค่าสำหรับแอปพลิเคชันเป็นอย่างไร UNIX มีเลย์เอาต์ที่มีมายาวนานและการแบ่งมันจะค่อนข้างยาก อย่างไรก็ตามการกระจาย UNIX บางอย่างได้เปลี่ยนรูปแบบของพวกเขา - พวกเขาให้เฉพาะสถานที่เก่าเพื่อวัตถุประสงค์ดั้งเดิมและแอพอื่น ๆ รวมอยู่ในไดเรกทอรี / แพ็คเกจเล็ก ๆ ของตัวเอง Mac OS X เป็นตัวอย่างที่เด่นชัดที่สุดและมีลีนุกซ์ลวงไม่กี่อย่างที่ทำสิ่งเดียวกัน (และ Android ทำสิ่งที่คล้ายกันใช้เวลาเพิ่มขึ้นเล็กน้อยและติดตั้งและเปิดใช้งานทุกแอปภายใต้ ID ผู้ใช้ของตัวเองเช่นกัน )

สิ่งสำคัญที่อนุสัญญาของระบบไฟล์มีให้คือ - อนุสัญญาเพื่อให้ผู้คนรู้จักที่จะมองหาไฟล์ (ไม่ว่าจะด้วยตนเองหรือในรหัส) ไม่มีเหตุผลทางเทคนิคที่แท้จริงสำหรับการเป็นอีกทางหนึ่ง

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