Иерархия каталогов и файловых систем в Linux. Часть 2 (продолжение)
  В.А.Костромин, 04/2003, http://linux-ve.net

Каталог /sbin

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

Единственная команда, которая обязательно должна присутствовать в /sbin, это команда shutdown - команда остановки системы.

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

fastboot

Команда перезагрузки системы без проверки дисков

fasthalt

Команда остановки системы без проверки дисков

fdisk

Программа переразбиения диска

fsck

Утилита для проверки и восстановления файловых систем

fsck.*

Утилиты для проверки и восстановления отдельных типов файловых систем

getty

Программа getty

halt

Команда остановки системы

ifconfig

Утилита конфигурирования сетевых интерфейсов

init

Первоначальный процесс

mkfs

Команда создания файловой системы

mkfs.*

Команда создания файловой системы конкретного типа

mkswap

Команда создания файла или раздела подкачки (swap-раздела)

reboot

Команда перезагрузки системы

route

Утилита определения таблицы статической IP-маршрутизации

swapon

Утилита подключения механизма свопинга

swapoff

Утилита отключения свопинга

update

Демон периодической очистки системных буферов



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

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

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

Каталог /temp

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

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

Каталоговая структура /usr

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

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

bin

Это основное место для размещения исполняемых файлов системы.

/usr/bin/X11 должен быть символической ссылкой на /usr/X11R6/bin если последний существует.

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

  • perl - Язык Perl (The Practical Extraction and Report Language)

  • python - Интерпретирующий язык Python

  • tclsh - Оболочка интерпретатора Tcl

  • wish - Оболочка Tcl/Tk

  • expect - Программа для организации интерактивного диалога

