Файл остаётся вашим
Записи рендерятся в блок между маркерами. Системные строки, блоки других утилит и
ручные правки переносятся байт в байт — это проверено тестами на копии настоящего
/etc/hosts.
Поставить и создать конфиг:
brew install jtprogru/tap/hostsctlhostsctl initДобавить запись — она попадает в конфиг, а не сразу в /etc/hosts:
hostsctl add 127.0.0.1 k8s.orb.local --comment orbstackПосмотреть перед записью. diff не требует root и ничего не меняет:
hostsctl diffПрименить:
sudo hostsctl applyРезультат в /etc/hosts:
127.0.0.1 localhost ← системные строки, не тронуты255.255.255.255 broadcasthost
# >>> hostsctl begin >>># generated by hostsctl 2026-08-11 17:15# source: /Users/you/.config/hostsctl/config.yaml — edit that, not this block
# --- local — Local development ---127.0.0.1 k8s.orb.local # orbstack# <<< hostsctl end <<<Файл остаётся вашим
Записи рендерятся в блок между маркерами. Системные строки, блоки других утилит и
ручные правки переносятся байт в байт — это проверено тестами на копии настоящего
/etc/hosts.
Группы, которые выключаются
Группа включается и выключается целиком. Выключил блоклист на день, включил обратно — и ничего в конфиге за это время не потерялось.
Конфиг по файлам
Можно держать всё в одном config.yaml, а можно разложить по зонам — в обычном
hosts-синтаксисе или в YAML. Правки через CLI уходят обратно в тот файл, откуда группа
пришла.
Честность про отказы
Атомарная запись с fsync и rename, снимок перед каждой записью, отказ отдать файл
без 127.0.0.1 localhost и отдельный код выхода на каждый способ упасть.
Впервые здесь? Прочитайте две страницы из раздела Начало, а потом возвращайтесь за тем руководством, которое отвечает на вашу задачу.
hostsctl не резолвит имена — это делает /etc/hosts со всеми своими ограничениями.
Wildcards, порты и пути в имени хоста там не работают, поэтому
hostsctl check отвергает их, а не даёт системе молча
проигнорировать. Для wildcard-доменов нужен dnsmasq или /etc/resolver/.