如何更新所有的Snap软件包?

我知道可以使用以下方法更新一个snap软件包
sudo snap refresh <package>

但是有没有一种方法可以更新所有的快照,就像
sudo apt dist-upgrade
10个回答

sudo snap refresh 

会做这件事。这是snapd 2.0.8的一部分,于2016-06-13在xenial-updates中发布。
snap refresh --list

只列出更新而不刷新软件包。
snap info <snap name>

可以显示特定软件包的可用版本。
如果其他方法失败,您还可以更新特定的应用程序。
sudo snap refresh <Application>

示例用法:

sudo snap refresh slack --classic

3你需要执行 sudo snap refresh - user677955
13@Boris,“snap”如果没有包括“sudo”,会提示您输入密码,因此并不完全必要。 - SpookyGengar
1@SpookyGengar 不,它不行: $ snap refresh 错误:访问被拒绝(尝试使用sudo) - Ricky Nelson
4@RickyNelson 在我的18.04上,它在不使用sudo的情况下提示我。 - John
1@SpookyGengar @John 我使用的是Ubuntu 19.10,snapd版本为2.43.3。它并没有提示我,只是显示了error: access denied (try with sudo) - user677955
我的20.04出现错误,而不是提示输入密码。 - LovesTha
使用sudo命令进行snap refresh操作时,输入密码后一切正常。但是如果不使用sudo命令,则会出现德语错误提示:Autorisierung aus irgendeinem Grund fehlgeschlagen(由于某种原因授权失败)。 - Timo
从Ubuntu 21.10开始,运行“snap refresh”会弹出一个GUI对话框,要求输入管理员(root)密码;因此,如果用户没有看到这个对话框,可能是因为他们不在图形化(GUI)桌面环境中。在无头环境中使用“sudo”(例如Docker、SSH等)将是等效的。 - michael
我宁愿在这个帖子中引用另一个答案。有时候需要先关闭应用程序,然后再进行更新: 'sudo killall <应用程序>' - d3rdon
Sudo snap refresh 没有更新我所有的 snap 软件包。它显示 所有 snap 都是最新的。我不得不明确地执行 snap refresh <软件包名称> 来更新特定的软件包。 - walexy

根据Snap教程,Snaps每天会在后台自动更新一次。
然而,如果您不关闭应用程序,它将无法更新,并且您将收到每日通知以进行更新。

2然而,今天我检查 Firefox 时显示“更新被系统管理员禁用”(很奇怪,因为我是唯一的用户,而且我只在三天前安装了我的操作系统)。 snap refresh firefox 是获取最新安全补丁的唯一途径。 - John
有趣。如果你找到原因,请添加评论... - chrisvdb
3然而,如果您不关闭应用程序,它将无法更新,并且您将每天收到提醒以进行更新。 - thanos.a
2还是无法解决那个令人烦恼的更新问题。我们已经过去了5年(或者根据评论可能是1年)。Snap已经在主要的发行版中推出,但我仍然需要在3个地方进行更新并关闭应用程序。曾经这是Linux升级而无需关闭(重新启动)的重要卖点。 - Nijboer IT

通常情况下,你不需要做任何事情。
snapd在Ubuntu安装中会自动每天多次检查更新。这是snaps的一个关键特性。
例外情况:应用程序在运行时无法进行更新,这意味着长时间运行的应用程序(如Web浏览器)可能不会自动更新。在Ubuntu 22.04及更高版本中,snapd将每天提醒您有2周的时间窗口来退出、更新和重启。
以下是如何确定snapd将自动检查更新的频率:(source
$ snap refresh --time
timer: 00:00~24:00/4        <------ "/4" means refresh every 4 hours.
last: today at 17:15 CDT
next: today at 21:45 CDT

我的“下一个”是七天前。我应该为此烦恼吗?我的计时器和你的一样,但在源链接中,信息每天会刷新4次,即每6个小时刷新一次。所以如果我的电脑连续不开机超过6个小时,我就无法得到更新。所以我必须更改配置。 - Timo
1@Timo 如果你的问题仍然存在,请开一个新的问题。我们不会在这里诊断你症状的潜在原因。 - user535733

尝试使用sudo运行snap:
sudo snap refresh

对我来说,问题出在Snap Store上。它在启动时就会启动,因此无法自行更新。
所以我跑去验证一下Snap Store是否是问题所在。
 sudo snap refresh 
 snap refresh --list
 snap refresh --time

解决方法是终止该进程,然后进行更新。
 sudo killall snap-store
 sudo snap refresh 

这个对我起作用了 - Joel

尝试在/usr/bin/update-snaps中执行此操作。
#!/bin/bash
ROOT_UID="0"

#Check if run as root
if [ "$UID" -ne "$ROOT_UID" ] ; then
        echo "You must be root to do that!"
        exit 1
fi

snap list | awk -F" " '{if ($1 && NR>1) { system("snap refresh " $1 " 2>/dev/null") }}'

6这不再是必要的了。 - dholbach

更新Snap软件包
如果我们想检查某个应用程序是否有更新并安装它,命令如下,其中APPLICATION是我们要更新的程序名称:
sudo snap refresh APPLICATION

例如,如果我们想要更新Firefox,命令将是sudo snap refresh firefox
我和可能有些人想知道的是:“谁会只从终端更新一个软件包?”当然会有人这样做,但我通常会更新所有内容。Snap相当于sudo apt update && sudo apt upgrade,如下所示:
不指定任何软件包,它将搜索我们安装的所有Snaps,检查是否有新版本并进行安装。

列出更新但不安装它们

我提到的第三个命令可能很有趣,如果您只想安装某些软件包,可以使用以下命令:
这对我们有所帮助,例如,如果我们正在等待像May water这样的更新,我们看到它存在,然后我们想要安装我们期望的应用程序和其他一些应用程序,以避免在发现需要安装很多东西时安装所有内容。这样,我们可以节省时间。在this article中,您可以找到与«snap»命令一起使用的其他选项。

一个对我有效的替代方法是去搜索栏搜索“snap store”,打开它,进入更新选项卡,然后点击更新。

我所做的是:在终端(ubuntu 22.10)中。
~$ snap-store

你得到的是

enter image description here

这就是全部了

使用Slack(和其他一些应用程序)会有点棘手,因为它们在后台运行并在重新启动时自动启动。如果您希望进行更新,请确保关闭后台的应用程序,并确保它没有在重新启动时自动启动。以下是一个停止slack的命令示例:
sudo kill -9 $(pidof slack)
之后,您可以运行特定应用程序的更新:
sudo snap refresh slack --classic
以使其生效。
这是一个方便的复制粘贴一行命令:
sudo kill -9 $(pidof slack);sudo snap refresh slack --classic
甚至可以将其放入关机脚本中以实现完全自动化。