删除未使用的软件包


Answers:


39

这并不容易。您如何区分“我之后删除的文件所需要的文件”和“我真正想要的其他文件所不需要的文件”?

您可以使用包中的package-cleanup命令yum-utils在包依赖关系图中列出“叶节点”。这些是可以删除而不会影响其他组件的软件包:

$ package-cleanup --leaves

这将产生一个“库”列表,其他都没有依赖。在大多数情况下,您可以安全地删除这些软件包。如果添加--all到命令行:

$ package-cleanup --leaves --all

您还将获得不被认为是库的软件包,但是此列表将是如此之长,以至于它可能不会有用。


9
APT(相当于Yum的Debian)具有“自动安装的软件包”的概念。如果没有显式请求软件包,而是仅将其作为依赖项拉入,则如果所有依赖于该软件包的软件包都被删除,则会自动将其删除(带有确认提示)。没有这种类型的指示,这确实不容易。
吉尔斯2012年

101

如果您使用来安装软件包yum install,比如说pdftk,它将引入很多依赖关系:

Installed:
  pdftk.x86_64 0:1.44-10.fc18

Dependency Installed:
  bouncycastle.noarch 0:1.46-6.fc18     
  itext-core.noarch 0:2.1.7-14.fc18     
  libgcj.x86_64 0:4.7.2-8.fc18          
  bouncycastle-mail.noarch 0:1.46-6.fc18
  java-1.5.0-gcj.x86_64 0:1.5.0.0-40.fc18
  sinjdoc.x86_64 0:0.5-13.fc18
  bouncycastle-tsp.noarch 0:1.46-5.fc18
  java_cup.noarch 1:0.11a-10.fc18
  itext.x86_64 0:2.1.7-14.fc18   
  javamail.noarch 0:1.4.3-12.fc18

Complete!

yum remove pdftk 将仅删除该程序包,而不删除所有依赖项。

但是您可以查看所有“事务”(安装,删除等):

$ sudo yum history list pdftk
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------  
    88 | install pdftk            | 2012-12-14 13:35 | Install        |   11   

然后您可以撤消该事务:

$ sudo yum history undo 88
Undoing transaction 88, from Fri Dec 14 13:35:34 2012
    Dep-Install bouncycastle-1.46-6.fc18.noarch       @fedora
    Dep-Install bouncycastle-mail-1.46-6.fc18.noarch  @fedora
    Dep-Install bouncycastle-tsp-1.46-5.fc18.noarch   @fedora
    Dep-Install itext-2.1.7-14.fc18.x86_64            @fedora
    Dep-Install itext-core-2.1.7-14.fc18.noarch       @fedora
    Dep-Install java-1.5.0-gcj-1.5.0.0-40.fc18.x86_64 @fedora
    Dep-Install java_cup-1:0.11a-10.fc18.noarch       @fedora
    Dep-Install javamail-1.4.3-12.fc18.noarch         @fedora
    Dep-Install libgcj-4.7.2-8.fc18.x86_64            @fedora
    Install     pdftk-1.44-10.fc18.x86_64             @fedora
    Dep-Install sinjdoc-0.5-13.fc18.x86_64            @fedora
    ...
    Complete!

14
+1很棒的解决方案,很容易做到。我从未听说过yum history。谢谢!
Stefan Lasiewski

8
如果89依赖于java_cup或libgcj呢?
WernerCD '16

2
这不是应该接受的答案吗?
Celdor

61

从Fedora 18开始,您可以简单地使用此命令

yum autoremove

要么

yum remove --setopt=clean_requirements_on_remove=1

您还可以将autoremove命令与特定软件包一起应用

yum autoremove <package>

这将从已安装的软件包中删除不需要的依赖项。autoremove是的别名,remove --setopt=clean_requirements_on_remove=1但由于某些原因,至今仍未记录。


5
命令yum remove --setopt=clean_requirements_on_remove=1在centOS中为我工作
BMW

对我来说,package-cleanup --leaves && yum autoremove删除的libvorbis使得互联网无线电流“ Ices”应用程序死了-可能是因为它不在存储库中,因此我不得不对其进行编译。
Nakilon

Command也yum autoremove可在CentOS 7.6上运行。
scrutari

yum autoremove无法删除CentOS 7上的4个旧内核
user1133275

5

我把幼虫回答了一步。

$ package-cleanup -q --leaves | xargs -l1 yum -y remove 

这将获取所有可以删除的依赖项,而不会影响其他任何依赖项,然后将其删除。最好然后一个接一个地进行。

在某些打印“设置yum”的系统上,“-q”很有用,否则会导致此命令删除yum。那不是您想要的。


2
package-cleanup在我的机器上输出“设置yum”,导致Yum自行删除。我现在正试图弄清楚如何解决这个问题。
Paul Lammertsma

@PaulLammertsma只需-q在package-cleanup中添加选项即可。这也发生在我身上:D
Ealhad 2015年

1
package-cleanup -q --leaves | xargs -r -l1 yum -y remove如果package-cleanup输出为空,将无提示地跳过xargs,这对于诸如ansible,chef,puppet,vagrant之类的自动化脚本很有用
Ilya Sheershoff

这就是答案。
xCovelus

1

在较新的Fedoras中dnf,您可以dnf repoquery --unneeded代替package-cleanup --leaves

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.