Структура файловой системы Linux

Андрей Михайлович Васильев

2020

Стандартизация системных вызовов ОС

При написании приложения под операционную систему на низком уровне разработчик ориентируется на системные вызовы — какие запросы ядру ОС могут быть сделаны и какие ответы могут быть получены

Одним из известных стандартов, описывающих системные вызовы для UNIX-подобных ОС, является POSIX. Если приложение нацелено на POSIX, тогда оно будет работать под всеми ОС, реализующих его

Данный стандарт реализуется в большинстве UNIX-подобных ОС

Для того, чтобы иметь гордое название UNIX, необходимо соответствовать стандарту Single UNIX Specification

Стандартизация структуры файловой системы

Помимо стандарта на системные вызовы разработчикам ПО необходимо определиться с тем как делить общее пространство — файловую систему, ФС

Для решения этой задачи в современном Linux используется Filesystem Hierarchy Standard, в котором описывается структура ФС и местонахождение ряда ключевых файлов для ОС

Нельзя сказать, что этому стандарту на 100% соответствует ФС каждого дистрибутива Linux, однако большая его часть соблюдается во всех. Это позволяет пользователям за разумное время переходить с одного дистрибутива на другой

Знакомая структура позволяет

Корневой каталог ФС

/ — корневой каталог, содержащий всю файловую иерархию

Корневой каталог ФС, продолжение

Каталог /usr

/usr является наверное самым большим каталогом в обычной установке Linux, так как содержит приложения и файлы, необходимые для их работы

Каталог /var

/var в отличие от большинства предыдущих каталогов предназначен для хранения изменяемых данных. Примерами таких данных являются: содержимое баз данных, журналы работы приложений и так далее

Сложности статической структуры ФС

В UNIX-подобных ОС структура ФС представляет собой единое дерево. Чтобы добраться до файла или каталога необходимо построить путь

Постоянное использование абсолютных или относительных путей в некоторых ситуациях может быть не удобным:

Символические ссылки

Для решения поставленных выше задач используются символические ссылки — специальные файлы, которые содержат путь к целевому файлу или каталогу

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

Ссылки де-факто позволяют сделать переходы между каталогами вне системы единого дерева, формируя некоторый граф

Просмотр состояния ссылки

Для отображения содержимого ссылки используется ls -l /usr/bin/discord

$ ls -l /usr/bin/discord
lrwxrwxrwx 1 root root 24 сен 10 20:52 /usr/bin/discord ->
    ../share/discord/Discord

Состояние ссылок

В стандартной цветовой схеме Bash рабочие ссылки отображаются светло-синим, а сломанные — красным

Жёсткие ссылки

Жёсткие ссылки появились исторически раньше символических

Основные отличия:

Потенциальное преимущество жёстких ссылок по сравнению с символическими — это скорость доступа, но в текущих реалиях оно минимально

Следует использовать символические ссылки

Управление ссылками

Создание ссылок

Для создания ссылок используется приложение ln с флагом -s — символические

Быстрый доступ к cdrom из домашней директории

$ ln -s /mnt/cdrom ~/cdrom

Удаление ссылок

Для удаления ссылки достаточно её удалить как и любой другой файл

Важно если у вас есть ссылка на директорию, то не стоит выполнять это действие рекурсивно