Форматы конфигурационных файлов
Обновлено 4 ноября 2026
Формат — это «знание» утилит о синтаксисе конкретного вида конфигурационных файлов. Он указывается в заголовке шаблона параметром format= и определяет, как тело шаблона будет объединено с уже существующим файлом: что считается записью, чем имя отделено от значения, как выглядят комментарии и как удалить параметр.
Правило выбора одно: формат берётся по синтаксису целевого файла, а не по тому, что удобнее написать. Тело шаблона должно выглядеть как кусок настоящего конфига — тогда порядок строк, кавычки и комментарии исходного файла сохранятся.
Если format= не указан, файл считается «сырым» (raw) и объединение не выполняется: цель переписывается целиком. Для осознанной полной записи это нормально, но обязательно добавьте comment= — символом комментария, который понимает целевая программа; иначе служебный заголовок «Modified Calculate Utilities» сделает файл нечитаемым для неё.
Три семейства
Директивные файлы
Разбор регулярными выражениями, класс objShare: bind, apache, postfix, dovecot, dhcp, procmail, squid, openrc. Здесь синтаксис задают три регулярки формата: где начинается комментарий, чем режется строка и какой разделитель вставляется обратно.
Ini-файлы с секциями
Класс samba и его наследники: samba, kde, ldap, compiz, plasma. Группы в квадратных скобках и пары имя/значение; удаление — !ключ=.
Структурные форматы
Разбор не «строкой», а объектом: xml_xfce, xml_xfcepanel, xml_gconf, xml_gconf_tree — XML; json — JSON; world — список атомов; kernel — .config ядра; плюс форматы, которые вообще не описывают текст файла: patch, diff, contents, sqlite, dconf, backgrounds.
Полный перечень с деталями — в справочнике форматов.
Как выбрать: короткие ответы
- Конфиги KDE/GNOME, *.desktop, *.src, ini с вложенными группами
[A][B]→ kde. - smb.conf, *.env-файлы Calculate, классические ini → samba.
- /etc/conf.d/* (openrc-скрипты) → openrc.
- Прочие
КЛЮЧ=значениебез секций → procmail. - Файл неизвестного формата, а менять надо две строки → patch: он работает регулярными выражениями и не требует разбора синтаксиса.
- Надо наложить патч на исходники пакета → diff.
- Конфиг Xfce/gconf → xml_xfce / xml_gconf.
kde против samba: в чём реальная разница
Формально kde — надстройка над samba, модель общая: группы в скобках, ключ = значение, комментарии сохраняются на своих местах. Различия три, и все они видны в результате.
Вложенные группы
Вложенные группы понимает только kde. Файл вида
[AC][DPMSControl] idleTime=900
в kde сохранится как есть, а в samba вложенная часть заголовка теряется — в результате остаётся [AC]. Отсюда же «растёт» format=plasma для настроек KDE с многоуровневыми группами.
Префиксы + и -
Префиксы + и - работают только в samba. В samba запись +browse list = no обновляет настоящий ключ browse list; в kde знак остаётся внутри имени, и создаётся параметр с буквальным именем +browse list, который никогда не совпадёт с существующим. То же с -. Поэтому в kde нужно писать обычное ключ=значение для установки и !ключ= для удаления — последнее работает в обоих форматах одинаково.
Комментарии
В samba комментарием считается строка и с #, и с ;; в kde — только с #. На вид результата это не влияет, но ;-строка в шаблоне kde перестанет быть комментарием.
Что при этом одинаково: пробелы вокруг =, инлайн-решётка внутри значения, пустое тело шаблона, сохранение порядка и кавычек. Так что для простого ini без вложенных групп и без +/- результат будет один и тот же — ориентируйтесь на то, какой формат уже используется в системе для этого файла: совпадение исключает ситуации, когда два шаблона трактуют один файл по-разному.
Проверить поведение своего формата
Быстро посмотреть, что получится, не трогая систему, можно офлайн-наложением — см. чек-лист диагностики. На реальных примерах полезно свериться с деревом calculate: почти для любого вида конфигов там уже есть шаблон-образец.
См. также
- Справочник форматов — все 29 имён, чем делятся имя и значение, дефолтный append, символ комментария.
- Синтаксис шаблона — заголовок, префиксы, условия.