Каковы преимущества структуры файловой системы Unix


9

Если я устанавливаю приложение в Linux, например Debian / Gnu Linux, файлы приложений копируются во многие разные каталоги в файловой системе.

Некоторые сценарии помещаются в / usr / share .. / usr / local, некоторые другие файлы - в / var .. / log .. etc / и так далее.

Для меня это нормально, потому что я кое-что узнал о файловой системе, и большинство каталогов предназначены для хранения файлов с определенной целью. Это очень хорошо вписывается в философию 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 Pre-OSX.


Это хорошие моменты. Почему разделение исполняемых файлов и файлов данных, шаблонов и конфигураций является причиной большей защиты от вирусов?
Ян Коестер

3
Многие (но не все) вирусы и черви в мире распространяются благодаря возможности преобразования данных в исполняемый файл: переполнение стека и внедрение SQL-кода и кода все работают именно так. Макровирусы «Word» распространялись хотя бы частично, потому что макросы «Word» включены в файлы .doc. Отделение данных от исполняемого файла файлом - это один уровень защиты: размещение данных в одном каталоге, выполнение файла во втором, шаблоны в третьем, конфигурация в четвертом создает еще больше барьеров для запутывания данных и исполняемого файла.
Брюс Эдигер

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»). Со временем Windows стала многопользовательской, что потребовало отделения пользовательских каталогов от системных каталогов. Windows также создала центральное место для файлов конфигурации (Unix /etc) и некоторых системных данных (Unix's)./var), реестр. Это скорее исторический артефакт, во многом из-за отсутствия управления пакетами и ранней истории однопользовательской системы. Подход Windows имеет много ограничений: он не позволяет программным пакетам взаимодействовать легко. Например, большинство установленных программ не попадают на путь поиска команд по умолчанию, поэтому они плохо взаимодействуют с любой формой сценариев. Установщики, как правило, предоставляют значок меню в качестве особого случая, который помещается в отдельный системный каталог (как Unix!).

Ограничение подхода Unix состоит в том, что он не позволяет легко сосуществовать нескольким версиям пакета, что особенно проблематично во время обновления пакета. Чтобы получить лучшее из обоих миров, можно распаковать каждый пакет в его собственный каталог ( /optструктуру) и создать леса символических ссылок из каталогов пакетов в /usrструктуру. Это то, что делает программное обеспечение, как Stow .

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


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

3

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

Другое преимущество заключается в том, что различные каталоги можно монтировать на томах / файловых системах, которые оптимизированы для данных каталога. Например, tmpfsдля /run; и только /sbinдля чтения / ROM.

Также тома могут быть локальными или удаленными, личными или общими.

Наконец, посмотрите каталог приложений для альтернативного подхода (упомянутого @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.