Если вы линуксоид, то термины типа /etc, /var, /opt и т.д. вам знакомы. Но для простого пользователя - это "темный лес", который еще и выглядит не как "лес" потому, что в Windows (а имеено оттуда приходят пользователи) такого нет. А ведь все эти папки со слэшами являются неотьемлимой частью Linux и очень важны для понимания.

Вот для того, чтобы это понимание было, и был разработан FHS - Filesystem Hierarchy Standard. Существует два варианта перевода:

  • Стандарт на структуру каталогов файловой системы
  • Стандарт иерархии файловой системы

Оба имеют право на жизнь. Выбирайте сами!

Этот стандарт принят для унификации местонахождения файлов и директорий с общим назначением в файловой системе UNIX-подобных ОС. На данный момент большинство Unix и Linux систем следует этим правилам, но далеко не всегда полностью (см. ниже).

Сегодня я расскажу об иерархии файловой системы и структуре директорий.

Зачем нужен стандарт FHS?

Сайт FHS (англ.)

Как сказал один умный человек (Виктор Костромин):

Cтруктура каталогов понятие чисто логическое и к реальным механизмам работы с файлами отношения не имеет. Каждая конкретная операционная система могла бы строить ее по-своему, что привело бы к несовместимости и непереносимости программ. Группой энтузиастов был разработан стандарт FHS иерархии файловых систем для Unix-подобных операционных систем.

Стандарт FHS создан для приведения всех Unix/Linux систем к единому и понятному не только разработчикам виду. Почти все *nix ОС придерживаются приципов FHS, но есть и нездоровые на голову дистрибутивы, например: MacOS, GoboLinux или Syllable.

BSD системы лишь чатично (зато большей частью) соответствуют FHS.

FHS входит в LSB (Linux Standard Base), т.е. проект стандартизации внутренних структур Linux. Но нам это не важно, т.к. Ubuntu не входит в LSB из-за использования пакетного формата deb вместо навязываемого элэсбешниками rpm.

История FHS

Процесс разработки стандарта иерархии файловой системы начался в 1993 году с попыток упорядочить структуру директорий и файлов в операционной системе GNU/Linux и назывался тогда FSSTND (Filesystem Standard).

В начале 1996 года сообщество разработчиков BSD присоединилось к разработке новой версии FSSTND с целью разработать стандарт, пригодный для всех Unix-подобных операционных систем и в связи с этим пришлось срочно переименовывать стандарт в FHS.

На данный момент FHS поддерживается некоммерческой организацией "Free Standards Group", в которую входят такие монстры, как HP, Red Hat, IBM и Dell.

Общие сведения о стандарте FHS

Для начала уясните, что в POSIX-системах

файл = директория
директория = файл с N инодами

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

Если не осознали, то вернитесь на 5-6 строк вверх. Цикл повторять до полного понимания. :)

А мы продолжаем.

FHS основан на двух принципах: разделяемость и изменяемость. Попробую объяснить на пальцах...

Разделяемость файлов

  • Разделяемые - к этим данным разрешен доступ с других компьютеров (например пользовательские папки /home).
  • Неразделяемые - доступ к таким директориям ограничен из соображений безопасности, либо это системные ресурсы, необходимые только на данном компьютере (например файлы устройств /dev).

Изменяемость файлов

  • Статические - это исполняемые файлы, библиотеки, документация, и все, что не должно изменяться без вмешательства самого главного сисадмина (например /boot).
  • Изменяемые - все, что может быть изменено пользователями (например большая часть файлов в /var).

В таблице привожу примеры задач и FHS директорий в Linux:

Разделяемость\Изменяемость Статические Изменяемые
Разделяемые приложения и утилиты, т.е. большая часть наших программ

/usr

почтовые ящики пользователей или очередь печати

/var/mail, /var/spool

Неразделяемые файлы загрузчика и ядра

/boot

информация о демонах

/var/run

Стандарт FHS подвергается некоторой критике за то, что не использует еще один важный принцип - востанавливаемость. Т.е. файлы делятся на легковостановимые и трудновостановимые.

  • Легковостановимые файлы - это файлы самой системы.
  • Трудновостановимые файлы - это большая часть пользовательских данных (базы данных, коллекции порно, дерево портов FreeBSD и проч.) Некоторые специалисты относят к трудновостановимым данным еще и исходники программ.

