删除未使用的包

删除未使用的包

我在 Fedora 17 上安装了一些 rpm 软件包。有些软件包有很多依赖项。我已经删除了一些软件包,但我忘记使用 yum remove 删除未使用的依赖项。

我现在该怎么做?

答案1

如果你安装一个包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!

答案2

从Fedora 18开始,你可以简单地使用这个命令

yum autoremove

或者

yum remove --setopt=clean_requirements_on_remove=1

您还可以对特定包应用自动删除命令

yum autoremove <package>

这将从已安装的包中删除不需要的依赖项。autoremove很大程度上是 的别名,remove --setopt=clean_requirements_on_remove=1但由于某些原因,仍然没有记录。

答案3

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

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

$ package-cleanup --leaves

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

$ package-cleanup --leaves --all

您还将获得不被视为库的包,但是这个列表将会太长,以至于它可能没有用处。

答案4

在较新的 Fedora 中dnf,您可以dnf repoquery --unneeded使用package-cleanup --leaves.

相关内容