如何更新通过.deb文件安装的软件

有很多软件我们是通过.deb文件安装的,因为官方的Ubuntu仓库里面的版本都非常旧。但是我一直在想如何更新通过.deb文件安装的软件包。
一个特别的例子就是sonic-visualiser。 官方的Ubuntu仓库里面的版本是3年前的2.5版本,而官方网站上有最新的3.0.3版本。

2sudo apt install <.deb file> - AlikElzin-kilaka
4个回答

免责声明:我要说的是,如今发行版鼓励用户安装软件的方式是使用apt,这是一个包管理器,它检查软件包之间的依赖关系是否完整,您可以从源代码仓库列表中获取所有可用的软件更新。
虽然使用.deb软件包安装程序可能不会自动将存储库添加到apt中进行更新,但某些.deb安装程序确实会这样做:它们会为apt添加存储库以进行进一步的更新,或者使您能够手动添加它们,然后再安装软件。例如:'Visual Studio Code'。 https://code.visualstudio.com/docs/setup/linux 我引用他们网站上的内容:

Debian and Ubuntu based distributions

The easiest way to install Visual Studio Code for Debian/Ubuntu based distributions is to download and install the .deb package (64-bit), either through the graphical software center if it's available, or through the command line with:

sudo apt install ./<file>.deb

Installing the .deb package will automatically install the apt repository and signing key to enable auto-updating using the system's package manager. Note that 32-bit and .tar.gz binaries are also available on the VS Code download page.

The repository and key can also be installed manually with the following script:

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg 
sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/ 
sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

Then update the package cache and install the package using:

sudo apt-get install apt-transport-https 
sudo apt-get update 
sudo apt-get install code # or code-insiders
编辑: 在这篇文章的评论中,有些人对使用带有安装文件路径的apt命令感到困惑。虽然apt的主要功能是管理软件包并从apt获取的存储库列表中更新它们,但它也可以用于安装已下载的软件包,就像上面的例子一样。也许也可以使用dpkg -i命令以相同的效果进行安装-我不知道。我只能说的是,上面示例中的下载软件包会获得签名,并使用签名的源存储库更新apt的存储库列表。而Visual Studio推荐用于安装它的软件是apt。
更一般地说,apt、apt-get和apt-cache是APT中包含的软件,它们都是软件包管理器。aptapt-getapt-cache有一组共同的命令,这些命令广泛分布在它们两者之间。因此,apt是一组少数通用的日常使用命令,应该更加用户友好。有关更多比较,请参阅这篇易读的文章:https://itsfoss.com/apt-vs-apt-get-difference/
相比之下,dpkg是另一个软件,APT软件包管理器调用它来确定要安装哪些版本的软件包,以便系统中的软件包可以良好地相互交互并且不会导致一些冲突。 “虽然dpkg对单个软件包执行操作,但APT处理它们之间的关系(特别是依赖关系),以及更高层次的版本控制决策(发布跟踪和版本固定)的来源和管理。 APT的一个重要功能是它调用dpkg的方式- 它对要安装或删除的软件包列表进行拓扑排序,并以最佳可能的顺序调用dpkg。在某些情况下,它利用dpkg的--force选项。但是,只有当它无法计算如何避免dpkg需要强制执行操作时,它才这样做。” -来源:https://en.wikipedia.org/wiki/APT_(software)#Front-ends

10sudo apt install ./<file>.deb 这是错误的。应该使用 dpkg -i 而不是 apt install。APT 只能从软件包仓库安装软件包,而不能安装已下载的软件包。 - philsf
@philsf 你确定吗?我认为apt比dpkg更好。看看这个链接:https://askubuntu.com/questions/309113/what-is-the-difference-between-dpkg-and-aptitude-apt-get#:~:text=apt%2Dget%20is%20a%20Package,is%20like%20a%20clever%20dpkg%20. - John
是的,我确定。链接问题中接受的答案解释了原因。 - philsf
3嗨 @philsf,你当然可以使用apt来安装下载的文件。我自己已经多次这样做了,因为apt是我安装软件的首选方式。你可以通过提供绝对路径给apt install命令来指定文件,或者如果文件位于当前工作目录中,你可以在文件名前加上./。否则,apt将尝试从Ubuntu的存储库或设置的其他地方检索和安装软件包。希望能帮到你。 - Ola
1@philsf,你可以在维基百科上了解更多关于APT的信息:https://en.wikipedia.org/wiki/APT_(software) - Ola
@philsfin 在链接的答案中,答案与你所说的完全相反。使用apt安装带有依赖项的lib与使用dpkg仅安装lib相比较。 - AuthorProxy

下载一个新的 .deb 文件,并像之前安装的那样进行安装。

不,你不能通过正常的 apt update && apt upgrade 过程来获取自动更新;这就是仓库的作用。


Snaps也被认为可以帮助解决这个问题;所以请考虑使用Snaps(如果是从Ubuntu商店获取的话,它们有更新路径)。 - guiverc
2@guiverc 我对Snaps一点也不熟悉,所以请随意再写一个关于它的回答。 - fkraiem
1我的评论是给@Nipun考虑的;但由于问题是关于.deb文件,快照回答并不适用。 - guiverc
@fkraiem 如何使用 "sudo apt upgrade ./new_version.deb" 似乎合理,但我在实际系统中犹豫是否尝试,有什么建议吗? - dileepa

deb-get可以为许多热门应用程序提供此功能,如果你的应用程序尚未在软件仓库中,你也可以自行添加

Pacstall可以安装和更新许多流行的应用程序,如果您的应用程序尚未在存储库中,您可以自行添加