Использование приципов разделяемости/изменяемости каталогов позволяет, в рамках единой файловой системы, обособить отдельные ее ветви физически, т.е.  разместить их на изолированных устройствах (дисках или разделах). Это дает ряд преимуществ:

  • повышение быстродействия
  • увеличение надежности
  • удобство использования

Структура каталогов

Ubuntu поддерживает стандарт FHS и соответствующую иерархию файлов и директорий.

Корневая файловая система "/"

Корневой каталог и его ветви обязательно должны составлять единую файловую систему, расположенную на одном носителе - диске, дисковом разделе, программном либо аппаратном RAID-массиве, или логическом томе в понимании LVM. И в нем должны располагаться все компоненты, необходимые для старта системы.

root »

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

Для загрузки системы необходимо, чтобы в корневом разделе диска было все необходимое для монтирования других файловых систем. Здесь же должны быть необходимые утилиты, файлы конфигурации, информация, необходимая загрузчику, и другие данные, используемые на этапе старта системы. Содержимое каталогов /usr, /opt и /var формируется таким образом, чтобы они могли размещаться в других разделах или даже в файловых системах других типов.

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

Для восстановления системы с резервной копии в корневой файловой системе должны иметься все утилиты, необходимые для работы с резервными носителями (дискетами, магнитными лентами и так далее).

Программы или приложения никогда не должны создавать или предполагать наличие каких-то файлов в корневой директории. Другие области FHS предоставляют достаточно места для любого пакета.

Корнева файловая система обозначается "/" (без кавычек) и должна включать в себя следующие каталоги:

"/"
bin
boot
dev
etc
lib
mnt
opt
sbin
tmp
usr
var
"Корневой каталог"
Основные исполняемые команды
Статические файлы для загрузчика
Специальные файлы устройств
Специфичные для данного хоста конфигурационный данные
Основные разделяемые библиотеки и модули ядра
Точка монтирования для временно подключаемых файловых систем
Дополнительные пакеты программного обеспечения
Основные системные утилиты
Временные файлы
Каталоговая структура второго уровня
Переменные данные

Вы можете возмущенно воскликнуть: "Вашу медь! А куда дели /home и /root, я не понял!" Но, на самом деле, они необязательны, т.к. могут находиться, к примеру, на другом компе и монтироваться в /mnt (или еще куда). Поэтому они относятся к "рекомендуемым" каталогам.

Теперь подробнее о каждом из этих каталогов.

Обязательные и рекомендуемые каталоги FHS

Подробное описание я поместил в спойлеры. Так что кликайте, не стесняясь.

/bin »

Каталог /bin содержит команды, которые могут использоваться как системным администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система еще не смонтирована (например, в однопользовательском режиме). В этом каталоге могут также содержаться команды, которые используются не напрямую пользователем, а через скрипты.

Обязательные команды (файлы):

cat утилита для конкатенации файлов с отображением результата на стандартный вывод
chgrp утилита для изменения аттрибута принадлежности файла группе
chmod утилита для изменения прав доступа к файлу
chown утилита для изменения владельцев файла
cp утилита для копирования файлов и каталогов
date утилита для вывода или изменения системной даты и времени
dd утилита для для преобразования и копирования файлов
df утилита, информирующая об использовании дискового пространства в файловых системах
dmesg утилита для вывода сообщений, записанных в буфере ядра
echo утилита для отображения строки текста
false утилита, не выполняющая никаких действий и возращающая статус завершения "не успешно"
hostname утилита, показывающая или устанавливающая системное имя хоста
kill утилита для посылки сигналов процессам
ln утилита для задания ссылок на файлы
login утилита, открывающая сессию работы пользователя в системе
ls утилита для вывода списка файлов в каталоге
mkdir утилита для создания каталогов
mknod утилита для создания специальных файлов устройств блочного или символьного типов
more утилита для постраничного вывода текста
mount утилита для монтирования файловых систем
mv утилита для перемещения/переименования файлов
ps утилита, возвращающая статус выполняющихся процессов
pwd утилита, возвращающая имя текущего рабочего каталога
rm утилита удаления файлов или каталогов
rmdir утилита удаления пустых каталогов
sed потоковый редактор `sed'
sh командная оболочка Борна
stty утилита для изменения установок или вывода информации об установках терминальной линии
su утилита смены идентификатора пользователя
sync утилита для сброса на диск содержимого буферов кеш-памяти
true утилита, не выполняющая никаких действий и возращающая статус завершения "успешно"
umount утилита для размонтирования файловых систем
uname утилита для получения информации о системе

Рекомендованные команды (файлы):

csh оболочка C-shell
ed редактор `ed'
tar утилита архивации tar
cpio утилита архивации cpio
gzip утилита сжатия (компрессии), разработанная в рамках проекта GNU
gunzip утилита декомпрессии, разработанная в рамках проекта GNU
zcat утилита декомпрессии, разработанная в рамках проекта GNU
netstat утилита сетевой статистики
ping утилита тестирования сети с помощью протокола ICMP

