Иерархия файловой системы Linux: зачем нужен FHS и как устроена система
В отличие от операционных систем семейства Windows, где дисковое пространство разделено на независимые буквенные разделы (C:, D:), в Linux используется единое древо файловой системы, начинающееся с корневого каталога /. Чтобы программное обеспечение, системные службы, утилиты и автоматизированные скрипты работали абсолютно одинаково на любых дистрибутивах (Debian, Ubuntu, RHEL, Alpine, Arch), используется общепринятый стандарт Filesystem Hierarchy Standard (FHS). Понимание принципов FHS необходимо каждому системному разработчику, администратору и DevOps-инженеру для правильного размещения конфигураций, логов, исполняемых файлов и виртуальных интерфейсов взаимодействия с ядром.
Двумерная классификация данных в FHS
Фундаментальный принцип стандарта FHS основан на разделении абсолютно всех файлов в системе по двум ортогональным признакам: изменчивости и возможности сетевого разделения.
1. Разделяемые (Shareable) против Неразделяемых (Unshareable)
- Разделяемые файлы могут передаваться между различными хостами по сети (например, через сетевую файловую систему NFS) без какой-либо модификации. К ним относятся системные программы в
/usr/bin, мануалы и документация в/usr/share/man. - Неразделяемые файлы строго привязаны к конкретному серверу, его конфигурации и аппаратному обеспечению. Примерами служат сетевые настройки в
/etc, логи в/var/logи файлы загрузчика.
2. Статические (Static) против Изменяемых (Variable)
- Статические файлы изменяются только при вмешательстве администратора или во время обновления системных пакетов (бинарные файлы, библиотеки, документация).
- Изменяемые файлы генерируются автоматическими службами в процессе работы системы без прямого участия человека (логи, PID-файлы, очереди сообщений, базы данных).
Главные каталоги и их системные роли
Рассмотрим ключевые ветви в дереве файловой системы Linux и их практическое назначение:
/boot: Содержит файлы, необходимые для первичной загрузки операционной системы. Здесь хранятся образ ядра Linux (vmlinuz), начальный рамдиск (initramfs) и конфигурации загрузчика GRUB./dev: Каталог спецфайлов устройств. Каждое подключенное дисковое накопительное устройство, терминал или виртуальный генератор случайных чисел представлены файлом (/dev/sda,/dev/null,/dev/urandom), управлением которыми занимается демонudev./etc: Хранилище текстовых конфигурационных файлов системы и установленных сервисов. Файлы здесь статические и неразделяемые./var: Каталог для изменяемых данных. Внутри располагаются логи сервисов (/var/log), базы данных (/var/lib), временные файлы почтовых очередей (/var/spool) и блокировки процессов (/var/lock). Разделение/varи/etcпозволяет монтировать раздел конфигураций в режиме "только чтение" (read-only) для повышения безопасности./usr: Каталог пользователя второй степени (Secondary Hierarchy). В нем находятся общесистемные приложения (/usr/bin), системные библиотеки (/usr/lib) и заголовки C-файлов (/usr/include)./optи/srv:/optпредназначен для установки стороннего проприетарного или монолитного ПО (например, сторонних баз данных), которое хранит бинарники и библиотеки в своей собственной поддиректории./srvсодержит конкретные данные веб-серверов или FTP-сервисов, предоставляемых данной машиной наружу./mediaи/mnt:/mediaиспользуется для автоматического монтирования съемных накопителей (USB-флешек, оптических дисков)./mntслужит стандартной точкой временного монтирования файловых систем администратором вручную./tmpпротив/var/tmp: В/tmpхранятся временные файлы, которые могут очищаться при перезагрузке или по таймеру (systemd-tmpfiles). В/var/tmpпомещаются временные данные, которые должны сохраняться между перезапусками системы.
Флаги монтирования и системная безопасность
Разделение файловой системы на специализированные каталоги FHS позволяет применять индивидуальные флаги монтирования на уровне таблицы /etc/fstab для повышения защищенности сервера:
- Флаг
noexec: Запрещает выполнение бинарных файлов на целевом разделе. Применениеnoexecк директориям/tmp,/var/tmpи/homeпредотвращает запуск вредоносных исполняемых файлов, загруженных через веб-уязвимости. - Флаг
nosuid: Блокирует действие битов SUID/SGID, не позволяя локальным пользователям повышать привилегии через утилиты на монтируемом диске. - Флаг
nodev: Запрещает интерпретацию спецфайлов символьных и блочных устройств на разделе.
Права доступа DAC и MAC в контексте FHS
Структура FHS тесно связана с системами разграничения доступа:
- Стандартная модель DAC (Discretionary Access Control) оперирует правами пользователей, групп и битами
chmod/chownдля файлов в/etcи/var. - Мандатная модель MAC (Mandatory Access Control, например SELinux или AppArmor) накладывает метки безопасности на каталоги FHS. Например, SELinux блокирует веб-серверу доступ к файлам в
/etc/shadow, даже если процесс запущен от пользователя с высокими правами.
Виртуальные файловые системы ядра: /proc и /sys
Особое место в Linux занимают псевдо-файловые системы /proc и /sys. Они не занимают реального места на диске и существуют только в оперативной памяти как интерфейс связи с ядром ОС (реализация концепции Unix "всё есть файл").
/proc(procfs): Виртуальный интерфейс доступа к структурам данных процессов и системным метрикам. Директории с числами (/proc/1,/proc/self) содержат информацию о конкретных процессах (PID), открытых дескрипторах файлов, карте памяти и переменных окружения./sys(sysfs): Иерархическое представление аппаратуры, драйверов и модулей ядра. Через файлы в/sysинженеры могут менять параметры сетевых карт, управлять частотой процессора и считывать технические метрики устройств.
Тенденции развития: UsrMerge и контейнеризация
В современных дистрибутивах Linux (Debian, Fedora, Arch) реализуется инициатива UsrMerge. Историческое разделение между /bin и /usr/bin, а также /lib и /usr/lib (когда корневые /bin требовались для минимального восстановления системы на отдельном диске) уходит в прошлое. Теперь каталог /bin является символической ссылкой на /usr/bin, что упрощает структуру и исключает дублирование системных утилит.
Понимание FHS позволяет правильно изолировать монтируемые контейнеры, настраивать правила безопасности SELinux/AppArmor и создавать предсказуемые CI/CD пайплайны развертывания ПО.

