Как очистить ранее удаленные пакеты?

У меня есть список пакетов в моей системе, которые были установлены и удалены снова, но не очищены, т. Е. Вокруг все еще много конфилей и т. Д.

Выход dpkg --get-selections | grep deinstall dpkg --get-selections | grep deinstall перечисляет около 85 различных пакетов, которые мне не нужны, и вы хотите полностью очистить их.

Поэтому мой короткий вопрос, который я решил, наконец, спросить после экспериментов, привел к этой проблеме :

Как полностью удалить ранее установленные пакеты, которые уже удалены?

Конечно, переустановка, а затем очистка – это не вариант.

Я только что нашел следующую команду, которая работала:

 sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print $2}') 

dpkg --get-selections | grep deinstall dpkg --get-selections | grep deinstall создает список имен пакетов со словом « deinstall »:

 $ dpkg --get-selections | grep deinstall account-plugin-windows-live deinstall debarchiver deinstall flashplugin-installer deinstall ... 

Попросив awk напечатать только первое поле, мы получим:

 $ dpkg --get-selections | awk '$2 == "deinstall" {print $1}' account-plugin-windows-live debarchiver flashplugin-installer ... 

Теперь, когда у нас есть список пакетов, xargs позволит нам xargs список пакетов с командой (или командами, если список достаточно длинный):

 dpkg --get-selections | awk '$2 == "deinstall" {print $1}' | xargs sudo apt-get purge --dry-run 

Когда вы довольны имитируемыми результатами, удалите --dry-run из команды apt-get .

Читать:

 for i in awk xargs apt-get ; do man $i done 

Я спросил это сам пару дней назад. Пришел

 apt-get purge $(dpkg -l | awk 'BEGIN{ORS=" "} /^rc/{ print $2}') 

Удаленные, но не очищенные пакеты появляются на выходе dpkg -l с rc в начале. awk выбирает второй столбец, называемый именем пакета, и печатает их в пространстве.

Если вы просто хотите очистить весь список, вы можете использовать эту команду; он выполнит сухой прогон, если необходимые пакеты будут удалены, что вы, вероятно, не захотите:

 dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs sudo apt-get --dry-run purge 

Если какой-либо существенный пакет не будет удален, безопасно запустить фактическую команду:

 dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs sudo apt-get --yes purge 
  • sed -n 's/\tdeinstall$//p' : печатает только строки в stdin где табуляция, за которой следует строка deinstall может быть удалена из конца строки; это приводит к печати только строк, содержащих табуляцию, за которой следует строка deinstall в конце строки без фактической табуляции, за которой следует строка deinstall в конце строки
  • xargs sudo apt-get --yes purge : передает каждую строку в stdin в качестве аргумента в sudo apt-get --yes purge

Мои пятьдесят центов, простой oneliner:

Первый тест с

 dpkg --get-selections | awk '$2=="deinstall" {system("sudo apt-get --dry-run purge "$1)}' 

и до свидания

 dpkg --get-selections | awk '$2=="deinstall" {system("sudo apt-get -y purge "$1)}' 

пример

 % dpkg --get-selections | grep deinstall nginx-common deinstall % dpkg --get-selections | awk '$2=="deinstall" {system("sudo apt-get -y purge "$1)}' % dpkg --get-selections | grep deinstall [no output]