Иерархия

За время, которые существует UNIX, сложился определенный стандарт на название и расположение директорий, которые находятся в корне файловой системы UNIX.

В 1993 году была сформирована группа по стандартизации файловой системы Linux — Linux File System Standard Group (FSSTND). Но, не смотря на то, что этот стандарт был принят, не все дистрибутивы следовали его рекомендациям. В 1997 году был разработан другой стандарт — Linux File Hierarchy Standard (FHS). Найти его можно в Интернет на сайте http://www.pathname.com/fhs.

Внимание! Вы можете не следовать рекомендациям стандарта. В своей системе, при наличии определенных прав, Вы Царь и Бог и можете делать все, что хотите. Но учтите, что весь остальной мир может быть с Вами не согласен и программы, написанные для стандартных систем, будут работать у Вас только после длительной обработки их напильником.

Давайте посмотрим, какие директории и для чего используются в Linux.

  • /bin — В этой директории располагаются исполняемые файлы программ, необходимых при старте системы и доступные всем пользователям системы.
  • /sbin — Тут расположены исполняемые файлы программ, необходимых при старте системы и доступные только администратору. Эти программы используются для конфигурации системы.
  • /etc — В этой директории располагаются конфигурационные файлы системы и различных программ. В одной из поддиректорий находятся стартовые скрипты системы. Почти все конфигурационные файлы — это текстовые файлы. Поэтому, что бы настроить какую ни будь программу Вам необходимо знать формат файла и любой текстовый редактор. К сожалению, файлы различных программ имеют свои собственные форматы (Существует проект, который пытается переписать все конфигурационные файлы с использованием формата XML, но я думаю, что у них ничего не получится. Уж слишком консервативен мир UNIX.).
  • /dev — Директория содержит файлы устройств. Файлы устройств — это особенность UNIX. Дело в том, что в UNIX все представлено в виде файлов. С обыкновенными файлами и директориями дело обстоит так же как и в Windows. А вот для доступа к устройствам (CD-ROM, микшер на звуковой карточке и т.д.) используются специальные файлы. Программа, обратившаяся к таким файлам, начинает общаться с драйвером устройства. Программисты для работы с файлами устройств могут использовать стандартные функции системы: open, read, write и close. Что очень упрощает написание программ.
  • /lib — В этой директории находятся файлы динамически загружаемых библиотек и модулей ядра Linux. Обычно в этой директории располагают библиотеки необходимые при старте системы.
  • /media — Cодержит директории, являющиеся точками подключения съемных устройств. Таких как: CD/DVD, флоппи дисков, USB накопителей.
  • /mnt — Cодержит директории, являющиеся точками монтирования временных файловых систем. Например, необходимо посмотреть содержимое ISO образа CD-ROM. Файловую систему, находящуюся в этом файле можно подключить непосредственно к директории /mnt или к одной из директорий, находящихся в /mnt.
  • /home — Тут располагаются домашние директории пользователей системы. Имя домашней директории обычно соответствует имени учетной записи пользователя. Например, у пользователя user домашняя директория /home/user. В Linux все пользователи кроме пользователя root, считаются обыкновенными пользователями системы. По умолчанию они могут создавать новые файлы и директории только в пределах своей домашней директории (а так же в директориях /tmp и /var/tmp).
  • /root — Домашняя директория суперпользователя root.
  • /srv — Содержит директории с данными различных сервисов. Например: WEB сервера Apache, FTP сервера и т.д.
  • /tmp и /var/tmp — Директории предназначены для хранения временных файлов. По умолчанию, доступ к этим директориям имеют все пользователи системы. Удалять файлы в этих директориях могут только их хозяин и суперпользователь.
  • /usr — Директория предназначена для хранения файлов, которые не нужны при первоначальной инициализации системы. Например, в этой директории находятся исполняемые файлы WEB сервера Apache. Apache не нужен при первоначальной инициализации системы, это сервис, который будет запущен только после того, как система будет полностью готова к работе. По своей структуре директория почти полностью повторяет содержимое корневой директории. То есть в ней есть такие директории как: bin, sbin, etc, lib и т.д. Содержимое этой директории обычно выносят на отдельный раздел винчестера или на сетевой диск и подключают при старте системы к точке монтирования /usr.
  • /var — Директория содержит часто изменяемые файлы программ. Говоря проще — директория содержит файлы с данными. Например, в этой директории обычно находятся почтовые ящики пользователей. Почта приходит и уходит, содержимое почтовых ящиков постоянно меняется, следовательно, меняется и содержимое файлов. Тут же располагаю кеш прокси сервера и т.д. Содержимое директории /var рекомендуется размещать на отдельном разделе винчестера.
  • /opt — По своему назначению эта директория очень напоминает директорию Windows «Program Files». Для каждой программы, размещаемой в /opt, создается отдельная поддиректория имя которой соответствует имени программы.

