删除未使用的包

73 yum rpm

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

我现在怎么办?

小智 120

如果你安装一个包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!
Run Code Online (Sandbox Code Playgroud)

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

然后您可以撤消该交易:

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

  • +1 很棒的解决方案,而且很容易做到。我从未听说过“百胜历史”。谢谢! (15认同)
  • 如果 89 依赖于 java_cup 或 libgcj 呢? (8认同)
  • 这不应该是一个公认的答案吗? (2认同)

小智 80

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

yum autoremove
Run Code Online (Sandbox Code Playgroud)

或者

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

您还可以对特定包应用 autoremove 命令

yum autoremove <package>
Run Code Online (Sandbox Code Playgroud)

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

  • 命令`yum remove --setopt=clean_requirements_on_remove=1` 在centOS 中对我有用 (5认同)
  • 对我来说,`package-cleanup --leaves &amp;&amp; yum autoremove` 删除了 libvorbis,因此互联网广播流“Ices”应用程序死了——可能是因为它不在 repos 中,我不得不编译它。 (2认同)

lar*_*sks 44

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

您可以使用包中的package-cleanup命令yum-utils在包依赖关系图中列出“叶节点”。这些是可以在不影响其他任何东西的情况下删除的包:

$ package-cleanup --leaves
Run Code Online (Sandbox Code Playgroud)

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

$ package-cleanup --leaves --all
Run Code Online (Sandbox Code Playgroud)

您还将获得不被视为库的软件包,但此列表将很长,可能没有用处。

  • APT(Debian 相当于 Yum)有一个“自动安装包”的概念。如果一个包没有被明确请求而只是作为一个依赖项被拉进来,如果依赖它的包被全部删除,它将被自动删除(带有确认提示)。没有这种类型的迹象,确实不容易。 (10认同)

小智 10

我把 larsks 的回答往前迈了一步。

$ package-cleanup -q --leaves | xargs -l1 yum -y remove 
Run Code Online (Sandbox Code Playgroud)

这会抓取所有可以在不影响其他任何东西的情况下删除的依赖项,然后删除它们。不如一一通过。

"-q" 在某些打印 "Setting up yum" 的系统上很有用,否则会导致此命令删除 yum。这不是你想要的。

  • `package-cleanup` 在我的机器上输出“Setting up yum”,这导致 Yum 自行删除。我现在正在想办法解决这个问题。 (4认同)

Tho*_*hle 5

在较新的软呢帽dnf,您可以使用dnf repoquery --unneeded作为替代package-cleanup --leaves