Перейти к содержанию

4.1 Файловые системы Linux и стандарт иерархии файловой системы (FHS) (Understanding Linux File Systems and the Filesystem Hierarchy Standard (FHS))

В этой части главы мы рассмотрим файловую систему Linux в целом. В частности, будут освещены следующие темы:

  • Роль файловой системы Linux
  • Иерархическая структура файловой системы Linux
  • Типы файлов Linux

Начнём с обсуждения роли файловой системы.

Роль файловой системы Linux (The Role of the Linux File System)

В чём же состоит роль файловой системы? На системе Linux (как и на любой другой операционной системе) файловая система (file system) хранит информацию на устройстве хранения данных таким образом, чтобы:

  • данные сохранялись в постоянной форме;
  • данные были упорядочены и легко поддавались поиску;
  • данные можно было быстро извлечь для последующего использования;
  • целостность данных была сохранена.

Иными словами, если вы сохраните файл на устройстве хранения, вы должны иметь возможность найти его позже и получить — при этом будучи уверены, что его содержимое останется в точности таким же, каким оно было при сохранении. Неважно, записываете ли вы данные на гибкий диск, жёсткий диск или USB-накопитель — цели одни и те же. Для их достижения необходимо использовать некий тип файловой системы для управления хранимыми данными.

Совет

Термин «файловая система» в мире Linux фактически имеет несколько значений. Вы можете услышать, что ext2, ext3, ext4 и Reiser называют файловыми системами. Это верно: они являются файловыми системами. Однако точнее называть их дисковыми файловыми системами (disk file systems). Они определяют то, каким образом данные хранятся на жёстком диске вашей системы Linux. Дисковая файловая система — это конкретная реализация общей файловой системы. Подробности о каждом типе файловой системы будут рассмотрены в главе 5.

Рассмотрим, как файловая система Linux организует данные, чтобы обеспечить удобный поиск и извлечение, на основе стандарта иерархии файловой системы (FHS, Filesystem Hierarchy Standard).

Иерархическая структура файловой системы Linux (The Hierarchical Structure of the Linux File System)

Файловая система Linux использует иерархическую структуру для организации и хранения данных. Это показано на рис. 4-1.

Рис. 4-1. Иерархическая структура файловой системы Linux: окно файлового менеджера отображает корневые каталоги системы.

Рис. 4-1. Иерархическая структура файловой системы Linux

Самый верхний каталог структуры — каталог /, именуемый также корневым каталогом (root directory), который, кстати, не имеет никакого отношения к учётной записи суперпользователя root. Он лишь означает, что это верхний («корневой») каталог иерархического дерева файловой системы.

Под корневым каталогом находится множество подкаталогов. Требования к именованию этих каталогов содержатся в стандарте FHS (Filesystem Hierarchy Standard). FHS предоставляет разработчикам программного обеспечения и системным администраторам Linux стандартную структуру каталогов файловой системы, обеспечивая единообразие между системами и дистрибутивами. Только представьте, какой хаос воцарился бы, если бы каждый дистрибутив использовал собственную проприетарную структуру файловой системы! Никто ничего не смог бы найти.

Примечание

Дополнительную информацию о FHS можно найти по адресу www.pathname.com/fhs/.

К счастью, именно FHS не позволяет воцариться беспорядку. Стандарт FHS определяет, какие каталоги должны находиться под корневым каталогом (/), а также какие каталоги должны находиться под /usr и /var. В их числе:

  • /bin — этот каталог содержит исполняемые файлы, необходимые для управления системой Linux и её работы: оболочки (например, bash), а также утилиты управления файловой системой — cp, rm и другие.

  • /boot — этот каталог содержит файлы загрузчика, необходимые для запуска системы.

  • /dev — этот каталог содержит специальные файлы, представляющие различные аппаратные устройства, установленные в системе. Например, первый жёсткий диск называется sda, второй — sdb и так далее. Разделы на каждом диске идентифицируются дополнительным числом, добавляемым в конец имени файла диска. Например, первый раздел первого жёсткого диска — sda1, второй — sda2 и так далее. Файлы, представляющие эти устройства, хранятся в /dev, как показано на рис. 4-2. Обратите внимание, что в /dev хранятся два вида файлов устройств:

