2003 г
Иерархия каталогов и файловых систем в Linux
Виктор Костромин
24.04.2003
Открытые системы, #04/2003
Cтруктура каталогов понятие чисто логическое и к реальным механизмам работы с файлами отношения не имеет. Каждая конкретная операционная система могла бы строить ее по-своему, что привело бы к несовместимости и непереносимости программ. Группой энтузиастов был разработан стандарт FHS иерархии файловых систем для Unix-подобных операционных систем.
Любой пользователь знаком сегодня с понятиями файла и каталога (с точки зрения Unix каталог тот же файл) [1-3]. Группой энтузиастов из сообщества разработчиков программ с открытым кодом была предложена спецификация структуры каталогов для Unix-подобных систем, так называемый стандарт иерархии файловых систем (Filesystem Hierarchy Standard, FHS).
Работа над FHS началась в августе 1993 года с попытки упорядочить структуру файлов и каталогов Linux. Вначале его называли проектом стандартов файловой системы Filesystem Standards Project (FSSTND), а первая версия была выпущена 14 февраля 1994 года. В начале 1995 года была поставлена задача по созданию более общей версии FSSTND, предназначенной не только для Linux, но и для других Unix-подобных систем, в первую очередь BSD 4.4. Учитывая расширение сферы действия стандарта, его переименовали в FHS (www.pathname.com/fhs). Стандарт вобрал положительные качества, присущие BSD и другим системам в части поддержки различных архитектур и учета требований работы в гетерогенных сетях.
Во-первых, учитывалось, что, хотя в Unix-подобных системах структура каталогов представлена в виде единого дерева, отдельные его «ветви» могут располагаться на разных носителях или в разных файловых системах. Размещение файлов на разных носителях позволяет оптимизировать процессы загрузки, последующего функционирования и возможного обновления системы. При этом файловые системы могут физически располагаться на разных компьютерах и быть различными по своей внутренней организации (ext2fs, vfat и т.д.). Во-вторых, любая Unix-система — система сетевая. Поэтому при размещении отдельных файлов в различных частях файловой структуры учитывалось, что некоторые файлы должны быть доступны с других компьютеров в сети, а к другим файлам доступ по сети необходимо ограничить. Группа неразделяемых файлов вычленяется как по соображениям безопасности, так и просто потому, что эти файлы определяют локальную конфигурацию системы и поэтому нужны только на данном компьютере. Выделение группы разделяемых файлов позволяет также экономить общее дисковое пространство. В третьих, существуют файлы, изменять которые может только администратор, и те, которые любой пользователь может менять самостоятельно. К числу статических относятся исполняемые файлы, библиотеки, документация и др. Для рядовых пользователей эти файлы должны быть доступны только на чтение. Знание этих предпосылок помогает понять логику размещения отдельных файлов и каталогов в структуре каталогов, предлагаемой стандартом FHS.
Корневой каталог
Стандарт FHS предлагает создать в корневом каталоге следующие подкаталоги:
- bin - файлы основных команд (утилит), которые необходимы, когда никакая другая файловая система еще не смонтирована (например, в однопользовательском режиме);
- boot - неизменяемые файлы, необходимые для загрузки системы;
- dev - файлы устройств;
- etc - файлы конфигурации системы на данном компьютере;
- home - домашние каталоги пользователей (факультативно);
- lib - основные разделяемые библиотеки и модули ядра;
- lib<alt> - основные разделяемые библиотеки для альтернативных форматов (факультативно);
- mnt - точку монтирования для временно подключаемых файловых систем;
- root - домашний каталог пользователя root (факультативно);
- opt - дополнительные пакеты программного обеспечения;
- sbin - основные системные исполняемые файлы;
- tmp - временные файлы;
- usr - иерархию второго уровня;
- var - переменные данные.
В соответствии с требованиями стандарта приложения не должны создавать файлы и каталоги или требовать наличия каких-то специальных файлов и каталогов (помимо перечисленных) в корневом каталоге. Во-первых, размер корневой файловой системы желательно сохранять по возможности малым, а во-вторых, стандарт FHS обеспечивает достаточную гибкость и удобство размещения файлов, не попавших в корневую систему, в других файловых системах и подкаталогах. Некоторые подкаталоги корневого каталога факультативны. Но уж если они существуют, то должны размещаться в корневом каталоге, но не обязательно в корневой файловой системе.
Каталог /bin содержит команды, которые могут использоваться как администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система, кроме корневой, еще не смонтирована (например, в однопользовательском режиме). Те утилиты, которые не так важны, чтобы размещаться в корневой файловой системе, должны размещаться в каталоге /usr/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, sh, stty, su, sync, true, umount, uname, csh, ed, tar, cpio, gzip, gunzip, zcat, netstat, ping. В каталоге /bin не должно быть подкаталогов.
Каталог /boot содержит все, что необходимо в процессе загрузки, исключая конфигурационные файлы и установщика карты загрузки. Ядро операционной системы должно располагаться либо в корневом каталоге /, либо в /boot; программы, необходимые загрузчику для организации загрузки файлов, должны размещаться в /sbin, а конфигурационные файлы загрузчика — в /etc.
/dev — место расположения специальных файлов устройств. На случай, если потребуется создавать файлы устройств вручную, каталог /dev должен содержать команду MAKEDEV, которая может создать файл устройства в случае необходимости.
Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы, но в нем не должно быть двоичных файлов. В соответствии со стандартом FHS каталог в обязательном порядке должен содержать подкаталог /opt, в котором должны размещаться подкаталоги с конфигурационными файлами отдельных пакетов и приложений. Для каждого установленного пакета <package> должен создаваться конфигурационный каталог /etc/opt/package. В каталоге /etc должны содержаться следующие каталоги и файлы:
- /X11 - конфигурационные файлы X Window;
- /sgml - конфигурационные файлы для SGML и XML;
- csh.login - общесистемный инициализационный файл для csh;
- 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 - перечень протоколов удаленного вызова процедур;
- securetty - файл со списком устройств, с которых может заходить пользователь root;
- services - имена портов для сетевых служб;
- shells - список имеющихся в системе оболочек;
- syslog.conf - конфигурационный файл для демона syslogd.
Файл mtab не соответствует неизменяемой природе файлов, размещенных в /etc, и помещен в данный каталог в виде исключения, по историческим причинам.
В небольших системах каждый домашний каталог пользователя является одним из непосредственных подкаталогов каталога /home, таких как /home/smith, /home/operator и т.д. В больших системах (особенно когда каталоги /home являются разделяемыми между многими хостами) полезно объединить домашние каталоги в группы, введя подкаталоги групп, такие как /home/staff, /home/students. Поскольку структура домашних каталогов различается от хоста к хосту, никаких требований на нее не налагается.
/lib содержит разделяемые библиотеки, необходимые для загрузки системы и запуска команд из каталогов /bin и /sbin. По крайней мере, один из файлов, соответствующих каждому из следующих шаблонов, должен найтись в данном каталоге (это могут быть либо реальные файлы, либо символические ссылки): libc.so.*, динамически подсоединяемые библиотеки Cи; ld*, загрузчик/ времени выполнения. Не должны располагаться в /lib разделяемые библиотеки, которые необходимы только исполняемым файлам, расположенным в /usr (таким, как двоичные файлы X Window). В частности, библиотека libm.so.* может быть расположена в /usr/lib, если она не требуется никаким программам из /bin или /sbin. Может существовать более одного варианта каталога /lib в системах, поддерживающих более одного формата исполняемых файлов (например, 32–разрядные и 64-разрядные форматы), при этом для каждого формата требуется свой отдельный вариант разделяемых библиотек (которые могут называться /lib32 и /lib64).
/mnt предназначен для временного монтирования файловых систем по мере необходимости. Содержимое этого каталога индивидуально для каждой системы и не должно никаким образом влиять на работу запускаемых программ.
/opt резервируется стандартом FHS для установки дополнительных программных пакетов. Предполагается, что любой такой пакет должен размещать свои статические файлы в отдельной структуре /opt/<package>, где <package> — название пакета. Исполняемые программы располагаются в каталоге /opt/<package>/bin, а в /opt/<package>/man размещаются страницы обычного для Unix интерактивного руководства man. Файлы пакета, которые являются переменными (изменяемыми при выполнении стандартных операций), должны устанавливаться в /var/opt, а специфичные для хоста конфигурационные данные должны устанавливаться в /etc/opt. Никакие файлы пакета не должны размещаться вне каталогов /opt, /var/opt и /etc/opt, кроме тех файлов, которые должны оказаться в других местах по той причине, что иначе пакет не сможет функционировать нормально. Например, файлы блокирования устройств должны располагаться в /var/lock, а файлы устройств должны располагаться в /dev.
/root — домашний каталог суперпользователя. Рекомендуемое место его расположения — корневая файловая система. В FHS подчеркивается, что учетная запись суперпользователя должна использоваться исключительно для системного администрирования и его не рекомендуется расходовать для выполнения задач, которые могут быть выполнены непривилегированным пользователем. По этой причине не стоит размещать в root подкаталоги для почты и других приложений. Почта для таких администраторских ролей, как root, postmaster и webmaster должна пересылаться соответствующему пользователю.
/sbin содержит утилиты для выполнения задач системного администрирования (и другие команды, используемые только пользователем root). Этот каталог содержит исполняемые файлы, необходимые для загрузки системы и ее восстановления в различных ситуациях (restoring, recovering, and/or repairing the system), не попавшие в каталог /bin. Единственная команда, которая обязательно должна присутствовать в /sbin, — shutdown. К примеру, команда ping, хотя она абсолютно необходима суперпользователю, часто используется и рядовыми пользователями, и по этой причине должна размещаться в /bin. Авторы стандарта рекомендуют предоставить всем пользователям право на чтение и выполнение для всех файлов, расположенных в /sbin, кроме, может быть тех программ, для которых установлены биты setuid и setgid. Разделение каталогов /bin и /sbin делается с целью установления явного различия между исполняемыми файлами, которые используются всеми, и теми утилитами, которые в основном используются для решения административных задач. С точки зрения безопасности нет никаких преимуществ в том, чтобы сделать /sbin недоступным для пользователей.
Каталог /tmp предназначен для хранения временных файлов, создаваемых в процессе работы различных программ. Рекомендуется удалять все файлы и каталоги в /tmp при каждой загрузке системы.
Для сохранения совместимости со старыми системами (до тех пор, пока все реализации не начнут использовать каталоги, размещенные непосредственно в /var) могут создаваться следующие символические ссылки:
/usr/spool -> /var/spool
/usr/tmp -> /var/tmp
/usr/spool/locks -> /var/lock
Каталог /usr/local используется для установки программ, которые будут использоваться локально в рамках данного хоста. Он может использоваться для программ и данных, не попавших в каталог /usr, доступ к которым разрешен с других хостов. Этот каталог не должен перезаписываться при обновлениях системного программного обеспечения. Поскольку в этот каталог устанавливаются программные пакеты, в нем создается структура подкаталогов, аналогичная структуре корневого каталога и каталога /usr.
/usr/share содержит все файлы, которые предназначены только для чтения и не зависят от архитектуры. Скажем, компьютеры на платформах i386, Alpha и PowerPC могут поддерживать один общий каталог /usr/share, который монтируется на остальных компьютерах. Примерами файлов, которые размещаются в этом каталоге, могут служить файлы документации (man, doc) или базы данных (dict, terminfo, zoneinfo). Любая программа или пакет, который содержит или требует данных, не подлежащих модификации, должны хранить эти данные в каталоге /usr/share (или /usr/local/share, если пакет установлен локально). В каталоге /usr/share создаются следующие подкаталоги или символические ссылки:
- man — интерактивные руководства;
- misc — различные архитектурно-независимые данные, для которых не требуется отдельный подкаталог в /usr/share;
- dict — словари (факультативно), обычно здесь находится только файл words для английского языка, который используется утилитой look и различными программами проверки правописания; списки слов для других языков могут быть добавлены, используя английское название соответствующего языка, например, /usr/share/dict/french, /usr/share/ dict/danish и т.д.;
- doc - различная документация (факультативно);
- games - файлы статических данных для /usr/games (факультативно);
- info - основной каталог для системы GNU Info (факультативно);
- locale - локальная информация (факультативно);
- nls - каталоги сообщений для поддержки языков (факультативно);
- sgml - данные для SGML и XML (факультативно);
- terminfo - каталог базы данных для terminfo (факультативно);
- tmac - макросы для troff (факультативно);
- zoneinfo - конфигурационные файлы и информация о временной зоне (факультативно).
Данные игровых программ, сохраняемые в /usr/share/games, должны быть статическими. Любые модифицируемые файлы, такие как файлы с протоколами и результатами игр, должны размещаться в каталоге /var/games.
Как известно, страницы интерактивного руководства man традиционно разбиты на секции. Для каждой секции создается отдельный каталог с именем <mandir>/<locale>/manN/<arch>, где <arch> — указание на архитектуру (например, i386), а строка <locale> определяет язык, страну и кодировку и имеет следующий формат:
<language>[_<territory>][.<character-set>][,<version>].
Каталог /var содержит файлы с изменяющимися данными: каталоги и файлы очередей, данные об администрировании, временные файлы. Некоторые части каталоговой структуры /var не являются разделяемыми между разными системами. К ним относятся /var/log, /var/lock и /var/run. Другие части могут быть разделяемыми, например, /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news. Структура каталогов /var определяется в стандарте FHS с той целью, чтобы сделать возможным монтирование каталога /usr в режиме только для чтения. Все, что записывается на диск в процессе выполнения системных операций (в противоположность процессам установки и поддержки программ), должно размещаться в каталоге /var. Несколько подкаталогов «зарезервированы» — они не должны использоваться произвольным образом, поскольку это противоречит сложившейся практике: /var/backups, /var/cron, /var/msgs,
/var/preserve.
Приложения в общем случае не должны добавлять каталоги непосредственно в /var. Такие каталоги должны создаваться в соответствующих подкаталогах. Каталог /var/cache предназначен для кэширования данных приложениями. В отличие от /var/spool, кэшированные файлы могут быть удалены без потери данных. Но эти данные должны сохраняться между сеансами работы приложения и при перезагрузках системы. Приложение должно всегда иметь возможность продолжить работу, даже после удаления этих файлов администратором (например, при нехватке дискового пространства). Существование отдельного каталога для кэшируемых данных позволяет системным администраторам устанавливать для этого каталога правила использования и резервного копирования, отличающиеся от правил, устанавливаемых для других каталогов в /var. Обычно в этом каталоге создаются подкаталоги fonts (локально сгенерированные шрифты), man (локально отформатированные страницы руководства), www (кэш данных для WWW-прокси), <package> (кэшируемые данные пакета <package>). /var/cache/man предусмотрен для сайтов, в которых файловая система /usr монтируется только на чтение, но в них допускается создание страниц руководства, отформатированных локально. Сайты, в которых /usr монтируется с правом записи (например, когда у системы всего один пользователь) могут не создавать каталога /var/cache/man, а использовать вместо него каталоги cat<section> непосредственно в /usr/share/man.
Файлы блокирования устройств и других ресурсов, используемые многими приложениями, такие как файлы блокирования последовательных портов, должны храниться в каталоге /var/lock. Названия этих файлов должны формироваться в соответствии с соглашением, согласно которому используется префикс «LCK..», за которым следует базовое имя устройства. Файлы блокирования в /var/lock должны быть всем доступны по чтению.
Кталог /var/log содержит разнообразные файлы протоколов: lastlog (запись о последнем входе в систему каждого пользователя); messages (системные сообщения от syslogd); wtmp (записи о всех входах и выходах пользователей в систему).
Область спулинга для почты должна размещаться в каталоге /var/mail, а имена файлов с сообщениями должны иметь вид <username>. Файлы почтовых ящиков в этих каталогах должны храниться в формате стандартных почтовых ящиков Unix.
Переменные данные для пакетов, установленных в /opt, должны размещаться в /var/opt/<package>, где <package> — название структуры каталогов в /opt, в которой хранятся статические данные дополнительного пакета ПО, исключая те случаи, когда размещение явно указано в каком-либо файле из /etc. На внутреннюю структуру каталога /var/opt/<package> никаких ограничений не накладывается.
Каталог /var/run содержит данные, описывающие состояние системы с момента ее загрузки. Программы могут иметь подкаталоги в каталоге /var/run, тем более, если они используют более одного файла времени выполнения. В этом каталоге должны быть, в частности, размещены файлы с идентификаторами запущенных процессов (PID). Соглашение об именах этих файлов следующее: <program-name>.pid. Содержимое PID-файла представляет собой идентификатор процесса в коде ASCII, записанный в десятичной нотации, за которым следует символ конца строки. Например, если crond запущен как процесс с номером 25, /var/run/crond.pid будет содержать три символа: два, пять и символ новой строки. В /var/run расположен также файл utmp, в котором хранится информация о том, кто в данный момент использует систему. Непривилегированные пользователи должны быть лишены права записи в каталог /var/run.
Каталог /var/spool содержит данные, которые ожидают какой-то последующей обработки: подкаталоги lpd (спулинг для принтера), mqueue (очередь исходящей почты), news (спулинг новостей), uucp (спулинг для UUCP) и т.п.
Каталог /var/tmp используется программами, которым требуется временные файлы или каталоги для хранения данных, сохраняемых между перезагрузками системы.
Иерархия файловых систем
В корневой файловой системе должна находиться информация для загрузчика и основные файлы, необходимые в процессе старта системы (например, ядро). Здесь же должны размещаться файлы конфигурации и все, что необходимо для монтирования других файловых систем, включая такие утилиты, как mount. Чтобы обеспечить возможность восстановления системы после сбоев, в корневой файловой системе должны присутствовать все утилиты, необходимые администратору для диагностирования проблем и реконструкции системы после любой аварийной ситуации. Здесь же должны быть расположены и те утилиты, которые необходимы для восстановления данных с резервных копий.
По ряду причин размер корневой файловой системы желательно сделать достаточно малым.
- Иногда приходится монтировать корневую файловую систему с носителя малого объема.
- Корневая файловая система обычно содержит неразделяемые файлы, специфичные для конкретной системы. Разделяемые файлы можно разместить на сетевых дисках. Это позволяет использовать в качестве рабочих станций в сети компьютеры с маленькими по объему локальными жесткими дисками.
- Маленькая корневая файловая система менее подвержена разрушению в случае сбоев.
- Из стандарта можно сделать вывод о том, что в корневой файловой системе обязательно должны целиком располагаться каталоги /bin, /dev, /etc, /lib, /sbin и, возможно, /root.
- Каталог /boot в силу аппаратных ограничений может оказаться необходимым разместить на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска.
- Остальные подкаталоги корневого каталога (home, mnt, opt, tmp, usr, var) могут размещаться в других файловых системах (на других разделах или дисках). Более того, в стандарте явно постулируется, что в каталогах /usr, /opt и /var размещаются такие файлы, которые могут располагаться в других разделах диска или в других файловых системах. Разработчики стандарта советуют в том случае, когда /var не может быть размещен в отдельном разделе диска, переместить каталог /var из корневого раздела в раздел с каталогом /usr. Однако /var нельзя делать ссылкой на /usr потому что это затрудняет разделение /usr и /var и может привести к конфликту имен, лучше уж сделать /var ссылкой на /usr/var.
Отметим, что в статье речь идет только о требованиях и рекомендациях стандарта FHS, разработанного с ориентацией на операционные системы Linux и BSD. Даже конкретные дистрибутивы Linux не во всем следуют этому стандарту. Так, в Red Hat Linux версий 7.3 и 8.0 каталог /etc/opt хотя и создан, но пуст, а конфигурационные каталоги пакетов размещаются непосредственно в /etc. Можно указать и другие отклонения от стандарта. Но все же в основном структура каталогов выдерживается в соответствии с FHS, так что знакомство с этим стандартом, безусловно, полезно всем пользователям Linux, а тем более разработчикам.
Литература
- В. Костромин, "Самоучитель Linux для пользователя". СПб.: "БХВ-Петербург", 2002.
- В. Холманов, "Разбиение дисков и инсталляция Linux на LVM". http://www.softerra.ru/freeos/20792/print.html.
- А. Федорчук, "Установка Linux в современных условиях: дисковые разделы". http://linuxshop.ru/unix4all/?cid=&id=12.
Виктор Костромин (kos@linux-ve.net) — независимый эксперт (Казань)
Таблица. Каталоги и символические ссылки на каталоги, содержащиеся в /usr.
bin | Основное место для размещения исполняемых файлов системы. /usr/bin/X11 должен быть символической ссылкой на /usr/X11R6/bin, если последний существует. Интерпретаторы языков Perl, Python и Tcl должны вызываться из /usr/bin (можно оставить только символические ссылки на действительное местоположение интерпретаторов). |
include | Место, где должны быть размещены все системные подключаемые файлы общего пользования для языка Cи, в частности файлы заголовков. Символическая ссылка /usr/include/X11 должна указывать на /usr/X11R6/include/X11, если последний существует. |
lib | Содержит объектные файлы, библиотеки и внутренние исполняемые файлы, которые не могут вызываться непосредственно пользователями из командной строки или скриптов оболочки. Приложения могут использовать отдельные подкаталоги в /usr/lib. Если приложение использует подкаталог, все архитектурно-зависимые данные, используемые только этим приложением, должны размещаться внутри этого подкаталога. (Например: подкаталог perl5 для модулей и библиотек Perl 5.) |
local | Каталоговая структура для локально устанавливаемых программ. |
sbin | Системные команды, используемые исключительно системным администратором, не являющиеся жизненно-важными для системы и поэтому не попавшие в /sbin. Локально устанавливаемые программы для системного администрирования должны размещаться в /usr/local/sbin. |
share | Архитектурно-независимые данные. |
X11R6 | Структура для X Window. Для некоторого упрощения и сохранения совместимости 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 Приложения, которым необходима информация о текущей конфигурации хоста, должны искать ее в каталоге /etc/X11, куда могут быть сделаны ссылки из каталога /usr/X11R6/lib. |
games | Игры и обучающие программы. |
lib<qual> | Библиотеки для альтернативных форматов. |
src | Исходные тексты программ. |
Дополнительные требования для Linux
Отдельный раздел стандарта FHS содержит требования и рекомендации, которые относятся только к Linux.
***
Поскольку структура каталогов к реальным механизмам работы с файлами отношения не имеет, изначально никаких особых требований к структуре логического дерева каталогов со стороны операционной системы не предъявляется, поэтому каждая ОС могла бы строить это дерево по-своему. Легко понять, что это привело бы к несовместимости.
Принять решение о том, какие программы разместить в каталогах «sbin», довольно просто: если обычный пользователь когда-либо запускает программу, она должна размещаться в одном из каталогов «bin». Даже такие файлы, которые пользователи запускают очень редко и только в особых случаях, должны, тем не менее, быть расположены в /usr/bin.
Второй по важности раздел файловой системы каталог /usr содержит разделяемые данные, предназначенные только для чтения. Это означает, что он может быть доступен с различных FHS-совместимых хостов без права записи в него. Любая информация, которая специфична для конкретного хоста или может изменяться со временем, должна записываться в другое место. Программные пакеты не должны создавать подкаталоги непосредственно в каталоге /usr. Исключение сделано для X Window в силу сложившихся традиций.
В тексте стандарта FHS мало рекомендаций о том, как разместить каталоги в различных файловых системах. И относятся они в основном к корневой файловой системе. В соответствии со стандартом содержимое этой файловой системы должно быть достаточным для того, чтобы обеспечить загрузку операционной системы, а также восстановление при возникновении различных проблем и сбоев.