如何通过命令行安装.deb文件?

如何通过命令行安装一个 .deb 文件?

5寻找更好的方法:http://www.steptoinstall.com/step-to-install-deb-file-using-command-line-terminal-in-ubuntu.html - KarSho
12个回答

软件包是通过Debian软件包管理系统的dpkg命令手动安装的。 dpkg是诸如apt-get和aptitude之类命令的后端,而这些命令又是GUI安装应用程序(如软件中心和Synaptic)的后端。
大致如下:
dpkg -> apt-get,aptitude -> Synaptic,Software Center 当然,安装软件包最简单的方法是首先使用GUI应用程序(如Synaptic,Software Center等),然后使用终端命令apt-get和aptitude,它们为后端dpkg添加了非常友好的用户界面,包括但不限于打包依赖项,控制安装内容,需要更新,未安装,损坏的软件包等。最后是dpkg命令,它是它们所有命令的基础。
由于dpkg是基础,因此可以使用它直接从命令行安装打包。
安装软件包
sudo dpkg -i DEB_PACKAGE

例如,如果软件包文件名为askubuntu_2.0.deb,那么你应该执行sudo dpkg -i askubuntu_2.0.deb。如果dpkg报告由于依赖问题而出错,你可以运行sudo apt-get install -f来下载缺失的依赖项并配置一切。如果这也报错了,你将不得不自己解决依赖关系,例如按照如何在添加PPA后解决未满足的依赖关系?的指示进行操作。

删除一个软件包

sudo dpkg -r PACKAGE_NAME

例如,如果软件包被称为askubuntu,那么你应该执行sudo dpkg -r askubuntu来卸载它。
重新配置现有的软件包。
sudo dpkg-reconfigure PACKAGE_NAME

这在需要重新配置与该软件包相关的内容时非常有用。一些有用的例子是keyboard-configuration,当您想要启用Ctrl+Alt+Backspace以重置X服务器时,您可以执行以下操作:
sudo dpkg-reconfigure keyboard-configuration

另一个很棒的例子是当你需要为服务器或本地测试计算机设置时区时,你可以使用tzdata软件包。
sudo dpkg-reconfigure tzdata

4很棒的信息,必须找到一种方法安装traceroute来帮助调试为什么我的机器无法连接到互联网 :) - Jason
34还值得注意的是,一旦安装完成,程序通常会在/usr/bin目录下找到,命名方式与解包后的内容相对应。 - Chris Moschini
如果我运行sudo apt-get install texlive-latex-base,几个月来一直出现"Hash Sum mismatch"错误。我可以从http://gb.archive.ubuntu.com/ubuntu/pool/main/t/texlive-base/texlive-latex-base-doc_2015.20150625-1ubuntu1_all.deb下载.deb文件。如果我使用dpkg安装它,apt-get会随后识别(并更新)吗? - user643722
嗨 @user643722,我本来想建议删除该软件包的缓存版本,但是在这里你可以找到解决问题的答案:http://askubuntu.com/questions/41605/trouble-downloading-packages-list-due-to-a-hash-sum-mismatch-error - Luis Alvarado
3如果通过aptitudeapt-get(或者简单地使用apt)更容易、更好安装,为什么这里没有给出这些命令的示例呢? - intuited
这个问题是关于deb文件而不是软件包的。我理解将所有内容都显示在一个答案中的想法(在这一点上我和你意见一致),但原帖需要重新表达问题。顺便说一句,这是个好观点。 - Luis Alvarado
获取与软件包关联的二进制文件通常可以使用以下命令:dpkg -L 软件包名称 | egrep '/bin/|/sbin/' 或者只使用 grep bin/ 也通常有效。 - Pablo Bianchi
使用现代的apt,我建议使用sudo apt install ./package.deb来安装。这样可以自动安装所有依赖项,并进行额外的健全性检查,而dpkg不会实施这些检查,因为它是一个底层命令。请注意,如果没有前缀/./,某些版本的apt可能无法理解您要引用的是文件名,而不是存储库中的软件包名称。 - Mikko Rantalainen

