有人知道为什么目录$HOME/.local/share/flatpak/repo
包含这么多文件(69k)并且这么大(2Gb)吗?那是什么?无论如何,我几乎从不使用 flatpaks....
我猜想在备份(deja-dup)中包含 flatpak 目录并不重要。
PS 看起来里面有硬链接,因为 flatpak 文件夹的文件数量是原来的两倍,但总大小相同。
答案1
扁平包装软件包在沙盒模式下运行:因此,根据设计,flatpak 会占用单个应用程序的大量磁盘空间,即使应用程序较小,因为它会提取应用程序的所有依赖项并独立运行。这种设计的优点是您不必担心系统的依赖项和更新可能会破坏您的应用程序。但是,它会占用大量磁盘空间。
因此,用户唯一能做的就是监控 flatpak 的大小并定期进行清理。就我个人而言,我有一个名为“spring-cleaning”的脚本,我会定期使用它来清理系统(其中有一个与 flatpak 相关的部分)。
通用清理
- Flatpak 应用程序可能会共享一些运行时包,这些包代表应用程序的基本依赖项:如果系统中安装了运行时,但没有任何 flatpak 应用程序使用(
flatpak list --app --columns=application,runtime
列出哪个应用程序使用哪个运行时),您可以使用 将其删除flatpak uninstall --unused
。这是一种清理,第一次运行时可能会产生很大的效果,但你可以想象,第一次使用后清理可能并不重要。 - Flatpak 应用程序可能会在
/var/lib/flatpak/repo/objects
文件夹中创建对象,这些对象的大小可能会非常大。要删除这些对象(没有对其应用程序的明确引用),您需要运行(使用sudo
,因为您正在清理系统文件夹中的对象)sudo flatpak repair
。每次运行命令时,此清理的影响都可能很大。 - 系统和用户文件夹中的 Flatpak 缓存文件也可能会被删除。您可以运行
sudo rm -rfv /var/tmp/flatpak-cache-*
并rm -rfv ~/.cache/flatpak/*
具体清理
- 您可以卸载不需要的应用程序,或者如果可行的话,用 .deb 版本的应用程序替换大型应用程序。您可以按大小对 flatpak 应用程序进行排序
flatpak --columns=name,size --user list
,然后使用其名称卸载应用程序flatpak uninstall <flatpak_app_name>
合并脚本(使用 sudo 运行)
#!/bin/bash
# Error status variables
STATUS_OK=0
STATUS_ERROR=1
# Definitions
USER_NAME="${SUDO_USER:-${USER}}"
USER_DIR="/home/${USER_NAME}"
# Execute it as root user
if [ "${USER}" != root ]; then
echo "ERROR: must be root! Exiting..."
exit "${STATUS_ERROR}"
fi
# Current status
USED_BEFORE="$(df -k / | awk 'NR>1 {print $3}')"
# flatpak cleanup
if [ -n "$(command -v flatpak)" ]; then
flatpak repair &> /dev/null
# Remove flatpak cache
rm -rf /var/tmp/flatpak-cache-*
sudo -u "${USER_NAME}" rm -rf "${USER_DIR}"/.cache/flatpak/*
# Remove unused flatpak runtimes
if [ -n "$(flatpak list --runtime)" ]; then
flatpak uninstall --unused
fi
fi
# Current status
USED_AFTER="$(df -k / | awk 'NR>1 {print $3}')"
# Summary
echo "Freed up space: $(( (USED_BEFORE - USED_AFTER)/1024 )) MB"
exit "${STATUS_OK}"
答案2
扁平包装处于“沙盒”状态,这意味着应用程序所需的任何应用程序缓存、大型库等都存储在这些目录中。这意味着这些目录的文件大小通常非常大。