open atlas
↑ К треку
Linux: операционная система LIN · 01 · 03

Иерархия файловой системы

В Linux одно дерево файловой системы с корнем /. Filesystem Hierarchy Standard назначает каждому каталогу верхнего уровня роль: /etc для конфигурации, /var для изменяемого состояния, /proc и /sys для живых данных ядра. Всё, включая устройства и параметры ядра, — это файл.

LIN Junior ◷ 21 min
Уровень
ОсновыJuniorMiddleSenior

На Windows у тебя есть C:\, D:\, C:\Program Files, C:\Users. На Linux есть ровно одно дерево с корнем в /. Всё — диски, USB-накопители, сетевые ресурсы, запущенные процессы и настройки ядра — выглядит как файл где-то в этом дереве. Сетевая карта — файл в /dev. Список запущенных процессов — директория в /proc. Параметр ядра для размеров TCP-буферов — файл в /proc/sys/net. Как только ты знаешь, где что живёт в дереве и почему, ты знаешь, куда смотреть, когда что-то в системе работает неправильно.

Цель

После этого урока ты сможешь ориентироваться в основных каталогах верхнего уровня, объяснить, что относится к /etc, /var, /usr, /proc, /sys, /dev и /home, а также использовать модель «всё есть файл» для чтения живого состояния системы из /proc.

1

Одно дерево, всё смонтировано в него. У Linux единое пространство имён с корнем в /. Дополнительные диски, разделы и сетевые файловые системы монтируются по конкретным путям внутри дерева — они не получают букв дисков. Второй диск может быть смонтирован в /mnt/data, USB-накопитель — в /media/alice/usb. С точки зрения каждой программы есть только одна файловая система.

Эта конструкция пришла из Unix: «всё есть файл». Не метафорически — ядро открывает аппаратные устройства, конечные точки межпроцессного взаимодействия и своё внутреннее состояние как записи в пространстве имён файловой системы. Чтение /dev/sda даёт сырые байты диска. Чтение /proc/1/status даёт информацию о PID 1. Запись в /sys/block/sda/queue/scheduler меняет планировщик дискового I/O во время работы.

2

/etc — статическая конфигурация. Исторически «et cetera», теперь канонное место для общесистемных конфигурационных файлов. Программы читают из /etc при запуске; они не пишут в него во время нормальной работы.

ls /etc | head -20
cat /etc/hostname          # имя машины
cat /etc/os-release        # идентификация дистрибутива
cat /etc/resolv.conf       # конфигурация DNS-резолвера
ls /etc/systemd/system/    # файлы юнитов systemd, которые ты добавил

Правило: если ты редактируешь поведение демона, ты редактируешь файл в /etc. Если конфигурационный файл отсутствует в /etc, демон возвращается к скомпилированным значениям по умолчанию.

3

/var — переменное (изменяемое) состояние. Всё, что меняется во время нормальной работы, живёт здесь: логи, очереди почты, базы данных пакетов, кэши, файлы блокировок.

ls /var/log/               # системные и прикладные логи
ls /var/lib/               # постоянное состояние приложений (база dpkg, контейнеры)
ls /var/cache/             # кэшированные данные, которые можно воссоздать
ls /var/run/               # (симлинк на /run) PID-файлы, сокеты
tail -f /var/log/syslog    # следить за системным логом в реальном времени

Практическое следствие: если диск заполняется, /var/log часто является виновником. Если сервис не запускается из-за «не удаётся получить блокировку», файл блокировки обычно в /var/run или /var/lock. Размещение /var на отдельном разделе — классическая техника защиты сервера: рост логов не сможет заполнить корневой раздел и уронить ОС.

4

/usr — установленные программы. Сокращение от «Unix System Resources» (не «user»). Содержит подавляющее большинство установленного программного обеспечения:

  • /usr/bin — пользовательские исполняемые файлы (grep, vim, python3, nginx)
  • /usr/lib — разделяемые библиотеки и приватные данные программ
  • /usr/share — архитектурно-независимые данные (man-страницы, файлы локализации, иконки)
  • /usr/local — программное обеспечение, которое ты скомпилировал и установил сам (не через пакетный менеджер)

