
通过 安装软件时dpkg -i packageA.deb
,所需的依赖项会自动下载并安装吗?这与使用或packageA
有何不同?apt-get
aptitude
答案1
不,dpkg
只安装一个包,所以这样做dpkg -i packageName.deb
只会安装这个 Deb 包,并会通知你需要安装的任何依赖项,但它会不是安装它们,它将不是配置packageName.deb
因为...依赖项不存在。
apt-get
是包管理系统处理 Deb 软件包的安装基于 Debian 的 Linux 发行版。软件包管理系统是一套工具,可帮助您轻松安装、删除和更改软件包。因此apt-get
就像一个聪明的dpkg
。
我喜欢这样思考时间线(以下只是我的经验之谈。它只是为了让你对整个事情有一个概念):
他们想出了一种方法,将应用程序的文件“存储”在“包”中,以便于安装。因此,Deb 包(
.deb
扩展文件) 出生于。文件
.deb
包含应用程序运行所需的文件,以及(我喜欢这么叫)“元数据”包含其他信息,例如应用程序所需的依赖项的名称。如果要查看文件的内容.deb
,可以使用命令dpkg -c packageName.deb
,如果要查看此“元数据”信息,请使用命令dpkg -I pacakgeName.deb
(如果只想查看依赖项,请执行dpkg -I packageName.deb | grep Depends
)。他们需要一个工具来安装这些
.deb
文件,所以他们想出了这个dpkg
工具。然而,这个工具只会安装文件.deb
,而不会安装其依赖项,因为它没有这些文件,也无法访问“存储库”来从中获取依赖项。然后,他们想出了
apt-get
,它可以自动解决上一点中的问题。在底层,apt-get
基本上是dpkg
(我喜欢把它看作apt-get
的前端dpkg
),但它是一个聪明的,它会查找依赖项并安装它们。它甚至会查看当前安装的依赖项并确定其他任何包都没有使用的依赖项,并会通知您可以删除它们。
aptitude
然后出现了。它使用图书馆apt-get
用途并且实际上有一个交互式 UI(用户界面)。如果你想看到这个 UI,只需aptitude
在终端中输入。那是 aptitude
。它利用库来提供比 更多的选项和特权apt-get
。例如,aptitude
将自动删除符合条件的软件包,而apt-get
需要单独的命令来执行此操作。但最终,这样做sudo aptitude install packageName.deb
应该至少与 相同sudo apt-get install packageName.deb
。这里和那里可能存在我不知道的细微差别,但它们都会查找依赖项并执行所有这些操作。您可以阅读答案在这里aptitude
有关和之间的差异的更多信息apt-get
。
此外,aptitude
没有超级牛力量。
编辑:显然,确实如此
aptitude -v[v[v[v[v]]]] moo
。
aptitude
默认情况下可能未安装。要安装它,请执行sudo apt-get install aptitude
以下操作或单击:资质。
额外的
以下信息并没有直接回答“dpkg 和 aptitude/apt-get 有什么区别?“但它对大局有所贡献。
gdebi
是另一种介于apt-get
和之间的工具aptitude
。当您使用它来安装.deb
包 ( gdebi packageName.deb
) 时,它将识别缺少的依赖项,使用 进行安装apt-get
,然后最终使用 进行安装和配置包dpkg
。它甚至有一个简单整洁的 GUI,为您提供信息关于.deb
软件包、软件包中包含的文件以及需要安装哪些依赖项。要查看此 GUI,您需要执行gdebi-gtk packageName.deb
。您可以gdebi
尝试使用以下命令安装它,sudo apt-get install gdebi
或者单击此处:格德比。
我不想混淆任何人,但只是为了给你另一部分图片,还有另一种流行的 Linux 软件包格式称为 RPM,其文件扩展名为.rpm
。此软件包格式用于基于 RPMLinux 发行版(例如 Red Hat、CentOS 和 Fedora)。他们使用命令rpm
来安装软件包,并且yum
是它的前端,它是聪明的。所以他们的.rpm
文件就是我们的.deb
文件,他们的rpm
工具就是我们的dpkg
工具,他们的yum
就是我们的apt-get
。
alien
.rpm
是一个在和软件包之间进行转换的工具.deb
。因此,如果您遇到这样的情况:您有一个.rpm
软件包,并且想要在 Ubuntu(或任何其他基于 Debian 的发行版)上安装,则可以使用 命令alien rpm_packageName.rpm
将其转换为.deb
,然后使用 安装dpkg
。您可以使用 执行反向操作(转换.deb
为.rpm
)alien -r packageName.deb
。
答案2
apt-get
包管理通过apt-get
与文件并行运行/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 才能运行。
资质
aptitude
提供了功能dselect
以及apt-get
两个程序中都没有的许多附加功能。
aptitude
有自己的 shell,可以通过键盘或鼠标激活并在终端窗口中运行
aptitude build-dep <package>
- 安装软件包的构建依赖项 - 这意味着编译所需的软件包(或建造) 其源包。例如,许多包需要debhelper
或autotools
需要构建,但不需要它们来运行。
软件包
是一个用于安装、构建、删除和管理 Debian 软件包的工具。关联
dpkg -i <package.deb>
将 Debian 软件包安装到您的计算机上。据我从帮助文件中了解到,它不会安装任何依赖项。
有关详细信息,请dpkg --help
在终端窗口中输入。
指南
可以找到文件管理指南这里
答案3
尽管这个问题有很多很好的答案,但我想说一些更详细的话。
dpkg
(或rpm
在 Fedora 家族中)是低级安装和删除包文件的工具,它不会安装依赖项或从存储库中搜索它。apt
、apt-get
和aptitude
(在 Fedora 家族中为yum
和)是dnf
高水平- 或者正如它提到的第一个答案A 前端!dpkg
——执行元数据搜索和依赖关系解析的工具。
我喜欢解释它们的区别包管理Linux 中的任务:
- 对于从存储库安装、卸载或更新包,我使用高级的(
apt-get install
,apt-get update
,apt-get remove
),但对于从包文件安装和升级,我使用低级别的(dpkg -i package_file
, )。 - 对于存储库中的搜索,我使用高级工具(
apt-cache search search_str
) - 为了检查已安装的软件包和文件,我使用低级别的软件包和文件(
dpkg -l
有关-s
更多-S
信息,请查看手册man dpkg | less
) - 对于包元数据,我使用高级元数据,例如
apt-cache show dpkg
。
答案4
我认为最重要的事情也是需要注意的区别是您应该使用apt-get
工具来安装软件包。(apt
或者aptitude
也可以)。
这是因为dpkg
旨在安装软件包而不安装依赖软件包。因此,仅使用 安装软件包dpkg
可能会导致以后出现依赖性解析问题,最终导致系统崩溃。
您应该使用命令行apt-get
或apt
(自 14.04 起)工具来安装软件包。这些工具为您使用dpkg
,同时内部具有依赖性解析机制。