Aptitude vs. apt-get:推荐使用哪种工具(又称“正确”工具)?


94

前一段时间,我读到它aptitude是在基于Debian的系统上安装的首选工具。但是,当您寻找如何管理基于Debian的系统时,很少会提到智能。多数人似乎更喜欢apt-get-对于Debian Wiki页面甚至如此!

因此,我想知道我是否错过了什么。哪个是正确使用的工具?


有趣的是,Ubuntu不再aptitude默认安装。
机械蜗牛

2
对我来说,最重要的区别是,在彻底阅读了文档之后,我找不到通过aptitude获取软件包来源的方法。apt-get source package-name会做到的,但是我没有见过任何类似的才能
EricR 2012年

2
一件事就是aptitude search package-name在天赋上起作用。另一个aptitude why package-name也是有用的,但没有用apt-getaptitude与相比,我的命令行也有所整理apt-get。但是,正如您所注意到的那样,没有aptitude build-dep package-name但没有aptitude source package-name
Anders

Answers:


73

aptitudeapt-get工作一样的许多任务,但最棘手的情况下,如配电升级(apt-get dist-upgradeaptitude full-upgrade),它们有不同的规则和资质的规则几乎总是在实践中,他们不同意更好。

您看到更多关于apt-getover的文档的原因aptitude主要是惯性:aptitude长期以来,它都不是APT的推荐前端,因此许多现有文档尚未更新,并且有很多人认识到aptitudeover 的优点apt-getapt-get反身使用。

最近,我的意思是键入时通常跟apta i而不是a -

后记请注意,apt-getaptitude中使用的规则正在移动目标-正如休伯特(Hubert)在评论中指出的那样,Debian Lenny建议的升级路径现在使用apt-get,而不是aptitude。这反映了这样一个事实,即apt-get跟踪当前程序包的状态少于aptitude,因此无需担心APT状态不是“干净的”,并且因为apt-get规则比以前更聪明。我仍然使用和推荐aptitudeapt-get,但它是一个更细致的建议


6
除此之外,aptitude还可以轻松浏览冲突的可能解决方案,而使用apt-get,通常仅显示一种可能的方式,您要么接受它,要么必须手动进行解决(例如,使用dpkg)。
liori 2010年

20
apt-get确实具有更高的内存效率的优势。对于大多数用户来说,这不太可能引起注意;直到尝试在具有32MB RAM的完整Debian安装上升级软件包时,我才真正意识到这一点。 aptitude每次换球大约要花一个小时 apt-get明显更快。
直觉

4
官方的Debian squeeze文档明确声明aptitude即使先前的升级也支持从Lenny升级,所以我认为这不是唯一的惯性……
Hubert Kario 2012年

@HubertKario-是的,的确如此。我已经更新了答案。
查尔斯·斯图尔特

我只能说apt-get几乎总是抛出错误(Ubuntu服务器12.10、14.04的经验),而aptitude实际上却可以做一些事情。我仍然不了解apt-get仍然存在。
Totty.js 2014年

20

aptitude可以方便地显示您已经在系统上安装的搜索中的哪些程序(借助grep):

aptitude search flash | grep ^i

实际上,aptitude的搜索功能远胜于通过进行搜索的功能grep,因为它支持上下文搜索:

例如,这会找到已安装的软件包名称中带有“ flash”的所有软件包:

aptitude search '~iflash'

等同于“简写形式”的“长形形式” ~i

aptitude search '?installed(flash)'

请注意,默认情况下搜索模式是免费的(未锚定)。要锚定它们,您需要使用锚定模式' ^'(字符串的开头)和/或' $'(字符串的结尾)。

要查找名称以“ ttf”或“ font”开头的所有软件包:

aptitude search '(^ttf|^font)'

(注意:这是针对中的错误的解决方法aptitude,因为的正确正则表达式'^(ttf|font)'无法正常工作-它会找到名称以'ttf'开头或包含 'font'的软件包。)

其他漂亮的aptitude功能:

