1. Архитектура Linux и иерархия файловой системы согласно стандарту FHS
Архитектура Linux и иерархия файловой системы согласно стандарту FHS
В 1991 году Линус Торвальдс отправил в новостную группу comp.os.minix сообщение, которое вошло в историю: «Я делаю (бесплатную) операционную систему (просто хобби, не будет большой и профессиональной, как gnu) для клонов 386(486) AT». Спустя десятилетия это «хобби» управляет суперкомпьютерами, облачными гигантами и миллиардами смартфонов. Однако для новичка, привыкшего к логике Windows с её разделением на диски C: и D:, структура Linux часто кажется хаотичным набором папок с короткими, не всегда понятными названиями вроде /etc, /var или /usr. Понимание Linux начинается не с заучивания команд терминала, а с осознания того, как устроено «тело» системы и по каким правилам в нём распределены данные.
Монолитное ядро и уровни абстракции
Linux — это не просто набор программ, а слоистая структура, где каждый уровень выполняет строго определенную роль. В самом низу находится аппаратное обеспечение (Hardware), а на вершине — пользовательские приложения. Между ними располагается ядро (Kernel) — сердце системы.
Архитектура Linux классифицируется как монолитная. Это означает, что основные функции — управление памятью, планирование процессов, драйверы устройств и файловые системы — работают в едином адресном пространстве ядра. В отличие от микроядерных систем, где драйверы вынесены в пространство пользователя, монолитное ядро обеспечивает высокую производительность за счет отсутствия лишних переключений контекста.
Однако современное ядро Linux — это «динамический монолит». Оно поддерживает модули (LKM — Loadable Kernel Modules), которые можно загружать и выгружать «на лету» без перезагрузки системы. Если вы подключаете новую USB-видеокамеру, ядро подгружает соответствующий модуль драйвера, расширяя свои возможности в реальном времени.
Взаимодействие между пользователем и ядром происходит через системные вызовы (System Calls). Когда программа хочет прочитать файл или отправить пакет в сеть, она не обращается к железу напрямую — это запрещено в целях безопасности. Она делает запрос к ядру. Над системными вызовами надстроена стандартная библиотека C (glibc), которая предоставляет программистам удобный интерфейс.
Корень всего: логика единого дерева
Главное концептуальное отличие Linux от Windows — отсутствие понятия «диск» как независимой единицы в иерархии путей. В Windows каждый физический раздел или накопитель получает свою букву. В Linux существует единое дерево каталогов, корнем которого является символ / (slash).
Все устройства — жесткие диски, флешки, сетевые хранилища — «монтируются» в определенные точки этого дерева. Например, ваш основной SSD может быть смонтирован в /, а старый жесткий диск с архивом фотографий — в папку /mnt/photos. Для пользователя и программ это выглядит как единая файловая система, хотя физически данные могут находиться на разных носителях.
Эта концепция тесно связана с философией Unix: «Всё есть файл». Не только текстовые документы, но и жесткие диски, клавиатуры, процессы и даже сетевые соединения представлены в системе как файлы. Это позволяет использовать одни и те же инструменты (например, cat или grep) для работы как с текстом, так и с аппаратными данными.
Стандарт FHS: зачем нужна строгость
Чтобы разработчики программ и системные администраторы не гадали, где искать конфигурационные файлы или исполняемые бинарники, был создан стандарт Filesystem Hierarchy Standard (FHS). Он определяет назначение каждого основного каталога. Без FHS каждый дистрибутив (Ubuntu, Fedora, Arch) превратился бы в изолированный остров со своей логикой размещения файлов, что сделало бы невозможным создание универсального софта.
Согласно FHS, файлы делятся на две категории по двум осям:
Верхний уровень: системные каталоги
Рассмотрим структуру, которую вы увидите, введя команду ls / в любом стандартном дистрибутиве.
#### /bin и /sbin: основа выживания Здесь хранятся исполняемые файлы (бинарники).
/bin (binaries) содержит команды, доступные всем пользователям: ls, cp, cat, bash. Это критически важные утилиты, необходимые для работы системы даже в однопользовательском режиме восстановления./sbin (system binaries) предназначен для системного администратора (root). Здесь лежат инструменты для управления дисками, сетью и файловыми системами, такие как fdisk, ifconfig или reboot. Обычный пользователь может не иметь доступа к их запуску из-за ограничений прав.#### /etc: нервный центр
Каталог /etc (et cetera) — это место хранения всех системных конфигурационных файлов. Если вам нужно изменить IP-адрес, настройки SSH-сервера или список пользователей, вы идете сюда. Важно помнить: в /etc должны лежать только текстовые файлы конфигурации. Исполняемым файлам здесь не место.
> Исторический факт: название "et cetera" (и так далее) появилось потому, что на заре Unix в этот каталог сваливали всё, что не подошло под другие категории. Сегодня это строго структурированное хранилище настроек.
#### /dev: файлы устройств
Согласно принципу «всё есть файл», ваши устройства живут в /dev (devices).
/dev/sda или /dev/nvme0n1 — это ваш жесткий диск или SSD./dev/tty — терминалы./dev/null — «черная дыра». Всё, что вы записываете в этот файл, исчезает навсегда, а чтение из него мгновенно возвращает признак конца файла (EOF).#### /proc и /sys: виртуальные окна в ядро Эти каталоги не существуют на диске. Это виртуальные файловые системы (procfs и sysfs), которые ядро создает в оперативной памяти.
/proc содержит информацию о процессах и состоянии ядра. Например, файл /proc/meminfo покажет текущее использование RAM, а папки с цифрами (например, /proc/1234) содержат данные о запущенном процессе с ID 1234./sys — это современный интерфейс для управления оборудованием и драйверами. Через запись значений в файлы в этом каталоге можно, например, изменить яркость экрана или режим работы процессора.Иерархия данных пользователя и приложений
Если системные каталоги — это фундамент и стены, то следующие разделы — это «жилые помещения» системы.
/usr: вторая корневая система
Каталог/usr (Unix User Resources) — самый объемный в Linux. Часто новички путают его с «user», думая, что там лежат файлы пользователей, но это не так. Здесь находятся установленные программы, библиотеки и документация.Внутри /usr дублируется структура корня:
/usr/bin: прикладные программы (браузеры, редакторы, компиляторы)./usr/lib: библиотеки, необходимые этим программам./usr/local: место для программ, которые вы скомпилировали и установили вручную, минуя официальный менеджер пакетов дистрибутива. Это позволяет избежать конфликтов между системным софтом и вашими кастомными сборками./var: динамические данные
Название/var происходит от "variable" (переменные). Здесь хранятся данные, объем которых постоянно меняется:
/var/log: системные журналы. Если что-то сломалось, это первое место, куда заглядывает администратор./var/cache: кэш приложений и пакетных менеджеров./var/spool: очереди печати или почты./var/lib: базы данных и файлы состояния приложений. Например, базы данных MySQL или PostgreSQL по умолчанию живут именно здесь./home и /root: личное пространство
В Linux четко разделены права. Обычные пользователи хранят свои данные в/home/имя_пользователя. У каждого там свои настройки рабочего стола, кэш браузера и документы.
Суперпользователь (root) — исключение. Его домашний каталог находится не в /home, а в /root. Это сделано для безопасности: если раздел /home (который часто выносят на отдельный диск) не сможет примонтироваться, администратор всё равно должен иметь возможность войти в систему и получить доступ к своему домашнему каталогу в корневом разделе.Механика монтирования и файл /etc/fstab
Поскольку в Linux дерево каталогов едино, процесс подключения файловых систем называется монтированием (mounting). Точка монтирования (mount point) — это обычный каталог, который служит «дверью» в содержимое другого раздела или устройства.
Когда вы вставляете USB-накопитель, система (или вы вручную) выполняет операцию:
mount /dev/sdb1 /mnt/usb
После этого содержимое флешки (устройство /dev/sdb1) становится доступным через путь /mnt/usb. Если в папке /mnt/usb до этого лежали какие-то файлы, они станут невидимыми (но не удалятся), пока устройство не будет отмонтировано.
Для автоматизации этого процесса при загрузке используется файл /etc/fstab (file system table). В нем описывается:
/var).ext4, xfs, btrfs, ntfs.Пример строки в fstab:
UUID=550e8400-e29b-41d4-a716-446655440000 /home ext4 defaults 0 2
Это означает, что раздел с указанным UUID будет автоматически подключен к папке /home с файловой системой ext4 и стандартными настройками.
Специфические и временные каталоги
Существует еще несколько важных путей, которые завершают картину FHS.
/tmp монтируется в оперативную память (tmpfs), что делает работу с временными данными очень быстрой, но ограничивает их объем размером RAM.tmpfs./opt/google/chrome./media используется системой для автоматического монтирования съемных носителей (флешек, дисков).
- /mnt предназначен для временного ручного монтирования администратором.Практическое применение знаний об иерархии
Зачем системному администратору знать это так детально? Рассмотрим три сценария.
Сценарий 1: Закончилось место на диске.
Если вы знаете FHS, вы не будете искать проблему в /bin или /etc (они весят мало). Вы сразу пойдете проверять /var/log (вдруг разросся файл логов) или /home (пользователь скачал лишнее).
Сценарий 2: Перенос системы на новый сервер.
Вам не нужно копировать всё подряд. Достаточно перенести /etc для сохранения настроек, /home для данных пользователей и, возможно, /var/www или /var/lib/mysql для данных приложений. Устанавливать программы в /usr лучше заново через менеджер пакетов.
Сценарий 3: Безопасность.
Вы можете смонтировать раздел /home с флагом noexec. Это запретит запуск исполняемых файлов из домашних папок пользователей, что значительно снизит риск запуска вредоносного скрипта, скачанного из интернета. Или вынести /tmp на отдельный раздел с ограниченным объемом, чтобы злонамеренный процесс не смог забить весь основной диск временными файлами (DoS-атака).
Взаимосвязь уровней: от железа к файлу
Чтобы окончательно закрепить понимание архитектуры, проследим путь данных. Когда вы вводите команду ls /home:
glibc.getdents)./home.ext4) вычисляет, на каких блоках диска лежат данные этого каталога.Эта многослойность обеспечивает гибкость: приложению ls не важно, лежит ли /home на локальном SSD, на сетевом хранилище NFS или в облаке. Ядро берет всю сложность на себя, предоставляя пользователю стройное дерево FHS.
Понимание иерархии — это «карта местности» для любого, кто решил освоить Linux. Зная, где лежат настройки, где — данные, а где — виртуальные интерфейсы управления железом, вы перестаете действовать наугад. Теперь терминал становится не пугающей черной бездной, а точным инструментом навигации по логично выстроенной системе.