Опубликован: 15.06.2004 | Уровень: специалист | Доступ: платный
Лекция 4:

Организация файловой системы

Аннотация: Определяются основные понятия, ассоциированные с файлами. Описывается структура файловой системы, а также утилиты и функции для опроса и изменения атрибутов файлов и файловых систем, создания, удаления, копирования и перемещения файлов, обхода и обработки файловых иерархий.
Ключевые слова: файл, чтение, запись, тип файла, имя файла, обычный файл, каталог, канал, символьный специальный файл, блочный специальный файл, символьная ссылка, сокет, очередь, терминал, маршрутное имя, цепочка символов, маршрут, ссылка, описатель файла, направленный граф, файловая система, корневой каталог, уникальный идентификатор файла, порядковый номер файла, простое имя, path, ПО, точка-точка, текущий каталог, вышележащий каталог, абсолютное маршрутное имя, POSIX, относительное маршрутное имя, маршрутный префикс, составное имя, разрешение маршрутных имен, раскрытие символьной ссылки, информация, биты режима доступа к файлу, владелец файла, биты режима, элемент каталога, операции, прочие пользователи, режим доступа к файлу, права, право на выполнение, право на поиск в каталоге, удаление файлов, бит, дополнительный механизм контроля доступа, альтернативный механизм контроля доступа, контроль, открытый файл, файловый дескриптор, описание открытого файла, монтирование, точка монтирования, объединенная файловая система, приложение, shell, команда, вывод, функция, массив, NULL, значение, утилита, опция, байт, пользователь, жёсткая ссылка, время последнего изменения, рекурсивный обход, ключ сортировки, обход файловой иерархии, старший номер устройства, младший номер устройства, командная строка, доступ, аргумент, режим файла, константы, пространство, килобайт, формат вывода, свободное пространство, использованное пространство, процент занятости, пара функций, FAT, интерпретация, программа, иерархия, смена текущего каталога, встроенная команда, алгоритм, целый, обратный, логический, изменение атрибутов файлов, владеющая группа, поиск, идентификатор, побитные операции, побочный эффект, время последнего доступа, аргумент опции, создание файлов, файл-замок, постановка задачи, перенаправление вывода, код ошибки, переменная, стандартный протокол, компонент, указатель, подкаталог, интерфейс, mkfifo, словосочетание, запрос подтверждения, копирование файлов, копирование, конкатенация, синтаксис, перемещение файлов, переименование файлов, логическое выражение, истина, равенство, неравенство, точное совпадение, база данных групп, дисциплина обхода иерархии, идентификатор устройства, код завершения, выражение, операция отрицания, логическое И, логическое ИЛИ, архивирование, архивный формат, архив, извлечение файлов из архива

Основные понятия.

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

В стандарте зафиксированы следующие типы файлов:

  • обычный файл ;
  • каталог ;
  • канал ;
  • символьный специальный файл ;
  • блочный специальный файл ;
  • символьная ссылка ;
  • сокет.

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

Каталог состоит из элементов (ссылок), ассоциирующих имена с файлами . Одинаковые имена не могут фигурировать в разных элементах одного каталога, но разные элементы могут ссылаться на один и тот же файл.

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

Специальные файлы соответствуют аппаратным компонентам компьютера. Обычно при использовании символьных специальных файлов остаются видимыми аппаратные характеристики соответствующих устройств, а при доступе к устройствам посредством блочных специальных файлов аппаратные характеристики, как правило, остаются скрытыми. Типичный пример устройства, которому соответствует символьный специальный файл, - терминал.

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

Сокет - это оконечная точка межпроцессных коммуникаций.

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

Согласно стандарту POSIX-2001, для каждого процесса определен корневой каталог с именем / - вершина графа, из которой осуществляется доступ к прочим файлам данной файловой системы . "Абсолютного", единого для всех корня может и не существовать.

В пределах файловой системы каждый файл имеет уникальный идентификатор ( порядковый номер - он же номер описателя файла ).

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

(При использовании в именах файлов некоторых других символов довольно часто возникают проблемы. Укажем лишь на часть из них.

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

В каждом каталоге должны присутствовать имена . (точка) и .. (по стандарту читается как точка-точка), которые трактуются как ссылки на текущий и вышележащий каталоги. Для корневого каталога имя .. может также ссылаться на корень.

Под маршрутным именем понимается цепочка символов, идентифицирующая файл и состоящая из нескольких (в том числе из нуля) простых имен файлов, разделенных символами / и называемых компонентами маршрута.   Маршрутные имена, начинающиеся символом /, называются абсолютными, они задают маршрут от корня файловой системы . (Отметим, что стандарт POSIX-2001 определяет трактовку маршрутных имен, начинающихся с двух символов /, как зависящую от реализации. В частности, таким способом в некоторых ОС задаются имена файлов на других хостах сети.)

Прочие имена называются относительными, маршрут в них задан относительно текущего каталога.

Маршрутным префиксом называется маршрутное имя, ссылающееся на каталог . Если маршрутное имя оканчивается символом /, оно обязано быть маршрутным префиксом.

Маршрутные имена называют также составными   именами файлов . Примеры составных имен:

/.autofsck
/usr/lib/tcl
../susv3
./l4.txt

Первые два имени являются абсолютными. файл   .autofsck лежит в корневом каталоге, файл   tcl - в подкаталоге lib подкаталога usr   корневого каталога. Третье и четвертое - относительные имена, специфицирующие, соответственно, файл   susv3, расположенный в иерархии на один уровень выше файлов   текущего каталога, и файл   l4.txt из текущего каталога. Последнее маршрутное имя можно было задать и проще:

l4.txt

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

Согласно стандарту, с каждым файлом ассоциирована по крайней мере следующая служебная информация:

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

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

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

По отношению к конкретному файлу все пользователи делятся на три категории:

  • владелец файла ;
  • члены владеющей группы;
  • прочие пользователи.

Для каждой из них режим доступа определяет права на операции с файлом, а именно:

  • право на чтение ;
  • право на запись ;
  • право на выполнение (для каталогов - право на поиск ).

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

Стандарт POSIX предусматривает реализацию дополнительных и/или альтернативных механизмов контроля доступа в операционной системе. Дополнительные механизмы ужесточают стандартный контроль, альтернативные заменяют его.

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

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

Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?

Ирина Воскресенская
Ирина Воскресенская
Россия, Москва, НИЯУ МИФИ
Максим Баранов
Максим Баранов
Россия