1 Введение
1.1 Назначение
Этот стандарт необходим для того, чтобы:
- программное обеспечение легко находило нужные файлы и каталоги, и
- пользователи легко находили установленные в системе файлы и каталоги.
Мы достигаем этих целей тем, что
- формулируем основополагающие принципы, в соответствии с которыми формируется каждая составная часть файловой системы,
- указываем минимально необходимый список файлов и подкаталогов,
- перечисляем исключения из основных принципов, и
- перечисляем особые случаи, возникающие в силу исторических причин.
Настоящий стандарт используется для того, чтобы
- независимые поставщики программного обеспечения могли создавать приложения, совместимые со стандартом FHS, и работать с FHS-совместимыми дистрибутивами,
- создатели операционных систем разрабатывали системы, совместимые с FHS, и
- пользователи понимали и поддерживали FHS-совместимость систем.
1.2 Обозначения
Мы рекомендуем вам читать версию этого документа, набранную с использованием различных шрифтов, а не простой текстовый вариант. В версии, использующей различные шрифты, имена файлов и каталогов набраны шрифтом фиксированной ширины.
Компоненты имен файлов, которые могут изменяться, представляются описанием соответствующего компонента, заключенным угловые скобки "<" и ">", <вот так>. Адреса электронной почты тоже заключаются в "<" и ">", но они изображаются обычным шрифтом.
Необязательные компоненты имен файлов заключаются квадратные скобки "[" и "]", причем оба этих условных обозначения могут комбинироваться. Например, если имя файла может иметь расширение или не иметь такового, это представляется следующим образом:
Произвольная подстрока в имени каталога или файла обозначается символом "*".
2 Файловая система
В настоящем стандарте предполагается, что операционная система, использующая FHS-совместимую файловую систему, поддерживает обычные для большинства UNIX-систем средства обеспечения безопасности (the same basic security features found in most UNIX filesystems).
Можно определить два независимых критерия разбиения множества файлов на независимые типы (прим.переводчика: математик сказал бы - на не пересекающиеся подмножества): разделяемые файлы в противоположность неразделяемым и неизменяемые (статические) файлы как противоположность изменяемым файлам.
Разделяемые данные - это те, к которым может быть разрешен доступ с различных хостов; неразделяемые - те, которые являются специфическими для данного хоста. Например, домашние каталоги пользователей содержат разделяемые данные, а файлы блокирования устройств (device lock files) являются неразделяемыми.
Неизменяемые (или статические) данные - это исполняемые файлы, библиотеки, документация, и все, что не должно изменяться без вмешательства системного администратора; изменяемые данные - это все, что может изменяться без участия системного администратора.
Должно существовать простое и понятное соответствие между каталогами и типом данных, которые в этом каталоге размещаются: каталоги могут являться точками монтирования для других файловых систем, характеристики которых отличаются от характеристик той файловой системы, в которую они монтируются.
Начало пояснений
Различать разделяемые и неразделяемые файлы необходимо по следующим причинам:
- При работе компьютера в сети (т.е. в тех случаях, когда несколько компьютеров взаимосвязаны), всегда имеется достаточно значительная доля таких данных, которые могут использоваться совместно всеми компьютерами, что позволяет экономить дисковое пространство и облегчает выполнение задач поддержки и обслуживания (task of maintenance).
- С другой стороны при работе в сети некоторые файлы содержат информацию, которая относится только к данному компьютеру. Следовательно, эти данные не могут использоваться другими хостами и не могут быть разделяемыми (если не принять специальных мер).
- Старые реализации файловых систем для UNIX допускали размещение разделяемых и неразделяемых файлов в одних и тех же каталогах, ограничивая тем самым возможность делать разделяемыми по сети большие части файловой системы.
Выделение "разделяемых" данных может использоваться, например, для:
- монтирования (в режиме "только для чтения") раздела /usr (или части /usr) по сети (используя NFS).
- монтирования раздела /usr (или части раздела /usr) с носителя, допускающего только чтение. CD-ROM является одним из возможных примеров того, как одна копия файловой системы может использоваться другими FHS-совместимыми файловыми системами через "сеть" некоего рода.
Различие между "статическими" и "изменяемыми" данными оказывает влияние на структуру файловой системы по двум основным направлениям:
- Поскольку корневой каталог / содержит как изменяемые, так и статические данные, он должен всегда монтироваться в режиме чтения-записи.
- Поскольку традиционно каталог /usr содержал как статические, так и изменяемые данные, и поскольку мы теперь хотим монтировать его в режиме "только для чтения" (смотри выше), необходимо найти способ монтировать /usr только для чтения. Этого можно достичь, если создать каталоговую структуру /var, которая монтируется в режиме "чтение-запись" (либо размещается в другом разделе, где разрешены как чтение, так и запись, таком, как /), а в оставшейся части структуры /usr разрешить только чтение.
Приведем пример того, как должны распределяться данные для того, чтобы файловая система могла считаться совместимой со стандартом FHS (еще раз повторим, что это только пример, можно привести и другие примеры того, как размещать данные для обеспечения FHS-совместимости).
Разделяемые | Неразделяемые | |
Статические | /usr | /etc |
/opt | /boot | |
Изменяемые | /var/mail | /var/run |
/var/spool/news | /var/lock | |
Таблица 2.1
3 Корневая файловая система
3.1 Назначение
Корневая файловая система должна содержать все, что необходимо для того, чтобы загрузить операционную систему, а также восстановить ее после сбоев и аварийных ситуаций или переустановить систему из резервной копии.
- Для загрузки системы необходимо, чтобы в корневом разделе диска было все необходимое для монтирования других файловых систем. Здесь же должны быть необходимые утилиты, файлы конфигурации, информация, необходимая загрузчику, и другие данные, используемые на этапе старта системы. Содержимое каталогов /usr, /opt и /var формируется таким образом, чтобы они могли размещаться в других разделах или даже в файловых системах других типов.
- Для того, чтобы обеспечить возможность восстановления системы после сбоев, в корневой файловой системе должны присутствовать все утилиты, необходимые опытному администратору для диагностирования проблем и реконструкции системы после любой аварийной ситуации.
- Для восстановления системы с резервной копии в корневой файловой системе должны иметься все утилиты, необходимые для работы с резервными носителями (дискетами, магнитными лентами и так далее).
НАЧАЛО ПОЯСНЕНИЙ
В противовес изложенным соображениям, в силу которых очень многое требуется разместить в корневой каталоговой системе, стоит подумать о том, чтобы поддерживать размер корневой файловой системы настолько малым, насколько это только возможно. Желание сохранить размер корневой файловой системы разумно малым возникает по нескольким причинам:
- Она может располагаться на носителях очень малого объема.
- Корневая файловая система содержит много конфигурационных файлов с данными, относящимися только к данной конкретной системе. Примерами таких данных может служить ядро, которое является специфичным для данной системы, индивидуальное имя хоста и так далее. Отсюда следует, что корневая файловая система не должна быть разделяемой, то есть доступной с других компьютеров сети. Поддержание малого размера корневой файловой системы на серверах сети минимизирует количество потерь дискового пространства, возникающих из-за необходимости хранить неразделяемые по сети файлы. Кроме того, появляется возможность использовать рабочие станции с малыми по объему локальными жесткими дисками.
- Даже если вы имеете возможность разместить корневую файловую систему в большом разделе диска, и можете заполнить ее любыми данными по своему усмотрению, стоит помнить и о том, что у некоторых людей корневой раздел имеет меньший размер. Если у вас в ней установлено много файлов, вы можете натолкнуться на несовместимость с другими системами, в которых корневая файловая система размещена в разделе меньшего объема. Если вы разработчик, тогда вы можете превратить ваше допущение в проблему для большого числа пользователей.
- Сбои диска, вследствие которых разрушается корневая файловая система, представляют бОльшую проблему, чем сбой в любом другом разделе. Малая корневая файловая система менее подвержена разрушению в результате системных сбоев.
Программы или приложения никогда не должны создавать или предполагать наличие каких-то файлов или подкаталогов в корневой директории. Другие области файловой иерархии FHS предоставляют более чем достаточно места для любого пакета.
Существует несколько причин, по которым создание нового подкаталога в корневой файловой системе запрещено:
- Создание каталога требует выделения пространства в корневом разделе диска, а системный администратор может иметь желание поддерживать этот раздел малым и по возможности простым, либо из соображений безопасности, либо для повышения производительности.
- Это приводит к тому, что разрушает порядок, который системный администратор заводит для того, чтобы иметь возможность устанавливать единую структуру каталогов на монтируемых томах. (It evades whatever discipline the system administrator may have set up for distributing standard file hierarchies across mountable volumes.)
3.2 Требования
Следующие каталоги или символические ссылки на каталоги должны иметься в /.
"/" bin boot dev etc lib mnt opt sbin tmp usr var |
"Корневой каталог" Основные исполняемые команды Статические файлы для загрузчика Специальные файлы устройств Специфичные для данного хоста конфигурационный данные Основные разделяемые библиотеки и модули ядра Точка монтирования для временно подключаемых файловых систем Дополнительные пакеты программного обеспечения Основные системные утилиты Временные файлы Каталоговая структура второго уровня Переменные данные |
3.3 Рекомендации
Следующие каталоги или символические ссылки на каталоги должны иметься в /, если соответствующие подсистемы установлены:
"/" home lib root |
"Корневой каталог" Домашние каталоги пользователей (optional) Основные разделяемые библиотеки для альтернативных форматов (optional) Домашний каталог пользователя root (optional) |
3.4 /bin : Основные исполняемые файлы (доступные всем пользователям)
3.4.1 Назначение
Каталог /bin содержит команды, которые могут использоваться как системным администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система еще не смонтирована (например, в одно-пользовательском режиме). В этом каталоге могут также содержаться команды, которые используются не напрямую пользователем, а через скрипты.[примечание 1]3.4.2 Требования
В каталоге /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 | утилита для получения информации о системе |
Таблица 3.4.2.1
Если /bin/sh не является настоящей оболочкой Борна, это должна быть жесткая или символическая ссылка на реальную программу оболочки.
Обе команды [ и test должны быть расположены вместе, либо в каталоге /bin, либо в /usr/bin.
НАЧАЛО ПОЯСНЕНИЙ
Команда bash работает по-разному в зависимости от того, была ли она вызвана как sh или как bash. Кроме того, использование символической ссылки позволяет пользователям легко увидеть, что /bin/sh не является настоящей оболочкой Борна.
Требование того, чтобы команды [ и test включались в этот каталог как отдельные исполняемые файлы (даже если они реализованы как встроенные команды оболочки) присутствует также в стандарте POSIX.2.
КОНЕЦ ПОЯСНЕНИЙ
3.4.3 Рекомендации
Следующие программы или символические ссылки на программы должны находиться в каталоге /bin если только соответствующие пакеты установлены в системе:csh | оболочка C-shell (optional) |
ed | редактор `ed' (optional) |
tar | утилита архивации tar (optional) |
cpio | утилита архивации cpio (optional) |
gzip | утилита сжатия (компрессии), разработанная в рамках проекта GNU (optional) |
gunzip | утилита декомпрессии, разработанная в рамках проекта GNU (optional) |
zcat | утилита декомпрессии, разработанная в рамках проекта GNU (optional) |
netstat | утилита сетевой статистики (optional) |
ping | утилита тестирования сети с помощью протокола ICMP (optional) |
Таблица 3.4.3.2
Если файлы gunzip и zcat существуют, они должны быть символическими или жесткими ссылками на gzip. /bin/csh может быть символической ссылкой либо на /bin/tcsh, либо на /usr/bin/tcsh.
НАЧАЛО ПОЯСНЕНИЙ
Команды tar, gzip и cpio необходимы для восстановления системы (в предположении, что каталог / доступен).
Если же необходимость восстановления системы из корневого раздела отсутствует (например, в случае загрузки бездисковых рабочих станций, когда каталог /usr монтируется посредством протокола NFS) эти команды могут отсутствовать и в каталоге /bin. Если восстановление системы планируется проводить по сети, то файлы программ ftp или tftp (вместе со всем, что необходимо для установления соединения по протоколу ftp) должны быть размещаться в корневом разделе диска.
3.5 /boot : Статические файлы для системного загрузчика
3.5.1 Назначение
Этот каталог содержит все, что необходимо в процессе загрузки, исключая конфигурационные файлы и the map installer. Таким образом, в /boot хранятся данные, которые используются до того, как ядро начинает исполнять программы пользователя. Здесь же находятся резервные сохраненные копии главной загрузочной записи (master boot sectors), sector map files, и другие данные, которые не подлежат прямому редактированию. [примечание 2]
3.5.2 Specific Options
Ядро операционной системы должно быть расположено либо в корневом каталоге /, либо в /boot.[примечание 3]
[2] Программы, необходимые загрузчику для организации загрузки файлов, должны быть расположены в /sbin. Конфигурационные файлы загрузчика должны размещаться в /etc.
[3] На некоторых i386 компьютерах в силу аппаратных ограничений может оказаться необходимым разместить каталог /boot на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска.
Certain MIPS systems require a /boot partition that is a mounted MS-DOS filesystem or whatever other filesystem type is accessible for the firmware. This may result in restrictions with respect to usable filenames within /boot (only for affected systems).
3.6 /dev : Специальные файлы устройств
3.6.1 Назначение
Каталог /dev - это место расположения специальных файлов устройств.
3.6.2 Рекомендации
Если может потребоваться создавать файлы устройств в /dev вручную, каталог /dev должен содержать команду MAKEDEV, которая может создать файл устройства в случае необходимости. Он может также содержать MAKEDEV.local для любых локальных устройств.
Если требуется, MAKEDEV должен иметь возможность создания любого устройства, которое может быть установлено в системе, а не только тех устройств, которые устанавливаются при какой-либо конкретной реализации.
3.7 /etc : Специфичная для данного хоста конфигурационная информация
3.7.1 Назначение
Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы.[прим. 4]
3.7.2 Требования
В каталоге /etc не должно быть бинарных файлов.
Следующие каталоги или символические ссылки на каталоги должны быть расположены в /etc:
"/etc" opt |
"Конфигурационная информация для данного хоста" Конфигурация для /opt |
Дерево 3.7.2.1
3.7.3 Рекомендации
Следующие каталоги либо символические ссылки на них должны быть расположены в /etc, если соответствующие пакеты установлены в системе:
"/etc" X11 sgml |
"Конфигурационная информация для данного хоста" Конфигурация системы X Window (optional) Конфигурация для SGML и XML (optional) |
Дерево 3.7.3.2
Следующие файлы либо символические ссылки на них должны быть расположены в /etc, если соответствующие пакеты установлены в системе: [примечание 5]
csh.login | Общесистемный инициализационный файл для оболочки C-shell (optional) |
exports | Список контроля доступа для сетевой файловой системы NFS (optional) |
fstab | Постоянная информация для монтирования файловых систем (optional) |
ftpusers | Список контроля доступа для демона FTP (optional) |
gateways | Файл, содержащий список шлюзов для демона routed (optional) |
gettydefs | Установки терминала, используемые демоном getty (optional) |
group | Файл, определяющий списки групп пользователей в системе (optional) |
host.conf | Файл конфигурации для системы разрешения имен (optional) |
hosts | Постоянная информация об именах хостов (optional) |
hosts.allow | Список хостов, с которых разрешен доступ в систему (optional) |
hosts.deny | Список хостов, с которых запрещен доступ в систему (optional) |
hosts.equiv | Список доверенных хостов для rlogin, rsh, rcp (optional) |
hosts.lpd | Список доверенных (разрешенных) имен хостов для демона печати lpd (optional) |
inetd.conf | Конфигурационный файл для демона inetd (optional) |
inittab | Конфигурационный файл для init (optional) |
issue | Сообщение, выдаваемое системой до регистрации пользователя (optional) |
ld.so.conf | Список дополнительных каталогов для поиска разделяемых библиотек (optional) |
motd | Сообщение, выдаваемое системой после регистрации пользователя (optional) |
mtab | Динамически изменяющаяся информация о смонтированных файловых системах (optional) |
mtools.conf | Конфигурационный файл для mtools (optional) |
networks | Статическая информация о сетевых именах (optional) |
passwd | Файл паролей (optional) |
printcap | База данных с настройками принтеров для lpd (optional) |
profile | Общесистемный файл инициализации для оболочки, запускаемой при входе пользователя в систему (optional) |
protocols | Перечень IP-протоколов (optional) |
resolv.conf | Конфигурационный файл для системы разрешения имен (optional) |
rpc | Перечень протоколов удаленного вызова процедур (RPC) (optional) |
securetty | Файл со списком устройств, с которых может заходить пользователь root (optional) |
services | Имена портов для сетевых сервисов (optional) |
shells | Список путей доступа для имеющихся в системе оболочек (optional) |
syslog.conf | Конфигурационный файл для демона syslogd (optional) |
Таблица 3.7.3.1
Файл mtab не соответствует неизменяемой природе файлов, размещенных в /etc: он помещен в данный каталог в виде исключения по историческим причинам.[примечание 6]
3.7.4 /etc/opt : Конфигурационные файлы для /opt
3.7.4.1 Назначение
Специфичные для данного хоста конфигурационные файлы для дополнительных пакетов прикладного программного обеспечения должны устанавливаться в каталоги /etc/opt/
3.7.4.2 Требования
Никаких ограничений на внутреннюю структуру каталога /etc/opt/
Если конфигурационный файл должен располагаться в ином месте для того, чтобы пакет или система функционировали должным образом, этот файл может помещаться в каталог, отличный от /etc/opt/
НАЧАЛО ПОЯСНЕНИЙ
Смотри пояснения к /opt.
КОНЕЦ ПОЯСНЕНИЙ
3.7.5 /etc/X11 : Конфигурация для системы X Window (optional)
3.7.5.1 Назначение
/etc/X11 - это место размещения всех конфигурационных данных для X11, специфичных для данного хоста. Эта директория необходима для того, чтобы обеспечить локальное управление системой X Window в том случае, когда файловая система /usr монтируется только на чтение.
3.7.5.2 Рекомендация
Следующие файлы или символические ссылки должны находиться в /etc/X11, если только соответствующая система установлена:
Xconfig | Конфигурационный файл для ранних версий XFree86 (optional) |
XF86Config | Конфигурационный файл для XFree86 версий 3 и 4 (optional) |
Xmodmap | Глобальный файл модификации клавиатуры в X11 (optional) |
Таблица 3.7.5.2.2
Среди подкаталогов в /etc/X11 могут находиться отдельные подкаталоги с конфигурационной информацией для xdm и других программ (например, для оконных менеджеров), которые в такой информации нуждаются. [примечание 7]
3.7.6 /etc/sgml : Конфигурационные файлы для SGML и XML (optional)
3.7.6.1 Назначение
Здесь устанавливаются исходные конфигурационные файлы, определяющие параметры верхнего уровня SGML- или XML-систем. Файлы с именами *.conf - это исходные (generic) конфигурационные файлы. Файлы с именами *.cat - это DTD-специфичные централизованные (centralized) каталоги, содержащие ссылки ко всем другим каталогам, необходимым для использования какого-то конкретного DTD. Файл супер-каталога catalog содержит ссылки на все централизованные каталоги.
[4] Размещение командных скриптов запуска может осуществляться в соответствии с моделями, принятыми в System V, BSD, или какими-то другими моделями. Более точные спецификации в этой области могут быть установлены будущими версиями настоящего стандарта.
[5] Системы, в которых используются теневые пароли, создают дополнительные конфигурационные каталоги и файлы в /etc (/etc/shadow и другие), а также размещают программы в каталоге /usr/sbin (useradd, usermod и другие).
[6] В некоторых Linux-системах это может быть символическая ссылка на /proc/mounts; в этом случае исключение не требуется.
[7] /etc/X11/xdm содержит конфигурационные файлы для xdm. В большинстве случаев это файлы, которые раньше размещались в /usr/lib/X11/xdm. Некоторые локальные переменные данные для xdm хранятся в /var/lib/xdm. Мы рекомендуем, чтобы оконные менеджеры с одним единственным конфигурационным файлом, который обычно по умолчанию имеет имя .*wmrc, переименовали его в system.*wmrc (если только нет общепринятого альтернативного названия) и не использовать подкаталог. Любой подкаталог для оконного менеджера должен называться так же, как называется исполняемый файл оконного менеджера.
3.8 /home : Домашние каталоги пользователей (optional)
3.8.1 Назначение
Наличие каталога /home - это достаточно стандартное решение, очевидно только, что этот каталог является специфичным для каждого отдельного компьютера.[примечание 8]
[8] Разные люди предпочитают размещать пользовательские каталоги в разных местах. Данная секция описывает только предлагаемые варианты размещения домашних каталогов пользователей; тем не менее мы рекомендуем, чтобы все FHS-совместимые дистрибутивы использовали именно каталог /home как место размещения домашних каталогов.
В маленьких системах каждый пользовательский каталог является одним из многих подкаталогов каталога /home, таких как /home/smith, /home/torvalds, /home/operator и так далее. В больших системах (особенно когда каталоги /home являются разделяемыми между многими хостами посредством NFS) полезно объединить домашние каталоги в группы, введя подкаталоги групп такие как /home/staff, /home/guests, /home/students и так далее. Но как бы то ни было структура домашних каталогов различается от хоста к хосту. Следовательно, никакая программа не должна полагаться на какие-то предположения о структуре домашних каталогов.[примечание 9]
[9] Если вы хотите разыскать домашний каталог пользователя, вы должны использовать библиотечную функцию getpwent(3), а не полагаться на запись в /etc/passwd, потому что информация о пользователях может храниться на удаленных хостах, используя такие системы, как NIS.
3.9 /lib : Основные разделяемые библиотеки и модули ядра
3.9.1 Назначение
Каталог /lib содержит те разделяемые библиотеки, которые необходимы для загрузки системы и запуска команд, расположенных в корневой файловой системе, то есть в каталогах /bin и /sbin. [примечание 10]
3.9.2 Требования
По крайней мере один из файлов, соответствующих каждому из следующих шаблонов, должен найтись в данном каталоге (это могут быть либо реальные файлы, либо символические ссылки):
libc.so.* | Динамически подсоединяемые библиотеки C (optional) |
ld* | Компоновщик/загрузчик времени выполнения (The execution time linker/loader) (optional) |
Таблица 3.9.2.1
Если препроцессор языка Си установлен, /lib/cpp должен быть ссылкой на него, по историческим причинам.[примечание 11]
3.9.3 Рекомендации
Следующие каталоги или символические ссылки на каталоги должны находиться в /lib, если соответствующая подсистема установлена:
"/lib" modules |
"Основные разделяемые библиотеки и модули ядра" Загружаемые модули ядра (optional) |
Дерево 3.9.3.1
[10] Разделяемые библиотеки, которые необходимы только исполняемым файлам, расположенным в /usr (таким как бинарные файлы системы X Window) НЕ должны располагаться в /lib. Только те разделяемые библиотеки, которые необходимы для запуска программ из /bin и /sbin могут располагаться здесь. В частности, библиотека libm.so.* может быть расположена в /usr/lib, если она не требуется никаким программам из /bin или /sbin.
[11] Обычное местоположение этого бинарного файла - /usr/lib/gcc-lib/
3.10 /lib : Основные разделяемые библиотеки альтернативных форматов (optional)
3.10.1 Назначение
Более одного варианта каталога /lib может существовать в системах, поддерживающих более одного формата исполняемых файлов, когда для каждого формата требуется свой отдельный вариант разделяемых библиотек. [примечание 12]
3.10.2 Требования
Если одна или несколько таких директорий существует, требования к их содержимому те же самые, что и к обычному каталогу /lib, за исключением того, что /lib
[12] Обычно это используется для поддержки 64-битного или 32-битного формата в системах, поддерживающих несколько форматов исполняемых файлов, и требующих библиотек с одним и тем же названием. В этом случае /lib32 и /lib64 могут быть библиотечными каталогами, а /lib - символической ссылкой на один из них.
[13] Наличие /lib
3.11 /mnt : Точка монтирования для временно монтируемых файловых систем
3.11.1 Назначение
Эта директория предназначена для того, чтобы системный администратор мог временно монтировать файловые системы по мере необходимости. Содержимое этого каталога индивидуально для каждой системы и не должно никаким образом влиять на работу запускаемых программ.
Этот каталог не должен использоваться программами инсталляции: для создания и хранения временных файлов на этапе инсталляции ПО должны использоваться временные каталоги, не используемые системой.
3.12 /opt : Дополнительные пакеты программного обеспечения
3.12.1 Назначение
Каталог /opt зарезервирован для установки дополнительных пакетов программного обеспечения.
Пакет, который устанавливается в каталог /opt, должен размещать свои статические файлы в отдельной каталоговой структуре /opt/
3.12.2 Требования
"/opt" |
"Дополнительные пакеты программного обеспечения" Статические объекты пакета |
Дерево 3.12.2.1
Каталоги /opt/bin, /opt/doc, /opt/include, /opt/info, /opt/lib и /opt/man зарезервированы для использования локальным системным администратором. Пакеты могут предоставлять "front-end" файлы, которые локальный системный администратор может разместить в этих зарезервированных каталогах (либо путем копирования, либо установив ссылку), но любой пакет должен нормально функционировать и в случае отсутствия этих зарезервированных директорий.
Программы, вызываемые на исполнение пользователем, должны располагаться в каталоге /opt/
Файлы пакета, которые являются переменными (изменяемыми при выполнении стандартных операций), должны устанавливаться в /var/opt. Дополнительную информацию ищите в разделе о каталоге /var/opt.
Специфичные для хоста конфигурационные данные должны устанавливаться в /etc/opt. Дополнительную информацию ищите в разделе о каталоге /etc.
Никакие файлы пакета не должны размещаться вне каталогов /opt, /var/opt и /etc/opt, кроме тех файлов, которые должны оказаться в других местах по той причине, что иначе пакет не сможет функционировать нормально. Например, файлы блокирования устройств должны располагаться в /var/lock, а файлы устройств должны располагаться в /dev.
Дистрибутивы могут устанавливать программное обеспечение в каталог /opt, но не должны модифицировать или удалять ПО, установленное местным системным администратором, без разрешения этого самого администратора.
НАЧАЛО ПОЯСНЕНИЯ
Использование каталога /opt для дополнительного ПО является широко распространенной практикой в сообществе UNIX. The System V Application Binary Interface [AT&T 1990], основанный на System V Interface Definition (Third Edition), предлагает придерживаться для /opt структуры очень похожей на ту, которая определена здесь.
Стандарт Intel Binary Compatibility Standard v. 2 (iBCS2) тоже предполагает подобную структуру для /opt.
Как правило все данные, необходимые для поддержки функционирования пакета, должны присутствовать в каталоге /opt/
Небольшие ограничения на дистрибутивы, использующие /opt, необходимы из-за возможности возникновения конфликтов между ПО, устанавливаемым из дистрибутива, и локально устанавливаемого ПО, особенно в том случае, когда бинарные пакеты используют фиксированные имена каталогов и файлов.
3.13 /root : Домашний каталог пользователя root (optional)
3.13.1 Назначение
Домашний каталог пользователя root может быть задан разработчиком или определен при инсталляции системы, но рекомендуемое место его расположения по умолчанию - каталог /root.[примечание 14]
[14] Если домашний каталог суперпользователя расположен не в корневом разделе диска, необходимо убедиться, что если он не будет найден, то по умолчанию таковым будет назначен каталог /. (Примечание переводчика. Я не совсем уверен, что вышеприведенное предложение является правильным переводом следующего текста: "If the home directory of the root account is not stored on the root partition it will be necessary to make certain it will default to / if it can not be located.")
Мы не рекомендуем использовать бюджет пользователя root для выполнения задач, которые могут быть выполнены непривилегированным пользователем. Бюджет суперпользователя должен использоваться исключительно для системного администрирования. По этой причине мы не рекомендуем размещать подкаталоги для почты и других приложений в домашнем каталоге пользователя root. Почта для таких администраторских ролей как root, postmaster и webmaster должна пересылаться соответствующему пользователю.
3.14 /sbin : Системные утилиты
3.14.1 Назначение
Утилиты для выполнения задач системного администрирования (и другие команды, используемые только пользователем root) размещаются в /sbin, /usr/sbin и /usr/local/sbin. Каталог /sbin содержит исполняемые файлы, необходимые для загрузки системы и ее восстановления в различных ситуациях (restoring, recovering, and/or repairing the system) и не попавшие в каталог /bin.[примечание 15]
3.14.2 Требования
Следующие команды или символические ссылки обязательно должны присутствовать в /sbin.
shutdown | Команда остановки системы. |
Таблица 3.14.2.1
3.14.3 Рекомендации
Следующие команды или символические ссылки должны быть размещены в /sbin, если только соответствующие пакеты установлены в системе:
fastboot | Команда перезагрузки системы без проверки дисков (optional) |
fasthalt | Команда остановки системы без проверки дисков (optional) |
fdisk | Программа переразбиения диска (optional) |
fsck | Утилита для проверки и восстановления файловых систем (optional) |
fsck.* | Утилиты для проверки и восстановления отдельных типов файловых систем (optional) |
getty | Программа getty (optional) |
halt | Команда остановки системы (optional) |
ifconfig | Утилита конфигурирования сетевых интерфейсов (optional) |
init | Первоначальный процесс (optional) |
mkfs | Команда создания файловой системы (optional) |
mkfs.* | Команда создания файловой системы конкретного типа (optional) |
mkswap | Команда создания файла или раздела подкачки (swap-раздела) (optional) |
reboot | Команда перезагрузки системы (optional) |
route | Утилита определения таблицы статической IP-маршрутизации (optional) |
swapon | Утилита подключения механизма свопинга (optional) |
swapoff | Утилита отключения свопинга (optional) |
update | Демон периодической очистки системных буферов (optional) |
Таблица 3.14.3.2
[15] Когда-то исполняемые файлы, размещаемые теперь в /sbin, помещались в /etc. Программы, которые выполняются после того, когда смонтирован каталог /usr (если монтирование прошло без проблем) обычно размещаются в /usr/sbin. Локально устанавливаемые программы для системного администрирования должны быть размещены в /usr/local/sbin. [примечание 16]
[16] Принять решение о том, какие программы разместить в каталогах "sbin", довольно просто: если обычный пользователь (не системный администратор) когда-либо запускает программу, она должна размещаться в одном из каталогов "bin". Обычные пользователи не должны указывать каталоги sbin в списке путей, просматриваемых по умолчанию (в своей переменной PATH).
Такие, к примеру, файлы, как chfn, которые пользователи запускают очень редко и только в особых случаях, должны, тем не менее, размещаться в /usr/bin. Команда ping, хотя она абсолютно необходима суперпользователю для решения задач сетевой диагностики и восстановления сети, часто используется и рядовыми пользователями, и по этой причине должна размещаться в /bin.
Мы рекомендуем предоставить всем пользователям право на чтение и выполнение для всех файлов, расположенных в /sbin, кроме, может быть тех программ, для которых установлены биты setuid и setgid. Разделение каталогов /bin и /sbin делается не из соображений безопасности и не для того, чтобы лишить пользователей возможности видеть системные утилиты. Целью такого деления является установление явного различия между исполняемыми файлами, которые используются всеми, и теми утилитами, которые в основном используются для решения административных задач. С точки зрения безопасности нет никаких преимуществ в том, чтобы сделать /sbin недоступным для пользователей.
3.15 /tmp : Временные файлы
3.15.1 Назначение
Каталог /tmp должен быть доступен для программ, которым необходимы временные файлы.
Программы не должны предполагать, что какой-либо файл в каталоге /tmp сохранится при следующем запуске программы.
НАЧАЛО ПОЯСНЕНИЙ
Стандарт IEEE P1003.2 (POSIX, part 2) выдвигает требования, аналогичные сформулированным выше.
Хотя данные, сохраняемые в каталоге /tmp могут удаляться по правилам, специфичным для каждого хоста, рекомендуется удалять все файлы и каталоги в /tmp при каждой загрузке системы.
FHS вводит последнюю рекомендацию на основе исторических прецедентов и общей практики, но не считает ее обязательным требованием, поскольку вопросы системного администрирования не являются предметом настоящего стандарта.