Корневые /bin и /sbin теперь обычно являются симлинками на /usr/bin и /usr/sbin в современных дистрибутивах (так называемый «usr merge»). Это упрощает bind-монтирование и образы контейнеров.

which nginx                # /usr/sbin/nginx
ls -la /bin                # симлинк → /usr/bin на современном Debian/Ubuntu
5

/proc и /sys — живые окна ядра. Это виртуальные файловые системы, генерируемые полностью в памяти ядра — ничего не записывается на диск. Чтение файла в /proc или /sys вызывает функцию ядра, которая собирает данные по запросу.

cat /proc/cpuinfo          # модель CPU, ядра, функции
cat /proc/meminfo          # использование RAM в байтах
cat /proc/loadavg          # средняя нагрузка системы
cat /proc/uptime           # секунды с момента загрузки
cat /proc/version          # строка версии ядра
cat /proc/mounts           # текущие смонтированные файловые системы
cat /proc/net/tcp          # таблица TCP-сокетов в hex

/dev хранит файлы устройств. /dev/null отбрасывает всё записанное в него. /dev/urandom предоставляет криптографически стойкие случайные байты. /dev/sda — первый SATA-диск. Символьные и блочные файлы устройств — механизм, с помощью которого программы пользователя взаимодействуют с железом через слой драйверов устройств ядра.

Разбор примера

Диагностика переполнения диска без GUI.

df -h                      # использование диска по точкам монтирования (в человекочитаемом виде)
du -sh /var/log/*          # размер каждой директории логов
du -sh /var/cache/apt/     # кэш пакетов apt

Вывод df показывает, какая файловая система заполнена. Если это /var, то du внутри /var/log находит виновников. Типичные причины: /var/log/journal (постоянный журнал systemd без настроенного ограничения размера), ротированные nginx-логи, которые никогда не удалялись, или кэш пакетов apt после многих обновлений.

# Очистить кэш apt для освобождения места
sudo apt clean
# Удалить старые журналы, оставив только последние 500 МБ
sudo journalctl --vacuum-size=500M

Обе команды работают через ядро — apt clean удаляет файлы в /var/cache/apt/archives, journalctl --vacuum-size удаляет файлы журнала в /var/log/journal. Никакой магии: всё есть файл, файлы имеют размеры, размеры суммируются.

Почему это работает

macOS также имеет единое дерево файловой системы с корнем в /, и некоторые имена директорий совпадают (/etc, /tmp, /usr). Но FHS — стандарт Linux/GNU; у macOS свои соглашения. Приложения macOS живут в /Applications, данные пользователя — в ~/Library, и нет /var/log/syslog (используй log show вместо этого). При отладке на macOS пути отличаются, даже если концепция та же.

Частая ошибка

Никогда не храни данные приложения напрямую в / или /usr — они будут перезаписаны при обновлениях ОС или пакетов. Правильные места: конфигурация в /etc, постоянное состояние в /var/lib/<appname>, временные файлы в /tmp (очищается при перезагрузке) или /var/tmp (переживает перезагрузку). Приложения, пишущие в /usr, создают конфликты с пакетным менеджером и являются классическим источником ошибок «работало до обновления».

Проверь себя
Викторина

Ты читаешь файл /proc/1/status и видишь использование памяти PID 1 (systemd). Что именно произошло?

Итог

У Linux единое дерево файловой системы с корнем в /. Filesystem Hierarchy Standard назначает смысл каждому каталогу верхнего уровня: /etc для статической конфигурации, /var для изменяемого состояния и логов, /usr для установленных программ, /home для данных пользователей. /proc и /sysвиртуальные файловые системы, генерируемые в памяти ядра: чтение их запрашивает живое состояние ядра. /dev открывает железо как файлы. Принцип «всё есть файл» не метафора: устройства, процессы, параметры ядра и сетевые интерфейсы — все появляются как пути в дереве и могут быть прочитаны или записаны стандартным файловым I/O.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 4 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources1
expand
  1. 01

Trademarks belong to their respective owners. Editorial reference only.