Структура и типы файловых систем в Linux
Файловая система Linux, древовидная tree-shared
сложная структура, начинающаяся с корня. Она состоит из каталогов директорий directory
, подкаталогов subdirectory
. Каждый файл и файловая система взаимосвязаны между собой.
Какие существуют типы файловых систем
Виды файловых систем, предлагаемых при установке ОС на базе Linux, делятся на стандартные и альтернативные.
Стандартные файловые системы Linux:
Ext
(первая расширенная система). Она была предложена в 1992 году и считается одной из первых. Ее функциональность была разработана частично на основе файловой системы UNIX. Начальная цель — выйти за рамки файловой системы, использовавшейся до нее (MINIX), и преодолеть ее ограничения. Сегодня практически не используется.Ext2
(вторая расширенная система). Известна с 1993 года. Она была разработана как аналог предыдущей файловой системы. В ней были реализованы инновации в рамках объема памяти, изменена общая производительность.Она позволяет хранить до 2 ТБ данных. Как и ext, она малоперспективная, поэтому ее следует избегать.Ext3
(третья расширенная файловая система). Ее предложили в 2001 году. Превосходит предыдущую тем, что является журналируемой. Журналируемая (journaling) ФС — это система, которая записывает в отдельный журнал изменения (обновления) файлов и данных до того, как эти действия были завершены. В этой файловой системе используется алгоритм, позволяющий восстановить файлы после перезагрузки.Ext4
(четвертая версия расширенных систем). Ее создали в 2006 году. Она преодолела многочисленные ограничения, которые были в третьей версии. И сегодня широко используется и является файловой системой по умолчанию в большинстве дистрибутивов Linux. Хотя она, возможно, не самая передовая, она достаточно надежна и стабильна, поэтому находит повсеместное применение среди обширного списка Unix систем. Поэтому, если вам не очень хочется ломать голову над плюсами и минусами всех многочисленных файловых систем, которые вы можете выбрать, специалисты рекомендуют остановиться на этой системе.
Альтернативные файловые системы Linux:
JFS
была создана компанией IBM в 1990 году. Название JFS — акроним, означающий Journaling File System. Она легко восстанавливает данные после сбоя питания и довольно надежна. Более того, она потребляет меньше процессорной мощности, чем другие файловые системы.XFS
высокопроизводительная файловая система. Она была создана компанией Silicon Graphics. Изначально предназначалась для их ОС «IRIX», но позже была передана Linux. Сегодня также встречается XFS Windows. Созданная в 1990 году, XFS — это 64-битная высокопроизводительная журналируемая (journaling) системная оболочка. Она хорошо работает с файлами большого объема, но не особенно с файлами меньшего размера.Btrfs
альтернативная файловая система, предложенная фирмой Oracle в 2009 году. Она считается конкурирующей файловой системой с Ext4, хотя, по общему мнению, последняя представляет собой лучшую версию (быстрее передает данные, обеспечивает большую стабильность). Однако в Btrfs есть несколько уникальных преимуществ. В целом она обладает отличной производительностью.Swap.
Типы файлов Linux
Понятие файл
в Linux имеет несколько другое значение, нежели в Windows. Файлом
можно назвать обычный файл, содержащий данные, и интерпретируемый программой. Директория также является файлом
, содержащим в себе ссылки на другие директории или файлы с данными. Файлы устройства указывает на драйвер, благодаря которому система взаимодействует с физическими устройствами. Имеются и многие другие типы файлов.
Выделяют такие типы файлов Linux:
Обычные файлы, -
хранение символьных и двоичных данных, подробнееКаталоги, d
организация доступа к файлам, подробнееСсылки, l
предоставление доступа к файлам, расположенных на любых носителях, подробнееБлочные файлы, b
предоставление интерфейса для взаимодействия с аппаратным обеспечением компьютера, подробнееСимвольные файлы, c
предоставление интерфейса для взаимодействия с аппаратным обеспечением компьютера, подробнееКаналы, p
организация взаимодействия процессов в операционной системе, подробнееСокеты, s
организация взаимодействия процессов в операционной системе, подробнее
Файлы
Это файлы, с которыми мы привыкли работать каждый день, они могут содержать текст, исполняемые инструкции для программ, изображения или другую информацию. Это самый распространенный тип файлов, которые вы можете найти в системе Linux. Рассмотрим небольшой список относящихся сюда файлов:
- Текстовые файлы
- Исполняемые файлы
- Файлы изображений
- Файлы архивов
- Файлы библиотек программ
- Другие подобные типы
Утилита ls
обозначает файлы -
, выберем все файлы из каталога /bin
:
ls -l /bin/ | grep "^-"
Все обычные файлы сохранены в определенном формате, это нужно, чтобы система знала какой программой нужно открывать файл.
Посмотреть форматы файлов linux можно с помощью утилиты file
:
file /bin/tar
Система сообщила что это исполняемый файл, а теперь посмотрим обычный, текстовый:
file /etc/passwd
Утилита умеет распознавать все известные форматы файлов. Чтобы узнать вывести все доступные форматы файлов linux наберите:
file -l
Каталоги или directory
Файлы, содержащий другие организованные структуры данных (директории), который обеспечивает указатели на них. Играет роль папки в картотеке (группирует связанные файлы). Но если папки содержат только файлы, то директории могут содержать дополнительные каталоги subdirectories
.
Утилита ls
обозначает каталоги буквой d
, выберем все каталоги из каталога /dev
:
ls -l /dev/ | grep "^d"
Ссылки
Символическая мягкая, soft
ссылка указывает на имя и местоположение отдельного файла. Когда пользователь копирует, перемещает или другим образом указывает на ссылку, операция проводится над файлом, на который ссылаются.
Жесткая, hard
ссылка указывает на фактические данные в файле аналогично, как и в regular file
. Помимо имени, нет никакой разницы между оригинальным файлом и жесткой ссылкой, указывающей на те же данные.
Утилита ls
обозначает ссылки буквой l
, выберем все ссылки из каталога /dev
:
ls -l /dev/ | grep "^l"
Блочные файлы
Файлы устройств, которые обеспечивают буферизованный доступ к аппаратным компонентам. При записи данных на жесткий диск или на флешку нет смысла записывать данные сразу же после их поступления. Так мы будем только понапрасну расходовать ресурс устройства и энергию. Можно подождать пока наберется достаточное количество данных а потом записать их за один раз. Эти данные и собираются в буфере. С помощью таких файлов, файловая система и другие утилиты могут обращаться к драйверам аппаратных устройств. Такие файлы могут передать большой блок данных за небольшой один раз.
Утилита ls
обозначает блочные файлы буквой b
, выберем все блочные файлы из каталога /dev
:
ls -l /dev/ | grep "^b"
Символьные файлы
Обеспечивают не буферизованный доступ к аппаратным компонентам и ядру. Поскольку у них нет буфера, они позволяют передавать только по одному символу за один раз. А в остальном, это такие же файлы устройств, как и блочные файлы.
Утилита ls
обозначает символьные файлы буквой c
, выберем все символьные файлы из каталога /dev
:
ls -l /dev/ | grep "^c"
Каналы или туннели
эФайлы, позволяющие настроить связь между двумя процессами перенаправив вывод одного процесса на вход другого. Именованные туннели используются для связи между двумя процессами и работают так же как и обычные туннели.
Утилита ls
обозначает туннели буквой p
, выберем все туннели из каталога /dev
:
ls -l /dev/ | grep "^p"
Чтобы создать именованный тоннель вы можете использовать утилиту mkfifo
:
mkfifo pipe1
echo "test test test" > pipe1
После создания туннеля мы передали в него данные, и оболочка стала не интерактивной. Она будет ожидать пока данные будут прочитаны на другом конце туннеля. Открываем другую оболочку и читаем данные:
while read line ;do echo "Data: '$line' "; done
Файлы сокетов
Файлы, обеспечивающие прямую связь между процессами, они могут передавать информацию между процессами, запущенными в разных средах или даже разных машинах. Это значит, что с помощью сокетов программы могут обмениваться данными даже по сети. По сути, сокет работает так же как туннели, но только в обе стороны.
Утилита ls
обозначает сокеты буквой s
, выберем все сокеты из каталога /dev
:
ls -l /dev/ | grep "^s"
Создать сокет можно с помощью функции socket()
на языке программирования Си
, чтение и запись выполняется системными вызовами read()
и write()
. Но нам сейчас не нужно писать реальную программу, будет достаточно немного поиграться. Поэтому воспользуемся утилитой nc
. Создаем Unix сокет:
nc -lU socket.sock
Подключаемся к нему из другой консоли:
nc -U socket.sock
Все данные, которые вы будете набирать в одной из консолей будут отправляться на другую после нажатия Enter, связь работает в обоих направлениях.
Основные каталоги, входящие в root directory
/
корень файловой системы, подробнееbin
бинарные файлы пользователя, подробнееsbin
системные исполняемые файлы, подробнееetc
конфигурационные файлы, подробнееdev
файлы устройств, подробнееproc
информация о процессах, подробнееvar
переменные файлы, подробнееtmp
временные файлы, подробнееusr
программы пользователя, подробнееhome
домашняя папка, подробнееboot
файлы загрузчика, подробнееlib
системные библиотеки, подробнееopt
дополнительные программы, подробнееmnt
монтирование, подробнееmedia
съемные носители, подробнееsrv
сервер, подробнееrun
процессы, подробнееsys
информация о системе, подробнее
/ - корень
Это главный каталог в системе Linux. По сути, это и есть файловая система Linux. Здесь нет дисков или чего-то подобного, как в Windows. Вместо этого, адреса всех файлов начинаются с корня, а дополнительные разделы, флешки или оптические диски подключаются в папки корневого каталога.
Только пользователь root имеет право читать и изменять файлы в этом каталоге. Обратите внимание, что у пользователя root домашний каталог /root, но не сам /.
/bin - бинарные файлы пользователя
Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно использовать в однопользовательском режиме или режиме восстановления. Одним словом, те утилиты, которые могут использоваться пока еще не подключен каталог /usr/. Это такие общие команды, как cat, ls, tail, ps и т д.
/sbin - системные исполняемые файлы
Так же как и /bin, содержит двоичные исполняемые файлы, которые доступны на ранних этапах загрузки, когда не примонтирован каталог /usr. Но здесь находятся программы, которые можно выполнять только с правами суперпользователя. Это разные утилиты для обслуживания системы. Например, iptables, reboot, fdisk, ifconfig,swapon и т д.
/etc - конфигурационные файлы
В этой папке содержатся конфигурационные файлы всех программ, установленных в системе. Кроме конфигурационных файлов, в системе инициализации Init Scripts, здесь находятся скрипты запуска и завершения системных демонов, монтирования файловых систем и автозагрузки программ. Структура каталогов linux в этой папке может быть немного запутанной, но предназначение всех их - настройка и конфигурация.
/dev - файлы устройств
В Linux все, в том числе внешние устройства являются файлами. Таким образом, все подключенные флешки, клавиатуры, микрофоны, камеры - это просто файлы в каталоге /dev/. Этот каталог содержит не совсем обычную файловую систему. Структура файловой системы Linux и содержащиеся в папке /dev файлы инициализируются при загрузке системы, сервисом udev. Выполняется сканирование всех подключенных устройств и создание для них специальных файлов. Это такие устройства, как: /dev/sda, /dev/sr0, /dev/tty1, /dev/usbmon0 и т д.
/proc - информация о процессах
Это тоже не обычная файловая система, а виртуальная подсистема, динамически создаваемая ядром. Здесь содержится вся информация о запущенных процессах в реальном времени. По сути, это псевдофайловая система, содержащая подробную информацию о каждом процессе, его Pid, имя исполняемого файла, параметры запуска, доступ к оперативной памяти и так далее. Также здесь можно найти информацию об использовании системных ресурсов, например, /proc/cpuinfo, /proc/meminfo или /proc/uptime. Кроме файлов в этом каталоге есть большая структура папок linux, из которых можно узнать достаточно много информации о системе.
/var переменные файлы
Название каталога /var говорит само за себя, он должен содержать файлы, которые часто изменяются. Размер этих файлов постоянно увеличивается. Здесь содержатся файлы системных журналов, различные кеши, базы данных и так далее. Дальше рассмотрим назначение каталогов Linux в папке /var/.
Здесь содержатся большинство файлов логов всех программ, установленных в операционной системе. У многих программ есть свои подкаталоги в этой папке, например, /var/log/apache - логи веб-сервера, /var/log/squid - файлы журналов кеширующего сервера squid. Если в системе что-либо сломалось, скорее всего, ответы вы найдете здесь.
Еще один тип изменяемых файлов - это файлы баз данных, пакеты, сохраненные пакетным менеджером и т д.
В эту папку почтовый сервер складывает все полученные или отправленные электронные письма, здесь же могут находиться его логи и файлы конфигурации.
Изначально, эта папка отвечала за очереди печати на принтере и работу набора программ cups.
Здесь находятся файлы блокировок. Эти файлы означают, что определенный ресурс, файл или устройство занят и не может быть использован другим процессом. Apt-get, например, блокирует свою базу данных, чтобы другие программы не могли ее использовать, пока программа с ней работает.
Содержит файлы с PID процессов, которые могут быть использованы, для взаимодействия между программами. В отличие от каталога /run данные сохраняются после перезагрузки.
/tmp - временные файлы
В этом каталоге содержатся временные файлы, созданные системой, любыми программами или пользователями. Все пользователи имеют право записи в эту директорию.
Файлы удаляются при каждой перезагрузке. Аналогом Windows является папка Windows\Temp, здесь тоже хранятся все временные файлы.
/usr - программы пользователя
Это самый большой каталог с большим количеством функций. Тут наиболее большая структура каталогов Linux. Здесь находятся исполняемые файлы, исходники программ, различные ресурсы приложений, картинки, музыку и документацию.
Содержит исполняемые файлы различных программ, которые не нужны на первых этапах загрузки системы, например, музыкальные плееры, графические редакторы, браузеры и так далее.
Содержит двоичные файлы программ для системного администрирования, которые нужно выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.
Содержит библиотеки для программ из /usr/bin или /usr/sbin.
Содержит файлы программ, библиотек, и настроек созданные пользователем. Например, здесь могут храниться программы собранные и установленные из исходников и скрипты, написанные вручную.
/home - домашняя папка
В этой папке хранятся домашние каталоги всех пользователей. В них они могут хранить свои личные файлы, настройки программ и т д. Например, /home/sergiy и т д. Если сравнивать с Windows, то это ваша папка пользователя на диске C, но в отличии от WIndows, home как правило размещается на отдельном разделе, поэтому при переустановке системы все ваши данные и настройки программ сохранятся.
/boot - файлы загрузчика
Содержит все файлы, связанные с загрузчиком системы. Это ядро vmlinuz, образ initrd, а также файлы загрузчика, находящие в каталоге /boot/grub.
/lib системные библиотеки
Содержит файлы системных библиотек, которые используются исполняемыми файлами в каталогах /bin и /sbin.
Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например, libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib. Эту папку можно сравнить с WIndows\system32, там тоже сгружены все библиотеки системы, только там они лежат смешанные с исполняемыми файлами, а здесь все отдельно.
/opt дополнительные программы
В эту папку устанавливаются проприетарные программы, игры или драйвера. Это программы созданные в виде отдельных исполняемых файлов самими производителями. Такие программы устанавливаются в под-каталоги /opt/, они очень похожи на программы Windows, все исполняемые файлы, библиотеки и файлы конфигурации находятся в одной папке.
/mnt монтирование
В этот каталог системные администраторы могут монтировать внешние или дополнительные файловые системы.
съемные носители
В этот каталог система монтирует все подключаемые внешние накопители - USB флешки, оптические диски и другие носители информации.
/srv сервер
В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-сервера apache.
/run - процессы
Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.
/sys информация о системе
Назначение каталогов Linux из этой папки - получение информации о системе непосредственно от ядра. Это еще одна файловая система организуемая ядром и позволяющая просматривать и изменить многие параметры работы системы, например, работу swap, контролировать вентиляторы и многое другое.