Рис. 4-2. Обращение к аппаратным устройствам через файлы в /dev: окно файлового менеджера отображает файлы устройств.

Рис. 4-2. Обращение к аппаратным устройствам через файлы в /dev

  • Файлы символьных устройств (Character-oriented device files) — эти файлы используются для устройств, которые передают или получают данные последовательно, по одному символу за раз: принтеров, мышей, ленточных накопителей. Такие устройства, как правило, не поддерживают произвольный доступ к данным.
  • Файлы блочных устройств (Block-oriented device files) — эти файлы используются для устройств, управляющих данными блоками: гибких дисков и жёстких дисков. Блочные устройства обычно поддерживают произвольный доступ к данным.

Многие типы аппаратных устройств представлены файлами устройств в /dev. Некоторые примеры приведены в таблице 4-1. Главное, что нужно понять: физическое оборудование системы Linux доступно приложениям и службам через файлы в /dev. Нужно сохранить файл на диск — запрос пройдёт через соответствующий файл в /dev. Нужно отправить задание на принтер — оно пройдёт через файл в /dev. Нужно открыть файл с DVD — данные поступят через файл в /dev.

Совет

Файлы устройств в /dev можно также использовать для доступа к системным ресурсам, не связанным ни с каким физическим аппаратным устройством, — например, к генераторам случайных чисел (/dev/random).

Таблица 4-1. Аппаратное оборудование, представленное файлами в /dev

Устройство Файл устройства в /dev
Гибкий диск (Floppy drive) /dev/fd0
Оптический привод (Optical drive) /dev/scd0 или /dev/sr0
Последовательный порт (Serial port) /dev/ttyS0
Параллельный порт (Parallel port) /dev/lp0
  • /etc — этот каталог содержит текстовые конфигурационные файлы, используемые системой и запущенными на ней службами. Вы можете редактировать эти файлы в текстовом редакторе, чтобы настроить поведение Linux. Некоторые из наиболее важных файлов этого каталога перечислены в таблице 4-2.

  • /home — этот каталог содержит подкаталоги, служащие домашними каталогами для каждой учётной записи пользователя в системе Linux.

  • /lib — этот каталог содержит библиотеки кода, используемые программами из /bin и /sbin. Здесь же, в подкаталоге modules каталога /lib, хранятся модули ядра.

  • /media — этот каталог используется некоторыми дистрибутивами Linux (например, openSUSE и Fedora) для монтирования внешних устройств, в том числе оптических приводов и USB-накопителей.

  • /mnt — этот каталог используется некоторыми дистрибутивами Linux для монтирования внешних устройств, включая оптические приводы и USB-накопители. Как и в случае с каталогом /media на других дистрибутивах, для этого применяется ряд подкаталогов.

  • /opt — этот каталог содержит файлы некоторых программ, установленных на системе.

  • /proc — этот каталог несколько отличается от остальных в данном списке. Каталог /proc фактически не существует в файловой системе. Вместо этого он представляет собой псевдофайловую систему (pseudo-file system), которая динамически создаётся при каждом обращении к ней. Она используется для получения информации о процессах и других данных о системе непосредственно из ядра Linux.

Таблица 4-2. Некоторые конфигурационные файлы в /etc

Файл Назначение
/etc/aliases Содержит таблицу для перенаправления почты локальным получателям.
/etc/exports Настраивает файловые системы для экспорта удалённым NFS-клиентам.
/etc/fstab Содержит перечень разделов и файловых систем, которые автоматически монтируются при загрузке системы.
/etc/ftpusers Управляет доступом пользователей к FTP-службе, запущенной в системе.
/etc/group Содержит определения локальных групп.
/etc/hosts Содержит список соответствий между именами хостов и IP-адресами, используемых системой для разрешения имён.
/etc/inittab Содержит параметры конфигурации процесса init.
/etc/init.d/ Подкаталог со сценариями запуска служб, установленных в системе. На системах Fedora и Red Hat расположен в /etc/rc.d/init.d.
/etc/nsswitch.conf Настраивает, какие службы использовать для разрешения имён хостов, а также для хранения пользователей, групп и паролей.
/etc/passwd Содержит учётные записи пользователей системы.
/etc/resolv.conf Задаёт DNS-сервер и доменный суффикс, используемые системой.
/etc/services Сопоставляет номера портов с именованными службами на данной системе.
/etc/shadow Содержит зашифрованные пароли учётных записей пользователей.
/etc/X11/ Содержит конфигурационные файлы X Window.

