Как вы, возможно, видели, некоторых каталогов, описанных в предыдущем разделе у вас в Ubuntu не существует. Это связано с тем, что структура файловой системы различается от дистрибутива к дистрибутиву, сохраняя, конечно, определённую концепцию описанную в Filesystem Hierarchy Standard.
На сайте FTP консорциума GNU лежит программа Hello world основное назначение её в том, чтобы просто посмотреть продукт полностью удовлетворяющий GNU стандарту. Но мы его попробуем использовать для того, чтобы просто узнать значения некоторых переменных.
Скачайте и распакуйте эту программу куда-нибудь в /tmp. Для того, чтобы нам не жалко было её стереть. Зайдите туда из-под консоли и выполните команду:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
configure: creating ./config.status
config.status: creating Makefile -- вот это нам понадобится
...
Eсли у вас возникнет ошибка, что не возможно создать "executable file", поставьте из репозитария пакет build-essential.
Итак, вы возможно обратили внимание на то, что вместо отсутствующего Makefile скрипт configure создал нам новый. Если вы его просмотрите то увидите следующее (нам отсюда нужна только верхняя часть:
... (тут лежат комментарии)
SHELL = /bin/bash
srcdir = .
top_srcdir = .
prefix = /usr/local
exec_prefix = ${prefix}
... (а здесь остальной автоматически сгенерированный код)
Как вы видите префикс равен 'prefix = /usr/local'
. В документе Filesystem Hierarchy Standard об этом сказано, что (4.8.2.1): "Иерархия /usr/local используется системным администратором при локальной установки программного обеспечения. Она не должна перезаписываться при обновлении системного программного обеспечения. Она может быть использована для программ и данных, которые совместно используются среди групп хостов, но которые не найдены в /usr. Локально установленное ПО должно быть помещено, предпочтительнее, в /usr/local, чем в /usr, если конечно оно не было установлено для замены или обновления ПО в /usr."
Так как я на своей памяти не встречал пакеты, которые записывались бы в /usr/local (тем более мы с вами будем делать наш собственный пакет, который в дальнейшем будет обновляться). Для этого выполним конфигурационный скрипт следующим образом, и просмотрим наш Makefile:
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
... (тут лежат комментарии)
SHELL = /bin/bash
srcdir = .
top_srcdir = .
prefix = /usr
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
sbindir = ${exec_prefix}/sbin
libexecdir = ${exec_prefix}/libexec
datadir = ${prefix}/share
sysconfdir = ${prefix}/etc
sharedstatedir = ${prefix}/com
localstatedir = ${prefix}/var
libdir = ${exec_prefix}/lib
infodir = ${prefix}/info
mandir = ${prefix}/man
includedir = ${prefix}/include
oldincludedir = /usr/include
pkgdatadir = $(datadir)/hello
pkglibdir = $(libdir)/hello
pkgincludedir = $(includedir)/hello
top_builddir = .
... (а здесь остальной автоматически сгенерированный код)
Теперь уже всё можно свести в таблицу, чтобы было проще воспринять:
Переменная | Путь | Описание |
---|---|---|
srcdir | . | Исходные коды |
top_srcdir | . | Родительский каталог с исходными кодами (во вложенных директориях его значение равно '..' |
prefix | /usr | Каталог, содержащий данные, совместно используемые несколькими машинами. Любая информация, меняющаяся со временем должна располагаться в другом каталоге |
bindir | /usr/bin | Первичная директория для исполняемых файлов |
sbindir | /usr/sbin | Директория содержащая незначительные файлы, обычно используемые системным администратором: восстановление системы, монтирование /usr раздела и т.д. |
libexecdir | /usr/libexec | Директория для установки исполняемых программ, которые чаще запускаются другими программами, чем пользователями |
datadir | /usr/share | Иерархия для всех архитектурно-независимых данных, используемых совместно различными хостами |
sysconfdir | /usr/etc | Каталог с файлами для конфигурирования хоста. Предпочтительно использование /etc |
sharedstatedir | /usr/com | Директория для установки файлов с архитектурно независимыми данными, которые могут быть изменены программой |
localstatedir | /usr/var | Директория для установки файлов с данными, которые могут быть изменены программами в процессе работы, и которые принадлежат одной конкретной машине |
libdir | /usr/lib | Содержит объектные файлы, библиотеки, внутренние бинарные файлы. Подразумевается, что они не используются напрямую пользователем или скриптами шелл |
infodir | /usr/info | Директория для установки Info-файлов для этого пакета |
mandir | /usr/man | Каталог верхнего уровня для установки страниц man для текущего пакета |
includedir | /usr/include | Сюда помещаются все заголовочные файлы языка C |
pkgdatadir | /usr/share/hello | Здесь хранятся данные приложения hello. Например, Glade формы |
pkglibdir | /usr/lib/hello | Здесь хранятся данные библиотеки hello. Например, вспомогательные библиотеки |
pkgincludedir | /usr/include/hello | Здесь хранятся заголовочные файлы библиотеки hello |
Здесь ещё можно добавить следующее, в каталоге /usr/include/pixmaps лежат различные картинки, используемые программой в процессе её жизнедеятельности. Про другие каталоги, такие как /usr/include/doc я ничего верно сказать не могу, так как не видел обобщённой информации по этому поводу. Скорее всего структура файловой системы основана на FHS, а потом идёт собственно набивка различными пакетами.