Расположение файлов ini / config в linux / unix? - PullRequest
57 голосов
/ 21 июня 2009

Два вопроса, действительно:

(1) Существует ли стандарт / соглашение относительно размещения в файлах конфигурации? Для системных или квазисистемных программ они обычно находятся где-то в / etc. Для простых прикладных программ или программ pgms кажется менее ясным, что для /etc.

недостаточно прав.

(2) Существует несколько способов предоставления информации программе, например, переменные окружения, параметры командной строки, ini-файлы и т. д. При обработке параметров программы существует ли стандартная иерархия того, что имеет приоритет? Например. опция командной строки переопределяет файл инициализации? Наоборот? Или это полностью зависит от разработчика?

Ответы [ 7 ]

146 голосов
/ 21 июня 2009

Вы должны придерживаться своей заявки в Базовая директория 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"): пользовательские файлы несущественных данных.

Сначала вы должны определить, является ли данный файл:

  1. Файл конфигурации ($XDG_CONFIG_HOME:$XDG_CONFIG_DIRS);
  2. файл данных ($XDG_DATA_HOME:$XDG_DATA_DIRS); или
  3. Файл несущественного (кэша) ($XDG_CACHE_HOME).

Рекомендуется, чтобы ваше приложение помещало свои файлы в подкаталог вышеупомянутых каталогов. Обычно что-то вроде $XDG_DATA_DIRS/<application>/filename или $XDG_DATA_DIRS/<vendor>/<application>/filename.

При загрузке вы сначала пытаетесь загрузить файл из пользовательских каталогов ($XDG_*_HOME) и, в случае сбоя, из системных каталогов ($XDG_*_DIRS). При сохранении сохраняйте данные только в пользовательских каталогах (поскольку у пользователя, вероятно, не будет доступа на запись в системные каталоги).

Для других, более ориентированных на пользователя каталогов обратитесь к Спецификация каталогов пользователя XDG . Он определяет каталоги для рабочего стола, загрузки, документы, видео и т. Д.

59 голосов
/ 21 июня 2009
  1. Обычно системный / глобальный конфиг хранится где-то в /etc.
  2. Конфигурация для конкретного пользователя хранится в домашнем каталоге пользователя, часто в виде скрытого файла, иногда в виде скрытого каталога, содержащего не скрытые файлы (и, возможно, большее количество подкаталогов).

Вообще говоря, параметры командной строки переопределяют переменные среды, которые переопределяют пользовательские настройки по умолчанию, а также системные настройки по умолчанию.

25 голосов
/ 21 июня 2009

Новые приложения

Следуйте Спецификация базовой директории 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 - Каталог для потерянных файлов. У каждого раздела на диске есть каталог 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 и C ++

/usr/lib - Содержит библиотеки для языков программирования C и 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 - Содержит временные файлы, сохраняемые между перезагрузками системы.

7 голосов
/ 21 июня 2009
3 голосов
/ 21 июня 2009
  1. Обычно в точечном файле (например, .myprogramrc) в домашнем каталоге пользователя.
  2. Конечно, это зависит от программиста, но обычно аргументы командной строки переопределяют все остальное. Если используются переменные среды, это обычно является альтернативой аргументам командной строки или указывает, где находится конфигурация.
2 голосов
/ 21 июня 2009

Для пользовательской конфигурации я заметил тенденцию к переходу от отдельной ~/.myprogramrc к структуре ниже ~/.config. Например, Qt 4 использует ~/.config/<vendor>/<programname> с настройками по умолчанию QSettings. Основные среды рабочего стола KDE и Gnome также используют файловую структуру ниже определенной папки (не уверен, что в KDE 4 используется ~/.config, XFCE использует ~/.config).

1 голос
/ 21 июня 2009

(1) Нет (к сожалению). Редактировать: Другие ответы верны, конфигурация для каждого пользователя обычно хранится в точечных файлах или точечных каталогах в домашнем каталоге пользователя. Что-нибудь выше уровня пользователя часто - много догадок.

(2) Общесистемный ini-файл -> пользовательский ini-файл -> окружение -> параметры командной строки (в порядке убывания приоритета)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...