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

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

我安装了一些 snap 包 ( snap install …)。我可以使用snap list列出它们。但是我无法分辨哪些是手动安装的,哪些是安装的,因为其他包依赖于它们(auto在 apt 中)。我想删除自动安装的包(apt autoremove在 apt 中),(docker system prune在 docker 中)。

答案1

snap connections | grep XYZ 其中 XYZ 是您想要检查其依赖关系的包。

例如,我的目录中有一堆 Gnome 版本/snap。我不知道该保留哪些,该删除哪些。于是一时兴起,我卸载了“旧”版本。结果发现有些程序无法再启动,因为它们依赖于已删除的 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 connections

它将列出各种快照提供的连接以及彼此之间和与系统的连接,因此您可以尝试找出哪些快照没有以任何有意义的方式与您实际需要的任何东西相连,然后remove手动找出它们。

您可以通过运行来检查特定 snap 的连接snap connections <snap>,例如:

$ 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捕捉,即core18等等core20)。

感谢这个答案为我指明了正确的方向。

答案3

我可以编写一个脚本来显示未连接的快照:

show-unconnected-snaps

#!/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-

希望能帮助到你

答案4

snap remove <snap name>

是一把大锤,但如果存在依赖关系,则会失败。

例如,安装了 Firefox snap 后,尝试删除其核心框架:

snap install firefox
snap remove core20

錯誤狀態snap is being used by firefox

还有一些更软的依赖关系,例如

snap install firefox
snap connections | grep gtk-common-themes
snap remove gtk-common-themes

相关内容