从 apt-get 切换到 aptitude 会导致问题吗?

Mat*_*hew 8 linux debian package-management ubuntu

我一直在考虑切换到 aptitude,但我听到有人说“如果你已经在使用 apt-get,你应该等到下一次安装再切换。” 为什么人们会这样说?这会导致什么样的问题(如果有的话)?

Cha*_*art 8

apt-get 和 aptitude 是不同的 UI,它们是同一个包管理系统APT(高级打包工具)的一部分。例如,两者都使用 配置/etc/apt/apt.conf,都使用相同的文件空间和格式来表示包状态,并使用相同的文件空间来存储下载的 .debs。

它们的不同之处在于它们的内部规则系统来表示包之间的潜在冲突,如何解决它们(比如在apt-get dist-upgradevs.期间aptitude full-upgrade),以及如何在与用户交互时表达这些冲突。一般来说,在棘手的情况下,两者都可能做错事,但 apt-get 比 aptitude 更容易出错。

  • 一个很好的,明确的答案。另一个细节是它们如何/何时删除自动安装的依赖项。`aptitude` 会立即删除它们,但 `apt-get` 只会提示你输入命令 `apt-get autoremove` 来删除它们。一般来说,他们会想要删除相同的项目。但是,请参阅此链接以了解他们对此持不同意见的复杂案例:http://forums.debian.net/viewtopic.php?f=10&t=49589&start=0 (2认同)

Tel*_*hus 5

这里已经有很多好的建议,但让我补充一件没人提到的事情。如果您决定切换,则可能需要运行此命令,具体取决于您的操作apt-get

aptitude keep-all
Run Code Online (Sandbox Code Playgroud)

该命令重置了aptitude对哪些包是孤立的并且应该被删除的感觉。

这就是它有时有用的原因:现在有一段时间,apt-getaptitude都会跟踪作为其他东西的依赖项自动安装的包。因此,例如,如果您安装mpd,您可能会lib-so-and-so成为依赖项。他们这样做,所以如果你以后删除mpdlib-so-and-so也会被删除。但是aptitude,以apt-get不同的方式处理这种清理。aptitude立即尝试删除所有孤立的依赖项;但apt-get只是建议你跑去apt-get autoremove清理。(所有这一切背后的逻辑是,你只得到了mpd需要它的库。如果你不保留mpd,你就不应该再需要这个库。如果另一个包仍然依赖它,那么两者aptitudeapt-get 会知道这一点,而不是尝试删除库。)

我的意思是什么?好吧,如果您一直看到要运行的持续轻推apt-get autoremove并切换到aptitude,那么您第一次尝试安装某些东西时可能会感到震惊。aptitude将立即尝试删除所有这些孤儿。一般来说,这会很好(他们毕竟是孤儿,没有必要),但有一个复杂的情况。桌面元包都涉及一个复杂的依赖链,其中每个单独的程序都作为虚拟包包装器的依赖项被拉入。例如,如果您因为安装了gnome软件包而安装了 Gnome ,那么您所有的普通桌面程序都作为依赖项安装。如果您卸载了这些程序中的一个(例如 Ekiga 或 Gedit),那么在aptitude桌面的其余部分也应该被删除。请注意,在删除内容之前aptitude 总是询问,但人们经常在没有阅读的情况下输入“Y”。根据我的经验,这是 Debian 新手最常见的抱怨/困惑。

两条一般性建议:

  1. 对任何事情说“是”之前,请务必仔细阅读aptitude或的输出apt-get
  2. 请记住,您始终可以使用aptitude -s safe-upgrade或进行试运行aptitude -s install foo。该-s|--simulate标志是你的朋友。