“apt-get”和“aptitude”之间的真正区别是什么?(“wajig”怎么样?)

Kev*_*ntu 267 aptitude debian apt package-management

我知道,无论apt-getaptitude是Debian的命令行包管理界面的Linux衍生,用不同的选择,但我还是有点困惑。在幕后,他们不是使用相同的 APT 系统吗?

为什么 Debian 维护这些并行工具?(额外问题:wajig到底是什么?)

Rya*_*son 235

最明显的区别是aptitude提供了终端菜单界面(很像终端中的 Synaptic),而apt-get没有。

仅考虑每个的命令行界面,它们非常相似,并且在大多数情况下,您使用哪个实际上并不重要。两者的最新版本都将跟踪哪些包是手动安装的,哪些是作为依赖项安装的(因此有资格自动删除)。事实上,我相信最近,这两个工具被更新为实际上共享手动和自动安装的软件包的相同数据库,因此您使用 apt-get 安装某些东西然后 aptitude 想要卸载它的情况主要是过去。

有一些细微的区别:

  • aptitude 将自动删除符合条件的软件包,而 apt-get 需要一个单独的命令来执行此操作
  • upgradedist-upgrade的命令已分别重命名为可能更准确的名称safe-upgradefull-upgrade
  • aptitude 实际上不仅执行 apt-get 的功能,还执行其一些配套工具的功能,例如 apt-cache 和 apt-mark。
  • aptitude 的搜索查询语法略有不同(与 apt-cache 相比)
  • aptitude 有为什么为什么不命令来告诉您哪些手动安装的软件包阻止了您可能想要采取的操作。
  • 如果您要执行的操作(安装、删除、更新包)导致冲突,aptitude 可以建议几个潜在的解决方案。apt-get 只会说“对不起,戴夫,我不能让你这样做。”

还有其他一些小的差异,但这些是我能想到的最重要的差异。

简而言之,aptitude 更适合与 Synaptic 和其他更高级别的包管理器前端一起使用。它恰好也有一个类似于 apt-get 的命令行界面。

奖金回合:什么是wajig?

还记得我是如何提到像apt-cache和这样的“配套”工具的apt-mark吗?嗯,有很多,如果你经常使用它们,你可能不记得哪些提供了哪些命令。wajig是该问题的一种解决方案。它本质上是一个调度程序,是所有这些工具的包装器。sudo必要时也适用。当您说 时wajig install foo,wajig 会说“好的,installapt-get管理员提供并需要管理员权限”,然后它会运行sudo apt-get install foo。当您说 时wajig search foo,wajig 会说“好的,searchapt-cache管理员提供并且不需要管理员权限”,然后它就会运行apt-cache search foo。如果你使用 wajig 而不是 apt-get、apt-mark、apt-cache 等,那么你永远不会遇到这个问题:

$ apt-get search foo
E: Invalid operation search
Run Code Online (Sandbox Code Playgroud)

如果您想知道 wajig 在幕后做什么,它使用哪些工具来实现特定命令,它具有--simulate--teaching模式。