В каталоге /proc находится ряд различных подкаталогов, как показано на рис. 4-3. Обратите внимание, что каждый из этих подкаталогов идентифицирован числом, а не именем. Эти числа соответствуют идентификатору процесса (PID, Process ID) соответствующего программного процесса, запущенного в системе. На рис. 4-4 программа top запущена для отображения выполняющихся процессов.

Рис. 4-3. Подкаталоги /proc: терминальный листинг каталога /proc с числовыми именами подкаталогов.

Рис. 4-3. Подкаталоги /proc

Рис. 4-4. Использование top для отображения выполняющихся процессов: вывод утилиты top с колонками PID, USER, COMMAND и другими.

Рис. 4-4. Использование top для отображения выполняющихся процессов

Столбец PID, расположенный в крайней левой части отображения, содержит номер PID каждого программного процесса. Фактическое имя команды, запустившей процесс, отображается в крайнем правом столбце. Например, процесс самой программы top имеет PID 2632. Поэтому, заглянув в каталог /proc/2632, можно просмотреть информацию о процессе top, выполняющемся в системе, как показано на рис. 4-5.

Рис. 4-5. Просмотр информации о процессе top в /proc: терминальный листинг каталога /proc/2632 с файлами информации о процессе.

Рис. 4-5. Просмотр информации о процессе top в /proc

  • /root — этот каталог является домашним каталогом суперпользователя root. Обратите внимание, что он находится отдельно от домашних каталогов остальных пользователей, расположенных в /home.

  • /sbin — этот каталог содержит важные файлы управления системой и её администрирования: fdisk, fsck, ifconfig, init, mkfs, shutdown и halt.

  • /srv — этот каталог содержит подкаталоги, в которых службы, запущенные в системе (например, httpd и ftpd), сохраняют свои файлы.

  • /sys — этот каталог содержит информацию об аппаратном оборудовании системы.

  • /tmp — этот каталог содержит временные файлы, созданные вами или системой.

Совет

Система периодически удаляет устаревшие файлы из каталога /tmp. Не сохраняйте в /tmp ничего, что хотите сохранить надолго!

  • /usr — этот каталог содержит файлы приложений. Фактически большинство файлов приложений на вашей системе хранится в подкаталогах /usr. Эти подкаталоги перечислены в таблице 4-3.

  • /var — этот каталог содержит изменяемые данные, в том числе файлы системного журнала. Некоторые типичные подкаталоги /var приведены в таблице 4-4.

Таблица 4-3. Подкаталоги /usr

Подкаталог Содержимое
bin Большинство ваших исполняемых программ
lib Библиотечные файлы
lib64 64-разрядные библиотечные файлы
local Программное обеспечение, установленное локально (созданное вами), — для предотвращения его перезаписи при обновлении системы
sbin Программы системного администрирования
share Документация и файлы страниц руководства (man)

Таблица 4-4. Подкаталоги /var

Подкаталог Содержимое
lib Библиотечные файлы, создаваемые различными службами и приложениями
log Файлы журналов системы и запущенных в ней служб
spool Очереди печати

Разобравшись с этой структурой, перейдём к обсуждению типов файлов, используемых файловой системой Linux.

Типы файлов Linux (Types of Files Used by Linux)

При работе с Linux необходимо понимать, что файловая система использует несколько различных типов файлов. Это ещё одна область, в которой файловая система Linux существенно отличается от файловой системы Windows. В файловой системе Windows в основном существуют два вида записей:

  • Каталоги
  • Файлы

