apt-get和aptitude有什么区别?


56

我不明白为什么在最小限度的安装中就有两个不同的程序来安装软件。他们不做同样的事情吗?有很大的不同吗?我到处都读过关于使用apt-get的知识,但是我仍然不知道有什么区别

Answers:


48

aptitude是dpkg的包装,就像apt-get / apt-cache一样,但是它是用于搜索/安装/删除/查询的一站式工具。apt可能无法提供的一些示例:

$ aptitude why libc6
i   w64codecs Depends libc6 (>= 2.3.2)
$ aptitude why-not libc6
Unable to find a reason to remove libc6.

$ aptitude show libc6
Package: libc6
State: installed
Automatically installed: no
Version: 2.9-4ubuntu6
Priority: required
Section: libs
Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
Uncompressed Size: 12.1M
Depends: libgcc1, findutils (>= 4.4.0-2ubuntu2)
Suggests: locales, glibc-doc
Conflicts: libterm-readline-gnu-perl (< 1.15-2), 
tzdata (< 2007k-1), tzdata-etch, nscd (< 2.9)
Replaces: belocs-locales-bin
Provides: glibc-2.9-1
Description: GNU C Library: Shared libraries
 Contains the standard libraries that are used by nearly all programs 
 on the system. This package includes shared versions of the standard 
 C library and the standard math library, as well as many others.

10
更不用说:$ aptitude changelog bash
pgs

其他的技巧,aptitude即使是最新的,apt也无法做到:aptitude search '~i linux'搜索linux名称或描述已安装的软件包;aptitude search '~o'列出过时的软件包(已由任何存储库不再提供的已安装软件包);aptitude search '!~M ~i'显示未标记为自动安装的软件包;aptitude search '~i lib.*-dev'显示已安装的开发库,您可以searchmarkautounmarkauto标记这些软件包为自动或手动安装。
Mikko Rantalainen

44
mikeage@linode ~$ aptitude -h | tail -n 1
              This aptitude does not have Super Cow Powers.
mikeage@linode ~$ apt-get -h | tail -n 1
                   This APT has Super Cow Powers.
mikeage@linode ~$ aptitude moo
    There are no Easter Eggs in this program.
