|
|
|||||||||||||||||||||||||||||
|
К вопросу о некоторых аспектах организации файловой системы UNIX/LinuxИсточник: habrahabr
1.0 ВведениеПосле написания предыдущей статьи (Linux: Установка программ не входящих в дистрибутив при помощи менеджера xstow), у меня осталось двойственное впечатление. С одной стороны в статье все правильно, а с другой стороны, отзывы показали, что есть некоторые разночтения в назначении различных частей ФС UNIX. Получилось так, что я дал людям в руки молоток, дал инструкцию по применению молотка, а какие гвозди и куда забивать этим молотком, не сказал. Попытаюсь восполнить этот пробел. В данной статье я попытаюсь, насколько мне это удастся, рассказать, как организована ФС UNIX, зачем это сделано именно это так, для чего и как себя в этой системе вести. В дальнейшем в качестве примеров UNIX буду использовать дистрибутив Debian/Ubuntu. Как мы знаем из жизни, вся наша жизнь это решение возникающих перед нами проблем, возникновение новых проблем, в том числе и вытекающих из решения предыдущих и так далее, до бесконечности...
2.0 Проблема: как размещать файлы различных назначений в ОСИтак сформулируем первую проблему, как размещать файлы в системе? С одной стороны мы имеем операционную систему и программы, каждая из которых состоит как правило из нескольких, иногда многих файлов. Если с базовыми файлами операционной системы все более менее все понятно, они как правило всегда должны находится в одном и том же месте, то с файлами программ, для которых возможны установка/удаление, ситуация сложнее. С одной стороны, хорошо когда файлы рассортированы по назначению, с другой стороны, удобно, когда деревья директорий файлов программ находятся в директориях, соответствующих программах. Давайте рассмотрим плюсы и минусы данных решений подробнее.
2.1 Первый вариант: сортировать файлы по пакетамПервое, что приходит в голову, давайте файлы ОС разложим по пакетам. Т.е. для каждого программного пакета будет своя директория, в которой будут поддиректории, в которых уже файлы будут разложены так, как это нужно производителю этой программы. Плюсы:
Минусы:
2.2 Второй вариант: сортировать файлы по функциям в системеПлюсы:
Минусы:
3.0 Решение в UNIX-styleВ UNIX-ах выбрано размещение по второму варианту. Т.е. файлы разных программ с одинаковым функциональным назначением, лежат в одном директории. Например исполняемые файлы разных пользовательских программ лежат в директории /usr/bin .
4.0 Проблемы, вытекающие из решения в UNIX-style, установка софтаПроблемы, ясное дело, вытекают из минусов подхода. Это трудности с установкой программ, удалением программ и с определением, какой файл к какой программе относится. Это далеко почти всегда является нетривиальной задачей.
5.0 Решение проблем: пакетные менеджерыВ дальнейшем будем называть менеджер пакетов МП. Сформулированная в предыдущем разделе проблема в различных дистрибутивах UNIX/Linux решается при помощи работы по установке, удалению и хранению информации об установленном программном обеспечении специальной программе - менеджеру пакетов. В Debian/Ubuntu этим занимается dpkg. Вообще-то это только одна программа из целого набора программ, которые имеют отношение к этому. dpkg, это бэкенд, есть несколько фронтэндов, apt-get, aptitude, dselect, synaptic. Что делает МП? По крайней мере в Debian/Ubuntu он занимается следующим:
Немало, как по вашему? И МП Debian/Ubuntu справляется со всем этим действительно неплохо. Сам пакет обычно представляет собой архив файлов, описание пакета с несколькими полями, и скрипты, выполняемые при установке и удалении пакета. В Debian/Ubuntu файл пакета имеет расширение .deb .
6.0 Проблемы, связанные с пакетными менеджерамиКак известно, без проблем ничего не бывает. Использование МП тоже не исключение и приносит свои проблемы. Конечно МП решает гораздо больше проблем, чем приносит, но все-таки их нужно знать и с ними бороться. Итак, проблемы:
7.0 Решение проблем, связанных с пакетными менеджерами, иерархия /usr/localВ последнее время практически весь нужный софт имеется в дистрибутиве в виде пакетов. Но все-таки рано или поздно как правило каждый пользователь/администратор встречается с необходимостью установки софта, который не входит в дистрибутив. Обычно встречаются такие варианты:
Как быть? Как сделать это с наименьшим риском внести возмущения в работу системы? В наличии имеется несколько вариантов:
С Решение 1 вроде все ясно, давайте рассмотрим подробнее Решение 2 и Решение 3.
Решение 2: Собрать собственный пакет и установить в систему. Плюсы:
Минусы:
Debian Policy 2 (Ubuntu как производное от Debian руководствуется им тоже) прямо говорит две вещи:
Таким образом можно сделать вывод, что для ПО, которого нет в репозитарии, которое устанавливается локально на данную машину, или на небольшое количество машин, стандартный путь - установка в /usr/local . Если ПО предназначено для распространения и установки в системы Debian/Ubuntu, лучший путь - упаковка его в .deb пакеты. НО! В этом случае вы отвечаете за зависимости, конфликты и обновления этого пакета.
8.0 Проблемы, связанные с иерархией /usr/local
9.0 Решение проблем, связанные с иерархией /usr/local, возможные воркэраундыРешение проблемы 1. описано в моей статье 5, поэтому подробно описывать решение не буду. Вкратце, программы ставятся каждая в свою иерархию в директории /usr/local/stow , а затем, специальны менеджер (xstow), расставляет символьные ссылки на файлы программы. Решение проблемы 2. Эту проблему придется решать руками. Если вы воспользовались программой stow, то можно, например, сделать директорию с уникальным именем в иерархии /var , например /var/local_var , а затем сделать ссылки на нее. Но это стоит делать только в том случае, если действительно есть такая необходимость.
10.0 Иерархия /optВ иерархию /opt по Полиси 2 устанавливаю свой софт сторонние производители. Они устанавливают своё ПО в директории вида /opt/package или /opt/provider .
11.0 Проблемы пользователя, иерархия /homeОпять же по Полиси 2, файлы пользователей хранятся в иерархии /home , в директориях вида /home/username . Если говорить об установке ПО, то его можно устанавливать и сюда. причем как это делать, отдано на усмотрение пользователя. В каких случаях это делать?
Я обычно использую смесь раскладки файлов "по директориям" и "по пакетам". Для ПО, которое работает постоянно, как правило, это мои скрипты, создаю директории /home/username/bin /home/username/etc /home/username/var . Софт, который просто хочу посмотреть или поиграться просто компилирую в директории /home/username/sw/softname и запускаю просто оттуда.
12.0 Другие применения иерархии /homeЧасто применяют иерархию /home для размещения файлов, относящихся к крупным задачам, выполняющимся на компьютере. Например, разрабатывается проект с именем projectname . Тогда заводят в системе пользователя с именем projectname и все, к нему относящееся помещают в директорию /home/projectname
13.0 Другие ОСОднажды Вовочкина мама сказала папе: © Анекдот
FreeBSDВ ОС FreeBSD в принципе все также, с небольшими отличиями. Файлы базовой системы там находятся как и у Linux семейства Debian/Ubuntu в основной иерархии. Бинарным пакетам там соответствуют два понятия, пакеты и порты. Пакеты это примерно то же самое, что и пакеты в Debian/Ubuntu. В качестве пакетного менеджера там используется набор команд для работы с пакетами (и портами). Порт, это набор вспомогательных файлов, который позволяет скомпилировать и установить исходники в систему. Он позволяет в автоматическом режиме загрузить исходники с носителя (например CDROM) или скачать с интернета, скомпилировать и установить в систему. Как пакеты, так и порты устанавливаются в иерархию /usr/local . Точно так же, как и в Debian/Ubuntu может встретится ситуация, когда для софта нет ни пакета ни порта. Тогда, естественно, нужно устанавливать софт из исходников. Для этого можно или сделать порт для этого софта, или просто скомпилировать и установить исходники в иерархию /usr/local . Конечно, поскольку в FreeBSD там устанавливается много софта, нужно быть внимательным, т.к. вероятность конфликтов из-за этого возрастает. Ну и возвращаясь к методам, описанным в статье 5, думаю, что если Вы не делаете своего порта, для поддержания порядка, можно использовать программу xstow. Хотя у BSD-истов могут быть свои излюбленные методы, неизвестные мне, пусть знающие товарищи меня поправят, если я ошибаюсь.
Семейство WindowsВ ОС семейства Windows, для размещения софта, как правило применяется подход, когда для каждого пакета ПО - своя иерархия. Наблюдаются некоторые подвижки в сторону раскладки файлов по назначениям, но этому мешают: - Отсутствие единого дерева файловой системой (буквы, обозначающие партиции, C:, D: и т.д.).
ЗаключениеНадеюсь статья будет полезной. В принципе можно бы было в другой статье более подробно разобрать назначение других директорий и иерархий ФС UNIX/Linux.
Список использованных сокращений
Литература1. Стандартная иерархия файловой системы Linux (File System Hierarchy Standard)
|
|