/boot »

Загрузочные файлы (в том числе файлы загрузчика, ядро и т.д.).

Т.е. здесь содержится все, что необходимо в процессе загрузки, кроме конфигурационных файлов и установщика карты загрузки. Ядро операционной системы должно располагаться либо в корневом каталоге /, либо в /boot; программы, необходимые загрузчику для организации загрузки файлов, должны размещаться в /sbin, а конфигурационные файлы загрузчика — в /etc. Таким образом, в /boot хранятся данные, которые используются до того, как ядро начинает исполнять программы пользователя. Здесь же находятся резервные сохраненные копии главной загрузочной записи и другие данные, которые не подлежат прямому редактированию.

Рекомендуется вынести на отдельный раздел.

На некоторых i386 компьютерах в силу аппартаных ограничений может оказаться необходимым разместить каталог/boot на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска.

/dev »

Каталог /dev - это место расположения специальных файлов устройств. Например sata винчестеры в /dev/sda, видео камеры или TV тюннеры в /dev/video или псевдоустройства, например «чёрные дыры» /dev/null, /dev/zero.

Каталог /dev должен содержать команду MAKEDEV, которая может создать файл устройства в случае необходимости. Он может также содержать MAKEDEV.local для любых локальных устройств.

Если требуется, MAKEDEV должен иметь возможность создания любого устройства, которое может быть установлено в системе, а не только тех устройств, которые устанавливаются при какой-либо конкретной реализации.

/etc »

Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы (имя происходит от et cetera). Здесь не должно быть бинарных файлов.

Каталоги различного предназначения, расположенные в /etc

"/etc"
opt
X11
sgml
"Конфигурационная информация для данного хоста"
Конфигурация для /opt
Конфигурация системы X Window
Конфигурация для SGML и XML

Файлы, которые должны быть расположены /etc.

csh.login Общесистемный инициализационный файл для оболочки C-shell
exports Список контроля доступа для сетевой файловой системы NFS
fstab Постоянная информация для монтирования файловых систем
ftpusers Список контроля доступа для демона FTP
gateways Файл, содержащий список шлюзов для демона routed
gettydefs Установки терминала, используемые демоном getty
group Файл, определяющий списки групп пользователей в системе
host.conf Файл конфигурации для системы разрешения имен
hosts Постоянная информация об именах хостов
hosts.allow Список хостов, с которых разрешен доступ в систему
hosts.deny Список хостов, с которых запрещен доступ в систему
hosts.equiv Список доверенных хостов для rlogin, rsh, rcp
hosts.lpd Список доверенных (разрешенных) имен хостов для демона печати lpd
inetd.conf Конфигурационный файл для демона inetd
inittab Конфигурационный файл для init
issue Сообщение, выдаваемое системой до регистрации пользователя
ld.so.conf Список дополнительных каталогов для поиска разделяемых библиотек
motd Сообщение, выдаваемое системой после регистрации пользователя
mtab Динамически изменяющаяся информация о смонтированных файловых системах
mtools.conf Конфигурационный файл для mtools
networks Статическая информация о сетевых именах
passwd Файл паролей
printcap База данных с настройками принтеров для lpd
profile Общесистемный файл инициализации для оболочки, запускаемой при входе пользователя в систему
protocols Перечень IP-протоколов
resolv.conf Конфигурационный файл для системы разрешения имен
rpc Перечень протоколов удаленного вызова процедур (RPC)
securetty Файл со списком устройств, с которых может заходить пользователь root
services Имена портов для сетевых сервисов
shells Список путей доступа для имеющихся в системе оболочек
syslog.conf Конфигурационный файл для демона syslogd

