dpkg和aptitude/apt-get之间有什么区别?

当通过dpkg -i packageA.deb安装软件时,packageA所需的依赖项会自动下载和安装吗?这与使用apt-getaptitude有什么不同?

1相关(尤其是关于依赖性):https://askubuntu.com/q/40779/250300 - Melebius
4个回答

不,dpkg 只安装一个软件包,因此执行 dpkg -i packageName.deb 仅会安装该 Deb 软件包,并通知您需要安装的任何依赖项,但它将不会安装它们,也不会配置 packageName.deb,因为...缺少依赖项。 apt-get 是一个软件包管理系统,用于在基于 Debian 的 Linux 发行版上处理 Deb 软件包的安装。软件包管理系统是一组工具,可帮助您轻松安装、删除和更改软件包。因此,apt-get 就像一个聪明的 dpkg
我喜欢这样想时间线(以下只是我的经验之谈,旨在让您了解整个过程):
他们想出了一种方法,可以将应用程序的文件“存储”在一个“软件包”中,以便轻松安装。因此,Deb软件包({{link1: .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相同。可能会有一些微小的差异,我不知道,但它们都会寻找依赖关系并执行所有相关操作。您可以阅读这里的答案以获取有关aptitudeapt-get之间差异的更多信息。

    此外,aptitude没有超级牛力。
    引用: 编辑:显然,它有。 aptitude -v[v[v[v[v]]]] mooaptitude可能不会默认安装。要安装它,请执行sudo apt-get install aptitude或点击此链接:aptitude Install aptitude

    额外

    以下信息并不直接回答“dpkg和aptitude/apt-get之间的区别是什么?”,但它对整体情况有所贡献。


    来自Carlos Campderrós下方评论

    gdebi 是另一个工具,有点像 apt-getaptitude 的混合体。当你使用它来安装一个 .deb 包(gdebi packageName.deb),它会识别出缺失的依赖项,使用 apt-get 安装它们,然后最终使用 dpkg 安装和配置该包。它甚至还有一个简洁而整洁的图形界面(点击此处查看),可以提供关于 .deb 包、包含在包中的文件以及需要安装的依赖项的信息。要查看此图形界面,您可以执行 gdebi-gtk packageName.deb。您可以通过使用 sudo apt-get install gdebi 或点击这个链接来尝试安装 gdebigdebi Install gdebi

    我不想让任何人感到困惑,只是为了给你提供图片的另一部分,还有另一种流行的Linux软件包格式叫做RPM,它的文件扩展名是.rpm。这种软件包格式在基于RPM的Linux发行版(如Red Hat、CentOS和Fedora)上使用。他们使用命令rpm来安装软件包,而yum则是其前端,它非常聪明。因此,他们的.rpm文件就是我们的.deb文件,他们的rpm工具就是我们的dpkg工具,而他们的yum就是我们的apt-get。

    来自Paddy Landau下面的评论

    alien是一个工具,用于在.rpm和.deb包之间进行转换。所以,如果你遇到了这样的情况:你有一个.rpm包,并且想要在你的Ubuntu(或任何其他基于Debian的发行版)上安装它,你可以使用命令alien rpm_packageName.rpm将其转换为.deb,然后使用dpkg安装它。你也可以使用alien -r packageName.deb来反向转换(将.deb转换为.rpm)。

    4此外,您还可以使用gdebiapt-get install gdebi-core)来混合使用apt-get/aptitudedpkg。您可以通过gdebi some_package.deb来调用它,并且它将分析其依赖关系,调用apt-get来安装缺失的依赖项,当所有依赖项都满足时,再调用dpkg来最终安装您的软件包。 - Carlos Campderrós
    @CarlosCampderrós,我在我的答案中添加了“gdebi”。 - Alaa Ali
    2@Alaa 在额外信息中,你还可以提到alien可以在.rpm.deb之间转换软件包。这对于那些只有RPM而没有DEB(或反之亦然)的软件包非常有用。例如,使用alien packagename.rpm将其转换为适用于Ubuntu的软件包。 - Paddy Landau
    给你一个小修正;aptitude确实有超级牛的能力:aptitude -v[v[v[v[v]]]] moo - virtualxtc
    1@AlaaAli aptitude 不是 apt-get 的前端。这两个程序都是 libapt-pkg 库的前端。 - Eliah Kagan
    @AlaaAli 嘿,我需要向你询问一些关于软件安装的问题。请给我一些联系方式。 - Alex Jones
    1@edwardtorvalds AskUbuntu是一个问答网站。您可以在该网站上搜索您的问题,其中有数千个旧问题,如果找不到答案,可以提出您自己的问题,更有经验的人将会帮助回答。 - Alaa Ali
    @AlaaAli 我联系了Ali,但是没有人回应,所以我才请你亲自帮助我。:( :( 这只是一个请求。 - Alex Jones

    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配合使用。

    访问apt-get指令页面

    aptitude

    aptitude 提供了 dselectapt-get 的功能,以及许多这两个程序中没有的附加功能。 aptitude 有自己的外壳,可以通过键盘或鼠标激活,并在终端窗口中运行。 aptitude build-dep <package> - 安装软件包的构建依赖项,这意味着需要编译(或构建)其源码包所需的软件包。例如,许多软件包需要 debhelperautotools 来进行构建,但在运行时不需要它们。 访问 aptitude 指南页面

    dpkg

    是一个安装、构建、删除和管理 Debian 软件包的工具。链接 dpkg -i <package.deb> 将一个 Debian 软件包安装到您的计算机上。根据我从帮助文件中了解到的情况,它不会安装任何依赖项。

    要获取详细信息,请在终端窗口中输入dpkg --help

    指南

    有关文件管理的指南可以在此处找到。


    虽然对于这个问题已经有很好的回答,但我想要说些更详细的内容。
    • dpkg(或者在Fedora系列中是rpm)是一个低级工具,它可以安装和删除软件包文件,但不会安装依赖项或从软件仓库中搜索。
    • aptapt-getaptitude(或者在Fedora系列中是yumdnf)是高级工具-或者正如first answer中所提到的dpkg的前端工具!它们可以进行元数据搜索和依赖关系解决。

    我喜欢解释它们在Linux下的软件包管理任务上的区别:

    1. 安装、卸载或更新软件包时,我使用高级命令(apt-get installapt-get updateapt-get remove),但是当需要从软件包文件安装和升级时,我使用低级命令(dpkg -i package_file)。
    2. 在软件仓库中搜索时,我使用高级工具(apt-cache search search_str)。
    3. 用于检查已安装的软件包和文件的是低级命令(dpkg -l-s-S)。欲了解更多信息,请查阅手册man dpkg | less
    4. 关于软件包元数据,我使用高级命令,例如apt-cache show dpkg

    我认为最重要的事情,也是一个区别,需要注意的是,你应该使用apt-get工具来安装软件包(aptaptitude也可以)。

    这是因为dpkg旨在安装软件包而不安装依赖的软件包。 因此,仅使用dpkg安装软件包可能导致后续的问题,其中依赖项解析可能会导致系统崩溃。

    你应该使用命令行的apt-getapt(自14.04版本起)工具来安装软件包。这些工具会为你使用dpkg,同时具有依赖项解析机制。