我知道 和apt-get
都是aptitude
Debian 派生的 Linux 上的命令行包管理界面,具有不同的选项,但我仍然有些困惑。在幕后,他们不是使用相同的 APT 系统吗?
为什么 Debian 维护这些并行工具? (额外问题:到底是什么瓦吉格?)
答案1
最明显的区别是aptitude
提供了终端菜单界面(很像终端中的 Synaptic),而apt-get
没有。
仅考虑两者的命令行界面,它们非常相似,并且在大多数情况下,您使用哪一个并不重要。两者的最新版本都会跟踪哪些软件包是手动安装的,哪些是作为依赖项安装的(因此有资格自动删除)。事实上,我相信甚至在最近,这两个工具已经更新为实际上共享手动安装和自动安装的软件包的相同数据库,因此您使用 apt-get 安装某些东西然后 aptitude 想要卸载它的情况主要是过去。
有一些细微的差别:
- aptitude 会自动删除符合条件的软件包,而 apt-get 需要单独的命令才能执行此操作
- 命令为升级与远程升级已重新命名为可能更准确的名称安全升级和全面升级, 分别。
- aptitude 实际上不仅执行 apt-get 的功能,还执行它的一些配套工具,例如 apt-cache 和 apt-mark。
- aptitude 的搜索查询语法略有不同(与 apt-cache 相比)
- 资质具有为什么和为什么不命令告诉你哪些手动安装软件包正在阻止您可能想要执行的操作。
- 如果您想要执行的操作(安装、删除、更新软件包)导致冲突,aptitude 可以建议几种可能的解决方案。 apt-get 只会说“对不起,戴夫,我不能允许你这样做。”
还有其他一些细微的差异,但这些是我能想到的最重要的差异。
简而言之,aptitude 更适合属于 Synaptic 和其他更高级别的包管理器前端的类别。它恰好也有一个类似于 apt-get 的命令行界面。
奖金回合:wajig 是什么?
还记得我如何提到那些“伴侣”工具,例如apt-cache
和apt-mark
吗?好吧,它们有很多,如果你经常使用它们,你可能不记得哪些提供了哪些命令。wajig
是该问题的一种解决方案。它本质上是一个调度程序,是所有这些工具的包装器。sudo
必要时也适用。当您说 时wajig install foo
,wajig 会说“好的,install
由提供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 foo
和wajig whichpkg /usr/bin/foo
。
答案2
我常常想知道自己。维基百科亮点主要区别特征是 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.
答案3
aptitude 是从控制台进行包管理的首选程序,适用于 Debian 中的包安装和包或系统升级。
以下是该工具及其相对 apt-get 的功能的概述: http://www.debian.org/doc/FAQ/ch-pkgtools.en.html#s-aptitude
所以,我的建议是 apt-get install aptitude :)
答案4
基于@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.
等等。