/home »

Содержит домашние директории пользователей, которые в свою очередь содержат персональные настройки и данные пользователя.

Рекомендуется вынести на отдельный раздел.

/lib »

Основные библиотеки, необходимые для работы программ из /bin/ и /sbin/.

Разделяемые библиотеки, которые необходимы только исполняемым файлам, расположенным в /usr (таким как бинарные файлы системы X Window) НЕ должны располагаться в /lib. Только те разделяемые библиотеки, которые необходимы для запуска программ из /bin и /sbin могут располагаться здесь. В частности, библиотека libm.so.* может быть расположена в /usr/lib, если она не требуется никаким программам из /binили /sbin.

/mnt »

Эта директория предназначена для того, чтобы системный администратор мог временно монтировать файловые системы по мере необходимости (CD-ROM, DVD-ROM, flash диски). Содержимое этого каталога индивидуально для каждой системы и не должно никаким образом влиять на работу запускаемых программ.

Этот каталог не должен использоваться программами инсталляции: для создания и хранения временных файлов на этапе инсталляции ПО должны использоваться временные каталоги, не используемые системой.

В ОС Ubuntu этот каталог практически не используется. Вместо него использован каталог /media.

/opt »

Каталог /opt зарезервирован для установки дополнительных пакетов программного обеспечения.

Пакет, который устанавливается в каталог /opt, должен размещать свои статические файлы в отдельной каталоговой структуре /opt/<package>, где <package> - название соответствующего пакета программного обеспечения.

В ОС Ubuntu этот каталог практически не используется.

Каталог /opt широко применяется в UNIX-системах.

/root »

Домашний каталог пользователя root может быть задан разработчиком или определен при инсталляции системы, но рекомендуется располагать его в каталоге /root, в Ubuntu именно так и сделано.

/sbin »

Утилиты для выполнения задач системного администрирования (и другие команды, используемые только пользователем root) размещаются в /sbin, /usr/sbin и /usr/local/sbin. Каталог /sbin содержит исполняемые файлы, необходимые для загрузки системы и ее воссстановления в различных ситуациях (restoring, recovering, and/or repairing the system) и не попавшие в каталог /bin.

Следующие команды или символические ссылки должны быть размещены в /sbin, если только соответствующие пакеты установлены в системе:

fastboot Команда перезагрузки системы без проверки дисков
fasthalt Команда остановки системы без проверки дисков
fdisk Программа переразбиения диска
fsck Утилита для проверки и восстановления файловых систем
fsck.* Утилиты для проверки и восстановления отдельных типов файловых систем
getty Программа getty
halt Команда остановки системы
ifconfig Утилита конфигурирования сетевых интерфейсов
init Первоначальный процесс
mkfs Команда создания файловой системы
mkfs.* Команда создания файловой системы конкретного типа
mkswap Команда создания файла или раздела подкачки (swap-раздела)
reboot Команда перезагрузки системы
route Утилита определения таблицы статической IP-маршрутизации
swapon Утилита подключения механизма свопинга
swapoff Утилита отключения свопинга
update Демон периодической очистки системных буферов

Если обычный пользователь (не системный администратор) когда-либо запускает программу, она должна размещаться в одном из каталогов "bin". Обычные пользователи не должны указывать каталоги sbin в списке путей, просматриваемых по умолчанию (в своей переменной PATH).

Рекомендуется предоставить всем пользователям право на чтение и выполнение файлов, расположенных в /sbin. Разделение каталогов /bin и /sbin делается не из соображений безопасности и не для того, чтобы лишить пользователей возможности видеть системные утилиты. Целью такого деления является установление явного различия между исполняемыми файлами, которые используются всеми, и теми утилитами, которые в основном используются для решения административных задач. С точки зрения безопасности нет никаких преимуществ в том, чтобы сделать /sbin недоступным для пользователей.

