Стандарт иерархии файловой системы ( FHS ) — это справочник, описывающий соглашения, используемые для компоновки Unix-подобных систем. Он стал популярным благодаря использованию в дистрибутивах Linux , но также используется и другими Unix-подобными системами. [1] Он поддерживается Linux Foundation . Последняя версия — 3.0, выпущенная 3 июня 2015 года. [2]
Структура каталога
В FHS все файлы и каталоги отображаются в корневом каталоге/ , даже если они хранятся на разных физических или виртуальных устройствах. Некоторые из этих каталогов существуют только в определенной системе, если установлены определенные подсистемы, такие как X Window System .
Большинство этих каталогов существуют во всех Unix-подобных операционных системах и, как правило, используются примерно одинаково; однако приведенные здесь описания используются специально для FHS и не считаются авторитетными для платформ, отличных от Linux.
Соответствие требованиям FHS
Большинство дистрибутивов Linux следуют стандарту иерархии файловой системы и заявляют о своей собственной политике поддержания соответствия FHS. [14] [15] [16] [17] GoboLinux [18] и NixOS [19] приводят примеры намеренно несоответствующих реализаций файловой системы.
Некоторые дистрибуции в целом следуют стандарту, но отклоняются от него в некоторых областях. FHS является «замыкающим стандартом», и поэтому документирует общепринятые практики в определенный момент времени. Конечно, времена меняются, и цели и потребности дистрибуции требуют экспериментов. Некоторые распространенные отклонения включают:
Современные дистрибутивы Linux включают /sysкаталог в качестве виртуальной файловой системы ( sysfs , сопоставимой с /proc, которая является procfs ), которая хранит и позволяет изменять устройства, подключенные к системе, [20] тогда как многие традиционные операционные системы типа Unix/sys используют в качестве символической ссылки на исходное дерево ядра . [21]
Многие современные Unix-подобные системы (такие как FreeBSD и OpenBSD ) через свои системы портов устанавливают сторонние пакеты в /usr/local, сохраняя при этом код, считающийся частью операционной системы, в /usr.
Некоторые дистрибутивы Linux больше не различают /libи /usr/libи имеют /libсимволические ссылки на /usr/lib. [22]
Некоторые дистрибутивы Linux больше не различают /binи /usr/binи между /sbinи /usr/sbin. Они могут ссылаться /binна /usr/binи /sbinна /usr/sbin. Другие дистрибутивы объединяют все четыре, ссылаясь на /usr/bin. [23]
Современные дистрибутивы Linux включают /runкаталог в качестве временной файловой системы ( tmpfs ), в которой хранятся изменчивые данные времени выполнения, следуя версии FHS 3.0. Согласно версии FHS 2.3, такие данные хранились в /var/run, но в некоторых случаях это было проблемой, поскольку этот каталог не всегда доступен при ранней загрузке. В результате этим программам приходилось прибегать к уловкам, таким как использование /dev/.udev, /dev/.mdadm, /dev/.systemdили /dev/.mountкаталогов, даже если каталог устройства не предназначен для таких данных. [24] Среди других преимуществ, это упрощает обычное использование системы с корневой файловой системой, смонтированной только для чтения. Например, ниже приведены изменения, внесенные Debian в свой выпуск Wheezy 2013 года: [25]
/dev/.*→/run/*
/dev/shm→/run/shm
/dev/shm/*→/run/*
/etc/*(записываемые файлы) →/run/*
/lib/init/rw→/run
/var/lock→/run/lock
/var/run→/run
/tmp→/run/tmp
История
Имяusr
/usrПервоначально означало «пользователь». [26] Это был артефакт раннего программирования Unix. В частности, когда Кен Томпсон и Деннис Ритчи переносили Unix на PDP-11, /bin, /libкаталоги ..., которые должны были быть первыми каталогами, монтируемыми при запуске, и должны были содержать все необходимое для функционирования ОС, стали больше, чем диск RK05 . Поэтому они поместили некоторые из них в первый RK05, включая те, которые требуются для загрузки второго диска RK05. Остальные были помещены в каталог /usr. [27] Когда они получили третий диск, файлы пользователей были перемещены в новый каталог с именем /home. [28]
FHS был создан как FSSTND (сокращение от "Filesystem Standard" [29] ), в значительной степени основанный на аналогичных стандартах для других Unix-подобных операционных систем. Известные примеры: hier(7) описание файловой системы, [30] которое существовало с момента выпуска версии 7 Unix (в 1979 году); [31] файловая система SunOS (7) [32] и ее преемник, файловая система Solaris (7) . [33] [34]
^ Исторически и строго в соответствии со стандартом, /usr/localпредназначен для данных, которые должны храниться на локальном хосте (в отличие от /usr, который может быть смонтирован по сети). Большая часть времени /usr/localиспользуется для установки программного обеспечения/данных, которые не являются частью стандартного дистрибутива операционной системы (в таком случае /usrбудет содержать только программное обеспечение/данные, которые являются частью стандартного дистрибутива операционной системы). Возможно, что стандарт FHS в будущем может быть изменен, чтобы отразить это фактическое соглашение.
Ссылки
^ "FHS". Linux Foundation Wiki . Получено 4 января 2022 г.
^ "lsb:fhs-30 [Wiki]". wiki.linuxfoundation.org . Получено 22 февраля 2023 г. .
^ "hier(7) - Страница руководства Linux". man7.org . Получено 6 января 2021 г. .
^ J. DeFelicc (17 марта 1972 г.). "E.0". Предварительный выпуск документа по внедрению UNIX (PDF) . стр. 8. IMO.1-1 . Получено 6 июня 2024 г.
^ "/etc : Конфигурация системы, зависящая от хоста". Filesystem Hierarchy Standard 2.3 . Получено 18 февраля 2016 .
^ Определить - /etc?, Опубликовано Клиффом, 3 марта 2007 г. - Slashdot.
^ "/opt : Дополнительные пакеты прикладного программного обеспечения". Filesystem Hierarchy Standard 2.3 . Получено 18 февраля 2016 .
^ "/sys : Виртуальная файловая система с информацией о ядре и системе". Filesystem Hierarchy Standard 3.0 . Получено 4 июня 2017 г. .
^ Обзор дерева файловой системы Ubuntu Linux – Документация сообщества Ubuntu.
^ Хишам Мухаммад (9 мая 2003 г.). «Переосмысление дерева Unix: введение в GoboLinux» . Получено 4 октября 2016 г.
^ Dolstra, E.; Löh, A. (сентябрь 2008 г.). NixOS: чисто функциональный дистрибутив Linux (PDF) . ICFP 2008: 13-я международная конференция ACM SIGPLAN по функциональному программированию. Виктория, Британская Колумбия, Канада. стр. 367–378.
^ "5.3 О виртуальной файловой системе /sys". docs.oracle.com . Oracle. Архивировано из оригинала 8 июля 2016 г. Получено 8 июля 2016 г.
^ Лехи, Грег (май 2003 г.). Полная версия FreeBSD: документация из источника (четвертое издание). O'Reilly Media, Incorporated. стр. 188, 609. ISBN9780596005160.
^ Аллан Макрей. «Arch Linux – Новости: Каталог /lib становится символической ссылкой». archlinux.org . Архивировано из оригинала 9 сентября 2014 г. . Получено 14 декабря 2019 г. .
^ Аллан Макрей. «Arch Linux – Новости: Двоичные файлы перемещаются в /usr/bin, требуя вмешательства обновления». archlinux.org . Архивировано из оригинала 10 сентября 2014 г. . Получено 15 декабря 2019 г. .
^ Леннарт Пёттеринг (30 марта 2011 г.). «Что делает этот каталог /run в моей системе и откуда он взялся?». [email protected] (список рассылки).
^ "ReleaseGoalsRunDirectory". Debian Wiki .
^ "/usr". tldp.org . Получено 10 декабря 2023 г. .
^ МД Макилрой (1987). «Исследовательский ридер Unix: аннотированные выдержки из Руководства программиста, 1971–1986» (PDF) . Bell Labs. CSTR 139.
^ Лэндли, Роб (9 декабря 2010 г.). «Понимание разделения bin, sbin, usr/bin, usr/sbin». busybox (список рассылки).
^ "Страница часто задаваемых вопросов FSSTND" . Получено 10 мая 2016 г. .
↑ Страница руководства SunOS 4.1.3 для filesystem(7) от 10 января 1988 г. (из библиотеки FreeBSD Man Pages).
^filesystem(7) – Справочное руководство по стандартам, средам, макросам, наборам символов и прочему Solaris 11.4 .
^ "страница руководства по файловой системе – Solaris 10 11/06 Man Pages". Архивировано из оригинала 4 июля 2007 г. Получено 15 октября 2011 г.
^ "Индекс /pub/Linux/docs/fsstnd/old/fsstnd-1.0/". Ibiblio.org . Получено 16 октября 2012 г. .
^ "Индекс /pub/Linux/docs/fsstnd/old/fsstnd-1.1/". Ibiblio.org . Получено 16 октября 2012 г. .
^ "Индекс /pub/Linux/docs/fsstnd/old/". Ibiblio.org . Получено 16 октября 2012 г. .
^ "FHS 2.0 Announcement". Pathname.com . Получено 16 октября 2012 г. .
↑ Куинлан, Дэниел (14 марта 2012 г.) [1997], «Объявление о FHS 2.0», BSD, Linux, Unix и Интернет – Исследование Кеннета Р. Саборио , Сан-Хосе, Коста-Рика: Кеннет Р. Саборио, архивировано из оригинала 5 марта 2016 г. , извлечено 18 февраля 2016 г..
^ "Индекс /pub/Linux/docs/fsstnd/". Ibiblio.org . Получено 16 октября 2012 г. .
^ "FHS 2.1 Announcement". Pathname.com . Получено 16 октября 2012 г. .
^ "FHS 2.1 выпущен". Lists.debian.org. 13 апреля 2000 г. Получено 16 октября 2012 г.
^ Куинлан, Дэниел (12 апреля 2000 г.). «Filesystem Hierarchy Standard – Version 2.1, Filesystem Hierarchy Standard Group» (PDF) . Учебники Acadia Linux . Вольфвилл, Новая Шотландия, Канада: Школа компьютерных наук Джодри, Университет Акадия . Архивировано из оригинала (PDF) 27 марта 2012 г. . Получено 18 октября 2012 г. .
^ Рассел, Расти ; Куинлан, Дэниел, ред. (23 мая 2001 г.). "Filesystem Hierarchy Standard – Version 2.2 final Filesystem Hierarchy Standard Group" (PDF) . Filesystem Hierarchy Standard . Получено 18 февраля 2016 г. .
^ Рассел, Расти ; Куинлан, Дэниел; Йео, Кристофер, ред. (28 января 2004 г.). "Filesystem Hierarchy Standard - Filesystem Hierarchy Standard Group" (PDF) . Получено 29 ноября 2014 г.
^ Йео, Кристофер; Рассел, Расти; Куинлан, Дэниел, ред. (19 марта 2015 г.). "Filesystem Hierarchy Standard" (PDF) . Linux Foundation . Получено 20 мая 2015 г. .
Внешние ссылки
Официальный сайт стандарта иерархии файловой системы (FHS) в Linux Foundation
Полные тексты спецификаций
objectroot – предложение новой иерархии файловой системы, основанной на принципах объектно-ориентированного проектирования
Стандартная точечная иерархия имен файлов, еще одна совершенно иная иерархия (используется в cLIeNUX) (зеркало)
hier(7) – Руководство программиста Linux – Обзор, соглашения и разное