it-swarm.cn

如何通过dpkg -i或apt安装deb文件?

我有一个安装的Deb软件包。

我应该通过dpkg -i my.deb还是由apt安装?

两者都能很好地处理软件依赖性问题吗?

如果使用apt,如何通过apt从deb安装?

728
Tim

当您使用apt安装软件包时, 在后台 它使用dpkg。使用apt安装软件包时,它首先创建所有依赖项的列表,然后从存储库中下载它。

下载完成后,它将调用dpkg来安装所有这些文件,从而满足所有依赖性。

因此,如果您拥有.deb文件,则可以通过以下方式安装它:

  1. 使用:

    Sudo dpkg -i /path/to/deb/file
    Sudo apt-get install -f
    
  2. 使用:

    Sudo apt install ./name.deb
    

    要么

    Sudo apt install /path/to/package/name.deb
    

    对于旧的apt-get版本,必须首先将deb文件移动到/var/cache/apt/archives/目录。对于两者,执行此命令后,它将自动下载其依赖项。

  3. 首先安装gdebi,然后使用它打开.deb文件(右键单击-> 打开方式)。它将安装带有所有依赖项的.deb软件包。

    注意:APT维护软件包索引,它是/etc/apt/sources.list文件和/etc/apt/sources.list.d目录,如果软件包索引中不存在deb所需的依赖关系,则所有这些方法将无法满足软件依赖关系。


为什么在Sudo apt-get install -f之后使用Sudo dpkg -i /path/to/deb/file(如方法1中所述)?

来自man apt-get

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

dpkg安装软件包且不满足软件包依赖性时,它将使软件包处于“未配置”状态,并且该软件包被视为损坏。

Sudo apt-get install -f命令尝试通过安装缺少的依赖项来修复此损坏的程序包。

939
g_p

安装您的foo.deb个文件,带有dpkg -i foo.deb。如果存在一些无法解决的依赖性错误,请运行apt-get install -f之后。

95
ihor_dvoretskyi

这是在命令行上的Ubuntu上安装.deb文件的最佳方法:

Sudo gdebi skype.deb

如果尚未安装gdebi,请使用Sudo apt install gdebi-core安装它。

为什么选择gdebi?

gdebi将查找.deb文件的所有依赖关系,并在尝试安装.deb文件之前先安装它们。我发现这比Sudo dpkg -i skype.deb && Sudo apt install -f更可取。后者在某些情况下非常渴望删除依赖项。例如,当我尝试安装Skype时,它尝试删除96(!)软件包,包括compizunitygdebi给出了更清晰的错误消息:

 $ Sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(顺便说一下,这是 该特定问题的解决方案 。)

66
Flimm

您可以通过以下方式安装本地.deb软件包:

Sudo apt install ./foo.deb

确保指定本地相对或绝对路径(./(如果位于当前目录中),否则它将查找foo.deb在远程存储库中失败。

60
wisbucky

dpkg -I my.deb之前先检查apt-get installdpkg -i my.deb的依赖关系。

也许您可以将my.deb中的/var/cache/apt/archives复制并直接与apt-get一起安装,但我从未尝试过。 无效,apt-getdpkg正在寻找档案中列出的软件包。

15
Alex

最简单的答案是通过运行dpkg -i packagename.deb使用dpkg。然后,您可以通过运行dpkg -r packagename.deb来卸载它。
apt-get是基于dpkg的更高级别的安装程序,因此您可以apt-get install packagename.deb
将它添加到apt-get归档文件目录(/var/cache/apt/archives)将是有益的,因此您可以将其作为具有依赖项的程序包而不是独立的.deb归档文件来引用。
另外,通过将其添加到apt-get存档目录中,您还可以将依赖项与apt-get install packagename一起使用。这样一来,您便可以使用任何手动添加的依赖项来安装它,而不是dpkg的基于存档的独立系统。

6
Interesting...

现代apt-get可以简单地通过apt-get install /path/to/package/name.deb来安装软件包。

(应作为对最高答案的编辑,但被拒绝了-请参阅 https://unix.stackexchange.com/posts/159114/edit

5
reducing activity