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


256

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

为什么Debian维护这些并行工具?(奖金问题:瓦吉格到底是什么?)


我知道它不是您问题的正确答案,但是为什么您不能尝试突触?它非常用户友好,并会自动下载并安装依赖项。您的系统上没有gnome吗?
Hemant 2010年

我有偏见,但我认为Ubuntu SE网站上的这个问题可能是相关的。
David Z


@Wim因为这个问题的Wajig部分,我决定将244合并到这个问题中,而不是反过来
xenoterracide 2010年

1
值得注意的是,已将aptitude从下一版本的Ubuntu的默认安装中删除(尽管之后始终可以使用apt-get安装它)
Rob Cowell

Answers:


223

最明显的区别是aptitude提供了一个终端菜单界面(非常类似于终端中的Synaptic),而apt-get没有。

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

有一些细微的差异:

  • aptitude将自动删除符合条件的软件包,而apt-get则需要一个单独的命令来删除它
  • 升级 vs. dist-upgrade的命令已经适当地重命名为分别可能更准确的名称安全升级完整升级
  • aptitude实际上不仅执行apt-get的功能,而且还执行其一些配套工具,例如apt-cache和apt-mark。
  • aptitude用于搜索的查询语法略有不同(与apt-cache相比)
  • aptitude具有“ 为什么”和“ 为什么”命令,告诉您哪些手动安装的软件包阻止了您可能要执行的操作。
  • 如果您要执行的操作(安装,删除,更新软件包)引起冲突,则aptitude可能会建议一些潜在的解决方案。apt-get只会说“对不起Dave,我不能让你这样做。”

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

简而言之,aptitude更恰当地属于Synaptic和其他更高级别的软件包管理器前端类别。它恰好也有一个类似于apt-get的命令行界面。

红利回合:什么是瓦吉格?

还记得我提到过那些“伴侣”工具,如apt-cache和apt-mark吗?嗯,有一堆,如果您经常使用它们,您可能会不记得哪个提供了哪些命令。wajig是解决该问题的一种方法。本质上,它是一个调度程序,是所有这些工具的包装器。必要时它也适用sudo。当您说时wajig install foo,wajig会说“确定,install由ok 提供,apt-get并且需要管理员特权”,它就会运行sudo apt-get install foo。当您说时wajig search foo,wajig会说“确定,search是由apt-cache管理员提供的,不需要管理员特权,”它将运行apt-cache search foo。如果您使用wajig而不是apt-get,apt-mark,apt-cache等,那么您将永远不会遇到这个问题:

$ apt-get search foo
E: Invalid operation search

如果您想知道Wajig在幕后正在做什么,它在执行特定命令时使用了哪些工具,它具有--simulate--teaching模式。

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


我在使用智能方面遇到的一个大问题是,它需要很长时间才能在软件包名称(例如,aptitude install linux-imtab)上获得制表符的补全,而对于apt-get来说却非常快。apt-get家庭中似乎存在一些缺少能力的缓存。
levesque 2012年

12
aptitude也有真棒aptitude search,你可以使用非常强大的搜索模式。你有aptitude reinstall。您还可以使用ncurses(终端菜单)界面来准备复杂的软件包操作,例如部分升级,删除一个软件包,冻结另一个软件包,升级该软件包,然后可以在单个操作中执行 ...哦,它有一个交互式冲突解决程序
Totor

3
@Totor圣牛,使用aptitude的ncurses界面准备命令,这一次就把aptitude卖给了我!(经过多年的思考,才智是值得做的,但要从肌肉记忆中键入apt-get)
TJ Ellis

2
...并且aptitude还必须aptitude download package-name获取包.deb文件!
Totor

2
我发现的不是aptitude但存在的只是一件事apt-get,那就是apt-get --compile source package-nameapt-get build-dep package-name存在,但我认为aptitude build-dep package-name做得更好。
Anders 2014年

71

我经常想知道自己。Wikipedia强调,主要区别是aptitude具有全屏文本模式(curses)界面。您可以将大多数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.

52
没有!aptitude有更多的。您忘记了将无尽的-v标记置于moo。(您可以进入-vvvvvv
Umang 2010年

12
不要忘记所有apt-get具有但aptitude没有的重要的超级牛力量。(--help两者都尝试)
derobert

lmao。即使@ryan的答案要复杂得多,这也是一个有趣的答案;)
Michael Trouw 2015年

26

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

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

因此,我的建议是仅安装安装才能:)


2
发行说明说apt-get是现在建议在资质进行升级挤。
jrdioko

