Файловая система Unix (FHS)
| Стандарт | Filesystem Hierarchy Standard |
|---|---|
| Предшественник | FSSTND (1994) |
| Текущая версия | FHS 3.0 (2015) |
| Сопровождение | Linux Foundation |
| Принцип | единое дерево с корнем /, устройства монтируются в каталоги |
| Виртуальные ФС | /proc, /sys, /dev, /run |
| Файловые системы | ext4, XFS, Btrfs, ZFS, tmpfs |
Файловая система Unix устроена как единое дерево каталогов с корнем /. В отличие от Windows с её дисками C: и D:, все устройства — диски, разделы, флешки, сетевые ресурсы — монтируются в каталоги этого дерева. Назначение стандартных каталогов в Linux описывает FHS (Filesystem Hierarchy Standard — стандарт иерархии файловой системы), благодаря которому администратор в любом дистрибутиве знает, где искать конфигурацию, логи и программы.[1]
История стандарта
В начале 1990-х каждый дистрибутив раскладывал файлы по-своему. В 1994 году вышел первый стандарт FSSTND, в 1997 году — FHS 2.0, обобщённый на все Unix-подобные системы, а в 2015 году Linux Foundation выпустила FHS 3.0. Современные системы на systemd дополнительно описывают иерархию в документе file-hierarchy(7).[3]
Основные каталоги
| Каталог | Назначение |
|---|---|
/ |
корень всей иерархии |
/etc |
конфигурация системы и служб: /etc/ssh/sshd_config, /etc/nginx/ |
/home |
домашние каталоги пользователей; /root — домашний каталог root |
/usr |
установленные программы и данные только для чтения: /usr/bin, /usr/lib, /usr/share |
/usr/local |
программы, установленные администратором вручную, вне пакетного менеджера |
/opt |
крупные сторонние пакеты целиком: /opt/google/chrome |
/var |
изменяющиеся данные: логи (/var/log), кэши, очереди, базы данных (/var/lib/postgresql) |
/tmp |
временные файлы, часто очищается при перезагрузке |
/srv |
данные, обслуживаемые сервером (сайты, FTP) |
/boot |
ядро и загрузчик |
/dev |
файлы устройств: /dev/sda, /dev/null, /dev/random |
/proc, /sys |
виртуальные ФС с информацией о процессах и ядре |
/run |
данные времени выполнения (PID-файлы, сокеты), в памяти |
/mnt, /media |
точки монтирования — временные и съёмные носители |
Исторически программы делились между /bin (необходимые для загрузки) и /usr/bin, потому что /usr мог находиться на отдельном диске. В большинстве современных дистрибутивов прошло объединение /usr (usr merge): /bin, /sbin и /lib стали символическими ссылками на соответствующие каталоги в /usr.[6]
«Всё есть файл»
Философия Unix представляет как файлы не только данные, но и устройства, процессы и параметры ядра:[2]
/dev/sda— диск целиком; запись в него — запись на диск напрямую./dev/nullпоглощает всё записанное,/dev/zeroвыдаёт нули,/dev/urandom— случайные байты./proc/<PID>/— сведения о процессе (см. Процессы и сигналы);/proc/cpuinfo,/proc/meminfo— о системе./sys/— устройства и параметры ядра; запись в некоторые файлы меняет настройки на лету.
Inode и ссылки
Файл на диске описывается inode — структурой с метаданными: тип, владелец, права, размер, время изменения и расположение данных. Имя файла хранится не в inode, а в каталоге — это просто запись «имя → номер inode».[4] Отсюда:
- Жёсткая ссылка (
ln a b) — ещё одно имя того же inode; файл удаляется, когда исчезает последнее имя. - Символическая ссылка (
ln -s target link) — отдельный маленький файл, содержащий путь к цели; может указывать на каталоги и другие файловые системы, но «ломается», если цель удалить. - Файловая система может закончиться не по месту, а по inode — если создано очень много мелких файлов (
df -i).
Монтирование
lsblk # диски и разделы
df -h # занятое место по точкам монтирования
sudo mount /dev/sdb1 /mnt/data # подключить раздел
findmnt # дерево смонтированных ФС
cat /etc/fstab # что монтируется при загрузке
du -sh /var/log/* | sort -h # что занимает место
Файл /etc/fstab описывает, какие разделы и куда монтировать при загрузке; современные системы указывают разделы по UUID, а не по именам вроде /dev/sda1, которые могут меняться.[5]
Типы файловых систем
| ФС | Особенности |
|---|---|
| ext4 | надёжный стандарт по умолчанию во многих дистрибутивах |
| XFS | хорошо масштабируется на больших дисках, по умолчанию в RHEL |
| Btrfs | копирование при записи, снимки, сжатие, подтома |
| ZFS | снимки, контрольные суммы, RAID, встроенное сжатие |
| tmpfs | ФС в оперативной памяти: /tmp, /run |
| overlayfs | слои поверх друг друга — основа образов Docker |
Практические советы
- Конфигурацию служб ищите в
/etc, логи — в/var/logили в журнале (journald и логи), данные служб — в/var/lib. - Не устанавливайте файлы вручную в
/usr/bin— это территория пакетного менеджера; для своего используйте/usr/localили/opt. - Следите за заполнением
/var: разросшиеся логи и кэши — частая причина остановки серверов. - Размещайте данные баз и важные каталоги на отдельных разделах или томах, чтобы переполнение не затронуло систему.