Многие пакеты в Linux поставляются со служебными файлами, работающими в фоновом режиме. Часто служебные файлы не удаляются даже после удаления соответствующего пакета. Следовательно, накопление нежелательных служб вызывает дополнительную нагрузку на систему. В таких случаях становится необходимым удалить ненужные служебные файлы.
Для удаления служебных файлов крайне важно понимать набор каталогов, содержащих служебные файлы.
Служебные файлы обычно хранятся в нескольких определенных каталогах, в зависимости от их назначения и от того, кто их установил. Список каталогов приведен ниже.
/lib/systemd/system | Служебные файлы из загруженных пакетов |
/etc/systemd/system | Служебные файлы, созданные системным администратором |
~/.config/systemd/users | Служебные файлы обычными пользователями |
Итак, если загружен пакет, предоставляющий демона и службы, то эти файлы будут сохранены в каталоге /lib/systemd/system . Каталог /etc/systemd/system содержит служебные файлы, созданные системными администраторами, и изменять их могут только пользователи sudo. В то время как каталог ~/.config/systemd/users содержит служебные файлы, созданные обычными пользователями.
Первым шагом удаления служебного файла является поиск точного пути к нему. Чтобы найти путь, используйте команду systemctl status с именем службы.
systemctl status [SERVICE-NAME]
Чтобы найти название службы, вы можете перечислить все запущенные службы.
systemctl list-unit-files --type=service --state=running
Например, чтобы найти путь к модулю myservice.service, мы выполним команду status.
systemctl list-unit-files
Вывод показывает путь к файлу модуля в разделе «Loaded«.
Теперь, когда мы получили путь к сервису, мы приступим к его удалению на следующем шаге.
Предупреждение: Перед удалением служебных файлов из системы крайне важно иметь полное представление о системных служебных файлах и их значении для системы. Удаление важного служебного файла из системы может привести к необратимому повреждению.
Для удаления службы в Linux будут использоваться утилиты командной строки systemctl и rm . Используйте systemctl, чтобы остановить и отключить службу, а затем используйте rm, чтобы удалить служебные файлы из соответствующего каталога.
Чтобы удалить служебный файл, выполните последовательность команд, приведенную ниже.
sudo systemctl stop SERVICE-NAME sudo systemctl disable SERVICE-NAME sudo rm /lib/systemd/system/SERVICE-NAME #Service from the downloaded package sudo rm /etc/systemd/system/SERVICE-NAME #Service by the administrator sudo rm ~/.config/systemd/users/SERVICE-NAME #Service by the normal user sudo systemctl daemon-reload sudo systemctl reset-failed
Во-первых, рекомендуется остановить службу, чтобы убедиться, что она не запущена во время удаления, хотя ее отключение также предотвратит повторный запуск. Затем его необходимо отключить, что предотвращает автоматический запуск службы; при отключении службы также удаляются символические ссылки, созданные в каталогах .wants/ или .requires/. После этого удалите служебные файлы с помощью команды rm из соответствующего каталога.
Перезагрузите конфигурации systemd с помощью daemon-reload и команды execute reset-failed. Команда reset-failed сбрасывает все службы в состояние failed.
В этом примере давайте удалим службу, созданную системным администратором. Служба называется myservice.service и находится в каталоге /etc/systemd/system.
Проверьте состояние службы.
systemctl status myservice.service
Служба запущена; укажите путь к разделу «Loaded» и disable службу.
sudo systemctl disable myservice.service
sam@sam: $ sudo systemctl disable myservice.service Removed /etc/systend/system/multi-user.target.wants/myservice.service.
Это также приведет к удалению символической ссылки изкаталога /etc/systemd/system.
Затем удалите служебный файл, используя команду rm и путь к служебному файлу.
sudo rm /etc/systemd/system/myservice.service
Теперь перезагрузите конфигурацию systemd, чтобы применить изменения.
systemctl daemon-reload
Вот и все! Служба удалена и ее больше нет в вашей системе. Проверьте это, проверив состояние службы.
sam@sam: $ systemctl status myservice.service Unit myservice.service could not be found.
Удаление службы становится обязательным, если она запущена, даже если она больше не нужна. Она может потреблять системные ресурсы, если ее оставить без присмотра. В этом руководстве я описал полный метод удаления службы из Linux. Сначала определите имя и путь к сервису, а затем отключите его. После этого удалите файл service из соответствующего каталога и перезагрузите конфигурации systemd для завершения процедуры.