前段时间我读到这aptitude
是在基于 Debian 的系统上安装的首选工具。但是当你搜索如何管理基于 Debian 的系统时,很少会提到 aptitude。大多数人似乎更喜欢它apt-get
- 甚至 Debian wiki 页面也是如此!
因此,我想知道我是否遗漏了什么。哪个是正确的工具?
答案1
aptitude
和apt-get
对于许多任务来说都是一样工作的,但对于最棘手的情况,例如分布升级(apt-get dist-upgrade
与aptitude full-upgrade
),它们有不同的规则,并且在它们不一致的实践中, aptitude 的规则几乎总是更好。
apt-get
您看到更多有关over 的文档的原因aptitude
主要是惯性:aptitude
一直以来都不是 APT 的推荐前端,所以很多现有文档都没有更新,并且有很多人认识到aptitude
over的优势apt-get
但却反射性地使用apt-get
。
最近我发现,打字时我通常会在后面加上apt
ai
而不是 a 。-
后记apt-get
请注意,和中使用的规则aptitude
是不断变化的目标 - 正如 Hubert 在评论中指出的那样,从 Debian Lenny 开始推荐的升级路径现在使用apt-get
,而不是aptitude
。这反映了apt-get
跟踪的当前软件包状态比 少的事实aptitude
,因此无需担心 APT 状态不“干净”,并且因为apt-get
规则比以前更智能。我仍然使用 和 推荐aptitude
而不是apt-get
,但这是一个更细致入微的建议
答案2
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”或包含‘字体’。
其他实用aptitude
功能:
显示名称中带有“固件”且描述中也带有“无线”的所有软件包:
aptitude search 'firmware ~dwireless'
或长格式:
aptitude search '?and(?name(firmware),?description(wireless))'
(注意:在简短形式中,空格分隔的参数在引号内进行 AND 运算;如果作为单独的 argv[] 命令行参数传递,则进行 OR 运算。)
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,天哪!我认为大多数人只想要终端视角,而不是内置的 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'
不幸的是,这些资料记录得相当差,很难找到,但是这里是最好的参考(来自‘aptitude’维护者)。
答案3
根据Debian GNU/Linux 软件包管理常见问题解答,aptitude 比 apt-get 更复杂,并且依赖于不太复杂的包管理工具 apt-get 和 dpkg。
因此,对于比较简单的需求,可以使用比较简单的工具,而对于比较复杂的需求,可以依靠比较复杂的工具(apitude)。
摘自 Debian FAQ:“aptitude 提供了 dselect 和 apt-get 的功能,以及这两个程序中没有的许多附加功能。”
答案4
没有绝对正确的工具,您可以根据手头的任务选择最方便的工具。aptitude 是测试/sid 用户的绝佳工具,但它在从一个稳定版本升级到另一个稳定版本时不太可靠。请参阅我的文章apt-get、aptitude……选择适合你的包管理器。