Что означает статус пакета «[остались файлы настроек]»
При поиске в репозитории пакетов с помощью утилиты apt вы можете столкнуться с такими программами, у которых вместо статуса «установлен» или не установлен статус указан как
[остались файлы настроек]
В англоязычной версии этот статус называется
[residual-config]
Смотрите также: Как в Linux Mint проверить, установлен ли пакет
Таких файлов может накопиться довольно много.
Отсюда возникает вопрос: безопасно ли удалять такие файлы, не приведёт ли это к непредвиденным сбоям в работе программ? Если эти файлы можно удалить, то как это сделать сразу для всех пакетов, чьи файлы настроек остались в системе?
Операция apt autoremove, а также clean и autoclean не помогают в удалении этих файлов, поскольку пакеты уже удалены.
Безопасно ли удалять файлы настроек
Для начала отметим, что если у пакета статус «[остались файлы настроек]», то он уже удалён и, следовательно, не может работать. По этой причине удаление его файла настроек будет означать, что если в будущем вы захотите установить этот же пакет, вам может понадобится выполнить настройку пакета заново.
Чтобы вывести список пакетов, которые удалены из системы, но для которых остались файлы настроек, выполните программу:
dpkg -l | grep '^rc' | awk '{print $2}'
У меня получился довольно длинный список, который даже не поместился в экран. При этом в большей части список составлен из пакетов, которые я никогда не захочу устанавливать вновь: предыдущие версия ядра, предыдущие версии PHP, предыдущие версии сервера и клиента MariaDB.
Тем не менее, при внимательном изучении списка я нашёл в нём phpMyAdmin, который я устанавливал и действительно использую. То есть этот пакет был удалён автоматически, скорее всего при мажорном обновлении версии PHP. То я не только не хочу удалять конфигурационные файлы phpMyAdmin, я заново установил этот пакет. То есть не спешите бездумно удалять конфигурационные файлы отсутствующих пакетов — хотя бы бегло просмотрите его.
Обратите внимание, что пакет со статусом «[остались файлы настроек]» считается установленным даже не смотря на то, что отсутствуют какие-либо его файлы, кроме конфигурационных. В практическом смысле это означает, что зависимости этих уже удалённых пакетов по прежнему сохраняются в системе. Поэтому после очистки конфигурационных файлов пакет считается окончательно удалённым. А это может привести к тому что зависимости, которые устанавливались автоматически, больше не требуются. По этой причине запуск
sudo apt autoremove
может привести к удалению пакетов.
Обычно это не является проблемой, поскольку удаляются автоматически установленные пакеты, которые больше не нужны ни одной из программ. Но если появились пакеты, которые больше не нужны, ещё внимательнее проверьте список конфигурационных файлов для очистки — там может оказаться что-то полезное, как в моём случае это был phpMyAdmin.
Сколько место освободится при очистке файлов настроек
Что касается вопроса, насколько это нужно, то у пользователей имеются разные мнения. Один из пользователей написал, что удаление конфигурационных файлов для 342 отсутствующих пакетов позволило ему высвободить всего 2.6 MiB. Другие пользователи пишут, что конфигурационные файлы заполнили всё свободное пространство в корневой директории. На самом деле, обычно конфигурационные файлы занимают совсем немного места и не стоит рассчитывать на высвобождение большого количества пространства на диске после их удаления.
Почему остаются файлы настроек
Это не является ошибкой — файлы настроек удалённых приложений сохраняются намеренно. В Linux установка пакета из репозитория может быть выполнена одной командой. Но последующая настройка, которая может заключаться в редактировании конфигурационного файла, может занять много времени. По этой причине команда apt имеет два вида удалений программ:
remove
Удаляет пакеты. Обратите внимание, что при удалении пакета его файлы конфигурации остаются в системе.
purge
purge аналогичен remove, за исключением того, что пакеты удаляются и очищаются (любые файлы конфигурации также удаляются).
Таким образом, когда вы удаляете пакеты, обычно используя sudo apt remove, то программы оставляют свои файлы конфигурации в системе.
Как удалить сразу все конфигурационные файлы для отсутствующих пакетов
Для очистки всех конфигурационных файлов используйте следующую команду:
dpkg -l | grep '^rc' | awk '{print $2}' | xargs sudo apt --purge --yes remove
Не забудьте перед её запуском просмотреть список затрагиваемых пакетов, как это показано выше — может оказаться, что по независящим от вас причинам были удалены нужные вам пакеты и вам совсем не хочется чтобы были удалены ещё и их конфигурационные файлы.
В процессе очистки конфигурационных файлов вы можете сталкиваться с сообщениями вида:
dpkg: предупреждение: при удалении php7.4-cli каталог «/etc/php/7.4» не пуст, поэтому не удалён Вычищаются файлы настройки пакета phpmyadmin (4:5.1.1+dfsg1-4) …
Или:
rmdir: не удалось удалить '/lib/modules/5.10.0-kali4-amd64': Каталог не пуст
С английской локалью:
dpkg: warning: while removing php7.3-cli, directory '/etc/php/7.3' not empty so not removed
Это означает, что эти директории кроме конфигурационных файлов пакета содержат посторонние файлы. Во всех этих случаях вам нужно вручную удалить указанные директории.
Связанные статьи:
- dpkg: ошибка при обработке пакета ...: пакет абсолютно неработоспособен; перед настройкой его следует переустановить (РЕШЕНО) (100%)
- Как исправить ошибку «E: Sub-process /usr/bin/dpkg returned an error code (2)» (100%)
- dpkg: ошибка: fgets прочитал пустую строку из «/var/lib/dpkg/triggers/Unincorp» (РЕШЕНО) (100%)
- Примеры базового и продвинутого использования команд apt, apt-cache, dpkg для управления пакетами в Ubuntu/Debian (98.7%)
- Как в Linux симулировать установку пакета (Как создать и установить фиктивный пакет) (98.7%)
- Решение проблемы с ошибкой «bash: не удаётся запустить бинарный файл: Ошибка формата выполняемого файла» (RANDOM - 51.4%)