mikeage@linode ~$ apt-get moo
         (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
...."Have you mooed today?"...
mikeage@linode ~$ aptitude -v moo
There really are no Easter Eggs in this program.
mikeage@linode ~$ aptitude -vv moo
Didn't I already tell you that there are no Easter Eggs in this program?
mikeage@linode ~$ aptitude -vvv moo
Stop it!
mikeage@linode ~$ aptitude -vvvv moo
Okay, okay, if I give you an Easter Egg, will you go away?
mikeage@linode ~$ aptitude -vvvvv moo
All right, you win.

                               /----\
                       -------/      \
                      /               \
                     /                |
   -----------------/                  --------\
   ----------------------------------------------
mikeage@linode ~$ aptitude -vvvvvv moo
What is it?  It's an elephant being eaten by a snake, of course. 

19

当前使用Debian安装程序中的官方工具,并建议发行说明aptitude

Aptitude提供了curses界面(在运行时不带任何参数的情况下)和命令行界面,该界面几乎可以完成apt-cache/ 做的所有事情apt-get。它还具有更好的依赖性解析器,可让您在多个解决方案之间浏览。即使使用命令行版本,您也可以与建议的解决方案进行交互并给出补充命令或提示(例如安装或删除另一个建议的软件包)。

但是aptitude基于libapt库(它不是dpkg的直接包装),因此它取决于apt软件包,因此如果没有apt-get(在apt软件包中也是如此)就无法安装aptitude。

$ dpkg --status aptitude| grep Depends
Depends: libapt-pkg-libc6.9-6-4.7, [...]
$ dpkg --status apt|grep Provides
Provides: libapt-pkg-libc6.9-6-4.7
$ dpkg --search /usr/lib/libapt-pkg-libc6.9-6.so.4.7 /usr/bin/apt-get
apt: /usr/lib/libapt-pkg-libc6.9-6.so.4.7
apt: /usr/bin/apt-get

要了解有关apt / dpkg / aptitude如何交互的更多信息,可以查看Daniel Aprows(aptitude的主要作者)制作图表。另一幅图显示了各种软件包管理工具存储的信息:apt和dpkg状态文件的映射

您还可以阅读我的文章apt-get,aptitude,...为您选择合适的软件包管理器


7

aptitude记住您故意安装了哪些软件包,以及哪些软件包已自动安装以满足相关性。删除软件包功能后,将删除那些自动安装的软件包,以使您的系统保持整洁。apt-get不是那么聪明。

aptitude一旦对不同版本的软件包使用不同的存储库,它将迅速成为必不可少的工具。假设您正在使用backports.org或诸如debian-multimedia.org之类的非官方存储库。然后aptitude将显示(在特定软件包的详细信息页面的底部)可用的版本号,并允许您选择一个。

如果您遇到由于使用非官方存储库而导致程序冲突的情况,您将在顶部看到“ Broken:...”。您可以输入l〜b(限制/标志/断开),然后获取相互冲突的软件包列表。使手动解决冲突变得更加容易。

此外,您可以使用“ l”来限制包裹清单。假设您正在寻找以“ openoffice ” 开头的软件包,然后按“ l”并键入“ ^openoffice”(这是一个正则表达式),那么您只会看到这些软件包。从菜单中选择一个“扁平包装清单”,您将很快达到目标。

完整的手册非常大,为您提供了更多的过滤器和可能性。即使您不知道它们aptitude是否可以代替它们apt-get,也可以将其与常见参数一起使用,例如:

aptitude install ... (install or upgrade a package)
aptitude remove ... (remove the binary portions of a package but preserve your /etc configuration)
aptitude purge ... (remove the package completely including your configuration)

2
实际上,从Lenny开始,apt-get还会跟踪仅作为您明确要求的依赖项安装的软件包。我本人使用aptitude,但apt-get autoremove现在删除了已安装的软件包,这些软件包是从那时以来已删除的软件包的依赖项。
Telemachus

Nowdays你也可以只用apt它可以做的东西,混合apt-get,并apt-cache用来做。例如,apt search foo将列出foo名称或描述中包含的软件包。apt install foo将安装名为的软件包(foo如果可用),apt policy foo并将列出软件包的当前安装版本和所有可用版本foo
Mikko Rantalainen

aptitude仍然可以做多apt,但平淡apt是经常要快得多。
Mikko Rantalainen

5

除了在aptitude没有参数的情况下运行时提供漂亮的控制台UI之外,它还将各种apt-*命令(和dselect)组合到一个实用程序中。

使用apt-get搜索并安装软件包:

apt-cache search somepkg
apt-get install somepkg

..但有才能,它是相同的命令:

aptitude search somepkg
aptitude install somepkg

aptitude确实具有一些其他功能,例如aptitude changelog somepkg和持有软件包(阻止它们升级)之类的东西-通过其他命令/方法无法实现的任何事情,它更加统一且易于使用。


3
太糟糕了,它没有等效的“ apt-cache策略”。
hayalci

4

如您所知,在安装软件包时,如果它需要其他软件包(依赖项),它们也将被下载和安装。aptitude会在安装时跟踪已安装的aptitude随附的软件包,因此,当您删除后者的aptitude时,将要求您删除其他(现已未使用)的“孤立”依赖项。如果删除“ main”软件包,apt-get会将它们静默保存在系统中。

看起来最新版本的apt-get具有类似的功能:http : //www.psychocats.net/ubuntu/aptitude


aptitudeapt实际上不保留已安装的软件包列表作为任何给定软件包的依赖项。它仅跟踪软件包是手动安装还是自动安装。并且,如果某个软件包已被标记为自动安装,并且没有其他软件包依赖或推荐该软件包,则将使用apt autoremove或将其删除aptitude dist-upgrade
Mikko Rantalainen

3

最大的区别是,aptitude被设计为交互式的,而apt工具更适合脚本工作。您可以使用后者,即apt工具,以交互的方式很好地工作,需要付出更多的努力才能获得aptitude提供的相同结果。如果由于某种原因而不得不只选择一种工具,那么您需要决定要在软件包管理中投入多少精力。


1

资质的严重优势之一是其计算依存关系的能力。首先,它可以处理复杂的相互依赖关系,而无需您自己干预,这往往会导致失败。但是,如果您不喜欢它提供给您的解决方案(它将对自己的解决方案进行评分,以证明其认为的出色程度),则可以要求它放弃并提出另一种解决方案来解决冲突。

它确实做了一些很棒的软件包管理。


1

最大的区别是:键入不带任何参数的“智能”。

它为您提供了一个基于文本的用户界面,您可以使用keybord进行搜索/导航等。查看有关依赖项,反向依赖项,包的所有可用版本的信息,并且您可以从该屏幕上对它们进行任何包管理器操作。

您可以按“ g”查看更改,必要时修改软件包的添加和删除,并应用所有待处理的操作。

通过ssh连接或普通的旧终端进行软件包管理的一种出色的可视化方式。

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.