如何删除 Fedora 中的孤立包?

c0d*_*0da 44 yum fedora dnf

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

小智 37

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

# package-cleanup --quiet --leaves --exclude-bin | xargs yum remove -y
Run Code Online (Sandbox Code Playgroud)

  • 不起作用,正如@maxschlepzig 指出的那样 (2认同)

max*_*zig 37

DNF,自 Fedora 22 以来的 yum 替代品,还提供了一个模仿apt-get/yum autoremove的autoremove子命令。

例子:

# dnf autoremove
Run Code Online (Sandbox Code Playgroud)

它试图删除所有自动安装的和未使用的依赖包 - 应该几乎等同于apt-get autoremove.

# dnf autoremove examplepackage
Run Code Online (Sandbox Code Playgroud)

它删除了 examplepackage 及其所有自动安装(和其他未使用)的依赖项。

百胜

Yum 从 Fedora 19 开始就有 autoremove 命令,从 Fedora 20/RHEL 7 开始就有记录。

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

# yum autoremove
Run Code Online (Sandbox Code Playgroud)

或者

# yum autoremove examplepackage
Run Code Online (Sandbox Code Playgroud)

更改 yum 删除的行为

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

clean_requirements_on_remove=yes
Run Code Online (Sandbox Code Playgroud)

yum.conf(5)

设置此项后,yum remove如果其他软件包不需要它们,则 next还会尝试删除自动安装的依赖项。

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

# yum --setopt=clean_requirements_on_remove=1 remove examplepackage
Run Code Online (Sandbox Code Playgroud)

旧 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
Run Code Online (Sandbox Code Playgroud)

这个命令行的灵感来自fenris02 的脚本

在检查tmp(也许是策展)之后,您可以通过以下方式删除它们:

# xargs yum remove < tmp
Run Code Online (Sandbox Code Playgroud)


小智 16

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

# yum install yum-plugin-remove-with-leaves.noarch
Run Code Online (Sandbox Code Playgroud)

安装后:

# yum remove --remove-leaves package
Run Code Online (Sandbox Code Playgroud)

祝你好运!

  • 以及如何为所有已安装的应用程序运行它? (3认同)

小智 8

# package-cleanup --orphans >/tmp/junk
Run Code Online (Sandbox Code Playgroud)

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

for file in `cat /tmp/junk`
do
  yum remove $file
done
Run Code Online (Sandbox Code Playgroud)