Які переваги структури файлової системи Unix


9

Якщо я встановлю програму в Linux, наприклад, Debian / Gnu Linux, файли програм копіюються в безліч різних каталогів файлової системи.

Деякі сценарії переходять у / usr / share .. / usr / local, деякі інші файли у / var .. / log .. тощо / тощо.

Для мене це нормально, тому що я дізнався щось про файлову систему і більшість каталогів є для зберігання файлів з певною метою. Це дуже добре входить у філософію Unix "зроби одну справу і зроби це добре"

Але моє запитання - які переваги такої структури каталогів? Або це просто спадщина старих днів Unix. (наприклад, порівняно з використанням одного вікна, де всі файли для програми знаходяться в одній конкретній "папці")

Відповіді:


9

Перевага, яке мені здається найпростішим, полягає в тому, що подібні файли живуть в одному дереві каталогів. Файли конфігурації живуть /etc, файли журналів та / або файли трасування часу /var/log, які виконуються, живуть виконувані файли /usr/bin, інформація про час роботи, як PID-файли /var/run. Ви хочете знати, що знаходиться у файлі конфігурації NTP? Змініть каталог /etcі зробіть ls ntp*. Ви хочете мати деякі програми для перегляду програм, щоб якісь віруси файлової системи не заразили їх? Все, що потрібно, /usr/binі /usr/local/binпотребує перегляду.

Друга перевага, яку я можу придумати, полягає в тому, що стиль організації Unix сприяє розділенню даних та виконуваних файлів. Виконавчі файли живуть у каталозі, який знаходиться далеко від місця, де живуть шаблони ( /usr/shareймовірно), і далеко від того, де живуть дані. Цей розрив може бути причиною того, що Unix / Linux / * BSD має більший опір файловим системним вірусам, ніж це має Windows, або старий Mac OS-OSX.


Це хороші моменти. Чому поділ виконуваних файлів і файлів даних, шаблонів, конфігурацій є причиною більшого захисту від вірусів?
Ян Костер

3
Багато (але не всі) вірусів і черв'яків у світі поширюються завдяки здатності змінювати дані на виконувані файли: переповнення стека та ін'єкція SQL та інжекція коду працюють усіма цим способом. Макровіруси "Word" розповсюджуються принаймні частково, оскільки макроси "Word" включені до файлів .doc. Відокремлення даних від виконуваного файлу - це один рівень захисту, розміщення даних в одному каталозі, виконання у другому, шаблони в 3-му, конфігурація в четвертому ставить ще більше бар'єрів для заплутання даних та виконуваного файлу.
Брюс Едігер

2
Аргумент розділення даних та виконуваних файлів є повною нісенітницею. Організація файлової системи - на користь людини; це не схоже на те, що між шматочками є фізичне розділення, яке заважає їм давати холодочки один одному чи нічого. Безпека UNIX історично краща за рахунок більш сильної та більш жорсткої моделі дозволів в цілому.
пухнастий

@fluffy Окремі файлові системи пропонують кілька сильніше поділ, проте ту саму точку частково спірними , оскільки це не представляється можливим відокремити /bin, /etcвід /.
jw013

@ fluffy - погоджено, ніяких "фізичних" розлук не існує, або це неможливо. Але це розділення за назвою. Зловмисне програмне забезпечення має шукати в якомусь іншому каталозі (а не "." Або dirname $ 0 чи щось), щоб знайти шаблони чи інші дані. Це не абсолютна безпека, більше, ніж закриття скляного вікна - це абсолютна безпека. Безпека - економічне благо, що має граничну цінність для кожної додаткової одиниці роботи. Кожна трішки допомагає.
Брюс Едігер

11

Незалежно від того, яку організацію обрали, деякі речі спростять, а деякі - складніше.

Організація файлів за типами, шляхи Unix (Into bin, man, lib/python, ...), робить його легше використовувати файли. Якщо ви хочете запустити команду, ви знаєте, де її знайти, незалежно від того, який пакет її надає. Якщо ви хочете шукати документацію, це все в одному місці. Якщо якась програма пропонує модуль виділення синтаксису Vim, функцію завершення zsh або прив'язки Python, відповідний файл буде знаходитись там, де vim / zsh / python може його знайти.

