Многих интересует, как в Linux организована файловая система, чем она отличается от той, которая используется в Windows. В данной статье мы рассмотрим основные концепции файловой системы Linux.
Любая файловая система Linux включает в себя несколько основных концепций, связанных с операционной системой Unix: файлы представляются индексными дескрипторами (inode), каталоги это просто файлы, содержащие список записей, а доступ к устройствам может быть осуществлен посредством запросов через файлы устройств.
Индексные дескрипторы. Любой файл представлен структурой, называемой индексным дескриптором. Каждый дескриптор содержит описание файла, которое включает в себя тип файла, права доступа, владельцев, ячейки времени изменения файла, размер, указатели на блоки данных.
Адреса блоков данных, зарезервированных для файла, хранятся в его индексном дескрипторе. При запросе пользователем операции ввода/вывода к файлу, ядро преобразует текущее смещение в номер блока, использует этот номер в качестве указателя в таблице адресов блоков, а затем производит требуемую операцию ввода/вывода.
Каталоги. Каталоги являются элементами иерархического дерева. Любой каталог может содержать файлы и подкаталоги. Каталоги – это файлы отдельного типа. В действительности, каталог – это файл, содержащий список записей. Каждая запись содержит номер индексного дескриптора и имя файла. Когда какой-либо процесс использует путь к файлу, ядро ищет в каталогах соответствующий номер индексного дескриптора. После того, как имя файла было преобразовано в номер индексного дескриптора, этот дескриптор помещается в память и затем используется в последующих запросах.
Ссылки. Концепция файловых систем Unix включает в себя понятие ссылки. Один индексный дескриптор может быть связан с несколькими именами файлов. Дескриптор содержит поле, хранящее число, с которым ассоциируется файл. Добавление ссылки заключается в создании записи каталога, где номер индексного дескриптора указывает на другой дескриптор, и увеличении счетчика ссылок в дескрипторе.
При удалении ссылки ядро уменьшает счетчик ссылок и удаляет дескриптор, если этот счетчик станет равным нулю. Такие ссылки называются жесткими и могут использоваться только внутри одной файловой системы (нельзя создать ссылку для файла из другой файловой системы). Более того, жесткая ссылка может указывать только на файл (жесткая ссылка на каталог может привести к зацикливанию в файловой системе). В большинстве Unix-систем существует еще один тип ссылок.
Эти ссылки, содержащие только имя файла, называются символическими. При обработке ядром таких ссылок, во время преобразования пути к файлу в индексный дескриптор, ядро заменяет имя ссылки на содержимое дескриптора (т.е. на имя файла назначения) и заново интерпретирует путь к файлу. Так как символическая ссылка не указывает на индексный дескриптор, то возможно создание ссылок на файлы, расположенные в другой файловой системе. Эти ссылки могут указывать на файл любого типа, даже на несуществующий.
Символические ссылки широко используются, так как они не имеют тех ограничений, которые есть у жестких ссылок. Однако они занимают некоторый объем на диске, где располагается индексный дескриптор и блоки данных. Их использование может привести к определенным задержкам при преобразовании пути к файлу в индексный дескриптор, что связано с тем, что при обработке символической ссылки ядро должно заново интерпретировать путь к файлу.
Файлы устройств. В Unix-подобных операционных системах доступ к устройствам осуществляется через специальные файлы. Такой файл не занимает места в файловой системе. Он является только точкой доступа к драйверу устройства.
Существует два типа файлов устройств: символьные и блочные.
При использовании символьного типа имеется возможность обмена данными с устройством только в символьном режиме, в то время как файлы устройств блочного типа позволяют производить обмен только блоками с использованием буфера. При запросе ввода/вывода к файлу устройства, этот запрос перенаправляется к драйверу соответствующего устройства. Каждому подобному файлу соответствует старший номер, который определяет тип устройства, и младший номер, который определяет само устройство.
Таким образом, все устройства, диски, файлы соединены в одну файловую систему, что является довольно удобным. В Linux файловая система имеет четко определенную структуру каталогов, которая позволяет быстро определять, где что находится и не путаться по каталогам в поисках нужной информации. Хотя никто не запрещает изменить структуру каталогов под себя. Просто это такой стандарт.
Основные каталоги в Linux:
/ – корневой каталог; /bin – основные программы; /boot – каталог с файлами, используемыми при загрузке системы; /dev – каталог с файлами устройств; /etc – файлы конфигурации; /home – домашние каталоги пользователей, зарегистрированных в системе; /lib – библиотеки и модули ядра; /mnt – точки монтирования (подключения) дисковых накопителей (CD-ROM, Floppy), т.е. каталоги, которые будут указывать на разделы, накопители; /root – каталог администратора системы; /sbin – основные системные программы; /tmp – каталог временных файлов; /usr – каталог, в котором содержатся все установленные пользовательские программы, документация и т.д.; /var – каталог с различными данными для программ; /proc – виртуальный каталог, в котором файлы хранят информацию о системных процессах.
Вот такая она, файловая система Linux. Конечно, самих файловых систем (реализаций) для Linux множество. Но принципы построения одни.
X-Stranger
xstranger@tut.by