如何在Fedora中删除孤立软件包?


42

我刚刚从Ubuntu切换到Fedora14。在Ubuntu中,我们apt-get autoremove可以删除孤立的/未使用的软件包。Fedora中对应的是什么?

Answers:


36

package-cleanup --quiet --leaves百胜-utils的软件包将列出未在其他包依赖的库包。不幸的是,这往往有点过于急切。例如,在我的系统上,它建议删除libvirt。添加--exclude-bin参数会有所帮助。如果您对建议感到满意,请清理包装,请执行以下操作:

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y

1
在安装和删除后进行了测试netbeans-platform,软件包清理列出了一些内容,但实际上没有以前安装的netbeans-platform依赖项(使用Fedora 17)。
maxschlepzig 2012年

2
如@maxschlepzig所指出的那样是无效的
c0da

30

DNF是Fedora 22以来的yum替代品,它还提供了一个autoremove子命令,该子命令是 apt-get / yum autoremove 之后建模的

例子:

# dnf autoremove

试图删除所有自动安装的和否则未使用的依赖程序包-应该与apt-get autoremove

# dnf autoremove examplepackage

这将删除examplepackage及其所有自动安装(否则未使用)的依赖项。

百胜

自Fedora 19起,Yum就具有autoremove命令,并且自Fedora 20 / RHEL 7起就被记录在案。

用法类似于dnf的实现,例如:

# yum autoremove

要么

# yum autoremove examplepackage

更改yum的行为删除

Yum支持配置选项来更改remove子命令的默认行为(例如,通过/etc/yum.conf):

clean_requirements_on_remove=yes

yum.conf(5)

设置此选项后,yum remove如果其他软件包不需要自动安装的依赖项,则下一个也将尝试删除它们。

您也可以通过以下方式临时测试此选项:

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage

旧版Fedora的解决方法

(对于yum autoremove子命令不可用和/或clean_requirements_on_remove不起作用的Fedora版本。)

尽管在安装软件包期间已安装的相关性已被标记为此类(似乎是rpm / yum的相对较新的功能)。

您可以通过以下方式找到不需要的依赖项:

$ package-cleanup --leaves -q --all \
    | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' \
    | grep -- '- dep' \
    | cut -d' ' -f1 > tmp

该命令行受fenris02的脚本启发。

在检查tmp(可能是策展)之后,您可以通过以下方式将其删除:

# xargs yum remove < tmp

它给出了错误“对于已安装的pkg无效的yumdb querytag'原因':adobe-release-x86_64-1.0-1.noarch”。这是什么
c0da

@ c0da,我想yum在其数据库中记录每个软件包的安装“原因”(例如“ dep”或“用户”)的功能是相对较新的。也许您的Fedora实例早于该功能的引入,因此您仍然安装了(少数)没有该标签集的旧软件包。
maxschlepzig

我几天前安装了Fedora 18。所以我认为必需的标签应该在那里。
c0da

1
@ c0da,也许没有记录的“理由”,因为你已经安装的软件包adobe-release通过yum localinstall
maxschlepzig

16

您需要安装yum插件“ remove-with-leaves”:

# yum install yum-plugin-remove-with-leaves.noarch

一旦安装:

# yum remove --remove-leaves package

祝好运!


3
以及如何为所有已安装的应用程序运行它?
cnd 2012年


1
RHEL / CentOS / Oracle Linux 6需要yum-plugin-remove-with-leaves.noarch安装软件包才能使用package-cleanup
Terry Wang

8
# package-cleanup --orphans >/tmp/junk

编辑/tmp/junk文件并从命令行中删除第一行信息,输入以下内容:

for file in `cat /tmp/junk`
do
  yum remove $file
done

1
package-cleanup(1)说:“ --orphans列出当前配置的存储库中不可用的已安装软件包。” 这不等于做什么apt-get autoremove。apt-get(8)说:“ autoremove用于删除为满足某些软件包的依赖性而自动安装的软件包,并且不再需要这些软件包。”
maxschlepzig 2012年

1
不起作用!我以前一定是误会了。感谢@maxschlepzig
c0da 2013年

这曾经对我有用,但是在CentOS 6.6中它实际上列出了所有已安装的软件包,而不仅仅是孤儿。
盖亚2015年

4

注意:此答案是正确的,但仅适用于RHEL 7+和Fedora 20+(已将autoremove添加为新功能)。

# yum autoremove

只需确认删除选定的软件包即可。


0

Larry Mohr的答案为基础

package-cleanup --orphans | sed '1d' | sed '/^ * /d' | sed '/Loading mirror speeds from cached hostfile/d' | xargs sudo yum remove

(如果您想知道的话,包括跳过最快的镜像。)


0

在Fedora中,孤立软件包意味着没有候选仓库可以更新!

  1. 如果孤立包是由您生成的,请禁用yum.repos.d / some.conf。

    yum distro-sync
    
  2. 其他孤立包,该命令可能很危险。

    yum remove $(package-cleanup --orphans)
    

    或者,仅使用安全命令。

    yum remove name-of-page
    

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.