/tmp »

Каталог /tmp должен быть доступен для программ, которым необходимы временные файлы.

Программы не должны предполагать, что какой-либо файл в каталоге /tmp сохранится при следующем запуске программы.

Рекомендуется удалять все файлы и каталоги в /tmp при каждой загрузке системы.

/usr »

Каталог /usr - это второй главный раздел файловой системы (is the second major section of the filesystem). /usr содержит разделяемые данные, предназначенные только для чтения. Это означает, что /usr может быть доступен с различных FHS-совместимых хостов и права записи в него не должно быть. Любая информация, которая является специфичной для конкретного хоста или может изменяться со временем, должна записываться в другое место.

Большие программные пакеты не должны использовать непосредственно подкаталоги каталога /usr в этой иерархии.

Должны быть:

"/usr"
bin
include
lib
local
sbin
share
"Каталоговоая структура второго уровня"
Большая часть пользовательских команд
Файлы заголовков (header files), включаемые в программы на языке C
Библиотеки
Каталоговая структура Local (пустая непосредственно после инсталляции системы)
Системные утилиты, не являющиеся жизненно-важными (Non-vital system binaries)
Архитектурно-независимые данные

Рекомендуется:

"/usr"
X11R6
games
lib<qual>
src
"Каталоговая структура второго уровня"
X Window System, version 11 release 6
Игры и обучающие программы
Библиотеки для альтернативных форматов (optional)
Исходные коды (optional)

Локально устанавливаемое программное обеспечение должно располагаться не в /usr, а в /usr/local если только его установка производится не в целях замены или обновления ПО в /usr.

/usr/local »

Каталоговая структура /usr/local используется системным администратором в тех случаях, когда он устанавливает программное обеспечение, которое будет использоваться локально в рамках данного хоста. Этот каталог не должен перезаписываться при обновлениях системного программного обеспечения. Он может использоваться для программ и данных, не попавших в каталог /usr, доступ к которым разрешен с других хостов.

Следующие каталоги или символические ссылки на каталоги должны иметься в /usr/local

"/usr/local"
bin
games
include
lib
man
sbin
share
src
"Каталог для локального ПО"
Локальные исполняемые файлы
Локально установленные игровые приложения
Локальные заголовочные файлы для C
Локальные библиотеки
Локальные онлайновые руководства
Локальные системные исполняемые файлы
Архитектурно-независимые каталоговая структура для локального ПО
Локально установленные исходные коды

Никаких каталогов, кроме перечисленных выше, не должно быть в /usr/local после первой установки FHS-совместимой системы.

/usr/share »

Каталоговая структура /usr/share предназначена для всех файлов, которые предназначены только для чтения и не зависят от архитектуры.

Эта каталоговая структура предназначена для того, чтобы хранить файлы, используемые всеми архитектурными платформами данной ОС. Так, например, компьютеры на платформах i386, Alpha и PPC могут поддерживать один общий каталог /usr/share, который монтируется на отдельных компьютерах. Заметим, однако, что /usr/share обычно не предназначен для того, чтобы быть разделяемым различными операционными системами или различными версиями одной и той же ОС (or by different releases of the same OS).

Любая программа или пакет, который содержит или требует данных, не подлежащих модификации, должны хранить эти данные в каталоге /usr/share (или /usr/local/share, если пакет установлен локально). Рекомендуется использовать для этих целей подкаталоги каталога /usr/share.

Данные игровых программ, сохраняемые в /usr/share/games, должны быть чисто статическими данными. Любые модифицируемые файлы, такие как файлы результатов игр (score files), протоколы игр и так далее, должны размещаться в каталоге /var/games.

/var »

Рекомендуется вынести на отдельный раздел.

Каталог /var содержит файлы с изменяющимися данными. В их число входят каталоги и файлы спулинга, данные об администрировании и логировании, временные файлы.

Некоторые части каталоговой структуры /var не являются разделяемыми между разными системами. К ним относятся /var/log, /var/lock и /var/run. Другие части могут быть разделяемыми, например, /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news.

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

