Введение
Разбираем архитектуру и практическое применение утилиты deb-systemd-helper, отвечающей за корректное переключение состояний юнитов systemd в дистрибутивах семейств Ubuntu и Debian. В рамках практического руководства мы развернем демонстрационную службу, изучим особенности выполнения подкоманд enable, was-enabled, disable и purge, а также разберем механизмы управления сервисами на уровне сценариев пакетов.
Установка пакета и ознакомление с возможностями deb-systemd-helper
Перед началом работы убедимся в наличии необходимого инструментария: утилита deb-systemd-helper входит в состав пакета init-system-helpers, который можно инсталлировать стандартным пакетным менеджером.

Для проверки доступности бинарного файла и его расположения в системном каталоге /usr/bin воспользуемся командой which.

Вызов встроенной справки позволяет ознакомиться со списком поддерживаемых параметров и общим назначением программы.
Этот вспомогательный скрипт разработан специально для применения внутри установочных сценариев Debian (maintscripts dpkg), гарантируя безопасное и предсказуемое управление автозапуском юнитов systemd.
Вместо прямого интерактивного вызова администратором в терминале, утилита призвана поддерживать целостность конфигурационных симлинков при инсталляции, обновлении и удалении пакетов.
⚙️ [Ключевые команды и ключи]
--quiet : подавляет вывод стандартных информационных сообщений, отображая исключительно ошибки.--force : принудительно выполняет операцию, игнорируя предупреждения о расхождениях в файлах состояния.enable : активирует указанный юнит, создавая необходимые симлинки для автоматического старта при загрузке ОС.disable : отключает службу, удаляя ранее созданные ссылки автозапуска.purge : полностью стирает служебные данные и историю отслеживания состояния юнита из системы.mask : блокирует запуск юнита, делая невозможным его ручной старт или автозагрузку.unmask : снимает маскировку, возвращая сервису возможность активации.was-enabled : проверяет, находилась ли служба в активном состоянии ранее.

Создание тестового юнита и его активация
Подготовим системную директорию для размещения конфигураций юнитов с помощью команды mkdir -p /lib/systemd/system.

В созданном каталоге сформируем простой тестовый юнит demo-helper.service, предназначенный для демонстрации работы утилиты.

Задействуем команду deb-systemd-helper enable demo-helper.service для постановки новой службы на автозапуск.
Скрипт зарегистрирует состояние юнита в соответствии с регламентом Debian и настроит соответствующие симлинки в целевом таргете загрузки.

Убедимся, что символическая ссылка на demo-helper.service успешно сформирована в каталоге /etc/systemd/system/multi-user.target.wants/, проверив ее наличие через ls -la.

Проверка статуса службы и процедура деактивации
Для программной проверки активности сервиса вызовем команду deb-systemd-helper was-enabled demo-helper.service && echo "Service is enabled".
Если юнит действительно зарегистрирован как включенный, команда завершится с нулевым кодом возврата, что и подтвердит сообщение в терминале.

Переведем тестовую службу в отключенное состояние запуском deb-systemd-helper disable demo-helper.service.
В процессе выполнения инструмент аккуратно устранит созданные ссылки в целевом таргете и обновит внутренний журнал состояний, предотвращая автозапуск сервиса при последующих перезагрузках.

Проверим факт деактивации конструкцией deb-systemd-helper was-enabled demo-helper.service || echo "Service is disabled".
Поскольку отключенный юнит возвращает ненулевой код завершения, сработает логический оператор ||, выводящий оповещение Service is disabled.

Финально удостоверимся в удалении символической ссылки из директории таргета с помощью ls -la /etc/systemd/system/multi-user.target.wants/demo-helper.service 2>&1 || true.
Сообщение об отсутствии файла доказывает, что деактивация прошла корректно и ссылки были зачищены.

Полная зачистка служебных данных (purge) и удаление тестового окружения
Команда deb-systemd-helper purge demo-helper.service производит финальное удаление всех внутренних служебных записей и истории состояния службы из системного реестра.
После ее выполнения в системе не остается следов конфигурации данного сервиса.

Удалим сам файл демонстрационного юнита из системной директории с помощью rm -f /lib/systemd/system/demo-helper.service.

Чтобы диспетчер systemd сбросил кэш конфигураций и зафиксировал удаление юнита, вызовем systemctl daemon-reload.
Это актуализирует внутреннее состояние менеджера служб в оперативной памяти.

Убедимся в успешном завершении очистки окружения выполнением проверочной команды echo "Cleanup completed successfully".
Выведенная строка свидетельствует о том, что тестовые файлы удалены, а служебные данные приведены в исходное состояние.

Мы подробно изучили принципы работы deb-systemd-helper в среде Ubuntu и Debian, рассмотрев практические аспекты управления жизненным циклом юнитов systemd.
Понимание этих механизмов позволяет грамотно проектировать установочные сценарии пакетов и обеспечивать надежный контроль за состоянием служб на уровне дистрибутива.