(1) Существует ли стандартное соглашение о размещении файлов конфигурации? Для системных или квазисистемных программ они, как правило, находятся где-то в /etc. Для обычных прикладных программ или pgms кажется менее понятным, что с недостаточными привилегиями для /etc.
(2) Существует множество способов предоставления информации программе, например. переменные среды, параметры командной строки, ini файлы и т.д. В параметрах программы обработки есть стандартная иерархия того, что имеет приоритет? Например. опция командной строки переопределяет файл инициализации? Наоборот? Или это полностью зависит от разработчика?
Ответ 2
Вы должны придерживаться своего приложения в Спецификация базового каталога XDG. Большинство ответов здесь либо устарели, либо неправильно.
Ваше приложение должно хранить и загружать файлы данных и конфигурации в/из каталогов, указанных следующими переменными среды:
-
$XDG_DATA_HOME
(по умолчанию: "$HOME/.local/share"
): файлы данных, специфичные для пользователя.
-
$XDG_CONFIG_HOME
(по умолчанию: "$HOME/.config"
): пользовательские файлы конфигурации.
-
$XDG_DATA_DIRS
(по умолчанию: "/usr/local/share/:/usr/share/"
): упорядоченный набор каталогов системных данных.
-
$XDG_CONFIG_DIRS
(по умолчанию: "/etc/xdg"
): упорядоченные по порядку каталоги конфигурации системы.
-
$XDG_CACHE_HOME
(по умолчанию: "$HOME/.cache"
): не связанные с данным файлы данных.
Сначала вы должны определить, соответствует ли этот файл:
- Файл конфигурации (
$XDG_CONFIG_HOME:$XDG_CONFIG_DIRS
);
- Файл данных (
$XDG_DATA_HOME:$XDG_DATA_DIRS
); или
- Необязательный (кеш) файл (
$XDG_CACHE_HOME
).
Рекомендуется, чтобы ваше приложение помещало свои файлы в подкаталог вышеуказанных каталогов. Обычно что-то вроде $XDG_DATA_DIRS/<application>/filename
или $XDG_DATA_DIRS/<vendor>/<application>/filename
.
При загрузке сначала вы пытаетесь загрузить файл из каталогов, специфичных для пользователя ($XDG_*_HOME
), а в случае сбоя - из системных каталогов ($XDG_*_DIRS
). При сохранении сохраняйте только каталоги, зависящие от пользователя (поскольку у пользователя, вероятно, не будет доступа на запись в системные каталоги).
Для других, более ориентированных на пользователя каталогов, обратитесь к спецификации XDG User Directories. Он определяет каталоги для рабочего стола, загрузки, документы, видео и т.д.
Ответ 3
Новые приложения
Следуйте Спецификация базового каталога XDG обычно ~/.config/yourapp/*
может быть INF, JSON, YML или любым другим форматом, плавающим на вашей лодке, и любыми файлами.. yourapp
должно совпадать с вашим исполняемым именем или быть помещено в папку с вашей организацией/компанией/именем пользователя/дескриптором на ~/.config/yourorg/yourapp/*
Старые приложения
Конфигурация для пользователя, как правило, прямо в вашем домашнем каталоге...
-
~/.yourapp
файл для одного файла
-
~/.yourapp/
для нескольких файлов + данных, обычно в ~/.yourapp/config
Глобальные конфигурации обычно находятся в каталоге /etc/appname
или /etc/appname/
.
Глобальные данные приложения: /var/lib/yourapp/
Данные кэша: /var/cache/
Данные журнала: /var/log/yourapp/
Дополнительная информация из tutorialhelpdesk.com
Структура каталогов Linux/других Unix-подобных систем и подробная информация о каталоге.
В Windows почти все программы устанавливают свои файлы (все файлы) в каталоге с именем "Program Files". Это не так в Linux. Система каталогов классифицирует все установленные файлы. Все файлы конфигурации находятся в /etc
, все двоичные файлы находятся в /bin
или /usr/bin
или /usr/local/bin
. Вот вся структура каталогов вместе с тем, что они содержат:
/
- Корневой каталог, который формирует базу файловой системы. Все файлы и каталоги логически содержатся внутри корневого каталога независимо от их физических местоположений.
/bin
- Содержит исполняемые программы, которые являются частью операционной системы Linux. Многие команды Linux, такие как cat, cp, ls, more и tar, находятся в /bin
/boot
- содержит ядро Linux и другие файлы, необходимые менеджерам загрузки LILO и GRUB.
/dev
- Содержит все файлы устройств. Linux обрабатывает каждое устройство как специальный файл. Все такие файлы находятся в /dev
.
/etc
- содержит большинство конфигурационных файлов системы и скрипты инициализации в подкаталоге /etc/rc.d
.
/home
- Домашний каталог является родительским для домашних каталогов пользователей.
/lib
- содержит файлы библиотеки, включая загружаемые модули драйверов, необходимые для загрузки системы.
/lost+found
- Каталог потерянных файлов. У каждого раздела диска есть потерянный + найденный каталог.
/media
- Каталог для установки файловых систем на съемных носителях, таких как CD-ROM, гибкие диски и Zip-диски.
/mnt
- Каталог временно смонтированных файловых систем.
/opt
- Дополнительные пакеты программного обеспечения копируют/устанавливают файлы здесь.
/proc
- Специальный каталог в виртуальной файловой системе. Он содержит информацию о различных аспектах системы Linux.
/root
- Домашний каталог пользователя root.
/sbin
- содержит административные двоичные файлы. Здесь присутствуют команды, такие как mount, shutdown, umount.
/srv
- Содержит данные для служб (HTTP, FTP и т.д.), предлагаемых системой.
/sys
- специальный каталог, содержащий информацию об устройствах, как видно из ядра Linux.
/tmp
- Временная директория, которая может использоваться как каталог с нуля (для хранения временных файлов). Содержимое этого каталога очищается каждый раз, когда система загружается.
/usr
- Содержит подкаталоги для многих программ, таких как X Window System.
/usr/bin
- Содержит исполняемые файлы для многих команд Linux. Он не является частью основной операционной системы Linux.
/usr/include
- Содержит файлы заголовков для языков программирования C и С++
/usr/lib
- Содержит библиотеки для языков программирования C и С++.
/usr/local
- Содержит локальные файлы. Он имеет похожие каталоги, в которых содержится /usr.
/usr/sbin
- содержит административные команды.
/usr/share
- Содержит общие файлы, например, файлы конфигурации по умолчанию, изображения, документацию и т.д.
/usr/src
- содержит исходный код ядра Linux.
/var
- Содержит различные системные файлы, такие как журнал, почтовые каталоги, печатающая катушка и т.д., которые со временем меняются по количеству и размеру.
/var/cache
- область хранения кэшированных данных для приложений.
/var/lib
- Содержит информацию, относящуюся к текущему состоянию приложений. Программы изменяют это при запуске.
/var/lock
- содержит файлы блокировок, проверенные приложениями, так что ресурс может использоваться только одним приложением.
/var/log
- содержит файлы журналов для разных приложений.
/var/mail
- Содержит электронные письма пользователей.
/var/opt
- содержит переменные данные для пакетов, хранящихся в каталоге /opt.
/var/run
- Содержит данные, описывающие систему с момента ее загрузки.
/var/spool
- Содержит данные, ожидающие какой-либо обработки.
/var/tmp
- Содержит временные файлы, сохраненные между перезагрузкой системы.