我经常使用的两个 wajig 命令是wajig listfiles foowajig whichpkg /usr/bin/foo

  • `aptitude` 也有很棒的 `aptitude search`,您可以将其与 *** 非常强大的 [搜索模式](http://algebraicthunk.net/~dburrows/projects/aptitude/doc/en/ch02s03s05.html)* **。你有“能力重新安装”。您还可以使用 ncurses(终端菜单)界面来*准备复杂的包操作*,例如部分升级、删除一个包、冻结另一个包、升级这个包,然后*您可以在单个操作中执行*...哦,它有一个*交互式冲突解决程序*。 (12认同)
  • @Totor 神牛,使用 aptitude 的 ncurses 接口来准备命令,一劳永逸地卖给了我 aptitude!(经过多年的思考能力是值得做的,但从肌肉记忆中键入 apt-get) (3认同)
  • ...并且`aptitude` 也有`aptitude download package-name` 来获取包.deb 文件! (2认同)
  • 这只是我发现的一件事,它不在 `aptitude` 中,而是在 `apt-get` 中,那就是 `apt-get --compile source package-name`。`apt-get build-dep package-name` 存在,但我认为 `aptitude build-dep package-name` 做得更好。 (2认同)

Gau*_*rav 73

我经常怀疑自己。维基百科强调,主要区别在于 aptitude 具有全屏文本模式(诅咒)界面。您可以使用大多数apt-get命令参数aptitude本身只是一个设计决策,目的是让apt-get用户更容易移动,aptitude反之亦然。

我从未使用过wajig,但文档表明它只是一个脚本,它知道您是向它传递deb文件(当它运行时dpkg)还是一个apt包名称(当它运行时apt-get)。你能不能试一试,看看它是不是这样做的?

当然,真正的区别在于:

gaurav@fern:~$ apt-get moo
         (__) 
         (oo) 
   /------\/ 
  / |    ||   
 *  /\---/\ 
    ~~   ~~   
...."Have you mooed today?"...
gaurav@fern:~$ aptitude moo
There are no Easter Eggs in this program.
Run Code Online (Sandbox Code Playgroud)

  • 不!`aptitude` 有更多。你忘了把无穷无尽的 `-v` 标志放到 `moo` 中。(你可以转到`-vvvvvv`) (54认同)
  • 不要忘记所有重要的 Super Cow Powers,它有 `apt-get` 而 `aptitude` 没有。(在两者上都尝试`--help`) (12认同)

dsp*_*dsp 26

aptitude 是从控制台进行软件包管理的首选程序,用于在 Debian 中进行软件包安装和软件包或系统升级。

以下是该工具及其在 apt-get 上的功能的概述:http : //www.debian.org/doc/FAQ/ch-pkgtools.en.html#s-aptitude

所以,我的建议是 apt-get install aptitude :)

  • [发行说明](http://www.debian.org/releases/squeeze/i386/release-notes/ch-upgrading.en.html#upgradingpackages) 说 apt-get 现在被推荐用于升级挤压。 (2认同)

sta*_*lue 21

aptitude记住哪些包是明确请求的,哪些是由于依赖关系才安装的。当不再需要它们时,它会自动卸载未明确请求的包。

apt-get 处理显式请求的包及其依赖项。

所以更好地使用aptitude,这有助于保持您的系统清洁。

  • `apt-get autoremove` 不会删除仅作为依赖项安装的包,它会删除孤立的依赖项,这是一个细微的区别;它无法判断“叶子”包是有意安装还是作为依赖项安装,因此它会离开它,aptitude 会知道并删除它。 (8认同)
  • 这曾经是正确的,但我知道我的 apt-get 有一个 `apt-get autoremove` 命令,用于删除仅作为依赖项安装的软件包。我不知道这个功能是什么时候添加的,但一个网站表明它可能发生在 Debian Lenny(2010 年 6 月)上。 (4认同)

int*_*ted 12

apt-get,以及各种配套工具,使用的内存比各自的命令行调用少得多aptitude,而且速度要快一些。我很幸运地没有意识到这一点,直到我尝试在具有 32MB 内存的老式奔腾 thinkpad 上升级 debian 安装。运行需要一两个小时的交换抖动apt-get,它成功完成;aptitude在我认为更长的时间后会失败。

这种区别与现代桌面系统类似的东西或多或少无关。


小智 10

基于@Gaurav 的回答,两个包管理器中的复活节彩蛋很有趣!:

siddhartha@siddhartha-dev:~$ apt-get  moo
             (__) 
             (oo) 
       /------\/ 
      / |    ||   
     *  /\---/\ 
        ~~   ~~   
..."Have you mooed today?"...

siddhartha@siddhartha-dev:~$ aptitude  moo
There are no Easter Eggs in this program.
siddhartha@siddhartha-dev:~$ aptitude -v moo
There really are no Easter Eggs in this program.
siddhartha@siddhartha-dev:~$ aptitude -vv moo
Didn't I already tell you that there are no Easter Eggs in this program?
siddhartha@siddhartha-dev:~$ aptitude -vvv moo
Stop it!
siddhartha@siddhartha-dev:~$ aptitude -vvvv moo
Okay, okay, if I give you an Easter Egg, will you go away?
siddhartha@siddhartha-dev:~$ aptitude -vvvvv moo
All right, you win.

                               /----\
                       -------/      \
                      /               \
                     /                |
   -----------------/                  --------\
   ----------------------------------------------
siddhartha@siddhartha-dev:~$ aptitude -vvvvvv moo
What is it?  It's an elephant being eaten by a snake, of course.
siddhartha@siddhartha-dev:~$ aptitude -vvvvvvv moo
What is it?  It's an elephant being eaten by a snake, of course.
siddhartha@siddhartha-dev:~$ aptitude -vvvvvvvv moo
What is it?  It's an elephant being eaten by a snake, of course.
Run Code Online (Sandbox Code Playgroud)

等等。


Ric*_*rri 8

它们提供相同的基本功能:从命令行安装和删除包。

是更详细的比较,发布在Ubuntu Stack Exchange 网站上https : //askubuntu.com/questions/1743/is-aptitude-really-better-than-apt-get/1749#1749


vdb*_*oor 7

正如提到http://pthree.org/2007/08/12/aptitude-vs-apt-get/aptitude有一个非常容易使用的命令行界面。

在幕后,他们不是使用相同的 APT 系统吗?是的。

底层系统不仅仅是apt,而是dpkg。这个系统和RPM一样笨,它只能处理单个包的安装和管理。它跟踪哪些已安装的文件属于哪个包。

apt处理所有单个包的存储库下载、依赖项跟踪等 - 然后使用dpkg. aptitude用不同的界面做同样的事情。


小智 6

apt-get 和 aptitude 都依赖于 APT 库,是的。

请参阅我在 serverfault.com 上的回答

Debian 不是一个单一的实体,有人有不同的意见,aptitude 维护者认为 apt-get 有一些缺点,并希望用 aptitude 构建更好的东西。他改进了为复杂升级场景寻找解决方案的逻辑,为控制台添加了一个 GUI,等等。而且不仅仅是 apt-get 和 aptitude,请参阅我的文章apt-get、aptitude... 为您选择合适的包管理器


小智 6

我不确定这是否仍然成立,但最前沿的 Debian 开发人员 Joey Hess 总是提倡使用 apt-get 的 aptitude。当然,随着软件的发展,事情会发生变化。Apt-get 现在比以前更好地处理依赖项。来自http://lists.debian.org/debian-user/2004/04/msg03138.html

日期:2004 年 4 月 20 日,星期二 22:27:12 -0400 来自:Joey Hess

应该使用 aptitude 而不是 apt-get 或 dselect 的九个理由。

  1. aptitude 看起来就像 apt-get

    如果您运行 'aptitude update' 或 'aptitude upgrade' 或 'aptitude install',它的外观和工作方式与 apt-get 一样,但有一些增强功能。所以没有学习曲线。

    (如果您是 dselect 用户,学习曲线显然不是您的问题之一。)

  2. aptitude 跟踪自动安装的软件包

    无需担心从系统中删除未使用的库和支持包。如果你使用 aptitude 安装所有东西,它会跟踪依赖项单独拉入的包,并在不再需要时删除这些包。

  3. aptitude 明智地处理推荐

    apt-get 的一个长期失败是缺乏对 Recommends 关系的支持。这是一个问题,因为 Debian 中的许多软件包都依赖 Recommends 来引入普通用户通常与软件包一起使用的软件。这是一个并不少见的问题原因,尽管 apt-get 最近变得至少能够提及推荐的软件包,但很容易错过它的警告。

    Aptitude 默认支持Recommends,也可以配置为支持Suggests。它甚至支持在命令行模式下安装推荐的软件包。

  4. 以普通用户身份使用 aptitude 并避免使用软管

    也许您不知道您可以作为普通用户在 gui 模式下运行 aptitude。进行任何您想尝试的更改。如果您陷入真正的混乱,您可以按“q”并退出,您的更改将不会被保存。(Aptitude 还允许您使用 ctrl-u 来撤消更改。)由于它以普通用户身份运行,因此在您告诉 aptitude 执行某些操作之前,您无法控制系统,此时它会提示您输入 root 密码。

  5. aptitude 具有强大的用户界面和搜索功能

    在 aptitude 的分类浏览器及其对 mutt 样式过滤和按名称、描述、维护者、依赖项等搜索包的强大支持之间,您应该能够比以往任何时候使用 aptitude 更快地找到包。

  6. aptitude 可以轻松跟踪过时的软件

    如果 Debian 停止分发一个软件包,apt 会无限期地将它留在你的系统上,没有警告,也没有升级。Aptitude 在其“过时和本地创建的包”部分中列出了此类包,因此您可以了解问题并采取相应措施。

  7. aptitude 有一个到 Debian 任务系统的接口

    Aptitude 允许您使用 Debian 的任务系统,因为它是为使用而设计的。您可以浏览可用任务,选择要安装的任务,然后深入研究并取消选择不需要的任务部分。apt-get 不支持任务,而且 aptitude 甚至比 taskel 这样的专用工具还要好。

  8. aptitude 支持多源

    如果您的 sources.list 配置为使一个包的多个版本可用,aptitude 允许您深入查看可用版本并选择一个非默认版本进行安装。如果包不稳定,只需将其回滚到测试版本。

  9. aptitude 记录其操作

    Aptitude 将其安装、升级和删除的日志包记录到 /varlog/aptitude,这对于找出为什么在昨天的升级后开始出现问题,或者当你删除了一个 partiticlar 包时很有用。

——见害羞的乔

================== 这里还有一个来自 2010 年的较新讨论https://superuser.com/questions/93437/aptitude-vs-apt-get-which-在 StackExchange 上推荐使用的又名正确的工具