如何清除以前只删除的包裹?
我有一个我的系统上的软件包列表,它们已经安装并再次删除,但没有清除,即仍然存在大量的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
选出第二列,即包的名称,并以空格分隔打印它们。