Debian(.deb)软件包是在Ubuntu中使用的软件包。您可以在系统中安装任何.deb软件包。由于Ubuntu已经设置了默认安装程序与文件关联,通常可以通过文件管理器(Nautilus)中的单击来安装.deb文件。以下说明适用于希望从命令行终端(Terminal)安装软件包的用户。
要安装已下载的Debian(Ubuntu)软件包(.deb):打开终端并输入以下命令
sudo dpkg -i packagename.deb

删除Debian(Ubuntu)软件包(.deb)的方法:
sudo dpkg -r packagename

重新配置/修复已安装的Debian(Ubuntu)软件包(.deb):
sudo dpkg-reconfigure packagename

2点击它们在Ubuntu 22上无法工作,它会将它们打开为一个存档文件。 - iopq

我的最爱是GDebi,它可以从终端/Shell或图形桌面获取。

screen-shot

我通常将.deb文件与GDebi关联起来,因为它快速高效 - 尤其是与Ubuntu软件中心相比。 GDebi的主要特点之一是它解决依赖关系并安装它们。
要在命令行中运行,请使用“sudo gdebi ”来安装单个deb文件。

5在安装之前,它会检查依赖关系。谢谢! - Aquarius Power
Gdebi能否自动下载依赖项或者我们需要手动下载它们呢?@Pandya - Jasser
对于那些来自非Linux背景的人来说,这可能更好。 - Nisheet
+1 对于“它解决依赖关系并安装它们”非常重要。 - Fiksdal
这应该是正确的答案。使用dpkg -i需要对软件包系统的工作原理有更深入的了解。GDebi会自动处理这些事情。此外,对于那些想要非图形界面解决方案的人来说,gdebi还有一个-n、--non-interactive选项。它类似于dpkg,但会先检查依赖关系,如果无法解决依赖关系,则拒绝安装。 - bamm

虽然`dpkg -i`确实安装了软件包,但它不会自动解决依赖关系。与此同时,还有两种其他选择,可以使用`gdebi`或者`apt-get`工具。要使用后者,只需执行以下命令:
sudo apt-get install /path/to/package.deb

即使您在与软件包相同的目录中,您仍然需要使用./来指定路径:
sudo apt-get install ./package.deb

