![Pacman 的包管理策略](https://linux22.com/image/42722/Pacman%20%E7%9A%84%E5%8C%85%E7%AE%A1%E7%90%86%E7%AD%96%E7%95%A5.png)
自从我将我最喜欢的发行版切换到 Gentoo 以来,我非常熟悉以下安装和删除软件包的模式:
- 安装一堆功能几乎相同的应用程序来尝试一下:
emerge <package>
。此命令安装该软件包,并将该软件包标记为显式安装。 - 请尝试一下并删除那些我不喜欢的(并希望保留一两个满足我的需求)
emerge --deselect <package>
:。此命令从显式安装的应用程序列表中删除该软件包,但不卸载该软件包。 - 最后删除我的系统上不需要的所有内容:
emerge --depclean
。此命令删除所有 (1) 非系统软件包、(2) 未显式安装以及 (3) 不是这两者的依赖项的软件包。 - 并可选择检查所有包依赖项是否正常:
revdep-rebuild
。此命令检查所有依赖项并重新安装损坏的软件包。
有时我会查看/var/lib/portage/world
(显式安装的软件包列表)中的条目以查看顶层我使用的应用程序,并使用步骤 2、3 和 4 中的命令删除不再使用的应用程序。
现在我正在尝试学习 Arch,我想知道我是否可以对 Pacman 使用相同的策略?或者另一个可以保持我的系统的策略干净的未使用的软件包?
注:吃豆人罗塞塔对于快速理解事物有很大帮助,但我无法弄清楚 Arch 的等效文件/var/lib/portage/world
。pacman -Qe
据说可以做到这一点,但它包含我发誓我没有明确安装的东西...无论如何,请从策略角度回答这个问题(当然还有命令示例:)
答案1
pacman -Qe
您看到不记得安装过的软件包的最可能原因是它们是base-devel
您安装的“组”(如 等)的一部分。
旁注:我个人也一直在寻找一段时间将包从“显式”切换到“隐式”(甚至反之亦然)而无需重新安装它,甚至需要我显式安装的包来让另一个包工作并转动它成为该包的依赖项(同样无需重新安装)。
答案2
感谢达尔文幸存者回答我已经能够更好地理解 Arch 中的包管理是如何工作的。现在我可以应用与 Gentoo 相同的策略(稍加修改)。问题中命令的“等效项”分别是:
pacman -S <package>
pacman -D --asdeps <package>
pacman -Rs $(pacman -Qqtd)
- 不可用/不需要
Gentoo 中最接近的/var/lib/portage/world
是命令的结果pacman -Qe
。差异:
- 拱门有包组,这基本上是几个包“分组”在一个名称下。安装组后,组中的所有内容都被视为显式安装。
- Arch 没有“系统包”,因此从结果中减少项目
pacman -Qe
实际上会导致重要的包被删除。
答案3
如果我没记错的话
pacman -S package
安装一个包
pacman -Rs package
删除一个包及其所有依赖项——但仅删除那些不会破坏其他包的包以及您未明确安装的包。
查看 pacman 手册页。
不幸的是,我不知道如何检查损坏的包裹。
答案4
您可以在系统上使用 Ansible 等配置管理工具,而不是依赖包管理器来跟踪显式安装的包。我将它用于我自己的几台机器,并且我总是可以仅用两个命令就可以像我的主机一样设置一台机器。