Mat*_*hew 8 linux debian package-management ubuntu
我一直在考虑切换到 aptitude,但我听到有人说“如果你已经在使用 apt-get,你应该等到下一次安装再切换。” 为什么人们会这样说?这会导致什么样的问题(如果有的话)?
apt-get 和 aptitude 是不同的 UI,它们是同一个包管理系统APT(高级打包工具)的一部分。例如,两者都使用 配置/etc/apt/apt.conf
,都使用相同的文件空间和格式来表示包状态,并使用相同的文件空间来存储下载的 .debs。
它们的不同之处在于它们的内部规则系统来表示包之间的潜在冲突,如何解决它们(比如在apt-get dist-upgrade
vs.期间aptitude full-upgrade
),以及如何在与用户交互时表达这些冲突。一般来说,在棘手的情况下,两者都可能做错事,但 apt-get 比 aptitude 更容易出错。
这里已经有很多好的建议,但让我补充一件没人提到的事情。如果您决定切换,则可能需要运行此命令,具体取决于您的操作apt-get
:
aptitude keep-all
Run Code Online (Sandbox Code Playgroud)
该命令重置了aptitude
对哪些包是孤立的并且应该被删除的感觉。
这就是它有时有用的原因:现在有一段时间,apt-get
和aptitude
都会跟踪作为其他东西的依赖项自动安装的包。因此,例如,如果您安装mpd
,您可能会lib-so-and-so
成为依赖项。他们这样做,所以如果你以后删除mpd
,lib-so-and-so
也会被删除。但是aptitude
,以apt-get
不同的方式处理这种清理。aptitude
立即尝试删除所有孤立的依赖项;但apt-get
只是建议你跑去apt-get autoremove
清理。(所有这一切背后的逻辑是,你只得到了mpd
需要它的库。如果你不保留mpd
,你就不应该再需要这个库。如果另一个包仍然依赖它,那么两者aptitude
和apt-get
会知道这一点,而不是尝试删除库。)
我的意思是什么?好吧,如果您一直看到要运行的持续轻推apt-get autoremove
并切换到aptitude
,那么您第一次尝试安装某些东西时可能会感到震惊。aptitude
将立即尝试删除所有这些孤儿。一般来说,这会很好(他们毕竟是孤儿,没有必要),但有一个复杂的情况。桌面元包都涉及一个复杂的依赖链,其中每个单独的程序都作为虚拟包包装器的依赖项被拉入。例如,如果您因为安装了gnome
软件包而安装了 Gnome ,那么您所有的普通桌面程序都作为依赖项安装。如果您卸载了这些程序中的一个(例如 Ekiga 或 Gedit),那么在aptitude
桌面的其余部分也应该被删除。请注意,在删除内容之前aptitude
总是询问,但人们经常在没有阅读的情况下输入“Y”。根据我的经验,这是 Debian 新手最常见的抱怨/困惑。
两条一般性建议:
aptitude
或的输出apt-get
。aptitude -s safe-upgrade
或进行试运行aptitude -s install foo
。该-s|--simulate
标志是你的朋友。