Unix також організовує файли за шаблонами використання. Заходять файли конфігурації, входять /etcфайли, які не змінюються у звичайній роботі /usr, а файли, що змінюються, автоматично заходять /var. Дані користувачів підпадають під /home. Це дуже корисно для управління конфігурацією (керуйте тим, що /etcдодається, та переліком встановлених пакетів). Також корисно визначити стратегії резервного копіювання: те, що є, /etcі що /homeє критично важливим, тоді як те, що є, /usrможна легко завантажити знову.

Основна вартість способу Unix полягає в тому, що установка програмного забезпечення розповсюджується в багатьох каталогах. Однак у сучасних системах Unix все одно є менеджери пакетів; управління файлами в багатьох каталогах - це далеко не найскладніша річ, яку вони роблять (відстеження залежностей дуже корисно і важче).

Порівнюйте це з Windows. Windows почався без управління пакетами, і кожен додаток десь створив свою власну директорію. Усі файли, як правило, знаходяться всередині цього каталогу: програми, статичні дані, дані користувачів ... За винятком випадків, коли бібліотеки, програми яких потрапляють у загальну системну директорію, не враховуючи конфліктів ("DLL hell"). З часом Windows стала багатокористувацькою, вимагаючи відокремлення каталогів користувачів від системних каталогів. Windows також створила центральне місце для файлів конфігурації (Unix /etc) та деяких системних даних (Unix)/var), реєстр. Це більше історичний артефакт багато в чому через відсутність управління пакетами та ранню історію як однокористувацької системи. У підходу Windows є багато обмежень: він не дозволяє програмним пакетам взаємодіяти легко. Наприклад, більшість встановлених програм не закінчується на шляху пошуку команд за замовчуванням, тому воно погано взаємодіє з будь-якою формою сценаріїв. Зазвичай інсталятори надають піктограму меню як окремий випадок - потрапляють у окремий системний каталог (à la Unix!).

Обмеженням підходу Unix є те, що він не дозволяє легко співіснувати декількох версій пакету, що особливо проблематично під час оновлення пакета. Способом отримати найкраще з обох світів було б розпакувати кожен пакунок у власному каталозі ( /optструктурі) та створити ліси символічних зв’язків із каталогів пакетів до /usrструктури. Це те, що робить програмне забезпечення, як Stow .

Підсумовуючи підсумок, підхід Unix полегшує використання файлів, управління файлами та дозволити взаємодії пакетів; для цього потрібне програмне забезпечення для управління пакетами, але це все одно бажано. Підхід Windows полегшує керування пакунками вручну, але повинен орієнтуватися на модель Unix, щоб отримати корисну функціональність.


1
Дивовижно. На мою думку, однак, лише раніше було легше керувати пакетами. Поява реєстру Windows змінила все це, а потім і деякі. Мало того, що це гігантський і лабіринтин - це також навмисно так - з одними значеннями в байтовому коді, а інші - ні, і не є справжньою римою або причиною до структури. Я думаю, що саме так має бути, якщо ви хочете розробити керований операційний центр і захистити комерційну таємницю та власні методи: заплутаність.
mikeserv

3

Основна користь, не згадана вище, і одна з історичних причин структури - фізичне розділення на кілька томів / дисків, доступних на різних етапах процесу завантаження.

Ще одна перевага полягає в тому, що різні каталоги можуть бути встановлені на томах / файлових системах, оптимізованих для даних каталогу. Наприклад, tmpfsдля /run; та /sbinна носіях, які лише для читання / ПЗУ.

Також обсяги можуть бути локальними або віддаленими, особистими або спільними.

Нарешті, див. Каталог додатків для альтернативного підходу (згаданого @fluffy), який використовується в UNIX (OS X .app), Linux ( ROX Desktop ) та Windows ( PortableApps.com ).


1

Немає жодних переваг у цього макета, окрім того, що легко здогадатися, де спільні та конфігураційні файли для програми. UNIX має давню спадщину подібного плану, і зламати його було б досить складно. Однак деякі дистрибутиви UNIX змінили свою модель - вони надають старі локації лише для застарілих цілей, а інші додатки вбудовані у власний невеликий каталог / пакет. Mac OS X є найвизначнішим прикладом цього, і є кілька неясних дистрибутивів Linux, які роблять те саме (а Android робить щось подібне, лише забирає його трохи далі і встановлює та запускає кожну програму під власним ідентифікатором користувача) ).

Головне, що передбачає конвенція файлової системи, - це саме те, що це умова, щоб люди знали, де шукати файли (будь то вручну чи в коді). Немає реальних технічних причин, щоб це було в одному напрямку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.