Автор работы: Пользователь скрыл имя, 04 Января 2012 в 20:10, статья
В статье рассказывается о разработанном в рамках проекта Open Source стандарте на структуру каталоговUNIX-подобных операционных систем (подразумеваются Linux и BSD-системы).
Иерархия каталогов и файловых систем в Linux
Виктор Костромин, "Открытые системы"
В статье
рассказывается о разработанном
в рамках проекта Open Source стандарте на
структуру каталоговUNIX-подобных операционных
систем (подразумеваются Linux и BSD-
Одно из первых понятий, с которыми сталкивается любой пользователь компьютера – это, безусловно, понятие файловой системы. При этом пользователь видит только одну сторону файловой системы, а именно, иерархическую структуру (или дерево) каталогов и файлов. Фактически все каталоги тоже являются файлами, и с точки зрения механизма хранения файлов на диске все файлы, включая каталоги, организованы одинаково [1]. Но для человека работать с “линейным” списком, содержащим тысячи файлов, было бы крайне неудобно, поэтому и было изобретено понятие “каталога”, чисто логического образования, позволяющего дать каждому файлу понятное для человека “полное имя”, определяющее некий “путь” к файлу в единой структуре каталогов.
Поскольку
структура каталогов – понятие
чисто логическое и к реальным
механизмам работы с файлами не имеет
отношения, изначально никаких особых
требований на вид логического дерева
каталогов со стороны операционной
системы не предъявляется. И в
силу этого каждый конкретный вариант
операционной системы, в частности,
каждый из дистрибутивов Linux, мог бы
строить это дерево по-своему. Легко
понять, что это могло бы привести
к возникновению больших
Работа
по созданию этого стандарта была
начата в августе 1993 года с попытки
упорядочить структуру файлов и
каталогов операционной системы Linux.
Вначале стандарт назывался проектом
стандартов файловой системы - Filesystem Standarts
В начале
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 его авторы стремились создать в первую очередь справочник, а не учебник по построению структуры каталогов. Стандарт создавался для использования системными интеграторами, разработчиками пакетов программного обеспечения и системными администраторами в процессе создания и поддержки UNIX-совместимых файловых систем.
В основу разработки стандарта были положены следующие соображения.
Во-первых, учитывалось, что в UNIX-подобных ОС структура каталогов представлена в виде единого дерева. Отдельные «ветви» этого дерева могут располагаться на разных носителях, или в разных файловых системах, причем эти файловые системы могут быть разными по своей внутренней организации – на одном носителе это файловая система ext2fs, на другом – vfat, и так далее. Разработчики стандарта стремились обеспечить оптимальное размещение файлов в разных файловых системах с тем, чтобы оптимизировать процессы загрузки, последующего функционирования и возможного обновления системы.
Во-вторых, любая UNIX-система (в том числе и Linux) - система сетевая, и эти файловые системы и соответствующие носители могут физически располагаться даже на разных компьютерах. Поэтому при размещении отдельных файлов в различных частях файловой структуры надо учитывать, что некоторые файлы должны быть доступны с других компьютеров в сети (быть разделяемыми), а к другим файлам доступ по сети необходимо ограничить. Выделение группы разделяемых файлов позволяет экономить общее дисковое пространство. Группа неразделяемых файлов вычленяется как по соображениям безопасности, так и просто потому, что эти файлы определяют локальную конфигурацию системы и поэтому нужны только на данном компьютере. Например, пользовательские каталоги могут (а часто и должны) быть разделяемыми, а файлы настройки процедур загрузки системы должны быть неразделяемыми.
В третьих, файлы делятся на статические (неизменяемые) и изменяемые. К числу статических файлов относятся исполняемые файлы, библиотеки, документация и другие файлы, изменять которые может только администратор системы. Для остальных пользователей эти файлы должны быть доступны только по чтению. Изменяемые файлы – это те, которые любой пользователь может менять без привлечения администратора.
В таблице 1 приведены несколько примеров того, какие каталоги (точнее, файлы каких каталогов) относятся к каждому из 4 классов, образующихся при разбиении всего множества файлов по этим двум критериям.
Таблица 1. Пример выделения классов файлов
|
Выделение этих 4 классов файлов помогает понять те принципы, на которых строится стандартная структура каталогов, предлагаемая стандартом FHS. Ее описание начнем, естественно, в описания структуры корневого каталога, который имеет имя “/”.
Корневой каталог
Стандарт FHS предлагает создать в корневом каталоге следующие подкаталоги
Таблица 2. Основные подкаталоги корневого каталога
|
Это не означает, что все содержимое перечисленных каталогов должно размещаться в корневой файловой системе. Указанные каталоги могут являться просто точками монтирования для других файловых систем или ссылками на такие системы. Более того, в стандарте явно рекомендуется размещать в каталогах /usr, /optи /var такие файлы, которые могут располагаться в других разделах диска или в других файловых системах. Впрочем, давайте отложим рассмотрение вопроса о том, как разместить каталоги по разным файловым системам, до последнего раздела настоящей статьи, а пока вернемся к рассмотрению тех требований, которые стандарт 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