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
Самый верхний каталог структуры — каталог /, именуемый также корневым каталогом (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
- Файлы символьных устройств (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

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

Рис. 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+ вам необходимо уметь выполнять эти задачи из командной строки.
Совет к экзамену
На экзамене вы должны уверенно владеть большим количеством команд для работы с файловой системой. Вам нужно уметь перемещаться по файловой системе, управлять файлами и каталогами, запускать исполняемые файлы и выполнять поиск в файловой системе из командной строки.
Начнём с изучения того, как искать файлы в файловой системе с помощью команд командной строки.