如何确定哪些快照是依赖项,哪些是手动安装的?

我安装了一些snap软件包(`snap install ...`)。我可以使用`snap list`命令列出它们。然而,我无法区分哪些是手动安装的,哪些是因为其他软件包依赖而安装的(在apt中是`auto`)。我想要删除自动安装的软件包(在apt中是`apt autoremove`),(在docker中是`docker system prune`)。

4这个回答解决了你的问题吗?如何识别我系统中不再需要的 Snaps? - mook765
4个回答

snap连接 | grep XYZ 其中XYZ是您想要检查依赖项的软件包。
例如,我在/snap目录中有一堆Gnome版本。我不知道哪些要保留,哪些要删除。所以我一时兴起卸载了“旧”的版本。然后发现一些程序无法启动,因为它们依赖于已删除的Gnome版本。
user@~ $simplenote 
ERROR: not connected to the gnome-3-28-1804 content interface.

这是一种不好的方式,可以知道您删除了其他应用程序所需的内容。
当我执行snap connections | grep gnome时,输出包括以下行:
user@~ $snap connections | grep gnome

content[gnome-3-38-2004]  firefox:gnome-3-38-2004                 gnome-3-38-2004:gnome-3-38-2004  -
content[gnome-3-28-1804]  simplenote:gnome-3-28-1804              gnome-3-28-1804:gnome-3-28-1804  -

这表明仍有一些程序在使用Gnome 3.28和3.38版本,因此不应删除。


2快照连接[<snap>](例如snap connections gnome-3-38-2004)无需通过grep进行管道传输也可以工作。 - antichris

据我所知,目前还没有修剪/自动删除功能,但你可以尝试一下。
snap connections

它将列出各种快照之间以及与系统的连接,这样你就可以尝试弄清楚哪些连接与你实际需要的任何内容没有有意义的关联,并手动删除它们。
您可以通过运行“snap connections ”来检查特定快照的连接,例如:
$ snap connections gnome-3-38-2004

Interface                 Plug                                       Slot                             Notes
content[gnome-3-38-2004]  firefox:gnome-3-38-2004                    gnome-3-38-2004:gnome-3-38-2004  -
content[gnome-3-38-2004]  gimp:gnome-3-38-2004                       gnome-3-38-2004:gnome-3-38-2004  -
content[gnome-3-38-2004]  snap-store:gnome-3-38-2004                 gnome-3-38-2004:gnome-3-38-2004  -
content[gnome-3-38-2004]  snapd-desktop-integration:gnome-3-38-2004  gnome-3-38-2004:gnome-3-38-2004  -

请记住,连接列表不包括作为其他快照基础的快照的关系(例如bare和所有core快照,如core18core20等)。
感谢这个答案给我指明了正确的方向。

我可以写一个脚本来显示未连接的快照:
显示未连接的快照
#!/bin/bash

list_connected_snaps_sorted() {
  snap connections \
    | tail -n +2 \
    | awk '{print $1}' \
    | sort \
    | uniq
}

list_all_snaps_sorted() {
  snap list \
    | tail -n +2 \
    | awk '{print $1}' \
    | sort

}

echo "Unconneted snaps:"
(
  diff -U0 -u \
    <(list_connected_snaps_sorted) \
    <(list_all_snaps_sorted) \
) \
     | grep '^+' \
     | tail -n +2 \
     | cut -c2-

希望能帮到你。

snap remove <snap name>

这是一个非常强大的工具,但如果存在依赖关系,它将无法成功执行。
例如,如果安装了 Firefox Snap,尝试移除其核心框架:
snap install firefox
snap remove core20

错误提示 snap 正在被 Firefox 使用
还有一些软依赖项是在连接中的,例如。
snap install firefox
snap connections | grep gtk-common-themes
snap remove gtk-common-themes

2这是一个非常糟糕的建议。snap remove在移除依赖时不会出错,只有在尝试移除基本的snap时才会出错。连接就是snap的依赖关系,如果连接断开,snap将无法运行,这一点并不“软性”。如果你没有从控制台尝试启动这样一个损坏的GUI snap,你甚至看不到为什么什么都没有发生的错误消息。 - antichris
不知道:随时可以更新社区维基答案。 - Jack Wasey
现在你知道了。你自己不能做吗?是什么让你觉得别人应该负责修正你的错误答案呢? - antichris