Перейти к содержимому

Бэкапы

hostsctl снимает копию целевого файла перед каждой записью — включая запись при откате, так что откат сам по себе обратим.

Terminal window
hostsctl backup list
/var/db/hostsctl/backups
20260811-171531 412 B ← latest
20260811-165502 389 B
20260810-224417 389 B

ID снимка — YYYYMMDD-HHMMSS, что одновременно сортируется лексикографически и хронологически. Две записи в одну секунду получают суффиксы -1, -2, а не затирают друг друга.

Terminal window
sudo hostsctl backup restore # к последнему снимку
sudo hostsctl backup restore 20260810-171531 # к конкретному

Перед записью hostsctl показывает diff между текущим файлом и снимком, спрашивает подтверждение (-y пропускает вопрос) и снимает копию текущего состояния. Пустой снимок или снимок, который оставил бы систему без 127.0.0.1 localhost, отвергается.

Terminal window
hostsctl backup prune

Удаляет всё сверх settings.keep_backups (по умолчанию 20). apply чистит автоматически после успешной записи, так что вручную это нужно только после уменьшения настройки. keep_backups: 0 отключает чистку совсем.

settings.backup_dir/var/db/hostsctl/backups на macOS, /var/lib/hostsctl/backups на остальных системах. Оба каталога принадлежат root, поэтому пишущие команды требуют root даже когда сам целевой файл был бы доступен на запись.

Чтобы держать снимки в другом месте, укажи каталог, которым владеешь:

settings:
backup_dir: /Users/you/.local/state/hostsctl/backups

Снимок — копия целевого файла, а не конфига. Он возвращает /etc/hosts в прежнее состояние, но конфиг остаётся прежним — и следующий apply откатит откат. Хочешь отменить изменение конфига — правь конфиг; хочешь отменить запись — восстанови бэкап и потом почини конфиг.