在现代Linux系统中,aptitude和apt-get都是常用的软件包管理工具。然而,对于哪个更优秀的问题,没有一个明确的答案。aptitude和apt-get各有其优点和特点。 aptitude是一个功能强大且灵活的工具,它提供了更多高级功能和用户友好的界面。它可以处理复杂的依赖关系,并能够智能地解决软件包冲突。此外,aptitude还提供了一些方便的命令和选项,使软件包的管理更加简单和高效。 另一方面,apt-get是一个简单而直接的工具,它执行速度快,并且在终端中使用起来非常方便。它的命令和选项相对较少,因此对于那些只需要基本功能的用户来说,apt-get可能更适合他们的需求。 总之,无论是aptitude还是apt-get,它们都是可靠的软件包管理工具,选择哪个取决于个人偏好和使用场景。重要的是熟悉它们的功能和特点,并根据自己的需求做出明智的选择。

当我刚开始使用Ubuntu时,使用aptitude是一种流行的方式,有人声称它比apt-get有一些改进。我说得对吗?现在apt-get已经“迎头赶上”aptitude了,使用哪个几乎没有太大区别(尽管最好选择其中一个并坚持使用)?
此外,考虑到aptitude将从默认的Ubuntu安装中删除,每个人都应该回归到apt-get,特别是在指导对CLI感兴趣的新用户时吗?

1如今的时髦孩子们使用apt代替这两个命令:https://itsfoss.com/apt-vs-apt-get-difference/ - tatsu
1有时候,aptitude why非常方便,并且没有真正的等价物 - Nathaniel M. Beaver
6个回答

根据我的观察,在10.04版本中,aptitude和apt-get的主要区别是:
1.

aptitude 添加了明确的每个软件包标志,指示软件包是否是自动安装以满足依赖关系:您可以操作这些标志(aptitude markautoaptitude unmarkauto)来改变 aptitude 对待该软件包的方式。

apt-get 也会跟踪相同的信息,但不会明确显示。可以使用 apt-mark 来操作这些标志。

2.

aptitude 每次删除一个已安装的软件包时,都会提供删除未使用的软件包的选项,而 apt-get 只有在明确要求使用 apt-get autoremove 或指定 --auto-remove 时才会执行。

3.

aptitude 是一个单一的命令行前端,用于大部分 apt-getapt-cache 的功能。注意:从 16.04 版本开始,有一个包含了最常用命令的 apt 命令,并且还增加了一些额外功能。

4.

apt-cache 的 "search" 不同,aptitude 的 "search" 输出还显示了软件包的已安装/已删除/已清除状态(以及 aptitude 自己的状态标志)。此外,"install" 输出标记了哪些软件包是为了满足依赖关系而被安装的,以及哪些是因为未使用而被删除的。

5.

aptitude 有一个(纯文本)交互式用户界面。

我个人只使用aptitude来进行命令行包管理(从不使用文本界面);我发现它的输出比apt-get/apt-cache更易读。
然而,如果aptitude在Ubuntu上不再是标准的话,那么在指南和教程中就没有其他选择了,只能使用apt-get。
(就个人而言,我对它在10.10版本中消失感到相当失望;尤其是考虑到aptitude相对于apt-get的改进主要在于可用性方面。我猜他们认为那些熟悉命令行的人知道如何恢复aptitude,而那些不使用命令行的人则不会在意...)

11在软件包名称上进行aptitude搜索,在软件包名称+描述上进行apt-cache搜索。(我们只需要在每个教程中以sudo apt-get install aptitude开始) - LassePoulsen
3
  1. 然而,apt-get会告诉你有未使用的软件包,并且你可以使用apt-get autoremove命令将它们删除。
- sepp2k
2才能的一个缺点是无法像apt-get一样考虑固定。 - txwikinger
4Aptitude 正确读取 /etc/apt/preferences(以及其中的 pinning),但是目前忽略了 /etc/apt/preferences.d/。这是一个已知的错误,所以有希望很快修复。 - Riccardo Murri
1你介意我把所有的反引号都去掉吗?那些(视觉上的)干扰让这个回答变得难以阅读,尽管它是一个很好的答案。 - Roger Pate
@Roger:谢谢你的建议,我只保留了那些将两个或更多单词组合在一起的部分。如果有需要,请随意进行进一步编辑。 - Riccardo Murri
3Aptitude有一个选项可以轻松检索更改日志:aptitude changelog package-name。我不知道在apt-get中是否有这样的功能。 - Lekensteyn
@RiccardoMurri 方便参考,此问题已在版本0.6.3-3.2于2010年10月18日进行修复。 - underscore_d
1aptitude中,有没有类似于apt-get autoremove的等效命令?我有一些旧内核,apt-get autoremove建议我删除它们,但我发现在aptitude中没有删除它们的方法。 - Alexey
@sepp2k 看起来apt-get的行为在这方面与aptitude的行为不同,可以参考Alexey上面的评论和问题http://askubuntu.com/questions/889771/how-to-make-aptitude-clean-up-old-kernels。 - Jonas Dahlbæk

