Иерархия каталогов и файловых систем в Linux

Автор работы: Пользователь скрыл имя, 04 Января 2012 в 20:10, статья

Краткое описание

В статье рассказывается о разработанном в рамках проекта Open Source стандарте на структуру каталоговUNIX-подобных операционных систем (подразумеваются Linux и BSD-системы).

Содержимое работы - 1 файл

Иерархия каталогов и файловых систем в Linux.docx

— 80.73 Кб (Скачать файл)

Иерархия  каталогов и файловых систем в Linux

Виктор  Костромин"Открытые системы"

В статье рассказывается о разработанном  в рамках проекта Open Source стандарте на структуру каталоговUNIX-подобных операционных систем (подразумеваются Linux и BSD-системы). 

Одно  из первых понятий, с которыми сталкивается любой пользователь компьютера –  это, безусловно, понятие файловой системы. При этом пользователь видит только одну сторону файловой системы, а  именно, иерархическую структуру (или  дерево) каталогов и файлов. Фактически все каталоги тоже являются файлами, и с точки зрения механизма  хранения файлов на диске все файлы, включая каталоги, организованы одинаково [1]. Но для человека работать с “линейным” списком, содержащим тысячи файлов, было бы крайне неудобно, поэтому и было изобретено понятие “каталога”, чисто  логического образования, позволяющего дать каждому файлу понятное для  человека “полное имя”, определяющее некий “путь” к файлу в единой структуре каталогов.

Поскольку структура каталогов – понятие  чисто логическое и к реальным механизмам работы с файлами не имеет  отношения, изначально никаких особых требований на вид логического дерева каталогов со стороны операционной системы не предъявляется. И в  силу этого каждый конкретный вариант  операционной системы, в частности, каждый из дистрибутивов Linux, мог бы строить это дерево по-своему. Легко  понять, что это могло бы привести к возникновению больших проблем  в работе программного обеспечения  от различных разработчиков, к несовместимости  и непереносимости программ, установка  новых программ в систему и  работа большинства приложений были бы очень затруднены, поскольку масса  времени уходила бы на поиск нужных файлов. Подчинение же структуры каталогов  определенным стандартам позволяет  обеспечить совместимость программного обеспечения, разрабатываемого разными  группами авторов и в рамках различных  дистрибутивов. Поэтому группой  энтузиастов (как все, что создается  в рамках движения OpenSource) был разработан стандарт на структуру каталогов для UNIX-подобных ОС, так называемый стандарт иерархии файловых систем (Filesystem Hierarchy Standart или кратко FHS).

Работа  по созданию этого стандарта была начата в августе 1993 года с попытки  упорядочить структуру файлов и  каталогов операционной системы Linux. Вначале стандарт назывался проектом стандартов файловой системы - Filesystem Standarts project (FSSTND), и был ориентирован только на систему Linux. Его первая версия была выпущена 14 февраля 1994 года. Последующие редакции были выпущены 9 октября 1994 и 28 марта 1995 года. В разработке стандарта принимало участие большое количество добровольцев, но главным организатором был Дэниел Квинлан (Daniel Quinlan).

В начале 1995 года с участием сообщества разработчиков  системы BSD была поставлена цель создания более общей версии FSSTND, предназначенной  не только для Linux, но и для других UNIX-подобных операционных систем. В  результате объединенных усилий разработка стандарта сосредоточилась на вопросах, которые являются общими для всех UNIX-подобных систем, включая операционные системы типа 4.4BSD. Учитывая расширение сферы действия стандарта, он был  переименован в Filesystem Hierarchy Standard или, для  краткости, FHS. Естественно, что «настоящие» UNIX-системы, созданные задолго до появления этого стандарта, ему не соответствуют. Однако FHS учитывает все положительные качества, присущие BSD и другим системам в части поддержки различных архитектур и учета требований работы в гетерогенных сетях. На момент написания этой статьи последней версией стандарта FHS является версия 2.2, которая была выпущена 24 мая 2001 года. Полный исходный текст этого стандарта можно найти в Интернет на сайтеhttp://www.pathname.com/fhs/, а его русский перевод – по адресу http://linux-ve.net/MyLDP/file-sys/fhh-2.2-rus/index.html.

