Если вы линуксоид, то термины типа /etc, /var, /opt и т.д. вам знакомы. Но для простого пользователя - это "темный лес", который еще и выглядит не как "лес" потому, что в Windows (а имеено оттуда приходят пользователи) такого нет. А ведь все эти папки со слэшами являются неотьемлимой частью Linux и очень важны для понимания.
Вот для того, чтобы это понимание было, и был разработан FHS - Filesystem Hierarchy Standard. Существует два варианта перевода:
- Стандарт на структуру каталогов файловой системы
- Стандарт иерархии файловой системы
Оба имеют право на жизнь. Выбирайте сами!
Этот стандарт принят для унификации местонахождения файлов и директорий с общим назначением в файловой системе UNIX-подобных ОС. На данный момент большинство Unix и Linux систем следует этим правилам, но далеко не всегда полностью (см. ниже).
Сегодня я расскажу об иерархии файловой системы и структуре директорий.
Зачем нужен стандарт FHS?
(англ.)
Как сказал один умный человек (Виктор Костромин):
Cтруктура каталогов понятие чисто логическое и к реальным механизмам работы с файлами отношения не имеет. Каждая конкретная операционная система могла бы строить ее по-своему, что привело бы к несовместимости и непереносимости программ. Группой энтузиастов был разработан стандарт FHS иерархии файловых систем для Unix-подобных операционных систем.
Стандарт FHS создан для приведения всех Unix/Linux систем к единому и понятному не только разработчикам виду. Почти все *nix ОС придерживаются приципов FHS, но есть и нездоровые на голову дистрибутивы, например: MacOS, GoboLinux или Syllable.
BSD системы лишь чатично (зато большей частью) соответствуют FHS.
FHS входит в LSB (Linux Standard Base), т.е. проект стандартизации внутренних структур Linux. Но нам это не важно, т.к. Ubuntu не входит в LSB из-за использования пакетного формата deb вместо навязываемого элэсбешниками rpm.
История FHS
Процесс разработки стандарта иерархии файловой системы начался в 1993 году с попыток упорядочить структуру директорий и файлов в операционной системе GNU/Linux и назывался тогда FSSTND (Filesystem Standard).
В начале 1996 года сообщество разработчиков BSD присоединилось к разработке новой версии FSSTND с целью разработать стандарт, пригодный для всех Unix-подобных операционных систем и в связи с этим пришлось срочно переименовывать стандарт в FHS.
На данный момент FHS поддерживается некоммерческой организацией "Free Standards Group", в которую входят такие монстры, как HP, Red Hat, IBM и Dell.
Общие сведения о стандарте FHS
Для начала уясните, что в POSIX-системах
файл = директория
директория = файл с N
поэтому термины файл, директория и каталог я буду взаимозаменять по стилистическим соображениям.
Если не осознали, то вернитесь на 5-6 строк вверх. Цикл повторять до полного понимания. :)
А мы продолжаем.
FHS основан на двух принципах: разделяемость и изменяемость. Попробую объяснить на пальцах...
Разделяемость файлов
- Разделяемые - к этим данным разрешен доступ с других компьютеров (например пользовательские папки /home).
- Неразделяемые - доступ к таким директориям ограничен из соображений безопасности, либо это системные ресурсы, необходимые только на данном компьютере (например файлы устройств /dev).
Изменяемость файлов
- Статические - это исполняемые файлы, библиотеки, документация, и все, что не должно изменяться без вмешательства самого главного сисадмина (например /boot).
- Изменяемые - все, что может быть изменено пользователями (например большая часть файлов в /var).
В таблице привожу примеры задач и FHS директорий в Linux:
| Разделяемость\Изменяемость | Статические | Изменяемые |
| Разделяемые | приложения и утилиты, т.е. большая часть наших программ
/usr |
почтовые ящики пользователей или очередь печати
/var/mail, /var/spool |
| Неразделяемые | файлы загрузчика и ядра
/boot |
информация о демонах
/var/run |
Стандарт FHS подвергается некоторой критике за то, что не использует еще один важный принцип - востанавливаемость. Т.е. файлы делятся на легковостановимые и трудновостановимые.
- Легковостановимые файлы - это файлы самой системы.
- Трудновостановимые файлы - это большая часть пользовательских данных (базы данных, коллекции порно, дерево портов FreeBSD и проч.) относят к трудновостановимым данным еще и исходники программ.
Использование приципов разделяемости/изменяемости каталогов позволяет, в рамках единой файловой системы, обособить отдельные ее ветви физически, т.е. разместить их на изолированных устройствах (дисках или разделах). Это дает ряд преимуществ:
- повышение быстродействия
- увеличение надежности
- удобство использования
Структура каталогов
Ubuntu поддерживает стандарт FHS и соответствующую иерархию файлов и директорий.
Корневая файловая система "/"
Корневой каталог и его ветви обязательно должны составлять единую файловую систему, расположенную на одном носителе - диске, дисковом разделе, программном либо аппаратном RAID-массиве, или логическом томе в понимании LVM. И в нем должны располагаться все компоненты, необходимые для старта системы.
Корневая файловая система должна содержать все, что необходимо для того, чтобы загрузить операционную систему, а также восстановить ее после сбоев и аварийных ситуаций или переустановить систему из резервной копии.
Для загрузки системы необходимо, чтобы в корневом разделе диска было все необходимое для монтирования других файловых систем. Здесь же должны быть необходимые утилиты, файлы конфигурации, информация, необходимая загрузчику, и другие данные, используемые на этапе старта системы. Содержимое каталогов /usr, /opt и /var формируется таким образом, чтобы они могли размещаться в других разделах или даже в файловых системах других типов.
Для того, чтобы обеспечить возможность восстановления системы после сбоев, в корневой файловой системе должны присутствовать все утилиты, необходимые опытному администратору для диагностирования проблем и реконструкции системы после любой аварийной систуации.
Для восстановления системы с резервной копии в корневой файловой системе должны иметься все утилиты, необходимые для работы с резервными носителями (дискетами, магнитными лентами и так далее).
Программы или приложения никогда не должны создавать или предполагать наличие каких-то файлов в корневой директории. Другие области FHS предоставляют достаточно места для любого пакета.
Корнева файловая система обозначается "/" (без кавычек) и должна включать в себя следующие каталоги:
| "/" bin boot dev etc lib mnt opt sbin tmp usr var |
"Корневой каталог" Основные исполняемые команды Статические файлы для загрузчика Специальные файлы устройств Специфичные для данного хоста конфигурационный данные Основные разделяемые библиотеки и модули ядра Точка монтирования для временно подключаемых файловых систем Дополнительные пакеты программного обеспечения Основные системные утилиты Временные файлы Каталоговая структура второго уровня Переменные данные |
Вы можете возмущенно воскликнуть: "Вашу медь! А куда дели /home и /root, я не понял!" Но, на самом деле, они необязательны, т.к. могут находиться, к примеру, на другом компе и монтироваться в /mnt (или еще куда). Поэтому они относятся к "рекомендуемым" каталогам.
Теперь подробнее о каждом из этих каталогов.
Обязательные и рекомендуемые каталоги FHS
Подробное описание я поместил в спойлеры. Так что кликайте, не стесняясь.
Каталог /bin содержит команды, которые могут использоваться как системным администратором, так и рядовыми пользователями, причем только те команды, которые необходимы, когда никакая другая файловая система еще не смонтирована (например, в однопользовательском режиме). В этом каталоге могут также содержаться команды, которые используются не напрямую пользователем, а через скрипты.
Обязательные команды (файлы):
| cat | утилита для конкатенации файлов с отображением результата на стандартный вывод |
| chgrp | утилита для изменения аттрибута принадлежности файла группе |
| chmod | утилита для изменения прав доступа к файлу |
| chown | утилита для изменения владельцев файла |
| cp | утилита для копирования файлов и каталогов |
| date | утилита для вывода или изменения системной даты и времени |
| dd | утилита для для преобразования и копирования файлов |
| df | утилита, информирующая об использовании дискового пространства в файловых системах |
| dmesg | утилита для вывода сообщений, записанных в буфере ядра |
| echo | утилита для отображения строки текста |
| false | утилита, не выполняющая никаких действий и возращающая статус завершения "не успешно" |
| hostname | утилита, показывающая или устанавливающая системное имя хоста |
| kill | утилита для посылки сигналов процессам |
| ln | утилита для задания ссылок на файлы |
| login | утилита, открывающая сессию работы пользователя в системе |
| ls | утилита для вывода списка файлов в каталоге |
| mkdir | утилита для создания каталогов |
| mknod | утилита для создания специальных файлов устройств блочного или символьного типов |
| more | утилита для постраничного вывода текста |
| mount | утилита для монтирования файловых систем |
| mv | утилита для перемещения/переименования файлов |
| ps | утилита, возвращающая статус выполняющихся процессов |
| pwd | утилита, возвращающая имя текущего рабочего каталога |
| rm | утилита удаления файлов или каталогов |
| rmdir | утилита удаления пустых каталогов |
| sed | потоковый редактор `sed' |
| sh | командная оболочка Борна |
| stty | утилита для изменения установок или вывода информации об установках терминальной линии |
| su | утилита смены идентификатора пользователя |
| sync | утилита для сброса на диск содержимого буферов кеш-памяти |
| true | утилита, не выполняющая никаких действий и возращающая статус завершения "успешно" |
| umount | утилита для размонтирования файловых систем |
| uname | утилита для получения информации о системе |
Рекомендованные команды (файлы):
| csh | оболочка C-shell |
| ed | редактор `ed' |
| tar | утилита архивации tar |
| cpio | утилита архивации cpio |
| gzip | утилита сжатия (компрессии), разработанная в рамках проекта GNU |
| gunzip | утилита декомпрессии, разработанная в рамках проекта GNU |
| zcat | утилита декомпрессии, разработанная в рамках проекта GNU |
| netstat | утилита сетевой статистики |
| ping | утилита тестирования сети с помощью протокола ICMP |
Загрузочные файлы (в том числе файлы загрузчика, ядро и т.д.).
Т.е. здесь содержится все, что необходимо в процессе загрузки, кроме конфигурационных файлов и установщика карты загрузки. Ядро операционной системы должно располагаться либо в корневом каталоге /, либо в /boot; программы, необходимые загрузчику для организации загрузки файлов, должны размещаться в /sbin, а конфигурационные файлы загрузчика — в /etc. Таким образом, в /boot хранятся данные, которые используются до того, как ядро начинает исполнять программы пользователя. Здесь же находятся резервные сохраненные копии главной загрузочной записи и другие данные, которые не подлежат прямому редактированию.
Рекомендуется вынести на отдельный раздел.
На некоторых i386 компьютерах в силу аппартаных ограничений может оказаться необходимым разместить каталог/boot на отдельном разделе диска, расположенном целиком в пределах первых 1024 цилиндров загрузочного диска.
Каталог /dev - это место расположения специальных файлов устройств. Например sata винчестеры в /dev/sda, видео камеры или TV тюннеры в /dev/video или псевдоустройства, например «чёрные дыры» /dev/null, /dev/zero.
Каталог /dev должен содержать команду MAKEDEV, которая может создать файл устройства в случае необходимости. Он может также содержать MAKEDEV.local для любых локальных устройств.
Если требуется, MAKEDEV должен иметь возможность создания любого устройства, которое может быть установлено в системе, а не только тех устройств, которые устанавливаются при какой-либо конкретной реализации.
Каталог /etc содержит конфигурационные файлы и каталоги, специфичные для данной конкретной системы (имя происходит от et cetera). Здесь не должно быть бинарных файлов.
Каталоги различного предназначения, расположенные в /etc
| "/etc" opt X11 sgml |
"Конфигурационная информация для данного хоста" Конфигурация для /opt Конфигурация системы X Window Конфигурация для SGML и XML |
Файлы, которые должны быть расположены /etc.
| csh.login | Общесистемный инициализационный файл для оболочки C-shell |
| exports | Список контроля доступа для сетевой файловой системы NFS |
| fstab | Постоянная информация для монтирования файловых систем |
| ftpusers | Список контроля доступа для демона FTP |
| gateways | Файл, содержащий список шлюзов для демона routed |
| gettydefs | Установки терминала, используемые демоном getty |
| group | Файл, определяющий списки групп пользователей в системе |
| host.conf | Файл конфигурации для системы разрешения имен |
| hosts | Постоянная информация об именах хостов |
| hosts.allow | Список хостов, с которых разрешен доступ в систему |
| hosts.deny | Список хостов, с которых запрещен доступ в систему |
| hosts.equiv | Список доверенных хостов для rlogin, rsh, rcp |
| hosts.lpd | Список доверенных (разрешенных) имен хостов для демона печати lpd |
| inetd.conf | Конфигурационный файл для демона inetd |
| inittab | Конфигурационный файл для init |
| issue | Сообщение, выдаваемое системой до регистрации пользователя |
| ld.so.conf | Список дополнительных каталогов для поиска разделяемых библиотек |
| motd | Сообщение, выдаваемое системой после регистрации пользователя |
| mtab | Динамически изменяющаяся информация о смонтированных файловых системах |
| mtools.conf | Конфигурационный файл для mtools |
| networks | Статическая информация о сетевых именах |
| passwd | Файл паролей |
| printcap | База данных с настройками принтеров для lpd |
| profile | Общесистемный файл инициализации для оболочки, запускаемой при входе пользователя в систему |
| protocols | Перечень IP-протоколов |
| resolv.conf | Конфигурационный файл для системы разрешения имен |
| rpc | Перечень протоколов удаленного вызова процедур (RPC) |
| securetty | Файл со списком устройств, с которых может заходить пользователь root |
| services | Имена портов для сетевых сервисов |
| shells | Список путей доступа для имеющихся в системе оболочек |
| syslog.conf | Конфигурационный файл для демона syslogd |
Содержит домашние директории пользователей, которые в свою очередь содержат персональные настройки и данные пользователя.
Рекомендуется вынести на отдельный раздел.
Основные библиотеки, необходимые для работы программ из /bin/ и /sbin/.
Разделяемые библиотеки, которые необходимы только исполняемым файлам, расположенным в /usr (таким как бинарные файлы системы X Window) НЕ должны располагаться в /lib. Только те разделяемые библиотеки, которые необходимы для запуска программ из /bin и /sbin могут располагаться здесь. В частности, библиотека libm.so.* может быть расположена в /usr/lib, если она не требуется никаким программам из /binили /sbin.
Эта директория предназначена для того, чтобы системный администратор мог временно монтировать файловые системы по мере необходимости (CD-ROM, DVD-ROM, flash диски). Содержимое этого каталога индивидуально для каждой системы и не должно никаким образом влиять на работу запускаемых программ.
Этот каталог не должен использоваться программами инсталляции: для создания и хранения временных файлов на этапе инсталляции ПО должны использоваться временные каталоги, не используемые системой.
В ОС Ubuntu этот каталог практически не используется. Вместо него использован каталог /media.
Каталог /opt зарезервирован для установки дополнительных пакетов программного обеспечения.
Пакет, который устанавливается в каталог /opt, должен размещать свои статические файлы в отдельной каталоговой структуре /opt/<package>, где <package> - название соответствующего пакета программного обеспечения.
В ОС Ubuntu этот каталог практически не используется.
Каталог /opt широко применяется в UNIX-системах.
Домашний каталог пользователя root может быть задан разработчиком или определен при инсталляции системы, но рекомендуется располагать его в каталоге /root, в Ubuntu именно так и сделано.
Утилиты для выполнения задач системного администрирования (и другие команды, используемые только пользователем root) размещаются в /sbin, /usr/sbin и /usr/local/sbin. Каталог /sbin содержит исполняемые файлы, необходимые для загрузки системы и ее воссстановления в различных ситуациях (restoring, recovering, and/or repairing the system) и не попавшие в каталог /bin.
Следующие команды или символические ссылки должны быть размещены в /sbin, если только соответствующие пакеты установлены в системе:
| fastboot | Команда перезагрузки системы без проверки дисков |
| fasthalt | Команда остановки системы без проверки дисков |
| fdisk | Программа переразбиения диска |
| fsck | Утилита для проверки и восстановления файловых систем |
| fsck.* | Утилиты для проверки и восстановления отдельных типов файловых систем |
| getty | Программа getty |
| halt | Команда остановки системы |
| ifconfig | Утилита конфигурирования сетевых интерфейсов |
| init | Первоначальный процесс |
| mkfs | Команда создания файловой системы |
| mkfs.* | Команда создания файловой системы конкретного типа |
| mkswap | Команда создания файла или раздела подкачки (swap-раздела) |
| reboot | Команда перезагрузки системы |
| route | Утилита определения таблицы статической IP-маршрутизации |
| swapon | Утилита подключения механизма свопинга |
| swapoff | Утилита отключения свопинга |
| update | Демон периодической очистки системных буферов |
Если обычный пользователь (не системный администратор) когда-либо запускает программу, она должна размещаться в одном из каталогов "bin". Обычные пользователи не должны указывать каталоги sbin в списке путей, просматриваемых по умолчанию (в своей переменной PATH).
Рекомендуется предоставить всем пользователям право на чтение и выполнение файлов, расположенных в /sbin. Разделение каталогов /bin и /sbin делается не из соображений безопасности и не для того, чтобы лишить пользователей возможности видеть системные утилиты. Целью такого деления является установление явного различия между исполняемыми файлами, которые используются всеми, и теми утилитами, которые в основном используются для решения административных задач. С точки зрения безопасности нет никаких преимуществ в том, чтобы сделать /sbin недоступным для пользователей.
Каталог /tmp должен быть доступен для программ, которым необходимы временные файлы.
Программы не должны предполагать, что какой-либо файл в каталоге /tmp сохранится при следующем запуске программы.
Рекомендуется удалять все файлы и каталоги в /tmp при каждой загрузке системы.
Каталог /usr - это второй главный раздел файловой системы (is the second major section of the filesystem). /usr содержит разделяемые данные, предназначенные только для чтения. Это означает, что /usr может быть доступен с различных FHS-совместимых хостов и права записи в него не должно быть. Любая информация, которая является специфичной для конкретного хоста или может изменяться со временем, должна записываться в другое место.
Большие программные пакеты не должны использовать непосредственно подкаталоги каталога /usr в этой иерархии.
Должны быть:
| "/usr" bin include lib local sbin share |
"Каталоговоая структура второго уровня" Большая часть пользовательских команд Файлы заголовков (header files), включаемые в программы на языке C Библиотеки Каталоговая структура Local (пустая непосредственно после инсталляции системы) Системные утилиты, не являющиеся жизненно-важными (Non-vital system binaries) Архитектурно-независимые данные |
Рекомендуется:
| "/usr" X11R6 games lib<qual> src |
"Каталоговая структура второго уровня" X Window System, version 11 release 6 Игры и обучающие программы Библиотеки для альтернативных форматов (optional) Исходные коды (optional) |
Локально устанавливаемое программное обеспечение должно располагаться не в /usr, а в /usr/local если только его установка производится не в целях замены или обновления ПО в /usr.
Каталоговая структура /usr/local используется системным администратором в тех случаях, когда он устанавливает программное обеспечение, которое будет использоваться локально в рамках данного хоста. Этот каталог не должен перезаписываться при обновлениях системного программного обеспечения. Он может использоваться для программ и данных, не попавших в каталог /usr, доступ к которым разрешен с других хостов.
Следующие каталоги или символические ссылки на каталоги должны иметься в /usr/local
| "/usr/local" bin games include lib man sbin share src |
"Каталог для локального ПО" Локальные исполняемые файлы Локально установленные игровые приложения Локальные заголовочные файлы для C Локальные библиотеки Локальные онлайновые руководства Локальные системные исполняемые файлы Архитектурно-независимые каталоговая структура для локального ПО Локально установленные исходные коды |
Никаких каталогов, кроме перечисленных выше, не должно быть в /usr/local после первой установки FHS-совместимой системы.
Каталоговая структура /usr/share предназначена для всех файлов, которые предназначены только для чтения и не зависят от архитектуры.
Эта каталоговая структура предназначена для того, чтобы хранить файлы, используемые всеми архитектурными платформами данной ОС. Так, например, компьютеры на платформах i386, Alpha и PPC могут поддерживать один общий каталог /usr/share, который монтируется на отдельных компьютерах. Заметим, однако, что /usr/share обычно не предназначен для того, чтобы быть разделяемым различными операционными системами или различными версиями одной и той же ОС (or by different releases of the same OS).
Любая программа или пакет, который содержит или требует данных, не подлежащих модификации, должны хранить эти данные в каталоге /usr/share (или /usr/local/share, если пакет установлен локально). Рекомендуется использовать для этих целей подкаталоги каталога /usr/share.
Данные игровых программ, сохраняемые в /usr/share/games, должны быть чисто статическими данными. Любые модифицируемые файлы, такие как файлы результатов игр (score files), протоколы игр и так далее, должны размещаться в каталоге /var/games.
Рекомендуется вынести на отдельный раздел.
Каталог /var содержит файлы с изменяющимися данными. В их число входят каталоги и файлы спулинга, данные об администрировании и логировании, временные файлы.
Некоторые части каталоговой структуры /var не являются разделяемыми между разными системами. К ним относятся /var/log, /var/lock и /var/run. Другие части могут быть разделяемыми, например, /var/mail, /var/cache/man, /var/cache/fonts и /var/spool/news.
Каталоговая структура /var определяется в FHS, чтобы сделать возможным монтирование каталога /usr в режиме только для чтения. Все, что записывается на диск в процессе выполнения системных операций (в противоположность процессам инсталляции и поддержки программного обеспечения), должно размещаться в каталоге /var.
Если /var не может быть размещен в отдельном разделе диска, зачастую предпочительнее переместить каталог /var из корневого раздела в раздел с каталогом /usr. (Иногда это делается с целью уменьшения размера корневого раздела или когда в корневом разделе остается слишком мало места). Однако, /var нельзя делать ссылкой на /usr потому что это затрудняет разделение /usr и /var и может привести к конфликту имен. Лучше уж сделать /var ссылкой на /usr/var.
Приложения в общем случае не должны добавлять каталоги непосредственно в /var. Такие каталоги могут создаваться только в силу каких-то общесистемных соображений и после консультаций через лист рассылки FHS.
Следующие каталоги или символические ссылки на каталоги должны обязательно присутствовать в /var.
| "/var" cache lib local lock log opt run spool tmp |
"Переменные данные" Данные из кэшей приложений Переменная информация о состоянии приложений Переменные данные для /usr/local Файлы блокирования устройств и программ Каталоги и файлы протоколов Переменные данные для /opt Данные, относящиеся к запущенным процессам Данные очередей, создаваемых приложениями Временные файлы, сохраняемые между перезапусками системы |
Могут быть в /var:
| "/var" account crash games yp |
"Переменные данные" Протоколы работы процессов Дампы памяти при крахе системы Временные данные игровых приложений User mailbox files Файлы базы данных Network Information Service (NIS) |
Этот каталог предусмотрен для сайтов, в которых файловая система /usr монтируется только на чтение, но в которых допускается создание станиц руководства, отформатированных локально. Сайты, в которых /usr монтируется с правом записи (например, когда у системы всего в один пользователь) могут не создавать каталога /var/cache/man, а использовать вместо него каталоги cat<section> непосредственно в /usr/share/man. Рекомендуется использовать один из следующих подходов:
- Хранить предварительно отформатированные версии всех страниц руководства параллельно с неотформатированными версиями.
- Не допускать кэширования отформатированных страниц на диск, требуя, чтобы форматирование выполнялось при каждом обращении к конкретной странице руководства.
- Разрешить хранение отформатированных man-страниц в каталоге /var/cache/man.
Структура каталога /var/cache/man должна соответствовать наличию нескольких отдельных деревьев каталогов для страниц руководства и возможности наличия многоязыковой поддержки.
В предположении, что неформатированные страницы руководства расположены в каталогах <path>/man/<locale>/man<section>, форматированные страницы должны располагаться в каталоге /var/cache/man/<catpath>/<locale>/cat<section>, где <catpath> получается из <path> путем удаления подстроки usr из начала и подстроки share в конце имени каталога (компонент <locale> может отсутствовать).
Страницы руководства, записанные в /var/cache/man, могут быть перенесены в исходные каталоги структуры man или удалены; подобным же образом отформатированные страницы руководства в каталоге man могут быть удалены, если они не использовались в течение какого-то периода времени.
Если заранее отформатированные страницы руководства поставляются с системой на носителе, допускающем только чтение (например, на CD-ROM), они должны устанавливаться в исходную каталоговую структуру man (то есть в /usr/share/man/cat<section>). Каталог /var/cache/man зарезервирован как перезаписываемый кэш для отформатированных страниц руководства.
Эта каталоговая структура содержит информацию о состоянии отдельных приложений или всей системы. Информация о состоянии - это данные, которые программы изменяют в процессе своей работы, относящиеся к одному конкретному хосту. У пользователей нет нужды менять эти файлы для настройки действий пакета.
Информация о состоянии в общем случае используется для сохранения состояния приложения (или группы взаимосвязанных приложений) между двумя запусками или передачи такой информации между двумя одновременно запущенными копиями одного и того же приложения. Информация о состоянии, в общем случае, должна сохраняться после перезагрузки системы, не должна совпадать с протоколируемым выводом программы и данными из очередей (spooled data).
Приложение (или группа взаимосвязанных приложений) должно использовать отдельный подкаталог в /var/lib для своих данных. Имеется одна обязательная директория, /var/lib/misc, которая предназначена для файлов состояния, которые не требуют отдельного подкаталога; остальные подкаталоги должны присутствовать если соответствующее приложение включено в дистрибутив.
/var/lib/<name> - местоположение, которое должно использоваться для каждого пакета из дистрибутива. Разные дистрибутивы могут, естественно, разные имена.
Файлы блокирования должны храниться в каталоговой структуре /var/lock.
Файлы блокирования устройств и других ресурсов, используемые многими приложениями, такие как файлы блокирования последовательных портов, которые ранее находились либо в /usr/spool/locks, либо в /usr/spool/uucp, теперь должны размещаться в /var/lock. Названия этих файлов должны формироваться в соответствии с соглашением, согласно которому используется префикс "LCK..", за которым следует базовое имя устройства. Например, для блокирования /dev/ttyS0 должен создаваться файл "LCK..ttyS0".
Внутренняя структура таких файлов блокирования должна соответствовать формату, определенному в HDB UUCP. Формат HDB предусматривает сохранение идентификатора процесса (PID) в виде десяти-байтового десятичного числа, за которым следует символ конца строки. Например, если процесс 1230 создает файл блокирования, в этом файле будет записано 11 символов: пробел, пробел, пробел, пробел, пробел, пробел, один, два, три, ноль и конец строки.
Эта директория содержит разнообразные файлы протоколов. Большая часть протоколов должна записываться в этот каталог или соответствующий подкаталог.
Следующие файлы или символические ссылки на на файлы должны быть в /var/log, если соответствующая подсистема установлена:
| lastlog | запись о последнем входе в систему каждого пользователя |
| messages | системные сообщения от syslogd |
| wtmp | записи о всех входах и выходах пользователей в систему |
Область спулинга для почты должна размещаться в /var/mail, а имена файлов с сообщениями должны иметь вид <username>.
Файлы почтовых ящиков в этих каталогах должны хранится в формате стандартных почтовых ящиков UNIX (UNIX mailbox format).
Прежнее логическое местоположение этого каталога (/var/spool/mail ) было изменено для того, чтобы привести FHS в соответствие почти со всеми реализациями UNIX. Это изменение важно с точки зрения обеспечения взаимодействия разных систем, поскольку единая область /var/mail часто используется многими хостами, на которых запущены различные реализации UNIX (despite NFS locking issues).
Важно заметить, что нет требования физически переместить область спулинга в указанный каталог. Однако программы и заголовочные файлы должны быть изменеы так, чтобы они использовали /var/mail.
Этот каталог содержит данные, описывающие состояние системы с того момента, как она была загружена (This directory contains system information data describing the system since it was booted). Файлы в этом каталоге должны очищаться (удаляться или урезаться соответствующим образом) в начале процесса загрузки системы. Программы могут иметь подкаталоги в каталоге /var/run; это приветствуется для программ, которые используют более одного файла времени выполнения.
Внутренний формат для файлов, в которых хранятся идентификаторы процесов (PID), остаются неизменными. Файл должен состоять из идентификатора процесса в коде ASCII, записанном в десятичной нотации, за которым следует символ конца строки. Например, если crond запущен как процесс с номером 25, /var/run/crond.pid будет содержать три символа: два, пять и символ новой строки.
Программы, которые читают PID-файлы, должны быть достаточно гибкими в отношении того, что они воспринимают: то есть они должны игнорировать лишние пробелы, предшествующие ноли, отсутствие завершающего символа новой строки или дополнительные строки в PID-файле. Программы, которые создают PID-файлы, должны использовать простые спецификации, изложенные в предыдущем параграфе.
Файл utmp, в котором хранится информация о том, кто в данный момент использует систему, расположен в этом каталоге.
Каталог /var/tmp сделан доступным для программ, которым требуется временные файлы или каталоги, которые должны сохраняться между перезагрузками системы. Следовательно, данные, хранящиеся в /var/tmp, являются более постоянными, чем данные в /tmp.
Файлы и каталоги, размещенные в /var/tmp, не должны удаляться, когда система (пере)загружается.
Вот и все в общих чертах. В части 2 я расскажу о FHS применительно к Ubuntu и дам рекомендации по разбиению на разделы.
Cсылки по теме FHS
- . А здесь .
- на help.ubuntu.ru
- (Виктор Костромин)
ЗЫ: А тут - эта ссылка не имеет отношения к FHS, задо radost доставляет не меньшую.
Популярность: 11%

