dpkg -i packageA.deb
安装软件时,packageA
所需的依赖项会自动下载和安装吗?这与使用apt-get
或aptitude
有什么不同?dpkg
只安装一个软件包,因此执行 dpkg -i packageName.deb
仅会安装该 Deb 软件包,并通知您需要安装的任何依赖项,但它将不会安装它们,也不会配置 packageName.deb
,因为...缺少依赖项。
apt-get
是一个软件包管理系统,用于在基于 Debian 的 Linux 发行版上处理 Deb 软件包的安装。软件包管理系统是一组工具,可帮助您轻松安装、删除和更改软件包。因此,apt-get
就像一个聪明的 dpkg
。 .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 (我认为它是 dpkg 的前端),但是一个聪明的人将查找依赖关系并安装它们。它甚至检查当前安装的依赖项并确定没有被任何其他软件包使用的依赖项,并会通知您可以删除它们。
aptitude
然后出现了。它使用libraries 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
或点击此链接:aptitude
。
额外
以下信息并不直接回答“dpkg和aptitude/apt-get之间的区别是什么?”,但它对整体情况有所贡献。
gdebi
是另一个工具,有点像 apt-get
和 aptitude
的混合体。当你使用它来安装一个 .deb
包(gdebi packageName.deb
),它会识别出缺失的依赖项,使用 apt-get
安装它们,然后最终使用 dpkg
安装和配置该包。它甚至还有一个简洁而整洁的图形界面(点击此处查看),可以提供关于 .deb
包、包含在包中的文件以及需要安装的依赖项的信息。要查看此图形界面,您可以执行 gdebi-gtk packageName.deb
。您可以通过使用 sudo apt-get install gdebi
或点击这个链接来尝试安装 gdebi
:gdebi
。
我不想让任何人感到困惑,只是为了给你提供图片的另一部分,还有另一种流行的Linux软件包格式叫做RPM,它的文件扩展名是.rpm。这种软件包格式在基于RPM的Linux发行版(如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安装它。你也可以使用alien -r packageName.deb来反向转换(将.deb转换为.rpm)。
gdebi
(apt-get install gdebi-core
)来混合使用apt-get
/aptitude
和dpkg
。您可以通过gdebi some_package.deb
来调用它,并且它将分析其依赖关系,调用apt-get
来安装缺失的依赖项,当所有依赖项都满足时,再调用dpkg
来最终安装您的软件包。 - Carlos Campderrósalien
可以在.rpm
和.deb
之间转换软件包。这对于那些只有RPM而没有DEB(或反之亦然)的软件包非常有用。例如,使用alien packagename.rpm
将其转换为适用于Ubuntu的软件包。 - Paddy Landau通过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
有自己的外壳,可以通过键盘或鼠标激活,并在终端窗口中运行。
aptitude build-dep <package>
- 安装软件包的构建依赖项,这意味着需要编译(或构建)其源码包所需的软件包。例如,许多软件包需要 debhelper
或 autotools
来进行构建,但在运行时不需要它们。
访问 aptitude 指南页面
dpkg -i <package.deb>
将一个 Debian 软件包安装到您的计算机上。根据我从帮助文件中了解到的情况,它不会安装任何依赖项。
要获取详细信息,请在终端窗口中输入dpkg --help
。
有关文件管理的指南可以在此处找到。
dpkg
(或者在Fedora系列中是rpm
)是一个低级工具,它可以安装和删除软件包文件,但不会安装依赖项或从软件仓库中搜索。apt
、apt-get
和 aptitude
(或者在Fedora系列中是yum
和dnf
)是高级工具-或者正如first answer中所提到的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
。我认为最重要的事情,也是一个区别,需要注意的是,你应该使用apt-get
工具来安装软件包(apt
或aptitude
也可以)。
这是因为dpkg
旨在安装软件包而不安装依赖的软件包。
因此,仅使用dpkg
安装软件包可能导致后续的问题,其中依赖项解析可能会导致系统崩溃。
你应该使用命令行的apt-get
或apt
(自14.04版本起)工具来安装软件包。这些工具会为你使用dpkg
,同时具有依赖项解析机制。