- •15. Файловая система unix
- •Внутреннее представление файлов
- •Типы файлов
- •Структура файловой системы unix
- •Разновидности файловых систем в unix
- •Базовая файловая система System V
- •Суперблок
- •Индексные дескрипторы
- •Имена файлов
- •Недостатки и ограничения
- •Файловая система bsd unix
- •Каталоги
- •Архитектура виртуальной файловой системы
- •Использование нескольких файловых систем
- •Файлы устройств
- •Монтирование файловой системы
- •Команды работы с файловыми системами
- •Монтирование разделов жесткого диcка: Linux и c файловой системой fat
- •Автоматическое монтирование файловых систем
- •16. Контроль доступа к файлам. Общие принципы Доступ к файлам как частный случай доступа к разделяемым ресурсам
- •Механизм контроля доступа
- •17. Организация контроля доступа в ос unix Владельцы файлов
- •Права доступа к файлу
- •Дополнительные атрибуты файла
- •18. Файловая система ntfs 5.0
- •Назначение разрешений для файлов
- •Назначение разрешений для папок
- •19. Дополнительные возможности ntfs 5.0 Квоты дискового пространства
- •Передача права владения
- •Сжатие файлов и папок
- •Команда Compact
- •Точки соединения ntfs
- •Работа с точками соединения ntfs Утилита mountvol
- •Управление точками соединения с помощью оснастки Управление дисками (Disk Management)
- •Дефрагментация диска
- •Список литературы
- •Оглавление
Внутреннее представление файлов
Как уже было замечено в предыдущем разделе, каждый файл в системе UNIX имеет уникальный индекс. Индекс содержит информацию, необходимую любому процессу для того, чтобы обратиться к файлу, например, права собственности на файл, права доступа к файлу, размер файла и расположение данных файла в файловой системе. Процессы обращаются к файлам, используя четко определенный набор системных вызовов и идентифицируя файл строкой символов, выступающих в качестве составного имени файла. Каждое составное имя однозначно определяет файл, благодаря чему ядро системы преобразует это имя в индекс файла.
Индексы существуют на диске в статической форме и ядро считывает их в память прежде, чем начать с ними работать. Дисковые индексы включают в себя следующие поля:
-
Идентификатор владельца файла. Права собственности разделены между индивидуальным владельцем и «групповым» и тем самым помогают определить круг пользователей, имеющих права доступа к файлу. Суперпользователь имеет право доступа ко всем файлам в системе.
-
Тип файла. Файл может быть файлом обычного типа, каталогом, специальным файлом, соответствующим устройствам ввода-вывода символами или блоками, а также абстрактным файлом канала (организующим обслуживание запросов в порядке поступления, «первым пришел - первым вышел").
-
Права доступа к файлу. Система разграничивает права доступа к файлу для трех классов пользователей: индивидуального владельца файла, группового владельца и прочих пользователей; каждому классу выделены определенные права на чтение, запись и исполнение файла, которые устанавливаются индивидуально (об этом будет более подробно рассказано в разделе «Контроль доступа к файлам»).
-
Календарные сведения, характеризующие работу с файлом:
-
время внесения последних изменений в файл,
-
время последнего обращения к файлу,
-
время внесения последних изменений в индекс.
-
Число указателей на файл, означающее количество имен, используемых при поиске файла в иерархии каталогов.
Типы файлов
В UNIX существуют 6 типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над файлами:
-
Обычный файл (regular file);
-
Каталог (directory);
-
Специальный файл устройства (special device file);
-
FIFO или именованный канал (named pipe);
-
Связь (link);
-
Сокет.
Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. Вся интерпретация содержимого файла производится прикладной программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные данные, исполняемые программы и т. п.
Каталог. С помощью каталогов формируется логическое дерево файловой системы. Каталог — это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию — метаданные, позволяющие операционной системе производить операции над этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку сам файл не содержит информации о своем местонахождении. Любая задача, имеющая право на чтение каталога, может прочесть его содержимое, но только ядро имеет право на запись в каталог.
Н
а
рис. 15.3 в качестве примера приведена
упрощенная структура каталога. По
существу каталог представляет собой
таблицу, каждая запись которой
соответствует некоторому файлу. Первое
поле каждой записи содержит указатель
на метаданные (индекс, о котором речь
пойдет далее), а второе - определяет имя
файла.
С
пециальный
файл устройства обеспечивает доступ
к физическому устройству. В UNIX
различают символьные (character) и блочные
(block) файлы устройств. Доступ к устройствам
осуществляется путем открытия, чтения
и записи в специальный файл устройства.
Символьные файлы устройств используются для небуферизированного обмена данными с устройством, в противоположность этому блочные файлы позволяют производить обмен данными в виде пакетов фиксированной длины — блоков. Доступ к некоторым устройствам может осуществляться как через символьные, так и через блочные специальные файлы.
FIFO или именованный канал — это файл, используемый для связи между процессами. FIFO впервые появились в System V UNIX, но большинство современных систем поддерживают этот механизм.
Связь. Как уже говорилось, каталог содержит имена файлов и указатели на их метаданные. В то же время сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе (такое утверждение верно лишь отчасти. Действительно, файлу «безразлично», какие имена он имеет в каталогах, но «небезразлично» число этих имен. Если ни одно из имен файловой системы не ссылается на файл - он должен быть удален, т.е. физически удалены его данные на диске). Такая связь имени файла с его данными называется жесткой связью (hard link) (см. рис.15.4). Например, с помощью команды 1п мы можем создать еще одно имя (например, second) файла, на который указывает имя first .
$ln first /home/sergey/second
Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с помощью команды ls(l), файлы first и second будут отличаться только именем. Все остальные атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя - это два разных файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они ссылаются на одни и те же данные файла. Вы можете переместить один из файлов в другой каталог - все равно эти имена будут связаны жесткой связью с данными файла. Легко проверить, что удаление одного из файлов (first или second) не приведет к удалению самого файла, т. е. его метаданных и данных (если это не специальный файл устройства).
По определению, жесткие связи указывают на один и тот же индексный дескриптор inode. Поэтому проверить , имеют ли два имени файла жесткую связь, можно, вызвав команду ls с ключом –i:
$ ls –i /home/andrey/first /home/sergey/second
12567 first
12567 second
Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями, можно получить, просмотрев подробный листинг файлов с помощью команды ls -l:
$ ls –l /home/sergey
…
-rw-r—r-- 2 andrey staff 7245 Jan 17 8:05 second
Во второй колонке листинга указано число жестких связей данного файла. Сразу оговоримся, что жесткая связь является естественной формой связи имени файла с его метаданными и не принадлежит к особому типу файла. Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В отличие от жесткой связи, символическая связь адресует файл, который, в свою очередь, ссылается на другой файл. В результате, последний файл адресуется символической связью косвенно (рис. 15.5). Данные файла, являющегося символической связью, содержат только имя целевого файла.
Проиллюстрируем эти рассуждения на примере. Команда 1n(1) с ключом -s позволяет создать символическую связь:
$ pwd
/home/andrey
$ ln –s first /home/sergey/symfirst
$ cd /home/sergey
$ ls –l
…
lrwxrwxrwx 1 andrey staff 15 Jan 17 8:05 symfirst->../andrey/first
Как видно из вывода команды ls, файл symfirst (символическая связь) существенно отличается от файла second (жесткая связь). Во-первых, фактическое содержимое файла symfirst отнюдь не то же, что и у файла first или second, об этом говорит размер файла - 15 байт. На самом деле в этом файле хранится не что иное как имя файла, на которое символическая связь ссылается - ../andrei/first - ровно - 15 байт. Во-вторых, файл symfirst не содержит никаких ограничений на доступ (2-10 символы в первой колонке).
Символическая связь является особым типом файла (об этом свидетельствует символ Т в первой позиции вывода ls, и операционная система работает с таким файлом не так, как с обычным. Например, при выводе на экран содержимого файла symfirst появятся данные файла /home/andrey/first.
Сокеты
Сокеты предназначены для взаимодействия между процессами. Интерфейс сокетов часто используется для доступа к сети TCP/IP. В системах, ветви BSD UNIX на базе сокетов реализована система межпроцессного взаимодействия, с помощью которой работают многие системные сервисы, например, система печати.