При разработке стандарта FHS его авторы стремились создать в первую очередь справочник, а не учебник по построению структуры каталогов. Стандарт создавался для использования системными интеграторами, разработчиками пакетов программного обеспечения и системными администраторами в процессе создания и поддержки UNIX-совместимых файловых систем.

В основу разработки стандарта были положены следующие соображения.

Во-первых, учитывалось, что в UNIX-подобных ОС структура  каталогов представлена в виде единого  дерева. Отдельные «ветви» этого  дерева могут располагаться на разных носителях, или в разных файловых системах, причем эти файловые системы могут быть разными по своей внутренней организации – на одном носителе это файловая система ext2fs, на другом – vfat, и так далее. Разработчики стандарта стремились обеспечить оптимальное размещение файлов в разных файловых системах с тем, чтобы оптимизировать процессы загрузки, последующего функционирования и возможного обновления системы.

Во-вторых, любая UNIX-система (в том числе и Linux) - система сетевая, и эти файловые системы и соответствующие носители могут физически располагаться даже на разных компьютерах. Поэтому при размещении отдельных файлов в различных частях файловой структуры надо учитывать, что некоторые файлы должны быть доступны с других компьютеров в сети (быть разделяемыми), а к другим файлам доступ по сети необходимо ограничить. Выделение группы разделяемых файлов позволяет экономить общее дисковое пространство. Группа неразделяемых файлов вычленяется как по соображениям безопасности, так и просто потому, что эти файлы определяют локальную конфигурацию системы и поэтому нужны только на данном компьютере. Например, пользовательские каталоги могут (а часто и должны) быть разделяемыми, а файлы настройки процедур загрузки системы должны быть неразделяемыми.

В третьих, файлы делятся на статические (неизменяемые) и изменяемые. К числу статических  файлов относятся исполняемые файлы, библиотеки, документация и другие файлы, изменять которые может только администратор системы. Для остальных  пользователей эти файлы должны быть доступны только по чтению. Изменяемые файлы – это те, которые любой  пользователь может менять без привлечения  администратора.

В таблице 1 приведены несколько примеров того, какие каталоги (точнее, файлы каких  каталогов) относятся к каждому  из 4 классов, образующихся при разбиении  всего множества файлов по этим двум критериям.

Таблица 1. Пример выделения  классов файлов

  Разделяемые Неразделяемые
Статические /usr

/opt

/etc

/boot

Изменяемые /var/mail

/var/spool/news

/var/run

/var/lock

 

Выделение этих 4 классов файлов помогает понять те принципы, на которых строится стандартная  структура каталогов, предлагаемая стандартом FHS. Ее описание начнем, естественно, в описания структуры корневого каталога, который имеет имя “/”.

Корневой  каталог

Стандарт FHS предлагает создать в корневом каталоге следующие подкаталоги

Таблица 2. Основные подкаталоги корневого каталога

bin Файлы основных команд (утилит), которые необходимы, когда никакая другая файловая система  еще не смонтирована (например, в  однопользовательском режиме).
boot Неизменяемые  файлы, необходимые для загрузки системы
dev Файлы устройств
etc Файлы конфигурации системы на данном компьютере
home Домашние каталоги пользователей
lib Основные разделяемые  библиотеки и модули ядра
lib<alt> Основные разделяемые  библиотеки для альтернативных форматов исполняемых файлов
mnt Точка монтирования для временно подключаемых файловых систем
root Домашний каталог  суперпользователя root
opt Дополнительные  пакеты программного обеспечения
sbin Основные системные  исполняемые файлы
tmp Временные файлы
usr Иерархия второго  уровня
var Переменные  данные
 