Поскольку интерпретаторы скриптов оболочки (вызываемые командой вида #!<path> в первой строке скрипта) не могут полностью полагаться на эту строку, имеет смысл стандартизовать их расположение. Размещение интерпретаторов оболочек Борна и C-shell уже зафиксировано в каталоге /bin, но интерпретаторы языков Perl, Python и Tcl часто размещаются в самых разных местах. В каталоге /usr/bin можно оставить только символические ссылки на действительное местоположение интерпретаторов.

include

Это место, где должны быть размещены все системные подключаемые файлы общего пользования для языка программирования C, в частности файлы заголовков (header files), включаемые в программы на языке C.

Символическая ссылка /usr/include/X11 должна указывать на /usr/X11R6/include/X11, если только последний существует.

lib

Каталог /usr/lib содержит объектные файлы, библиотеки и внутренние исполняемые файлы, которые не могут вызываться непосредственно пользователями из командной строки или скриптов оболочки. (Различные архитектурно-зависимые статические файлы и подкаталоги, специфичные для отдельных приложений, должны размещаться в /usr/share. )

Приложения могут использовать отдельные подкаталоги в /usr/lib. Если приложение использует подкаталог, все архитектурно-зависимые данные, используемые только этим приложением, должны размещаться внутри этого подкаталога. (Например, подкаталог perl5 для модулей и библиотек Perl 5.)

По историческим причинам /usr/lib/sendmail должен быть символической ссылкой на /usr/sbin/sendmail, если последний существует. (Некоторые исполняемые команды, такие как makewhatis и sendmail тоже по традиции размещаются в /usr/lib. makewhatis - это внутреннй исполняемый файл и должен размещаться в подкаталоге для бинарных файлов; пользователям предоставляется доступ только к catman. Исполняемые файлы последних версий sendmail теперь по умолчанию располагаются в /usr/sbin. Кроме того, системы, использующие sendmail-совместимые агенты передачи почты, должны делать /usr/sbin/sendmail символической ссылкой к соответствующему исполняемому файлу.)

Если /lib/X11 существует, /usr/lib/X11 должен быть символической ссылкой на /lib/X11, либо на тот каталог, на который ссылается /lib/X11. (Специфичные для каждого хоста данные для системы X Window не должны размещаться в /usr/lib/X11. Специфичные для хоста конфигурационные файлы, такие как Xconfig или XF86Config должны храниться в /etc/X11. Это требование относится и к таким фонфигурационным данным, как system.twmrc, даже если это только символическая ссылка на более общий конфигурационный файл, вероятно в /usr/X11R6/lib/X11).

local

Каталоговая структура для локально устанавливаемого программного обеспечения (пустая непосредственно после инсталляции системы)

sbin

Этот каталог содержит системные команды, используемые исключительно системным администратором, не являющиеся жизненно-важными для системы. Программы для выполнения задач системного администрирования, которые необходимы для восстановления системы, монтирования /usr, или для других самых важных системных задач, должны размещаться в /sbin. (Локально устанавливаемые программы для системного администрирования должны размещаться в /usr/local/sbin.)

share

Архитектурно-независимые данные

X11R6

Эта каталоговая структура зарезервирована для системы X Window System, version 11 release 6, и относящихся к ней файлов.

Для некоторого упрощения и сохранения совместимости XFree86 с системой X Window для других типов операционных систем должны быть созданы следующие символические ссылки, если только каталог /usr/X11R6 существует:

/usr/bin/X11 -> /usr/X11R6/bin

/usr/lib/X11 -> /usr/X11R6/lib/X11

/usr/include/X11 -> /usr/X11R6/include/X11

В общем случае программное обеспечение не должно использовать перечисленные символические ссылки при инсталляции или в целях управления. Они предназначены только для пользователей. Трудности связаны с версиями выпусков системы X Window -- в переходный период невозможно узнать, какая версия X11 используется.

Специфичные для каждого хоста данные в каталоге /usr/X11R6/lib/X11 должны использоваться только в демонстрационных целях. Приложения, которым необходима информация о текущей конфигурации хоста, должны искать ее в каталоге /etc/X11, куда могут быть сделаны ссылки из каталога /usr/X11R6/lib. (Примерами таких конфигурационных файлов могут служить Xconfig, XF86Config или system.twmrc.)

games

Игры и обучающие программы

lib<qual>

Библиотеки для альтернативных форматов

src

Исходные коды программного обеспечения.

Программные пакеты не должны создавать подкаталоги непосредственно в каталоге /usr. Исключение сделано для системы X Window в силу сложившихся традиций и широко распространенной практики.

Могут создаваться следующие символические ссылки на каталоги.

/usr/spool -> /var/spool

/usr/tmp -> /var/tmp

/usr/spool/locks -> /var/lock

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

  • /usr/local : Каталог для локального ПО

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

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

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

    • bin - Локальные исполняемые файлы

    • games - Локально установленные игровые приложения

    • include - Локальные заголовочные файлы для C

    • lib - Локальные библиотеки

    • man - Локальные онлайновые руководства

    • sbin - Локальные системные исполняемые файлы

    • share - Архитектурно-независимые структура каталогов для локального ПО

    • src - Локально установленные исходные коды.

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

    /usr/share : Архитектурно-независимые данные

    Структура каталогов /usr/share предназначена для всех файлов, которые предназначены только для чтения и не зависят от архитектуры. Так, например, компьютеры на платформах i386, Alpha и PPC могут поддерживать один общий каталог /usr/share, который монтируется на остальных компьютерах. Заметим, однако, что /usr/share обычно рассчитан на одну версию ОС и не предназначен для того, чтобы быть разделяемым различными операционными системами или различными версиями одной и той же ОС. Примерами файлов, которые размещаются в этом каталоге, могут служить файлы документации (man, doc) или базы данных (dict, terminfo, zoneinfo). Любая программа или пакет, который содержит или требует данных, не подлежащих модификации, должны хранить эти данные в каталоге /usr/share (или /usr/local/share, если пакет установлен локально). Рекомендуется использовать для этих целей подкаталоги каталога /usr/share.

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

    В каталоге /usr/share создаются следующие подкаталоги или символические ссылки

    man - Он-лайновые руководства

    misc - Различные архитектурно-независимые данные

    dict - Словари (optional)

    doc - Различная документация (optional)

    games - Файлы статических данных для /usr/games (optional)

    info - Основная директория для системы GNU Info (optional)

    locale - Локальная информация (optional)

    nls - Каталоги сообщений для поддержки языков (optional)

    sgml - Данные для SGML и XML (optional)

    terminfo - Каталог базы данных для terminfo (optional)

    tmac - Макросы для troff, не распространяемые с groff (optional)

    zoneinfo - Конфигурационные файлы и информация о временной зоне (optional)

    Рекомендуется размещать здесь архитектурно-независимые каталоги, создаваемые приложениями. К такого рода каталогам относятся groff, perl, ghostscript, texmf и kbd (Linux) или syscons (BSD). Они могут, однако, из соображений обратной совместимости, по усмотрению разработчика располагаться в /usr/lib. Подобным же образом в дополнение к каталогу /usr/share/games может создаваться каталог /usr/lib/games, если разработчик желает разместить тут какие-то данные для своей игры.

    /usr/share/dict : Словари

    Каталог /usr/share/dict содержит списки слов (словари), используемые в системе; обычно в ней находится только файл words для английского языка, который используется утилитой look(1) и различными программами проверки правописания. Файл words может быть ориентирован либо на американский, либо на британский вариант языка. В системах, где необходим как американский, так и британский английский, можно сделать words ссылкой на /usr/share/dict/american-english или /usr/share/dict/british-english.

    Списки слов для других языков могут быть добавлены, используя английское название соответствующего языка, например, /usr/share/dict/french, /usr/share/dict/danish, и так далее. В названиях должен, по возможности, использоваться набор символов ISO 8859, соответствующий данному языку; если возможно, надо использовать набор символов Latin1 (ISO 8859-1).

    /usr/share/man : Страницы руководства man

    Исходной директорией (<mandir>) для интерактивного руководства man в UNIX-системах является каталог /usr/share/man. Этот каталог содержит информацию о командах и других данных, размещаемых в файловых системах / и /usr.

    Страницы интерактивного руководства man разбиты на следующие секции:

    • man1: Пользовательские программы.
      В этой секции содержатся описания общедоступных команд. Здесь расположена большая часть необходимой пользователям документации к программам.

    • man2: Системные вызовы.
      Эта секция описывает все системные вызовы (запросы к ядру на выполнение каких-то операций).

    • man3: Библиотеки функций и подпрограмм.
      В секции 3 описываются библиотеки программных процедур, которые не являются прямыми вызовами сервисов ядра. Эта секция, как и секция 2, представляет интерес только для программистов.

    • man4: Специальные файлы.
      Секция 4 описывает специальные файлы устройств, функции соответствующих драйверов и средства сетевой поддержки, предоставляемые системой. Обычно в эту секцию включается описание файлов устройств, находящихся в каталоге /dev, и интерфейса ядра для средств поддержки сетевых протоколов.

    • man5: Форматы файлов.
      Форматы многих файлов данных документированы в секции 5. Речь идет о различных подключаемых файлах, файлах вывода программ, системных файлах и так далее.

    • man6: Игры.
      В эту секцию включена документация к играм, демо и другим тривиальным программам. Разные люди могут иметь разные мнения о том, насколько важно то, что размещено здесь.

    • man7: Разное.
      Страницы руководства, которые трудно отнести к какому-то иному разделу, размещаются в секции 7. Здесь вы найдете, к примеру, описание troff и других средств для обработки текста.

    • man8: Системное администрирование.
      В этой секции документированы программы, используемые системным администратором для выполнения системных операций и поддержки работоспособности системы. Некоторые из этих программ бывают полезны иногда и обычным пользователям.

    Деление страниц руководства на секции и нумерация секций от "1" до "8" определено традициями. В общем случае имена файлов для страниц руководства, расположенных в определенной секции, оканчиваются расширением вида .<section>, совпадающим с номером секции. Для каждой секции создается отдельный каталог с именем <mandir>/<locale>/man<section>/<arch>, где компонент <section> задает секцию руководства, а разъяснения того, что имеется в виду под <locale> и <arch> даются ниже.

    Примечание: Если, например, /usr/local/man не содержит файлов руководства в секции 4 (Устройства), то каталог /usr/local/man/man4 может не создаваться.

    Для поддержки страниц руководства, написанных на разных (или нескольких) языках, вводятся отдельные подструктуры каталога /usr/share/man. Способ именования специфичных для языка подкаталогов /usr/share/man основан на Приложении E стандарта POSIX 1003.1, которое задает формат строки, идентифицирующей локаль, - это общепринятый метод определения особенностей, определяемых культурой той или иной страны. Строка <locale> имеет следующий формат:

    <language>[_<territory>][.<character-set>][,<version>]

    Поле <language> должно браться из стандарта ISO 639 (коды для представления названий языков). Оно должно состоять из двух символов и записываться только в нижнем регистре.

    Поле <territory> должно состоять из двух символов, записываемых только в верхнем регистре (заглавными буквами), и представляет собой, если это возможно, двухбуквенный код из спецификации ISO 3166.

    Поле <character-set> представляет собой стандартное описание кодировки. Если поле <character-set> представлено только цифрами, эти цифры представляют номер международного стандарта, описывающего набор символов. Рекомендуется, если это возможно, чтобы это было числовое представление (в особенности стандартов ISO), не включающее дополнительных символов пунктуации, и чтобы любые символы были в нижнем регистре.

    После поля <character-set> может располагаться параметр <version>, который отделяется запятой. Этот параметр может использоваться для выделения каких-то дополнительных версий кодировки. Но разработчики стандарта FHS не рекомендуют использовать поле <version>, если только это не является необходимым.

    Системы, которые используют только один язык и набор символов для всех страниц интерактивного руководства, могут опустить подстроку <locale>, и хранить все страницы руководства в <mandir>. Например, системы, в которых страницы руководства имеются только на английском языке, причем в кодировке ASCII, могут хранить все страницы документации (каталоги man<section>) прямо в /usr/share/man. (Фактически это традиционное их местоположение.)

    Страны, для которых есть общепринятый стандарт кодового набора символов, могут опустить поле <character-set>, но стандарт настоятельно рекомендует включить его, особенно для стран с несколькими конкурирующими стандартами.

    В тексте стандарта приведены следующие примеры формирования имен каталогов для различных стран и кодировок:

    Язык

    Территория

    Набор символов

    Каталог





    Английский

    --

    ASCII

    /usr/share/man/en

    Английский

    Великобритания

    ASCII

    /usr/share/man/en_GB

    Английский

    Соединенные Штаты

    ASCII

    /usr/share/man/en_US

    Французский

    Канада

    ISO 8859-1

    /usr/share/man/fr_CA

    Французский

    Франция

    ISO 8859-1

    /usr/share/man/fr_FR

    Немецкий

    Германия

    ISO 646

    /usr/share/man/de_DE.646

    Немецкий

    Германия

    ISO 6937

    /usr/share/man/de_DE.6937

    Немецкий

    Германия

    ISO 8859-1

    /usr/share/man/de_DE.88591

    Немецкий

    Швейцария

    ISO 646

    /usr/share/man/de_CH.646

    Японский

    Япония

    JIS

    /usr/share/man/ja_JP.jis

    Японский

    Япония

    SJIS

    /usr/share/man/ja_JP.sjis

    Японский

    Япония

    UJIS (или EUC-J)

    /usr/share/man/ja_JP.ujis

    Аналогичным образом вводятся специальные каталоги для страниц руководства, которые зависят от архитектуры, таких как описания драйверов устройств или низкоуровневых команд системного администрирования. Таковые должны быть размещены в подкаталогах <arch> в соответствующем каталоге man<section>; например, man-страница по команде ctrlaltdel(8) для архитектуры i386 может быть расположена в файле /usr/share/man/<locale>/man8/i386/ctrlaltdel.8.

    Кроме того, некоторые большие массивы страниц руководства, относящихся к определенным приложениям, могут иметь дополнительный суффикс, добавляемый к имени файла со страницей руководства. Например, для системы обработки почты MH файлы руководства должны иметь дополнительный суффикс mh в имени файла. Все страницы руководства для системы X Window System должны иметь дополнение x к имени файла.

    Требование размещения страниц интерактивного руководства для различных языков в соответствующих подкаталогах каталога /usr/share/man распространяется также на другие структуры каталогов с руководствами, такие как /usr/local/man и /usr/X11R6/man. (Это требование применяется также к каталоговой структуре /var/cache/man, рассматриваемой ниже.)

    /usr/share/misc : Различные архитектурно-независимые данные

    Этот каталог содержит различные архитектурно-независимые файлы, для которых не требуется отдельный подкаталог в /usr/share (но разработчики могут при желании разместить их также в /usr/lib). Вот некоторые из таких файлов: airport, birthtoken, eqnchar, getopt, gprof.callg, gprof.flat, inter.phone, ipfw.samp.filters, ipfw.samp.scripts, keycap.pcvt, mail.help, mail.tildehelp, man.template, map3270, mdoc.template, more.help, na.phone, nslookup.help, operator, scsi_modes, sendmail.hf, style, units.lib, vgrindefs, vgrindefs.db, zipcodes.

    Следующие файлы или символические ссылки на файлы должны иметься в /usr/share/misc, если соответствующие подсистемы установлены.

    • ascii - таблица набора символов ASCII (ASCII character set table),

    • magic - список магических чисел для команды file, используемый по умолчанию,

    • termcap - база данных с параметрами терминалов,

    • termcap.db - база данных с параметрами терминалов.

    Каталоговая структура /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.

    cache
    lib
    local
    lock
    log
    opt
    run
    spool
    tmp

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

    Несколько каталогов "зарезервированы" в том смысле, что они не должны использоваться произвольным образом каким-либо из новых приложений, поскольку это противоречит исторической или локальной практике их использования. Это следующие каталоги:

    /var/backups

    /var/cron

    /var/msgs

    /var/preserve

    Наличие следующих подкаталогов в /var не является обязательным, но они (может быть как символические ссылки) должны иметься, если соответствующие системы установлены:

    account - протоколы работы процессов,
    crash -
    дампы памяти при крахе системы,
    games -
    временные данные игровых приложений,
    mail -
    файлы почтовых ящиков пользователей,
    yp -
    файлы базы данных сетевой информационной службы (Network Information Service - NIS).

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

    /var/cache : Данные кэша приложений

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

    Файлы, расположенные в /var/cache, могут удаляться либо самим приложением, либо администратором. Приложение должно всегда иметь возможность продолжить работу, даже после удаления этих файлов вручную (например, при нехватке дискового пространства). Никаких других требований на формат данных в каталоге кэша не накладывается.

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

    Обычно в этом каталоге создаются подкаталоги

    fonts - локально сгенерированные шрифты,

    man - локально отформатированные страницы руководства,

    www - кэш данных для WWW proxy,

    <package> - кэшируемые данные пакета <package>.

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

    Примечание: Стандарт FHS не предусматривает поглощение или замену the TeX Directory Structure (документ, который задает размещение файлов формата TeX и структуру соответствующих каталогов), так что этот документ полезно прочитать. Он размещается по адресу ftp://ctan.tug.org/tex/.

    Другие динамически создаваемые шрифты могут тоже размещаться в этом дереве, в соответствующим образом названных подкаталогах каталога /var/cache/fonts.

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

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

    /var/crash : Дампы памяти при крахе системы

    Этот каталог предназначен для записи в него содержимого оперативной памяти (дампа памяти) в случае краха системы. На момент выпуска данной версии настоящего стандарта дампы памяти не поддерживаются в системе Linux.

    /var/lock : Файлы блокирования

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

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

    /var/log : Каталоги и файлы протоколов

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

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

    • lastlog - запись о последнем входе в систему каждого пользователя,

    • messages - системные сообщения от syslogd,

    • wtmp - записи о всех входах и выходах пользователей в систему.

    /var/mail : Почтовые ящики пользователей

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

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

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

    /var/opt : Переменные данные для /opt

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

    /var/run : Переменные данные времени выполнения

    Этот каталог содержит данные, описывающие состояние системы с того момента, как она была загружена Файлы в этом каталоге должны очищаться (удаляться или урезаться соответствующим образом) в начале процесса загрузки системы. Программы могут иметь подкаталоги в каталоге /var/run; это приветствуется для программ, которые используют более одного файла времени выполнения.

    Примечание: Непривилегированные пользователи должны быть лишены права записи в каталог /var/run; с точки зрения безопасности предоставление любому пользователю права записи в этот каталог представляет большую угрозу. Файлы с идентификаторами процессов (PID), которые раньше располагались в /etc, должны быть размещены в /var/run. Соглашение об именах этих файлов следующее: <program-name>.pid. Например, PID-файл для демона crond называется /var/run/crond.pid.

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

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

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

    /var/spool : Очереди данных для приложений

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

    Обычно в /var/spool создаются следующие подкаталоги: lpd (каталог спулинга для принтера), mqueue (очередь исходящей почты), news (каталог спулинга новостей), rwho (файлы для программы Rwhod), uucp (каталог спулинга для UUCP).

    /var/tmp : Временные файлы, сохраняемые между перезапусками системы

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

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

    Дополнительные требования стандарта для ОС Linux

    Отдельный раздел стандарта FHS содержит требования и рекомендации, которые относятся только к операционной системе Linux. Вот их краткий перечень:

    • В Linux-системах, если ядро расположено в корневом каталоге ("/"), рекомендуется использовать для него названия vmlinux или vmlinuz, которые используются в последних версиях исходных кодов ядра Linux.

    • Если в Linux-системе используется файл setserial, он должен размещаться в каталоге /bin.

    • Все устройства и специальные файлы в /dev должны соответствовать документу Linux Allocated Devices, который поставляется в составе исходных кодов ядра и поддерживается Питером Анвином (H. Peter Anvin). Символические ссылки в каталоге /dev должны устанавливаться в Linux-системах не иначе как в соответствии с документом Linux Allocated Devices.

    • Если в Linux-системе используется файл lilo.conf, он должен размещаться в каталоге /etc.

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

    • В Linux-системах следующие дополнительные файлы размещаются в /sbin (в тексте стандарта имеются пояснения, почему возникло это требование):

    • Команды для управления файловой системой ext2fs: badblocks, dumpe2fs, e2fsck, mke2fs, mklost+found, tune2fs;

    • Программа установки загрузчика системы lilo;

    • Неизменяемые исполняемые файлы ldconfig, sln, ssync.

    • Программы ctrlaltdel, kbdrate.

    • Если в системе установлены компиляторы языков C или C++, и система не основана на glibc, должны быть созданы следующие символические ссылки:

    /usr/include/asm -> /usr/src/linux/include/asm-<arch>

    /usr/include/linux -> /usr/src/linux/include/linux

    • Для систем, основанных на версиях библиотеки libc, предшествующих glibc, применяются следующие правила:

    Единственными исходными кодами, которые должны быть размещены в определенном месте, являются исходные коды ядра Linux. Они размещаются в /usr/src/linux.

    Если установлен компилятор C или C++, а полная версия исходных кодов ядра не установлена, то подключаемые файлы из исходных кодов ядра должны размещаться в следующих каталогах:

    /usr/src/linux/include/asm-<arch>

    /usr/src/linux/include/linux

    где <arch> - название архитектуры системы (например, i386).

    Замечание: /usr/src/linux может быть символической ссылкой на дерево каталогов с исходными кодами ядра.

    • Каталог /var/spool/cron содержит переменные данные для программ-демонов cron и at.

    Иерархия файловых систем

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

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

    • Чтобы обеспечить процесс загрузки, в корневой файловой системе должна находиться информация для загрузчика и основные файлы, необходимые в процессе старта системы (например, ядро ОС). Здесь же должны размещаться файлы конфигурации и все, что необходимо для монтирования других файловых систем, включая такие утилиты, как mount.

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

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

    По нескольким причинам размер корневой файловой системы желательно сделать достаточно малым.

    • Иногда приходится монтировать корневую файловую систему с носителя очень малого объема.

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

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

    В общем, из чтения текста стандарта можно сделать вывод о том, что в корневой файловой системе обязательно должны целиком (то есть со всем их содержимым) располагаться каталоги /bin, /dev, /etc, /lib, /sbin и, возможно, /root.

    Каталог /boot в силу аппаратных ограничений может оказаться необходимым разместить на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска. Еще одной причиной размещения этого каталога в отдельной файловой системе может оказаться использование файловой системы ReiserFS: ядро не всегда может загружаться из раздела с такой файловой системой [2].

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

    Что касается каталога /home, то его размещение в отдельном разделе диска в стандарте прямо не оговаривается, но как бы молча подразумевается. Впрочем, такое решение легко обосновать и без ссылок на стандарт. Причем оно не зависит от того, идет ли речь о персональном компьютере или о файловом, предположим, сервере. В обоснование этого вывода можно привести следующие доводы. Рано или поздно, но систему придется переустанавливать или обновлять. Если раздел с программным обеспечением при этом практически безболезненно можно отформатировать (поскольку дистрибутив Linux содержит, как правило, обновленные версии практически всех пакетов ПО и все будет заново поставлено), то домашние каталоги пользователей из дистрибутива не обновишь. Представьте, что ваш домашний каталог администратор почистит без вашего ведома. Так что уж лучше каталог /home не трогать. Поэтому стоит разместить домашние каталоги пользователей в отдельной файловой системе и после переустановки ОС заново смонтировать ее в каталог /home.

    Что касается каталога /usr, то, если исходить из приведенной в стандарте рекомендации минимизации корневого раздела, его, вслед за /home, надо выносить в отдельный раздел. Дело в том, что если исключить домашние каталоги пользователей, то именно этот каталог по объему составляет более 90% объема всех каталогов. Это и не удивительно - в нем установлено все программное обеспечение.

    Пожалуй, это все, что можно извлечь из текста стандарта относительно разнесения каталогов по разным файловым системам. А уж решение о том, как именно разбить диск на разделы принимает администратор каждой конкретной системы самостоятельно (можно еще учесть рекомендации статей [2,3]).

    В заключение хочется еще раз отметить, что речь в статье идет только о требованиях и рекомендациях стандарта FHS, причем стандарта, разработанного с ориентацией на операционные системы Linux и BSD. Даже конкретные дистрибутивы Linux далеко не во всем следуют этому стандарту. Например, в Red Hat Linux версий 7.3 и 8.0 каталог /etc/opt хотя и создан, но пуст, а конфигурационные каталоги пакетов размещаются непосредственно в /etc. Аналогичная ситуация с каталогом /opt - он тоже пуст, а все дополнительное ПО устанавливается, по-видимому, в /usr (по крайней мере то ПО, которое разворачивается из rpm-пакетов). Можно указать и другие отклонения от стандарта. Но все же в основном структура каталогов выдерживается в соответствии с FHS, и я надеюсь, что чем дальше, тем больше будет к нему приближаться. Так что знакомство с этим стандартом безусловно полезно всем пользователям Linux, а тем более разработчикам программного обеспечения для этой операционной системы.

    Литература

    1. В.Костромин, "Самоучитель Linux для пользователя", изд. БХВ-Петербург, 2002 г.
    2. В.Холманов, "Разбиение дисков и инсталляция Linux на LVM", http://www.softerra.ru/freeos/20792/print.html
    3. А.Федорчук, "Установка Linux в современных условиях: дисковые разделы", http://linuxshop.ru/unix4all/?cid=&id=12.