如何清除以前只删除的包裹?

我有一个我的系统上的软件包列表,它们已经安装并再次删除,但没有清除,即仍然存在大量的conffiles等。

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将让我们将包列表提供给命令(或命令,如果列表足够长):

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

如果对模拟结果感到满意,请从apt-get命令中删除--dry-run

读:

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

如果您只想清除整个列表,可以使用此命令; 它将执行干运行,以防必要的包将要删除,你可能不希望发生:

 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] 

几天前我自己问了这个问题。 想出了

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

删除但未清除的软件包出现在dpkg -l的输出中,其中rc位于开头。 awk选出第二列,即包的名称,并以空格分隔打印它们。