Файловая система в UNIX
Логическая файловая система в ОС UNIX (или просто файловая система) – это иерархически организованная структура всех каталогов и файлов в системе, начинающаяся с корневого каталога. Файловая система UNIX обеспечивает унифицированный интерфейс доступа к данным, расположенным на различных носителях, и к периферийным устройствам.
Логическая файловая система может состоять из одной или нескольких физических файловых (под)систем, являющихся разделами физических носителей (дисков, CD-ROM или дискет).
В операционных системах UNIX пользователю предоставляется возможность объединения файловых систем, находящихся на разных устройствах, в единую файловую систему, описываемую единым деревом каталогов. Такая операция называется монтированием.
Среди всех имеющихся в системе логических дисковых устройств операционная система выделяет одно устройство, называемое системным, файловая система которого назначается корневой. Для связи иерархий файлов в корневой файловой системе выбирается некоторый существующий каталог, обычно с именем mnt или media(рис. 2).
Рис. 2. Пример логической файловой структуры
После выполнения монтирования (при помощи команды mount) выбранный каталог, например mnt,становится корневым каталогом подключаемой файловой системы. После монтирования общей файловой системы для пользователя нет логической разницы между корневой и смонтированной файловыми системами. Именование файлов производится так же, как если бы с самого начала файловая система была единой.
Файловая система контролирует права доступа к файлам, выполняет операции создания и удаления файлов, а также выполняет запись/чтение данных файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы, следовательно, права доступа к файлам определяют привилегии пользователя в системе.
Файловая система обеспечивает перенаправление запросов, адресованных периферийным устройствам, соответствующим модулям подсистемы ввода-вывода.
Файлы и каталоги
Иерархическая структура файловой системы UNIX упрощает ориентацию в ней. Каждый каталог, начиная с корневого (/), в свою очередь, содержит файлы и другие каталоги (подкаталоги). Каждый каталог содержит также ссылку на родительский каталог (для корневого каталога родительским является он сам), представленную каталогом с именем две точки (..) и ссылку на самого себя, представленную каталогом с именем точка (.).
Каждый процесс имеет текущий каталог. Сразу после регистрации текущим каталогом пользователя (на самом деле, процесса – начальной программы, обычно, командного интерпретатора) становится начальный каталог пользователя, указанный в файле /etc/passwd.
Каждый процесс может сослаться (назвать) на любой файл или каталог в файловой системе по имени. В ОС UNIX поддерживается три способа указания имен файлов:
· Краткое имя. Имя, не содержащее специальных метасимволов косая черта (/), является кратким именем файла. По краткому имени можно сослаться на файлы текущего каталога. Например, команда ls -l profile требует получить полную информацию о файле profile в текущем каталоге.
· Относительное имя. Имя, не начинающееся с символа косой черты (/), но включающее такие символы. Оно ссылается на файл относительно текущего каталога. При этом для ссылки на файл или каталог в каком-то другом каталоге используется метасимвол косой черты (/). Например, команда ls -l ../profile требует получить полную информацию о файле profile в родительском каталоге текущего каталога, а команда vi doc/text.txt требует открыть в редакторе vi файл text.txt в подкаталоге doc текущего каталога.
· Полное имя. Имя, начинающееся с символа косой черты (/). Оно ссылается на файл относительно корневого каталога. Это имя еще называют абсолютным или именем от корня, так как оно, в отличие от предыдущих способов задания имени, ссылается на один и тот же файл независимо от текущего каталога. Например, команда ls -l /home/user01/profile требует получить полную информацию о файле profile в каталоге /home/user01 независимо от того, в каком каталоге она выполняется.
Другие символы, кроме косой черты, не имеют в именах файлов UNIX особого значения (это не метасимволы). В большинстве файловых систем имена файлов могут иметь длину до 255 символов. Имя может содержать практически любые символы, кроме: / \ ? > < | * «. При этом расширение файла (тип файла в ОС MS DOS – точка и три символа) является просто частью имени, как и другие символы, и ни какой другой функции не выполняет. Следует отметить, что ОС UNIX чувствительна к регистру символов, поэтому, например, имена файлов File и file будут различными.
Для изменения текущего каталога используется команда cd [каталог]. Если каталог не указан, используется значение переменной среды $HOME (обычно это начальный каталог пользователя). Чтобы сделать новый каталог текущим (войти в каталог), нужно иметь для него право на выполнение.
Для просмотра информации о типах (и других атрибутах) файлов в ОС UNIX используется команда ls, которая выдает информацию об указанных файлах или о файлах и каталогах в текущем каталоге (если файл не задан). Формат и подробность выдаваемой информации зависит от опций. Основным форматом результатов ls является так называемый длинный листинг (задаваемый опцией -l). Например, команда ls -l выведет длинный листинг текущего каталога.
В UNIX существует несколько типов файлов, различающихся по функциональному назначению и действиям операционной системы при выполнении тех или иных операций над ними.
Обычный файл.Представляет собой наиболее общий тип файлов, содержащий данные в некотором формате. Для операционной системы такие файлы представляют собой просто последовательность байтов. К этим файлам относятся текстовые файлы, двоичные данные и выполняемые программы.
В длинном листинге (выводимом командой ls –l) признаком обычного файла является дефис (-) в первой позиции первого столбца, например:
-rw-rw-r-- 1 root sys 8296 Фев 23 15:39 ps_data
Обычные файлы создаются текстовыми редакторами (текстовые), компиляторами (двоичные), прикладными программами с помощью соответствующего системного вызова или путем перенаправления вывода, например: cat > f1.txt или > f1.txt (создается файл f1.txt в текущем каталоге). При этом используется перенаправление со стандартного ввода – клавиатуры в файл. Закончить ввод данных с клавиатуры можно с помощью комбинации клавиш Ctrl + с. Команда cat >> fileдобавляет данные в файл, а не перезаписывает его.
Каталог.С помощью каталогов формируется логическое дерево файловой системы. Каталог – это файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную информацию – метаданные, позволяющие операционной системе производить действия с этими файлами. Каталоги определяют положение файла в дереве файловой системы. В длинном листинге признаком каталога является символ d в первой позиции первого столбца:
drwxr-xr-x 2 informix informix 115 Фев 24 13:05 txt
Каталоги создаются командой mkdir.
Специальный файл устройства.Этот тип файловобеспечивает доступ к физическим устройствам. В UNIX различают символьные (character special device) и блочные (block special device) файлы устройств. Доступ к устройствам осуществляется путем открытия, чтения и записи в специальный файл устройства.
Символьные файлы устройств используются для небуферизованного обмена данными с устройством. Блочные файлы устройств позволяют производить обмен данными в виде пакетов фиксированной длины – блоков.
В длинном листинге признаком специального символьного и блочного устройств являются символы с и b в первой позиции первого столбца, соответственно:
crw------- 1 root sys 77, 0 Фев 14 14:03 nv@0,0:0
brw-r----- 1 root sys 29, 0 Апр 20 2001 sd@0,0:a
Специальные файлы устройство создаются командой mknod.
Создавать специальные файлы устройств обычно может только пользователь root.
FIFO – именованный канал.Такой файл используется для связи между процессами по принципу очереди. Именованные каналы впервые появились в UNIX System V, но большинство современных систем поддерживают этот механизм.
В длинном листинге признаком именованного канала является символ p в первой позиции.
Именованные каналы создаются командой mknod: mknod имя p
Связь.Каталог содержит имена файлов и указатели на их метаданные. Такая архитектура позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с метаданными и, соответственно, с данными файла, в то время как сам файл существует независимо от того, как его называют в файловой системе. Стандарт POSIX (Portable Operating System Interface) требует реализовать поддержку двух типов связей – жестких и символических.
Жесткой связью (hard link) считается элемент каталога, указывающий непосредственно на некоторый индексный дескриптор. Жесткие связи очень эффективны, но у них существуют определенные ограничения, так как они могут создаваться только в пределах одной физической файловой системы. Когда создается такая связь, связываемый файл должен уже существовать. Кроме того, каталоги не могут связываться жесткой связью.
Символическая связь (symbolic link) – это специальный файл, который содержит путь к другому файлу. Указание на то, что данный элемент каталога является символической связью, находится в индексном дескрипторе. Поэтому обычные команды доступа к файлу вместо получения данных из физического файла, берут их из файла, имя которого приведено в связи. Этот путь может указывать на что угодно: это может быть каталог, он может даже находиться в другой физической файловой системе, более того, указанного файла может и вовсе не быть.
Количество жестких связей файла (а также количество файлов в каталоге, если файл является каталогом) отображается во втором поле длинного листинга, например 2:
-rw-r--r-- 2 ivanov 50 643 Мар 26 15:37 f3.txt
Для создания связей используется команда ln: ln [ -s ] исходный_файл цель.
В результате выполнения создается жесткая (по умолчанию) или символическая (если указана опция -s) связь с заданным именем цель. Если файл с таким именем уже существует, он перезаписывается. Если цель не указана, то создается связь на указанный исходный_файл с таким же именем в текущем каталоге.
В длинном листинге признаком символической связи является символ l в первой позиции первого столбца:
lrwxrwxrwx 1 ivanov 50 643 Мар 26 15:57 f4 -> f2
Сокет.Сокеты позволяют представить в виде файла в логической файловой системе сетевое соединение. Создание сокетов выходит за пределы данного курса, хотя понятно, что для этого ядро предлагает соответствующий системный вызов. В длинном листинге признаком сокета является символ s в первой позиции первого столбца.
К основным операциям для работы с файлами, помимо создания и просмотра характеристик, можно отнести копирование (команда cp), удаление (rm, rmdir) и перемещение (переименование) (mv), а также просмотр содержимого (команда cat).
При работе в консольном режиме часто используется файловый менеджер Midnight Commander, который запускается командой mc. В этом случае для просмотра и редактирования файлов используется клавиша F4. Копирование осуществляется клавишей F5, переименование (перемещение) – F6, создание каталога – F7, удаление – F8. Скрытие (открытие) окна файлового менеджера выполняется комбинацией Ctrl + o.