我在 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
.