Файловая система организует хранение и обработку файлов – поименованных областей данных на внешних носителях. Файлы по каким-либо признакам объединяются в каталоги. Файловая система UNIX организована в виде дерева с вершиной, которая называется корневым каталогом (корнем).
Имена файлов могут содержать любые символы, за исключением пробела, управляющих символов и символов, имеющих специальное значение для командной оболочки системы:
! @ # $ % ^ & * ( ) [ ] { } ’ \ / | ; ? ” < >
Имя файла, в частности, может содержать любое количество точек, например: libXIE.so.6.0
Строчные и прописные буквы в именах файлов различаются. Максимальная длина имени файла определяется значением системной переменной NAME_MAX, описанной в файле заголовков limits.h. Обычное ее значение для современных версий UNIX – 255 символов.
Файл полностью идентифицируется указанием пути к нему – последовательности каталогов, начиная от корневого. Отдельные каталоги в пути отделяются символом «/», например: /usr/local/samba/config/smb.conf
Помимо такого абсолютного имени файла можно использовать и относительное, когда путь задается относительно некоторого каталога, являющегося текущим. Получить имя текущего каталога можно с помощью команды pwd, а изменить – командой cd, например: cd /root
В результате выполнения команды текущим каталогом будет каталог /root.
Все каталоги, кроме корневого, содержат по крайней мере два входа, обозначающие текущий каталог и родительский каталог.
Эти имена можно использовать при задании пути к файлу: ../lib/libXIE.so.6.0 ./main_program
Каждый файл может иметь несколько имен (жестких связей), которые совершенно равноправны и могут быть зарегистрированы в различных каталогах. Связи файла устанавливаются командой ln.
ОС UNIX поддерживает следующие типы файлов:
– Обычные файлы. Используются для хранения данных.
– Каталоги. Содержат списки файлов.
– Специальные байтоориентированные файлы. Используются в качестве канала для доступа к периферийным устройствам, обмен с которыми производится последовательно, побайтно. Буферизация ввода-вывода отсутствует.
– Специальные блокоориентированные файлы. Используются в качестве канала для доступа к периферийным устройствам, обмен с которыми производится поблочно. В частности, это дисковые накопители. Обычно применяют блоки размером 1024 байта, а обмен с устройствами производится фрагментами длиной, кратной размеру блока. В обязательном порядке используется кэширование по чтению и записи.
– Специальные FIFO-файлы (коммуникационные файлы, поименованные программные каналы). Представляют собой очереди в адресном пространстве ядра ОС, через которые могут обмениваться данными процессы, не являющиеся родственниками.
– Специальные сокет-файлы. Представляют собой очереди в адресном пространстве ядра ОС, через которые могут обмениваться данными процессы, использующие интерфейс сокетов в области AF_UNIX (внутри одной системы UNIX).
– Символические ссылки. Файлы, содержащие пути к другим файлам и косвенно адресующие их (мягкие связи, устанавливаемые командой ln -s).
Поскольку UNIX является многопользовательской системой, права доступа к файлам регламентируются и проверяются при каждом обращении к ним. Выделяют три типа операций над файлами: чтение, запись, выполнение. Для каталога право на выполнение означает право на поиск в каталоге. Все операции с каталогами производятся только операционной системой.
Права на доступ к файлу регламентируются для следующих категорий пользователей: владелец файла; член группы владельца файла; все остальные пользователи.
Соответственно файл принадлежит своему владельцу и одной из групп, в которую он входит. Полную информацию о правах доступа к файлам в каталоге можно получить командой ls, например:
ls –l /usr/dict
Структура полученной информации следующая.
1 2 3 4 5 6 7 8
-rw-r--r-- 1 root root 2945 Nov 19 2012 extra.words
-rw-r--r-- 1 root root 409048 Nov 19 2012 linux.words
drwxr-xr-x 2 root root 1024 Nov 17 14:23 new_dict
-rw-r--r-- 1 root root 10 Nov 3 01:23 out.prn
lrwxrwxrwx 1 root root 11 Oct 7 21:38 words -> linux.words
Содержание колонок листинга:
1. Права доступа к файлу.
2. Число связей файла.
3. Владелец файла.
4. Группа владельца файла.
5. Длина файла в байтах.
6. Дата создания файла.
7. Время либо год создания файла.
8. Имя файла (для символической ссылки указывается также ее содержание).
Поле прав доступа к файлу структурировано следующим образом:
-
r
w
-
r
-
-
r
-
-
Тип файла
Права владельца
Права группы
Права остальных
Обозначение прав доступа:
r - право чтения; w - право записи; x - право выполнения.
Если какое-либо право отсутствует (операция запрещена), в соответствующей позиции поля прав появляется символ «-».
Обозначение типов файла:
- - обычный файл;
d - каталог;
l - символическая ссылка;
b - блокоориентированный специальный файл;
c - байториентированный специальный файл;
p - специальный FIFO файл ( поименованный программный канал);
s - специальный файл типа сокет.
Изменение прав доступа производится командой chmod, изменение владельца и группы – chown и chgrp. Кроме прав доступа, у файлов имеются дополнительные атрибуты, которые мы рассмотрим позже. Синтаксис команды chmod:
Например, изменение идентификатора владельца всех файлов текущего каталог на user: chown user *
Изменить эти идентификаторы файла может либо владелец файла, либо привилегированный пользователь.
На каждом устройстве (физическом носителе) создается своя файловая система. Корневой каталог находится на устройстве, с которого была загружена операционная система. Файловые системы других устройств становятся доступными после выполнения операции монтирования (например, командой mount). Операция монтирования предполагает присоединение корневого каталога файловой системы на устройстве к основному дереву каталогов в точке монтирования – некоторому каталогу. Содержимое этого каталога становится временно недоступным, вместо него доступно содержимое корневого каталога на устройстве. Обратная операция – демонтирование (например, командой umount) - должна быть выполнена, в частности, перед сменой носителя на устройстве.
Синтаксис команды монтирования: mount <устройство> <точка монтирования>
Устройство представляется специальным файлом, связанным с этим устройством. Например, монтирование в каталог /mnt: mount /dev/fd0 /mnt
Демонтирование производится следующей командой: umount <устройство>
Например, демонтирование дискетты: umount /dev/fd0
Команды монтирования и демонтирования обычно доступны только привилегированному пользователю.
Суперблоки всех смонтированных файловых систем, содержащие основную информацию о них, кэшируются. Соответственно, смена носителя без успешного выполнения демонтирования (если устройство допускает такую смену), может привести к разрушению файловой системы на этом носителе. К аналогичному результату может привести и выключение питания компьютера без остановки операционной системы (командами halt либо rebout). Для уменьшения вероятности такого разрушения периодически выполняется системный вызов sync, приводящий суперблоки всех смонтированных файловых систем в актуальное состояние и сбрасывающий на устройства все буферы. Возможно также выполнение команды sync вручную.