Что бы понять для чего используется директория /opt, необходимо разобраться, каким образом можно устанавливать и удалять программы в Linux. Существует два основных способа работы с программами: установка программы из пакета и из исходных кодов.

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

Менеджер пакетов при установке программы размещает ее файлы по директориям: исполняемые файлы в bin или sbin, конфигурационные в etc, библиотеки в lib и т.д. Он запоминает, куда файлы были помещены в процессе установки. И если потребуется удалить программу из системы, менеджер легко найдет и удалит файлы программы.

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

Представьте себе, что у программы, которую Вы установили, было скопировано 500 файлов. Эти файлы, как это принято в Linux, разбросаны по различным директориям. И Вы, по каким либо причинам, хотите эту программу удалить из системы. Обращаться за помощью к менеджеру пакетов бесполезно. Программа была установлена без его участия и он ничего не знает о файлах программы. Придется самостоятельно искать эти файлы и удалять их вручную (У некоторых программ присутствует возможность удаления файлов, но для этого необходимо, что бы в системе оставались исходные коды программы.).

Для того, что бы такие ситуации не возникали, при сборке программ из исходных кодов, для установки можно использовать директорию /opt. Например, если Вы собираете сервер Samba, можно сделать так, что все файлы этого сервера будут помещены в директорию /opt/samba.

Внутри этой директории будут созданы все необходимые директории:

/opt/samba/bin
/opt/samba/sbin
/opt/samba/lib
/opt/samba/var

и т.д.

Для удаления сервера Samba достаточно удалить директорию /opt/samba.

Внимание! Если это возможно, при сборке программ из исходных кодов, не поленитесь, создайте пакет. Гораздо проще управлять системой используя менеджеры пакетов, чем каждый раз вручную заменять и исправлять программы установленные без менеджера пакетов.

Продолжим рассматривать FHS.

  • /proc — Точка монтирования виртуальной файловой системы proc. Сама по себе файловая система proc отдельная, большая тема, которую мы подробно рассмотрим в дальнейшем. Если попытаться кратко рассказать о ней, то все файлы, которые Вы будете видеть в этой директории — это отображение области данных ядра Linux на файловую систему. Ядро Linux — это программа у которой есть области кода, стека и данных. То есть если Вы смотрите содержимое файла /proc/filesystems, то на самом деле система выводит содержимое области данных ядра, в котором описаны типы поддерживаемых файловых систем. Кроме просмотра содержимого файлов (области данных), есть возможность записи данных в некоторые файлы (область данных). В этом случае Вы можете напрямую влиять на работу системы. Например, есть файл содержащий число — количество файлов, которые программа может одновременно держать открытыми. Записав туда другое число, Вы изменяете количество одновременно открытых программой файлов без перезагрузки системы. Не следует путать registry Windows и директорию /proc Linux. Registry — это файл, /proc — это область памяти ядра. После перезагрузки системы у ядра все параметры устанавливаются по умолчанию. Для определения необходимых Вам параметров их следует записать в файлы директории /proc при старте системы. Для этих целей существуют специальные конфигурационные файлы.
  • /boot — В директории располагаются файлы ядра и загрузчика операционной системы.

Не все дистрибутивы полностью соблюдают рекомендации FHS. Например, в одних дистрибутивах для подключения съемных устройств до сих пор используется директория /mnt. В некоторых нет директории /srv. Но остальные директории имеют одинаковое предназначение во всех дистрибутивах Linux.