问题描述
当通过dpkg -i packageA.deb
安装软件时,packageA
所需的相关性会自动下载并安装吗?这与使用apt-get
或aptitude
有什么不同?
最佳解决思路
不,dpkg
只安装一个软件包,因此dpkg -i packageName.deb
只会安装Deb软件包,并会通知您需要安装的任何依赖项,但它不会安装它们,并且它不会配置packageName.deb
,因为……依赖关系不存在。
apt-get
是一个Package Management System,用于处理Debian-based Linux distributions上Deb程序包的安装。包管理系统是一组工具,可帮助您轻松安装,删除和更改包。所以apt-get
就像一个聪明的dpkg
。
我喜欢用这种方式来思考时间表(以下仅仅是我从经验中发表的意思,它只是给你一个关于这件事的想法):
-
他们想出了一种方式将”store”中的应用程序的文件安装在”package”中,以便安装。所以,Deb软件包(
.deb
扩展文件)诞生了。.deb
文件包含应用程序运行所需的文件,以及(我喜欢称之为)”meta-data”,其中包含其他信息,例如应用程序所需的依赖项的名称。如果要查看.deb
文件的内容,可以使用命令dpkg -c packageName.deb
,并且如果要查看此”meta-data”信息,请使用命令dpkg -I pacakgeName.deb
(如果只想查看依存关系,请执行dpkg -I packageName.deb | grep Depends
)。 -
他们需要一个工具来安装这些
.deb
文件,所以他们想出了dpkg
工具。但是,该工具只安装.deb
文件,但不会安装其依赖项,因为它没有这些文件,并且它无权访问”repositories”以从中提取依赖项。 -
然后,他们想出了
apt-get
,它可以自动解决上述问题。在引擎盖下,apt-get
基本上是dpkg
(我喜欢把它看作apt-get
是dpkg
的front-end),但是聪明的人会寻找依赖并安装它们。它甚至会查看当前安装的依赖关系并确定其他包未使用的依赖关系,并会通知您可以将其删除。
aptitude
随后出现。它使用apt-get
使用的库,实际上有一个交互式UI(用户界面)。如果你想看到这个UI,只需在终端中输入aptitude
即可。这是aptitude
。它利用库提供比apt-get
更多的选项和特权。例如,aptitude
将自动删除符合条件的软件包,而apt-get
需要单独的命令才能执行此操作。但是,最终,做sudo aptitude install packageName.deb
应至少与sudo apt-get install packageName.deb
相同。在这里和那里我可能会有细微的差异,但我不知道它们,但它们都会寻找依赖关系并完成所有这些工作。您可以阅读the answer here以获取有关aptitude
和apt-get
之间差异的更多信息。
另外,aptitude
没有超级牛的权力。
EDIT: Apparently, it does.
aptitude -v[v[v[v[v]]]] moo
.
aptitude
默认情况下可能未安装。要安装它,请执行sudo apt-get install aptitude
或单击此处:aptitude。
Extra
The following information doesn’t really directly answer “What is the difference between dpkg and aptitude/apt-get?” but it contributes to the big picture.
从Carlos Campderrós‘comment below:
gdebi
是另一种apt-get
和aptitude
混合的工具。当您使用它来安装.deb
软件包(gdebi packageName.deb
)时,它将识别缺失的依赖项,使用apt-get
进行安装,然后使用dpkg
最终安装和配置软件包。它甚至包含关于.deb
包的simple and neat GUI that gives you information,包中包含的文件以及需要安装的依赖关系。要看这个GUI,你可以做gdebi-gtk packageName.deb
。您可以通过与sudo apt-get install gdebi
一起安装gdebi
或点击此:gdebi来尝试gdebi
。
我不想混淆任何人,但为了给你另一部分的图片,还有另一种流行的Linux包格式叫做RPM,它的文件有.rpm
扩展名。此包格式用于RPM-based Linux发行版(如Red Hat,CentOS和Fedora)。他们使用命令rpm
来安装一个软件包,yum
是front-end,它是一个聪明的软件包。所以他们的.rpm
文件是我们的.deb
文件,他们的rpm
工具是我们的dpkg
工具,他们的yum
是我们的apt-get
。
alien
是一种在.rpm
和.deb
软件包之间转换的工具。因此,如果您遇到有.rpm
软件包的情况,并且希望将其安装到Ubuntu(或任何其他Debian-based发行版)上,则可以使用命令alien rpm_packageName.rpm
将其转换为.deb
,然后使用dpkg
进行安装。您可以使用alien -r packageName.deb
做相反的操作(将.deb
转换为.rpm
)。
次佳解决思路
apt-get
通过apt-get进行的包管理运行hand-in-hand和/etc/apt/sources.list文件。
apt-get install <package_name>
将新软件包安装到您的计算机上。
apt-get build-dep <package_name>
此命令搜索存储库并安装其构建依赖关系。如果软件包不在存储库中,它将返回一个错误。
apt-get install <package1_name> <package2_name> <package3_name>
apt-get允许多个软件包安装。用一个空格分开包裹。
auto-apt run <command_string>
当被调用时,auto-apt命令会在缺少文件访问时自动安装软件包。如果程序尝试访问已知属于已卸载程序包的文件,auto-apt将使用apt-get安装该程序包。该功能需要apt和sudo才能工作。
Visit the apt-get instruction page
aptitude
aptitude
提供了dselect
和apt-get
的功能以及其他程序中没有的其他功能。
aptitude
有一个自己的 shell ,它是键盘或鼠标激活并在终端窗口中运行
aptitude build-dep <package>
– 安装程序包build-dependencies – 这意味着编译(或构建)其源代码包所需的程序包。例如,许多软件包需要建立debhelper
或autotools
,但不需要它们运行。
Visit the aptitude instruction page
dpkg
是一款安装,构建,删除和管理Debian软件包的工具。 link
dpkg -i <package.deb>
将Debian软件包安装到您的计算机上。它不会安装任何依赖关系,只要我可以从帮助文件中找到。
有关详细信息,请将dpkg --help
键入终端窗口。
Guides
可以找到一个文件管理指南here