我猜现在这是个人选择的问题。对我来说,键入aptitude searchapt-cache search更有意义,我喜欢它在搜索结果中直接告诉我哪些软件包已安装,而不必运行dpkg -l

2+1 同意能够在搜索过程中查看应用程序是否已安装非常方便。虽然我发现 apt-cache search 比 aptitude search 更快。 - Mark Davidson
我使用一个两个字母的bash别名来进行apt-cache搜索,否则我可能也会使用aptitude search - belacqua
我注意到apt-get的搜索比aptitude更彻底。后者似乎只查看软件包名称,而前者还会搜索描述,我想是这样的。例如,试着搜索build-essential - Sparhawk

之前的apt-get无法正确管理依赖关系,导致即使卸载了使用它们的软件包,系统中仍然会存在孤立的依赖项。但现在不再是这样了,要删除孤立的依赖项,请使用以下命令。
sudo apt-get autoremove

aptitude一直能够正确执行此操作并更好地跟踪依赖关系,但现在两个软件包管理器都可以完成这项工作。
在Ubuntu上,最好使用apt-get,因为它得到了公司的支持和认可;而在Debian上,我会使用aptitude。

2最后一句话不准确。在Ubuntu上,aptitude得到了很好的支持,并且默认安装。在这方面,Ubuntu和Debian没有任何区别。 - loevborg
3在10.10版本中,它将从默认安装中移除。 - keios
1根据我的经验,“aptitude”在跟踪已安装的依赖关系方面一直表现得较差。它往往在删除一个程序时会误删与之无关的依赖项,从而导致其他程序出现问题。 - Izkata
aptitude 中是否有类似于 apt-get autoremove 的功能?我有一些旧内核需要移除,但是我发现在 aptitude 中没有相应的方法可以移除它们。 - Alexey
1@Alexey 你可以使用 aptitude remove '~g' 命令。注意,当使用 aptitude 删除软件包时,它会自动提供删除未使用的依赖项的选项。 - alexia
@nyuszika7h,aptitude search '~g' 只找到了 linux-signed-image,我可以通过运行 aptitude install 来删除它。之后,aptitude search '~g' 没有找到其他任何东西,但是 apt autoremove 建议删除 linux-headerslinux-imagelinux-image-extra... - Alexey

除了其他答案之外,值得注意的是,apt-get在执行简单操作时经常失败,并且它无法处理依赖版本不匹配或损坏的软件包(尽管它声称可以使用apt-get install -f修复损坏的软件包,但我从未在我的整个生活中见过它起作用)。
出于某种原因,我仍然默认使用apt-get,但当它遇到问题时,我通常会用aptitude来解决这些问题,aptitude似乎从未遇到apt-get的诸多问题。

我也有类似的解决冲突的经验,才能在这方面是一个更好的选择。 - Volkan Yazıcı
1就记录而言,我刚刚看到 "apt-get install -f" 修复了我的系统。 aptitude 出了问题,这个命令解决了它,然后我做的第一件事就是安装 aptitude :) 选择是一件好事(tm)。 - teknopaul

我会说,在我的个人经验中,aptitude和apt-get的功能非常相似。
我想到的主要区别可能会影响用户选择的是,aptitude提供了一个ncurses界面,并且它提供了安全升级和完全升级的选项,这些都很方便。
就个人而言,我总是使用apt-get,并建议新用户也使用apt-get。正如你所说,由于aptitude在Ubuntu中默认被移除,这仍然似乎是最好的建议。 如果他们确实想要使用aptitude,他们将需要知道如何使用apt-get来安装aptitude :)

请问你能解释一下什么是ncurses界面吗? - 8128
@fluteflute: ncurses是一个用于实现文本用户界面的库。http://en.wikipedia.org/wiki/Ncurses - dierre

在服务器上,我更喜欢使用Atitude,因为它提供了一个相当不错的界面,可以查看软件包的变更日志、选择性升级等等。不过,apt-get更快一些,如果我只是想更新所有内容而不想麻烦太多,我总是会使用它。