21这可能是最好的答案。如果你没有正确的依赖关系,apt 将防止你破坏系统。 - mlainz
这个命令似乎选择了所有已存在的软件包。 - Hibou57
@Hibou57 包名中不能有任何空格。 - Braiam
我了解apt-get会从软件源下载并安装最新的deb包,为了防止这种情况发生,在安装之前关闭网络。更干净的安装方法是将文件(或多个deb文件)复制到/var/cache/apt/archives目录下,并运行sudo apt-get install --assume-yes --no-install-recommends /var/cache/apt/archives/*.deb命令,这样我注意到apt不会尝试从互联网下载。 - Alex Martian

你在寻找所有的dpkg命令吗?点击这个链接来阅读。 15个用于管理基于Debian的Linux服务器的dpkg命令

DPKG命令

有两个动作,它们是dpkg-querydpkg-deb

安装一个软件包

# sudo dpkg -i {package_name}    
# sudo dpkg -i skype-ubuntu-precise_4.2.0.11-1_i386.deb

移除一个软件包

# sudo dpkg -r {package_name}
# sudo dpkg -r vlc

删除一个软件包及其配置文件

# sudo dpkg -P {package_name}
# sudo dpkg -P vlc

列出所有已安装的软件包。

您可以将命令导管到 less(一个分页程序),这样您可以更轻松地滚动内容:

# dpkg -l | less

检查软件包是否已安装
# dpkg -l {package_name}
# dpkg -l vlc

检查软件包是否已安装,如果已安装,则启动它:
# dpkg -l | vlc

查看软件包是否已安装

这将显示软件包将被安装的位置。 在这里,使用大写字母-S来搜索软件包是否已安装。

# sudo dpkg -S {package_name}
# sudo dpkg -S skype

从指定位置安装一个*.deb软件包

这里的-R是递归的意思。 (递归处理在指定目录及其所有子目录中找到的匹配模式*.deb的所有常规文件)。

# sudo dpkg -R --install {package_location}
# sudo dpkg -R --install /home/sysadmin/soft

显示软件包详情

这里的 -p(小写的 p)将会显示软件包信息:

# dpkg -p {package_name}
# dpkg -p apache2

查看软件包的内容

使用 -c(小写字母 c)来显示内容:

# sudo dpkg -c {package_name}
# sudo dpkg -c skype-ubuntu-precise_4.2.0.11-1_i386.deb

提取 *.deb 包文件

使用 -x(小写的 x)进行提取:

# dpkg -x {package_name} {location_were_to_extract}
# dpkg -x libqt4-phonon_4.6.3-4+squeeze1_i386.deb /home/sysadmin/

提取并显示包中包含的文件名
使用大写的-X来显示具有提取功能的内容。
# dpkg -X {package_name} {location_were_to_extract}
# dpkg -X libqt4-phonon_4.6.3-4+squeeze1_i386.deb /home/sysadmin/

显示有关软件包的信息

这里的-I代表信息:

# dpkg -I {package_name}
# dpkg -I libqt4-phonon_4.6.3-4+squeeze1_i386.deb

重新配置已安装的软件包

dpkg-reconfigure 可以在软件包已经安装后重新进行配置。将要重新配置的一个或多个软件包的名称传递给它。它会提出配置问题,就像初次安装软件包时一样。

# dpkg-reconfigure postfix

这将重新配置 postfix,就像当您第一次安装它时一样。
想要了解更多关于 dpkg 命令的信息吗?请查看手册页:
# man dpkg

6检查软件包是否已安装,如果已安装,则启动它:# dpkg -l | vlc - 这只会将软件包列表传输给vlc,如果它已安装,结果是不可预测的;与直接输入vlc相比并没有更好的效果。 - Xen2050

在安装像Libreoffice这样有多个.deb文件的程序时,一个方便的提示是使用。
sudo dpkg -i *.deb

4绝对不要使用这个命令。如果您想要移除该软件包,必须手动删除所有的.deb文件。sudo apt remove examplesudo apt autoremove以及sudo dpkg -r *.deb都没有效果。 - user690429

我真的已经等了这么多年了。
sudo apt install ./happy-at-long-last.deb

太棒了!:) 这个功能可以在大多数系统上使用,包括APT 1.1
使用dpkg经常给我带来问题,而apt非常擅长自动解决依赖关系和避免问题。而且它仍然足够低级,可以进行脚本编写和精细调整...

2这现在是“正确”的答案,应该真正排在列表的第一位。我不认为SO/AskUbuntu允许管理员手动更改答案的顺序。这是一个漫长的过程! - pbhj

使用命令行安装.deb文件的最佳解决方案

以下是在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个(!)软件包,包括像compizunity这样的软件包!gdebi提供了一个更清晰的错误消息:

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

(顺便说一句,这是那个特定问题的解决方案。)

http://askubuntu.com/a/170557/158442 提到可以使用gdebi命令行工具。 - muru
@muru 是的,但由于截图的缘故很容易忽略。而且,它也没有解释dpkg -i skype.deb存在的问题。 - Flimm

安装 .deb 文件可以使用以下方法完成:
sudo apt install ./<file>.deb

如果你使用的是旧版本的发行版,你需要运行以下命令:
sudo dpkg -i ./<file>.deb
sudo apt-get install -f        # Installing missing dependencies

另一种方法是使用gdebi工具来安装deb文件。

创建您自己的脚本安装程序debInstaller如下所示:
#!/bin/bash
dpkg -i "$@"
apt-get --yes --fix-broken install

使脚本可执行
chmod +x debInstaller

然后将其移动到您的PATH中的某些目录中,或者将当前目录添加到您的PATH中。
我打算将其移动到/usr/bin。
sudo cp debInstaller /usr/bin

现在你可以使用以下命令安装任何.deb软件包:
sudo debInstaller some-package.deb

这种方法的附加价值在于解决依赖问题,因为当你使用dpkg -i安装.deb时,往往会遇到一些依赖错误的问题,所以你必须使用apt-get install -f来解决它,这个脚本将为您完成这项工作,但是在这里我使用了apt-get --yes --fix-broken install来自动解决这些错误,无需用户干预。