#========================================== Помимо единственного корневого раздела root, присутствуют подкаталоги, к которым привязаны соответствующие каталоги. Типовая структура первых двух уровней выглядит так: ├── bin -> usr/bin ├── boot │ ├── grub │ └── lost+found ├── dev │ ├── block │ └── … ├── etc │ ├── … │ ├── update-manager │ ├── update-motd.d │ └── xdg ├── home ├── lib -> usr/lib ├── lib32 -> usr/lib32 ├── lib64 -> usr/lib64 ├── libx32 -> usr/libx32 ├── lost+found ├── media ├── mnt ├── opt ├── proc │ ├── … │ └── tty ├── root ├── run │ └── … ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp │ └── … ├── usr └── var Каждый файл в ФС Линукса имеет конкретный индекс Inode. У одного файла в такой структуре может быть несколько имен, т.е. путей. В структуре системы файлы могут различаться, но на жестком диске им соответствует один файл. Такое свойство называют перекрестной иерархичностью — ветви дерева пересекаются. Inode — индексный дескриптор, который используется в UNIX-системах. В нем хранятся все мета-данные о файле: владелец, время последнего обращения, размер, другая информация. Каталог можно переместить в другую ФС, после этого его дескриптор будет создан заново. Только после этого исходник будет удален. В пределах одной системы изменится только путь файла. Каталоги и файлы существуют до момента, пока хранятся данные об их имени или пути к ним. При удалении этой информации блоки освобождаются под другие файлы. В числе других особенностей Linux — ссылки двух типов: - жесткая ссылка (то есть hard link) — путь файла, заданный командой ls -li; - символьная ссылка (symbolic link) — файл стандарта UNIX с текстовой строкой, задающей путь к оригинальному файлу. Существует также суперблок, где хранятся все параметры ФС — общее количество блоков и Inode, наличие свободных блоков и данные о них. Суперблок должен сохранять целостность — это напрямую влияет на стабильность и работу всей системы. Для безопасности в Линукс создается несколько копий для восстановления информации в случае ее потери. ## Ключевые директории и их назначение В Linux директория — фундаментальный элемент системы. Это каталог (папка), где содержатся другие файлы, расположенные согласно иерархии. Отправной точкой, а точнее, базой выступает корневой каталог «/», на котором выстраивается вся система. В некоторых источниках этот каталог сравнивают с диском С на винде, но это не совсем корректное сравнение — в Линуксе нет буквенных дисков. В Windows дополнительный раздел расположен на диске D, в Линукс это будет отдельная папка с тем же корнем. Иными словами, путь к любому файлу проходит через корень. Пример. Файл /home/user/alien имеет структуру root -> home -> user -> documents, и никакую другую. Рассмотрим наиболее востребованные директории и их функции. ### Пользовательские файлы /bin и /sbin В этой директории расположены бинарные исполняемые файлы, которые требуются для загрузки системы и ее работы. Именно здесь вы найдете команды ls, cp, grep, mv, ping и прочие утилиты, доступные каждому юзеру. В /usr/bin хранятся и такие приложения, как браузер Chrome, Firefox и другие. В каталоге /sbin, который имеет схожую конфигурацию, содержатся важные исполняемые файлы для системного администрирования. Это iptables, reboot, fdisk и т.д.. ### Пользовательские данные /home (домашняя папка) В этом каталоге хранится домашняя папка с личными файлами и настройками. Например, если ваше имя юзера — denis, у вас будет домашняя папка /home/denis. Сюда записываются, например, скачанные файлы. Если пользователей несколько, они будут записывать файлы в свои папки. Для изменения других системных файлов потребуются права root. ### Конфигурационные файлы /etc Это место хранения файлов конфигурации — сетевых настроек, приложений, файлов инициализации различных служб (серверов печати, хостов и т.д). Папка крайне важна для работы всей системы. При необходимости общие файлы можно редактировать вручную в текстовом редакторе. ### Файлы устройств /dev и системные файлы /proc В директории /dev хранятся интерфейсы системных и периферийных устройств — дисков, принтеров, динамиков и прочих. В Линуксе устройства представлены в виде файлов. Стоит понимать, что это не совсем файлы в том виде, к которому мы привыкли. Псевдоустройства из этого каталога — это, например, генераторы случайных чисел /dev/random. Файлы ядра и процессов содержатся в каталоге /proc. В нем, как и в /dev, нет стандартных файлов, а есть специфические области данных о системах и процессах. Здесь есть информация о процессоре /proc/cpuinfo; сведения о памяти, используемой системой — /proc/meminfo; время — /proc/uptime. Тут же содержится информация о системных ресурсах. ### Переменные (изменяемые) данные /var В этой директории лежат данные, которые в процессе работы системы постоянно меняются. Сюда относятся логи, кэши, системные журналы, почтовые очереди и прочие файлы, создаваемые программами. Это записываемая директория, которая в стандартном режиме доступна только для чтения. Логи содержатся в /var/log, базы данных в /var/lib, файлы для перезагрузки в /var/tmp. ### Статические файлы для загрузки /boot Это важные файлы для загрузки ОС, в том числе ядра Линукс. Запуск системы без этой папки проблематичен. При этом файлы конфигурации загрузчика находятся в другой папке — /etc, о которой мы писали выше. ### Общие файлы библиотеки /lib В директории /lib находятся файлы, которые обеспечивают работу системных программ и ядра. Эти данные приложения и бинарные файлы /bin и /sbin используют для выполнения заданных функций. ### Съемный носитель /media В этом директории монтируются съемные носители. К примеру, когда вы используете компакт-диск или флешку, автоматически создается каталог. Юзеры получают полный доступ к содержимому носителей. ### Временные файлы /tmp В директории хранятся временные файлы, которые создаются приложениями в процессе работы. При перезагрузке содержимое этого каталога, как правило, очищается. Можно удалить файлы без перезагрузки с помощью соответствующих утилит. ### Восстановленные данные /lost+found В любой ФС Linux есть такая директория. Если в системе случится сбой, при следующей загрузке произойдет автоматическая проверка, и любые обнаруженные поврежденные файлы отправятся в каталог /lost+found, чтобы пользователь при необходимости смог восстановить данные. ### Файлы состояния приложений /run Относительно новая директория в Линукс. Здесь хранятся необходимые приложениям временные файлы — сокеты, идентификаторы процессов и другие. В отличие от каталога /tmp данные в /run нельзя удалить. ## Типы файлов в Linux Линукс подчиняется концепции «Всё есть файл», то есть работа с системой — это по сути взаимодействие с файлами. Применяются разные файлы, используемые как для стандартных данных, так и для устройств. Плюс этой концепции в том, что система не тратит ресурсы на реализацию отдельных API для каждого приложения, так как все стандартные программы и процессы реализуются через работу с файлами. Рассмотрим типы файлов, которые используются в Linux: - Обычные (regular). Это стандартные файлы, используемые чаще других — данные, текст, исходный код, медиа и все остальное; - Файлы устройств. Сюда входят символьные и блочные файлы (char и block devices), представляющие внешние устройства — принтеры, жесткий диск и другие; - Именованные каналы. Файлы named pipes требуются для взаимодействия между процессами и передачи данных; - Ссылки. Используется два типа ссылок. Символические (так называемые симлинки) — работают как ярлыки для указания других каталогов и файлов; жесткие — отвечают за альтернативные способы доступа к физическим данным на диске и выступают дубликатами файлов, но без их фактического дублирования; - Каталоги. Папки со ссылками на файлы и другие папки. Отвечают за организацию данных и их распределение по категориям, упрощают доступ к различным разделам; - Сокеты. Файлы, предназначенные для обмена данными при выполнении рабочих задач. Используются как внутри системы, так и при взаимодействии устройств друг с другом. По сути, это своего рода почтовые службы, с помощью которых программы пересылают информацию друг другу; - Двери. Еще один механизм, ответственный за взаимодействие между процессами.  В Линукс у каждого типа файла своя задача в системе управления. Такая схема работы обеспечивает мощность, придает ей гибкость и устойчивость. Поскольку внешние устройства представлены блочными файлами, с ними можно работать с помощью стандартных методов. ## Управление файловой системой Через консоль управления (терминал) в Linux доступен целый арсенал для работы с директориями и файлами. Основные команды управления: - `Is`. Просмотр содержимого папки и навигация. При использовании с различными опциями возможности расширяются, например, команда ls -l создает  подробный список; - `cd`. Путь к папке — меняет текущую директорию на указанную пользователем; - `pwd`. Обозначает текущие местоположение юзера в структуре каталогов; - `mkdir`. Используется для создания новой папки с присвоением ей имени; - `cp`. Копирует файлы из исходной папки в целевую; - `mv`. Перемещает или переименовывает каталоги и файлы; - `rm`. Удаляет указанные файлы; - `cat`. Выводит содержимое указанного файла в окно панели управления; - `less`. Используется для постраничного пролистывания файла; - `touch`. Создает новый пустой файл (с новым именем); - `ln -s`. Генерирует символьную ссылку, указывающую на выбранный каталог или файл; - `which`. Демонстрирует пошаговый путь к исполняемым файлам; - `nano`. Используется для текстовой редактуры файла; - `locate`. Применяется для поиска файлов по заданным шаблонам.  Указанные выше команды формируют основу для взаимодействия с ФС. При необходимости используется более расширенный список. ## Монтирование и файловые системы Linux Монтирование — подключение файловых систем, жестких дисков и внешних носителей, получение доступа к ним, ручное и автоматическое отключение. При загрузке ядро устройства на Linux автоматически монтирует разделы, считывая данные из конфигурации /etc/fstab. При подключении устройств каталог ассоциируется с ними с помощью драйвера, которому передается сгенерированная ссылка. В случае успешного взаимодействия ядро вносит данные в таблицу монтирования. Монтирование системы реализуется с помощью команд mount и umount, подготавливающих устройства и точки монтирования. Они реализуют автоматическое подключение ФС. К виртуальной машине подключается диск /dev/sdc, на котором создаются разделы для файловой системы. После создания точки монтирования процесс загрузки ФС запускается. Какие файловые системы на Linux наиболее востребованные: - Ext. Первая ФС, разработанная специально для Линукс. Система значительно превзошла предыдущие решения по производительности и функционалу; - Ext2. Улучшенная версия первой ФС. Повышает надежность, улучшает управление и позволяет работать с большим количеством данных и файлов; - Ext3. Третье поколение ФС для Линукс. Поддерживает журналирование, что делает работу более стабильной и минимизирует риски потери данных после сбоев системы; - Ext4. Новейшая версия с повышенной эффективностью и масштабируемостью. Технически более совершенный вариант, упрощающий работу с большим объемом данных;  - JFS. Разработка компании IBM. Эффективно использует ресурсы, отличается высокой производительностью, рассчитана на сильные нагрузки; - XFS. Высокопроизводительная ФС, разработанная компанией SGI. Подходит для работы с серверами и системами хранения данных;  - ReiserFS. Разработка программиста Ганса Райзера. Главная особенность — возможность при необходимости увеличивать размер блока, тем самым избегая фрагментации; - Btrfs. Продукт компании Oracle. Обеспечивает гибкость при управлении данными, предоставляет опции оперативной проверки и восстановления файлов, интегрирует разные устройства в единую ФС;  - Swap. Позволяет использовать дисковое пространство как виртуальную память, если физические возможности RAM исчерпаны. Технически этот инструмент нельзя назвать файловой системой, но он обеспечивает широкие возможности для управления данными в Линукс.  ОС Linux уникальна в плане адаптации к разным сценариям использования, поскольку поддерживает работу многих файловых систем. Функциональное разнообразие обогащает платформу, позволяя тестировать и внедрять в практику множество полезных инноваций. > При этом у пользователя всегда есть свобода выбора — например, между стабильностью линейки Ext и гибкими возможностями файловых систем XFS, JFS. Безграничные возможности выбора отражают дух сообщества Linux, где независимые разработчики постоянно предлагают новые решения, обеспечивая постоянное развитие экосистемы.