Файлы-зоны
Держать всё в одном config.yaml необязательно. include подключает файлы-зоны рядом с
конфигом, каждый со своими группами:
~/.config/hostsctl/├── config.yaml settings, include, общие группы└── zones/ ├── 10-local.hosts обычный hosts-синтаксис ├── 20-work.yaml группы в YAML └── 30-ads.yaml удалённый блоклистШаблоны разворачиваются относительно каталога конфига. Их порядок задаёт порядок групп в
/etc/hosts, а там выигрывает первая подходящая строка — так что порядок не косметика.
Внутри одного шаблона файлы сортируются по имени, поэтому префиксы 10-, 20- работают
как ожидается.
Два формата, выбор по расширению
Заголовок раздела «Два формата, выбор по расширению».hosts — обычный hosts-синтаксис, одна группа на файл
Заголовок раздела «.hosts — обычный hosts-синтаксис, одна группа на файл»Имя группы берётся из имени файла (10-local.hosts → local), шапка становится
описанием, комментарий над строкой или в её конце — комментарием записи, а
закомментированная строка — выключенной записью:
# Локальная разработка
127.0.0.1 k8s.orb.local10.30.13.37 sre-mcp.local # стенд# 127.0.0.1 old.localШапка — ровно одна строка комментария: следующие комментарии до первой записи считаются комментарием к ней.
В .hosts-зоне помещается ровно одна группа, и в ней нельзя держать source — для
удалённого списка нужен .yaml.
.yaml — те же группы, что в основном конфиге
Заголовок раздела «.yaml — те же группы, что в основном конфиге»Принимаются три формы: groups: [...], голый список групп и одна группа без name (имя
берётся из имени файла).
description: Work standsentries: - ip: 10.0.0.7 hostnames: [stand.local]Управление списком include
Заголовок раздела «Управление списком include»hostsctl zone list # шаблоны, файлы, что в них лежитhostsctl zone add 'legacy/*.hosts' # подключить существующие файлыhostsctl zone rm 'legacy/*.hosts' # отключить; файлы остаются на дискеzone add сразу загружает найденные файлы, поэтому конфликт имён групп всплывает в этот
момент, а не при следующем запуске.
Положить группу в файл
Заголовок раздела «Положить группу в файл»hostsctl group add work --file zones/20-work.yamlhostsctl add 10.0.0.7 stand.local --group workhostsctl group move blocklist --file zones/30-ads.yamlhostsctl group move blocklist --file mainhostsctl edit work # откроет файл именно этой группыЕсли путь из --file не подходит ни под один шаблон, он дописывается в include — иначе
группа потерялась бы при следующем чтении.
Правки возвращаются туда, откуда пришли
Заголовок раздела «Правки возвращаются туда, откуда пришли»Каждая группа помнит файл, из которого загрузилась. Изменение через CLI пишется обратно в
этот файл и в его формате, а файл, содержимое которого не изменилось, не перезаписывается
вообще — так mtime остаётся осмысленным, а git diff тихим.
Подключить файлы, которые уже есть
Заголовок раздела «Подключить файлы, которые уже есть»Свои *.hosts, лежащие где угодно на диске, подключаются как есть, без конвертации:
hostsctl zone add '/Users/me/Work/hosts/*.hosts'Учти: при первой же правке через CLI hostsctl перепишет такой файл своим форматированием — выровняет колонки и вынесет шапку наверх. Содержимое сохранится, раскладка нет.
Ограничения
Заголовок раздела «Ограничения»- Имена групп уникальны по всем файлам. Дубль — ошибка с указанием обоих файлов.
- В
.hosts-зоне одна группа, и у неё не может бытьsource. - Файл-зона, из которой не получилось ни одной группы, просто пропускается.