Это не означает, что все содержимое перечисленных  каталогов должно размещаться в  корневой файловой системе. Указанные  каталоги могут являться просто точками  монтирования для других файловых систем или ссылками на такие системы. Более  того, в стандарте явно рекомендуется  размещать в каталогах /usr, /optи /var такие файлы, которые могут располагаться в других разделах диска или в других файловых системах. Впрочем, давайте отложим рассмотрение вопроса о том, как разместить каталоги по разным файловым системам, до последнего раздела настоящей статьи, а пока вернемся к рассмотрению тех требований, которые стандарт FHS предъявляет к корневому каталогу.

В соответствии с требованиями стандарта приложения не должны создавать файлов и каталогов  или требовать наличия каких-то специальных файлов и каталогов (кроме перечисленных выше) в корневой директории. Существует несколько причин, по которым это запрещено:

  • размер корневой файловой системы желательно сохранять по возможности малым из соображений безопасности и удобства использования;
  • если придерживаться данного соглашения, проще решаются проблемы монтирования других файловых систем, расположенных на других устройствах;
  • и, наконец, стандарт FHS обеспечивает достаточную гибкость и удобство размещения файлов, не попавших в корневую систему, в других файловых системах и подкаталогах.

Обратите  внимание на то, что некоторые подкаталоги  корневого каталога помечены значком (optional). Это означает, что стандарт не требует обязательного наличия таких каталогов в системе. Но уж если они существуют, то должны размещаться в корневом каталоге (но не обязательно в корневой файловой системе).

А теперь последовательно рассмотрим назначение каждого из основных подкаталогов корневого  каталога.

Каталог /bin

Каталог /bin содержит команды, которые могут использоваться как системным администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система, кроме корневой, еще не смонтирована (например, в однопользовательском режиме). В этом каталоге могут также содержаться команды, которые используются не напрямую пользователем, а включаются в сценарии оболочки (скрипты). Исполняемые файлы, которые не так важны, чтобы быть расположенными в каталоге /bin, должны размещаться в каталоге /usr/bin. Те утилиты, которые необходимы только рядовым пользователям (файлы системы X Window, chsh, и так далее) обычно не так необходимы, чтобы размещаться в корневой файловой системе (в корневом разделе диска).

В /bin должны иметься следующие команды или символические ссылки на соответствующие команды:

cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, uname.

Следующие программы или символические  ссылки на программы должны находиться в каталоге /bin, если только соответствующие пакеты установлены в системе:

csh, ed, tar, cpio, gzip, gunzip, zcat, netstat, ping.

В каталоге /bin не должно быть подкаталогов.

Каталог /boot

Этот  каталог содержит все, что необходимо в процессе загрузки, исключая конфигурационные файлы и установщик карты загрузки (the map installer). Таким образом, в /boot хранятся данные, которые используются до того, как ядро начинает исполнять программы пользователя. Здесь же находятся резервные сохраненные копии главной загрузочной записи (master boot sectors) и другие данные, которые не подлежат прямому редактированию.

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

Каталог /dev

Каталог /dev - это место расположения специальных файлов устройств. На случай, если потребуется создавать файлы устройств вручную, каталог /dev должен содержать команду MAKEDEV, которая может создать файл устройства в случае необходимости.

Каталог /etc

Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы. В каталоге /etc не должно быть бинарных файлов. В соответствии со стандартом FHS этот каталог в обязательном порядке должен содержать подкаталог /opt, в котором должны размещаться подкаталоги с конфигурационными файлами отдельных пакетов и приложений. Для каждого установленного пакета <package> должен создаваться конфигурационный каталог /etc/opt/package. Надо отметить, что не все дистрибутивы следуют этому правилу: часто конфигурационные каталоги пакетов размещаются непосредственно в /etc.

Информация о работе Иерархия каталогов и файловых систем в Linux