如何从Ubuntu中移除Snap?

如何移除snap?apt假装它不存在,但我仍然可以使用它来调用命令。
尝试移除它会显示“只读文件系统”。
# apt remove snap
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'snap' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# snap whoami
email: -
5个回答

包裹不叫做snap,而是snapd
你会想要执行
sudo apt autoremove --purge snapd

在那之后,运行以下命令,这样Ubuntu就不会自动将snapd安装为更新。

sudo apt-mark hold snapd

附加评论:

  1. Ubuntu 22.04将Firefox作为快照应用程序的一部分默认安装。如果您尝试sudo apt install firefox,它将重新安装快照而不会询问您。请按照这个答案链接安装Firefox为apt软件包。

  2. 此外,由于移除快照还将删除snap-store,您可能希望安装gnome-software作为图形化应用商店。

    sudo apt install gnome-software --no-install-recommends

--no-install-recommends 确保不会再次安装 snap 插件。

  1. 要防止 Ubuntu 在将来自动重新安装 snapd,请参阅this answer

4为什么要使用--purge?楼主并没有提到删除操作必须连同配置文件一起移除。 - Ruslan
35如果配置文件被留下,那么在这种情况下,AppArmor会在启动时崩溃。 - Charles Green
1这会阻止未来的系统更新吗?通常情况下,ubuntu-desktop 元包会因为类似的问题被删除,如果你想升级的话,以后就必须重新安装它。这里会是这种情况吗? - tutuca
2删除元包不会阻止原先安装的软件包的更新,不是的。 - dobey
1小心:我这样做是为了卸载微信,但它也自动删除了Skype、Slack、Spotify和许多其他GNOME功能! - pietro
6@pietro 这不是用于删除单个快照,而是从系统中删除所有快照及其支持。如果您想删除单个快照,需要使用 snap remove 命令来执行。 - dobey
1@dobey 是的,你说得对,我后来才意识到这一点。我的评论的意思是,如果你使用了你(正确地)建议的代码,那么要小心,因为它可能会产生意想不到的后果。我不知道slack、spotify等应用在我的机器上是通过snap安装的。 - pietro
请注意,这只会在当前时刻删除快照。依赖关系可能会在未来的apt操作中自动引入(apt确实会告知并提示您,但显然没有人去读)。如果您希望快照永远不再出现,您必须使用apt_preferences(5)告诉apt。也许有人可以在此页面上测试并提供确切的解决方案? - Robie Basak
1你可能想要添加 sudo apt-mark hold snapd,以确保它不会意外地重新出现。 - mivk
可能还需要删除lxd用户。 - Konchog
你可能还想从你的PATH中移除/snap/bin。它是硬编码在/etc/environment/etc/sudoers中的。 - nyg

简而言之:

sudo rm -rf /var/cache/snapd/

sudo apt autoremove --purge snapd gnome-software-plugin-snap

rm -fr ~/snap

sudo apt-mark hold snapd

这将彻底删除 snapsnapd、所有安装的 snap 软件包以及它们的数据,并且不再在软件商店中建议 snap 软件包。 最后,它将阻止 snapd 软件包再次被安装。

你的输出结果 mountdfcat /proc/partitions 会感谢你的 ;)

可选项

通过尝试安装 chromium-browser 来测试该阻止功能,因为(截至撰写本文时)它突然依赖于 snapd,并且在安装过程中会将刚刚卸载的一切再次拖回你的系统中:

sudo apt-get install chromium-browser

安装应该失败。

20我的输出 mount,df 和 cat /proc/partitions 感谢你 :) - Maarten
这个不起作用: rm: 无法删除 '/snap/lxd/10343/zfs-0.8/lib/libzpool.so.2.0.0': 只读文件系统 -- 例如。 - Zelphir Kaltstahl
5也许在你的情况下,在移除snapd之前,你需要优雅地卸载所有的snaps,而不是像我那样粗暴地强行删除它。使用sudo snap list、循环和sudo snap remove $package的组合应该可以实现,但很遗憾,我没有安装snap,所以无法给出更具体的指导 =\ - Stephan Henningsen
我必须手动执行 sudo rm -rf /var/cache/snapd/ 才能真正清除 snapd(Ubuntu 18.04)。 - Murphy
@Murphy 谢谢,我已经添加了。你有没有遇到像Zelphir那样的问题?在卸载snapd之前,你是否卸载了所有的snaps? - Stephan Henningsen
不,而且也没有。但是我只安装了一个软件,pycharm - Murphy
3我的肥胖刚刚开始节食。 - Owl
2在我的情况下,sudo rm -rf /var/cache/snapd/ 是不必要的,因为 --purge 已经清理了那个目录。 - machineaddict
可能还需要删除lxd用户。 - Konchog

"我不确定你是否特别要求这个,但如果你只想在软件(gnome-software)中删除显示的快照软件(就像我一样),你可以使用以下命令卸载快照插件。"
sudo apt-get remove --purge gnome-software-plugin-snap

我不知道是否需要使用--purge,但它运行良好 - 软件现在不显示来自Snap Store的软件包,但我仍然可以通过命令行安装它们,例如snap install [something]

我刚刚安装了一个服务器,显然它还预装了一些无用的快照,这些快照还阻止了设备的关机。 这篇非常好的博客文章提供了清理系统的指南。基本上,它的意思是:
snap list
sudo snap remove each_item # (by dependency order)
sudo umount /snap/core/xxxx # On 20.04, on 20.10 /var/snap
sudo apt purge snapd

清理位于`/home/*/snap`、`/usr/lib/snap`等位置的各种文件。
rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd

对于服务器而言,唯一的快照是lxd(Canonical正在推动作为Docker的替代方案)。

我认为这是Canonical和用户之间的利益冲突。用户应该能够选择他们需要的内容,而不被迫以困难的方式卸载东西。

无论如何,至少目前来说还是可以逆转的。您可以删除特定的软件包和快照守护程序,如果需要的话稍后再安装。


如果你的系统干净,那么博客上的指南可能有效,但如果你自己安装了一个快照,那就不起作用了。有些快照项目无法删除。 - EML
关键是按照依赖顺序逐个移除每个项目 #。 您可以尝试先移除所有的软件包,然后再针对有依赖关系的软件包重复此步骤。可能需要几次迭代才能完成。 - QT-1

如果你想移除Snap Store,你需要在终端执行以下命令:
sudo apt autoremove snapd

6这与dobey的回答非常相似。不同之处在于,当使用--purge参数时(就像那个答案中一样),conffiles会被删除,但是当使用autoremove操作而没有使用--purge参数时(就像这个答案中一样),它们不会被删除。所以这与那个答案不同,但如果你有特别的原因建议保留它们(即使是因为通常不需要删除它们),那么你可能想要编辑这个回答来解释一下。 - Eliah Kagan