Файловая система ОС UNIX

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

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

Строго говоря, следует различать физическую файловую систему, которая отвечает за управление дисковым пространством и размещение файлов в физических адресах диска и логическую файловую систему, которая обеспечивает логическую структуру хранения файлов - пространство имен файлов. ОС Unix и Linux могут работать с различными физическими файловыми системами, но логическое представление файловой системы в Unix/Linux всегда одинаково. В данном документе везде под термином "файловая система" понимается "логическая файловая система".

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

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

В каждом каталоге содержатся два специальных имени, имя ".", именующее сам этот каталог, и имя "..", именующее "родительский" каталог данного каталога, т.е. каталог, непосредственно предшествующий данному в иерархии каталогов.

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

/home/apalko/file2
или по относительному имени:
./../../apalko/file2

Каталогам или файлам любые имена в соответствии со следующими правилами:

Виды файлов

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

Обычные файлы

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

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

Файлы-каталоги

Наличие обычных файлов недостаточно для организации иерархических файловых систем. Требуется наличие каталогов, которые сопоставляют имена файлов или каталогов с их физическим описанием. Каталоги представляют собой особый вид файлов, которые хранятся во внешней памяти подобно обычным файлам, но структура которых поддерживается самой файловой системой.

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

Специальные файлы

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

Связывание файлов с разными именами

Файловая система ОС UNIX обеспечивает возможность связывания одного и того же файла с разными именами. При этом ссылки (link) на один и тот же файл могут располагаться в одном и том же каталоге, тогда локальные их имена обязательно должны быть разными, или в разных каталогах, тогда локальные их имена могут совпадать.

Ссылки, о которых идет речь, являются "жесткими" связями и представляют собой ссылки на один и тот же физический файл из двух или более элементов каталога. Удаление файла по одной из ссылок приводит к удалению только элемента каталога, сам же файл сохраняется и может быть доступен по другим ссылкам. Физический файл удаляется только при удалении последней ссылки на него.

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

Именованные программные каналы

Программный канал - одно из средств межпроцессных взаимодействий в ОС UNIX. Именованному программному каналу обязательно соответствует элемент некоторого каталога.