![了解“apt install”和“dpkg -i”之间的区别](https://linux22.com/image/1167745/%E4%BA%86%E8%A7%A3%E2%80%9Capt%20install%E2%80%9D%E5%92%8C%E2%80%9Cdpkg%20-i%E2%80%9D%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB.png)
我是 Ubuntu 新手,想了解包管理的工作原理,我有几个问题。我在尝试在机器上安装 CUDA 时遇到了这个问题,所以我将使用 CUDA 作为示例,但我很想从总体上了解这一点。
因此,按照教程,我下载了一个名为 的文件cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
。然后我运行了sudo dpkg -i cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
。最后,我运行了sudo apt install cuda
。
dpkg -i
我的第一个问题是:在文件上运行.deb
和在包名上运行有什么区别apt install
?从我读过的内容来看,下面apt
有使用dpkg
,所以我很困惑为什么在这种情况下会同时使用两者。
我的第二个问题是:告诉我的 apt 是什么意思cuda
?我理解如何dpkg
在本地文件上运行然后安装此文件,但我不明白名称如何cuda
与此文件链接.deb
。
我的第三个问题是:假设这个包有一个更新的版本,它包含在一个名为的文件中cuda-repo-ubuntu1804_10.1_amd64.deb
。如果我运行会发生什么sudo apt upgrade cuda
?这会删除所有文件cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
并安装cuda-repo-ubuntu1804_10.1_amd64.deb
吗?
谢谢。
答案1
dpkg -i <deb_file>
安装本地存储的包。
apt install cuda
cuda
如果安装了,则从 Ubuntu 存储库和 PPA下载并安装包。
如果您运行sudo apt upgrade
,它将检查存储库中已安装软件包的新版本并对其进行升级。
看起来cuda-repo-ubuntu1804_10.0.130-1_amd64.deb
设置了一个将检查升级的存储库。您可以查看/etc/apt/sources.list.d
是否有 cuda 存储库文件。
因此如果您运行apt upgrade
并且该存储库中有新版本,它将得到升级。
该cuda
名称取自该存储库。
答案2
我的第一个问题是:在 .deb 文件上运行 dpkg -i 与在软件包名称上运行 apt install 有什么区别?据我所知,apt 底层使用 dpkg,所以我很困惑为什么在这种情况下会同时使用两者。
dpkg
可以专门用于本地文件,而apt-get
和最近apt
推出的工具旨在供最终用户使用,既可以用于本地文件,也可以用于基于存储库的文件。它们建立在之上dpkg
,这意味着它们仍将调用它并使用它来安装任何东西。可以说,它们更加用户友好。在本地 .deb 文件上调用apt
或应该没有任何区别dpkg
。但只有apt
和apt-get
可以用于远程文件,这意味着它们将自动下载并安装它们。我不确定,但 apt 也可能处理与本地 .deb 文件的依赖关系。它肯定会处理基于存储库的软件包。
我的第二个问题是:是什么告诉我的 apt cuda 的含义?我了解如何在本地文件上运行 dpkg 然后安装此文件,但我不明白名称 cuda 如何与此 .deb 文件链接。
告诉 aptcuda
您的源文件是什么意思。据我所知,cuda
它们不在默认存储库中,可能是因为它是专有软件。因此,如果您尝试sudo apt install cuda
开箱即用,它将不起作用,因为它会查找它并且找不到任何具有此名称的东西。
所发生的情况是,某些程序会将自身作为其 .deb 安装文件的一部分添加到源列表中。Google Chrome 也会做类似的事情。当您下载 google chrome .deb 文件(和您的 cuda 程序)时,它们会作为其安装的一部分在 中添加一行/etc/apt/sources.list
或一个文件/etc/apt/sources.list.d/
,因此无论何时运行sudo apt update
它,它都会转到链接并从中下载源,并且在此源上会提到一个名为 的软件包,cuda
您可以安装它并自动将其升级为sudo apt upgrade
。这类似于添加 PPA。一些其他程序会将自身作为 bash 安装脚本的一部分添加到源中,或者它们可能会要求您手动添加它们。我相信这样做的最佳原因是易于更新,因为它将作为常规更新的一部分自动完成。
我的第三个问题是:假设这个软件包有一个更新的版本,它包含在一个名为 cuda-repo-ubuntu1804_10.1_amd64.deb 的文件中。如果我运行 sudo apt upgrade cuda 会发生什么?这会删除 cuda-repo-ubuntu1804_10.0.130-1_amd64.deb 的所有文件并安装 cuda-repo-ubuntu1804_10.1_amd64.deb 吗?
您可能应该在 cuda 论坛上询问有关此问题的更权威的答案,以及更新到较新版本的正确过程是什么。使用 Google Chrome 示例,它将自动更新到较新版本,因此它将删除旧版本并仅保留新版本。但这非常特定于此 cuda 包,以及他们决定如何处理事情。
也许他们cuda
仅将添加到源中的软件包用于无法与专有软件包捆绑在一起的依赖项和免费软件,因此您仍然需要下载新的 .deb 文件并安装它。也许他们使用它来更新所有内容,当您运行例行程序时,它会自动下载并安装新版本sudo apt update && sudo apt upgrade
。同样,这个软件包非常具体,你应该在他们的支持渠道上询问。