显示所有名称为“ firmware”的软件包,并且说明中还包含“ wireless”:

aptitude search 'firmware ~dwireless'

或长格式:

aptitude search '?and(?name(firmware),?description(wireless))'

(注意:简而言之,空格分隔的参数在引号内进行“与”运算;如果作为单独的argv []命令行参数传递,则对其进行“或”运算。)

p   atmel-firmware       - Firmware for Atmel at76c50x wireless networking chips.
p   firmware-atheros     - Binary firmware for Atheros wireless cards
...
p   libertas-firmware    - Firmware for Marvell's libertas wireless chip series
p   zd1211-firmware      - Firmware images for the zd1211rw wireless driver

~U 显示所有可以从当前版本升级到新版本的软件包:

# aptitude update ; aptitude versions '~U'
Package virtualbox-4.1:            
i   4.1.18-78361~Debian~squeeze                       100
p   4.1.20-80170~Debian~squeeze     <NULL>            500

显示推荐“ gcc-multilib”的软件包

$ aptitude search '~DRecommends:gcc-multilib'
i   libc6-dev-i386   - Embedded GNU C Library: 32-bit development libraries for AMD64

说明为什么可能需要安装“ fuse-utils”

$ aptitude why fuse-utils
i   xorg           Depends    xterm | x-terminal-emulator
pi  gnome-terminal Provides   x-terminal-emulator
pi  gnome-terminal Recommends gvfs
pi  gvfs           Depends    libgdu0 (>= 2.29.90)
pi  libgdu0        Depends    udisks (< 1.1.0)
pi  udisks         Recommends ntfsprogs
pi  ntfsprogs      Depends    fuse-utils (> 2.5.0)

(此示例显示了自从安装所有“推荐”软件包的Squeeze(?)以来的默认设置所产生的某些疯狂。安装gnome-terminal最终会安装ntfsprogs和fuse-utils,例如egad!而不是内置的NTFS集成,这是可选的,除非他们指定了。)

查找提供服务“ mail-transport-agent”的所有软件包:

$ aptitude search '?provides(mail-transport-agent)'
p   citadel-mta          - complete and feature-rich groupware server (mail transport agent)
...
p   nullmailer           - simple relay-only mail transport agent
p   postfix              - High-performance mail transport agent
i   sendmail-bin         - powerful, efficient, and scalable Mail Transport Agent
p   ssmtp                - extremely simple MTA to get mail off the system to a mail hub
p   xmail                - advanced, fast and reliable ESMTP/POP3 mail server

显示所有已安装的软件包名称,这些软件包名称不是必需的,也不是由依赖项自动安装的:

$ aptitude search '~i!(~E|~M)' -F '%p'

不幸的是,这些东西很少被记录在案,并且很难找到,但是这里是最好的参考(来自“智能”维护者)。


4
可以apt-get通过apt-cache search NAME
EricR 2012年

@EricR是,但我没有找到这些搜索功能
niceman

4

根据有关软件包管理的Debian GNU / Linux FAQ,aptitude比apt-get更复杂,并且取决于不太复杂的软件包管理工具apt-get和dpkg。

因此,对于更简单的需求,您可以使用更简单的工具,而对于更复杂的需求,您可以依靠更复杂的工具(能力)。

从Debian FAQ中引述:“ aptitude提供dselect和apt-get的功能,以及这两个程序中都找不到的许多其他功能。”


3

aptitude标记由于自动标签的依赖性而安装的软件包。如果现在清除或删除软件包,则aptitude将自动删除不再使用的自动安装的软件包以及要清除或删除的软件包。

这就是为什么我个人认为能力总是比能力更强的主要原因。


需要引用,但这将是一个引人注目的区别。
卡扎伊


实际上,apt-get也可以这样做apt-get autoremove <package-name>。无论apt-getaptitude标记自动安装的软件包
Legionair

但是aptitude,每次使用时都要清理自动包装。虽然apt-get您需要明确地开始。
Anders

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.