Конечно, бывают обычные файлы, скрытые файлы, ярлыки, файлы текстовых процессоров, исполняемые файлы и тому подобное. Однако все они являются лишь разновидностями базового типа файла.

В Linux, напротив, файловая система использует целый ряд различных типов файлов. Они перечислены в таблице 4-5.

Таблица 4-5. Типы файлов Linux

Тип файла Описание
Обычные файлы (Regular files) Аналогичны файлам в файловых системах других операционных систем: исполняемые файлы, документы текстовых процессоров, изображения, текстовые файлы и так далее.
Ссылки (Links) Файлы-указатели, ссылающиеся на другие файлы в файловой системе.
Файлы FIFO (FIFOs) FIFO расшифровывается как «первым вошёл — первым вышел» (First In, First Out). Это специальные файлы, используемые для передачи данных между выполняющимися процессами. Файл FIFO — по сути очередь, в которой первый добавленный блок данных первым и извлекается. Данные могут перемещаться через FIFO только в одном направлении.
Сокеты (Sockets) Сокеты похожи на файлы FIFO в том смысле, что они используются для передачи информации между процессами. Однако, в отличие от FIFO, сокеты поддерживают двунаправленную передачу данных.

С учётом этого введения в файловую систему Linux вы готовы приступить к изучению выполнения типовых задач с файловой системой. Как и в любой другой операционной системе, вам необходимо уметь создавать, копировать и перемещать файлы и каталоги в файловой системе Linux. В следующей части этой главы мы рассмотрим, как это делается.

Если вы имеете опыт работы с командной строкой в других операционных системах, возможно, вам кажется, что эти задачи тривиальны. Как ни странно, для многих студентов при первом знакомстве с Linux они оказываются непростыми. Главная ошибка, которую я наблюдаю, — студенты пытаются использовать команды Windows при работе с файловой системой в приглашении командной строки Linux.

Я и сам порой ловлю себя на этом. Недавно я проводил демонстрацию для студентов и мне нужно было скопировать несколько файлов на системе Linux. Не задумываясь, я ввёл copy вместо cp в приглашении командной строки — и, конечно, ничего не получилось. Вот уж был конфуз! Студенты с удовольствием напоминали мне об этой ошибке до конца занятия!

Как и в Windows, задачи управления файловой системой можно выполнять либо в приглашении командной строки, либо из графической среды Linux. Многие, приходящие в Linux из мира Windows, соблазняются выполнять эти задачи исключительно с помощью графических утилит, входящих в состав большинства дистрибутивов.

Хотя эти графические утилиты удобны и просты в использовании, вам всё равно нужно научиться выполнять эти задачи из командной строки. Понимаю, что это противоречит привычной практике работы с Windows. Я встречал многих пользователей Windows, которые вообще не подозревают о существовании командной строки в своих системах. В Linux, однако, нужно сначала освоить команды командной строки, а затем уже использовать графические утилиты для удобства. Вот почему:

  • Большинство работодателей и коллег не воспримут вас всерьёз как администратора Linux, если вы не умеете управлять системой из командной строки. Это неотъемлемая часть профессии.
  • Многие системы Linux, особенно развёртываемые в качестве серверов, не используют графический интерфейс. Работа в графической среде требует значительных ресурсов процессора. Многие серверные администраторы предпочитают отдавать эти циклы процессора системным службам, а не движению курсора мыши по экрану или работе хранителя экрана. В такой ситуации необходимо знать, как выполнять задачи из командной строки.
  • Для сдачи экзамена LPIC-1/Linux+ вам необходимо уметь выполнять эти задачи из командной строки.

Совет к экзамену

На экзамене вы должны уверенно владеть большим количеством команд для работы с файловой системой. Вам нужно уметь перемещаться по файловой системе, управлять файлами и каталогами, запускать исполняемые файлы и выполнять поиск в файловой системе из командной строки.

Начнём с изучения того, как искать файлы в файловой системе с помощью команд командной строки.