Если /var не может быть размещен в отдельном разделе диска, зачастую предпочительнее переместить каталог /var из корневого раздела в раздел с каталогом /usr. (Иногда это делается с целью уменьшения размера корневого раздела или когда в корневом разделе остается слишком мало места). Однако, /var нельзя делать ссылкой на /usr потому что это затрудняет разделение /usr и /var и может привести к конфликту имен. Лучше уж сделать /var ссылкой на /usr/var.

Приложения в общем случае не должны добавлять каталоги непосредственно в /var. Такие каталоги могут создаваться только в силу каких-то общесистемных соображений и после консультаций через лист рассылки FHS.

Следующие каталоги или символические ссылки на каталоги должны обязательно присутствовать в /var.

"/var"
cache
lib
local
lock
log
opt
run
spool
tmp
"Переменные данные"
Данные из кэшей приложений
Переменная информация о состоянии приложений
Переменные данные для /usr/local
Файлы блокирования устройств и программ
Каталоги и файлы протоколов
Переменные данные для /opt
Данные, относящиеся к запущенным процессам
Данные очередей, создаваемых приложениями
Временные файлы, сохраняемые между перезапусками системы

Могут быть в /var:

"/var"
account
crash
games
mail
yp
"Переменные данные"
Протоколы работы процессов
Дампы памяти при крахе системы
Временные данные игровых приложений
User mailbox files
Файлы базы данных Network Information Service (NIS)

/var/cache »

Этот каталог предусмотрен для сайтов, в которых файловая система /usr монтируется только на чтение, но в которых допускается создание станиц руководства, отформатированных локально. Сайты, в которых /usr монтируется с правом записи (например, когда у системы всего в один пользователь) могут не создавать каталога /var/cache/man, а использовать вместо него каталоги cat<section> непосредственно в /usr/share/man. Рекомендуется использовать один из следующих подходов:

  • Хранить предварительно отформатированные версии всех страниц руководства параллельно с неотформатированными версиями.
  • Не допускать кэширования отформатированных страниц на диск, требуя, чтобы форматирование выполнялось при каждом обращении к конкретной странице руководства.
  • Разрешить хранение отформатированных man-страниц в каталоге /var/cache/man.

Структура каталога /var/cache/man должна соответствовать наличию нескольких отдельных деревьев каталогов для страниц руководства и возможности наличия многоязыковой поддержки.

В предположении, что неформатированные страницы руководства расположены в каталогах <path>/man/<locale>/man<section>, форматированные страницы должны располагаться в каталоге /var/cache/man/<catpath>/<locale>/cat<section>, где <catpath> получается из <path> путем удаления подстроки usr из начала и подстроки share в конце имени каталога (компонент <locale> может отсутствовать).

Страницы руководства, записанные в /var/cache/man, могут быть перенесены в исходные каталоги структуры man или удалены; подобным же образом отформатированные страницы руководства в каталоге man могут быть удалены, если они не использовались в течение какого-то периода времени.

Если заранее отформатированные страницы руководства поставляются с системой на носителе, допускающем только чтение (например, на CD-ROM), они должны устанавливаться в исходную каталоговую структуру man (то есть в /usr/share/man/cat<section>). Каталог /var/cache/man зарезервирован как перезаписываемый кэш для отформатированных страниц руководства.

/var/lib »

Эта каталоговая структура содержит информацию о состоянии отдельных приложений или всей системы. Информация о состоянии - это данные, которые программы изменяют в процессе своей работы, относящиеся к одному конкретному хосту. У пользователей нет нужды менять эти файлы для настройки действий пакета.

Информация о состоянии в общем случае используется для сохранения состояния приложения (или группы взаимосвязанных приложений) между двумя запусками или передачи такой информации между двумя одновременно запущенными копиями одного и того же приложения. Информация о состоянии, в общем случае, должна сохраняться после перезагрузки системы, не должна совпадать с протоколируемым выводом программы и данными из очередей (spooled data).

Приложение (или группа взаимосвязанных приложений) должно использовать отдельный подкаталог в /var/lib для своих данных. Имеется одна обязательная директория, /var/lib/misc, которая предназначена для файлов состояния, которые не требуют отдельного подкаталога; остальные подкаталоги должны присутствовать если соответствующее приложение включено в дистрибутив.