1
是的,但仅此而已。否则,它们被认为是相等的,但是比aptitude拥有许多更高级的功能,例如搜索和全屏模式apt-get
Anders 2014年

由于某种原因,使用了aptitude来安装emacs,并且不看它就删除了gdm!因此,目前将使用apt-get,但对智能非常好奇。
TomFirth 2014年

20

aptitude记住哪些软件包是显式请求的,哪些软件包仅是由于依赖而安装的。当不再需要不再明确要求的软件包时,它将自动卸载。

apt-get 将显式请求的程序包及其依赖项视为相同。

因此,更好地使用aptitude它有助于保持系统清洁。


4
这曾经是真的,但是我知道我的apt-get有一个apt-get autoremove命令可以删除仅作为依赖项安装的软件包。我不知道何时添加了此功能,但是一个网站暗示Debian Lenny可能会发生这种情况(2010年6月)。
加拉夫

8
apt-get autoremove不删除仅作为依赖项安装的软件包,而是删除孤立的依赖项,这是细微的差别;它无法判断是否安装了“叶子”软件包是出于意图还是依赖关系,因此它将其留给了aptitude知道并删除了该软件包。
2010年

我卖了!还有其他一些不错的东西,aptitude但这无疑是一项杀手级功能。
iconoclast

12

apt-get以及各种配套工具所使用的内存比各自的命令行调用显着减少aptitude,并且速度更快。直到我尝试在具有32MB内存的Wizened老奔腾ThinkPad上升级debian安装之前,我一直没有意识到这一点。运行一次或两个小时的交换更改apt-get即可成功完成;aptitude在我认为更长的时间后会失败。

这种区别在类似于现代台式机系统的任何事物上或多或少都没有关系。


9

以@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.

等等。



7

如前所述,http://pthree.org/2007/08/12/aptitude-vs-apt-get/aptitude具有易于使用的命令行界面。

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

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

apt处理所有单个软件包的资源库下载,相关性跟踪等,然后使用进行安装dpkgaptitude用不同的界面执行相同的操作。


6

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

在serverfault.com上查看我的答案

Debian不是一个单一的实体,有人的意见不同,并且能力维护者认为apt-get有一些缺点,并希望用能力来构建更好的东西。他改进了逻辑,以找到用于复杂升级方案的解决方案,为控制台添加了GUI,等等。并且不仅有apt-get和aptitude,还有我的文章apt-get,aptitude……为您选择合适的软件包管理器


6

我不确定这种情况是否还会持续,但是前沿的Debian开发人员Joey Hess总是提倡在apt-get方面比较聪明。当然,随着软件的发展,事情会发生变化。现在,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. 才能看起来就像apt-get

    如果您运行“ aptitude更新”或“ aptitude升级”或“ aptitude安装”,它的外观和工作方式就像apt-get一样,但有一些增强。因此没有学习曲线。

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

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

    不必再担心从系统中删除未使用的库和支持软件包。如果您使用aptitude安装所有组件,它将仅跟踪依赖项引入了哪些软件包,并在不再需要这些软件包时将其删除。

  3. 才能明智地处理建议

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

    Aptitude默认情况下支持“推荐”,也可以配置为支持“建议”。在命令行模式下使用时,它甚至支持安装推荐的软件包。

  4. 以普通用户的身份使用aptitude,避免占用系统

    也许您不知道可以像普通用户一样在gui模式下运行aptitude。进行任何您想尝试的更改。如果您陷入混乱,可以按“ q”并退出,您的更改将不会保存。(Aptitude还使您可以使用ctrl-u撤消更改。)由于它是以普通用户身份运行的,因此,在您告诉aptitude做某事之前,您无法对系统进行软管处理,此时它将提示您输入root密码。

  5. aptitude具有强大的UI和搜索功能

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

  6. 才智使跟踪过期软件变得容易

    如果Debian停止分发软件包,则apt会不确定地将其保留在您的系统上,没有警告,也没有升级。Aptitude在其“过时的和本地创建的软件包”部分中列出了此类软件包,因此您可以被告知该问题并采取相应措施。

  7. aptitude具有Debian任务系统的界面

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

  8. 资质支持多种来源

    如果您将sources.list配置为可提供一个软件包的多个版本,则aptitude可让您向下钻取以查看可用版本并选择要安装的非默认版本。如果软件包不稳定,只需将其回滚到测试中的版本即可。

  9. 才能记录其操作

    它会安装,升级和删除/ aplog日志包,并将其安装到/ varlog / aptitude,这对于确定为什么昨天升级后事情开始中断或删除partiticlar软件包很有用。

-见害羞的乔

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.