我最近安装了 Arch Linux,发现我相对较快地消耗了大量存储空间。不管出于什么原因,我在短短两周内就已经使用了 17GB。我没有安装大量软件,所以我相信所有旧软件包都在某个地方维护。
为了支持这一点,我注意到,如果我安装了一个软件包,删除该软件包,然后重新安装它,pacman 只会解压并重新安装该软件,而无需重新下载它。
在安装基本系统之后,在安装额外的软件之前,我可能使用了大约 2GB 左右。此后我只安装了 Matlab、Skype、Wine 和其他一些小程序。当然我也安装了缺失的库之类的东西,但价值还不到15GB。
我在这里完全错了吗?还是Arch在下载/升级到新版本时从不删除旧包?
如果是这样,如何删除这些未使用的包?
另外,当我删除已安装的软件包时,我使用pacman -R ...
答案1
不,pacman 不会从缓存 ( /var/cache/pacman/pkg
) 中删除旧包,因此,随着时间的推移,它可能会被填满。
您可以采用两种方法来清除缓存:强力方法pacman -Sc
:
-c, --clean
从缓存中删除不再安装的软件包以及当前未使用的同步数据库以释放磁盘空间。当 pacman 下载包时,它会将它们保存在缓存目录中。此外,您下载的每个同步数据库都会保存数据库,即使从配置文件 pacman.conf(5) 中删除它们也不会被删除。使用一个 --clean 开关仅删除不再安装的软件包;使用两个从缓存中删除所有文件。在这两种情况下,您都可以选择是或否来删除软件包和/或未使用的下载数据库。
或者,对于更细致的方法,您可以使用 pacman-contrib 附带的实用程序之一paccache
:
paccache 是一个灵活的 pacman 缓存清理实用程序,它有许多选项来帮助控制从包含 pacman 软件包 tarball 的任何目录中删除的数量和内容。
默认情况下,paccache -r
将删除除已安装软件包的最后三个版本之外的所有版本,但您可以使用开关更改此数字-k, --keep
。还有一个-d, --dryrun
开关可以预览您的更改。您还可以使用该-m, --move <dir>
选项将包移动到您选择的单独目录。请参阅paccache -h
或paccache --help
来了解所有开关。
pacman-contrib 包中有许多实用程序可以帮助进行包管理,值得仔细研究它们并了解它们的工作原理,并且可以使运行 Arch 变得更加容易。您可以通过以下方式查看完整列表:
pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin/ {print $NF}'
答案2
您的包缓存位于/var/cache/pacman/pkg/
.
笔记: pacman
软件包于 2018 年更新,并且还需要安装pacman-contrib
才能使用如下paccache
所述的脚本/工具。
做:
paccache -d
要执行以下操作-dryrun
并查看下次执行该实用程序时可能会删除的内容:
paccache -r
删除缓存的包。 17gbs 听起来确实很陡。确保你没有一些失控的日志。做:
du -h /var/log
或者甚至只是:
du -h /var
对于正在发生的事情有一个更一般的了解。
答案3
我强烈建议使用paccache
代替pacman -Sc
。甚至还有一个非常有效的标志,用于有选择地删除已卸载软件包的版本-u
。我推荐的标志paccache
是(作为 paccache v5.0.2 的一部分):
-d
,--dryrun
:执行试运行,仅查找候选包-r
,--remove
: 删除候选包-u
,--uninstalled
: 仅针对已卸载的软件包-k
,--keep <num>
: 在缓存中保留每个包的“num”(默认值:3)
示例:检查已卸载软件包的剩余缓存版本
paccache -dvuk0
答案4
pacman -Scc
执行您所要求的操作,但不建议这样做。来自维基百科
也可以使用以下命令完全清空缓存文件夹pacman-Scc,但这样做被认为是不好的做法,因为除了上述之外,它还会阻止在需要时直接从缓存文件夹重新安装包,从而强制重新下载它。除非迫切需要更多磁盘空间,否则永远不要使用它。
顺便说一句,当我卸载软件包时,我更喜欢使用pacman -Rnsc
,因为它还会删除软件包依赖项以及依赖于该软件包的软件包。与往常一样,请仔细阅读哪些软件包将被删除,因为您可能很容易使我们的系统处于不可用状态。