/var/lib/<name> - местоположение, которое должно использоваться для каждого пакета из дистрибутива. Разные дистрибутивы могут, естественно, разные имена.

/var/lock »

Файлы блокирования должны храниться в каталоговой структуре /var/lock.

Файлы блокирования устройств и других ресурсов, используемые многими приложениями, такие как файлы блокирования последовательных портов, которые ранее находились либо в /usr/spool/locks, либо в /usr/spool/uucp, теперь должны размещаться в /var/lock. Названия этих файлов должны формироваться в соответствии с соглашением, согласно которому используется префикс "LCK..", за которым следует базовое имя устройства. Например, для блокирования /dev/ttyS0 должен создаваться файл "LCK..ttyS0".

Внутренняя структура таких файлов блокирования должна соответствовать формату, определенному в HDB UUCP. Формат HDB предусматривает сохранение идентификатора процесса (PID) в виде десяти-байтового десятичного числа, за которым следует символ конца строки. Например, если процесс 1230 создает файл блокирования, в этом файле будет записано 11 символов: пробел, пробел, пробел, пробел, пробел, пробел, один, два, три, ноль и конец строки.

/var/log »

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

Следующие файлы или символические ссылки на на файлы должны быть в /var/log, если соответствующая подсистема установлена:

lastlog запись о последнем входе в систему каждого пользователя
messages системные сообщения от syslogd
wtmp записи о всех входах и выходах пользователей в систему

/var/mail »

Область спулинга для почты должна размещаться в /var/mail, а имена файлов с сообщениями должны иметь вид <username>.

Файлы почтовых ящиков в этих каталогах должны хранится в формате стандартных почтовых ящиков UNIX (UNIX mailbox format).

Прежнее логическое местоположение этого каталога (/var/spool/mail ) было изменено для того, чтобы привести FHS в соответствие почти со всеми реализациями UNIX. Это изменение важно с точки зрения обеспечения взаимодействия разных систем, поскольку единая область /var/mail часто используется многими хостами, на которых запущены различные реализации UNIX (despite NFS locking issues).

Важно заметить, что нет требования физически переместить область спулинга в указанный каталог. Однако программы и заголовочные файлы должны быть изменеы так, чтобы они использовали /var/mail.

/var/run »

Этот каталог содержит данные, описывающие состояние системы с того момента, как она была загружена (This directory contains system information data describing the system since it was booted). Файлы в этом каталоге должны очищаться (удаляться или урезаться соответствующим образом) в начале процесса загрузки системы. Программы могут иметь подкаталоги в каталоге /var/run; это приветствуется для программ, которые используют более одного файла времени выполнения.

Внутренний формат для файлов, в которых хранятся идентификаторы процесов (PID), остаются неизменными. Файл должен состоять из идентификатора процесса в коде ASCII, записанном в десятичной нотации, за которым следует символ конца строки. Например, если crond запущен как процесс с номером 25, /var/run/crond.pid будет содержать три символа: два, пять и символ новой строки.

Программы, которые читают PID-файлы, должны быть достаточно гибкими в отношении того, что они воспринимают: то есть они должны игнорировать лишние пробелы, предшествующие ноли, отсутствие завершающего символа новой строки или дополнительные строки в PID-файле. Программы, которые создают PID-файлы, должны использовать простые спецификации, изложенные в предыдущем параграфе.

Файл utmp, в котором хранится информация о том, кто в данный момент использует систему, расположен в этом каталоге.

/var/tmp »

Каталог /var/tmp сделан доступным для программ, которым требуется временные файлы или каталоги, которые должны сохраняться между перезагрузками системы. Следовательно, данные, хранящиеся в /var/tmp, являются более постоянными, чем данные в /tmp.

Файлы и каталоги, размещенные в /var/tmp, не должны удаляться, когда система (пере)загружается.

Вот и все в общих чертах. В части 2 я расскажу о FHS применительно к Ubuntu и дам рекомендации по разбиению на разделы.

Cсылки по теме FHS

ЗЫ: А подарки тут - эта ссылка не имеет отношения к FHS, задо radost доставляет не меньшую.

Популярность: 6%

Поделиться в соц. сетях

Опубликовать в Одноклассники
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Яндекс
Опубликовать в Google Buzz
Опубликовать в Google Plus