如何删除Arch Linux中pacman安装的旧软件包?


51

我最近安装了Arch Linux,发现我很快就吞噬了很多存储。无论出于什么原因,我已经在大约2周的时间内使用了17GB。我没有安装大量软件,因此被认为所有旧软件包都保存在某个地方。

为此,我注意到如果我安装了一个软件包,请先删除该软件包,然后重新安装它,而pacman只需解压缩并重新安装该软件,而无需重新下载它。

安装基本系统后,在使用其他软件之前,我可能使用了大约2GB的内存。从那以后,我只安装了Matlab,Skype,Wine和其他一些小程序。当然,我还安装了缺少的类库,但价值不超过15GB。

我在这里完全错吗?或者Arch在下载/升级到新版本时从未删除旧软件包吗?

如果是这样,如何删除这些未使用的软件包?

另外,当我删除已安装的软件包时 pacman -R ...


1
将paccache设置为常规cronsystemd作业可能是一个好主意。
Sparhawk

Answers:


59

不,pacman不会从缓存(/var/cache/pacman/pkg)中删除旧软件包,因此,随着时间的流逝,它会填满。

您可以采用两种方法清除缓存:暴力破解pacman -Sc

-c,--clean
从高速缓存中删除不再安装的软件包以及当前未使用的同步数据库,以释放磁盘空间。pacman下载软件包时,会将它们保存在缓存目录中。此外,还会为您从中下载的每个同步数据库保存数据库,即使将其从配置文件pacman.conf(5)中删除,也不会删除数据库。使用一个--clean开关仅删除不再安装的软件包;使用两个从缓存中删除所有文件。在两种情况下,您都可以选择是或否来删除软件包和/或未使用的已下载数据库。

或者,对于更细微的方法,您可以使用pacman-contrib附带的一种实用程序paccache

paccache是​​一种灵活的pacman缓存清理实用程序,它具有许多选项来帮助控制从包含pacman软件包tarballs的任何目录中删除多少内容。

默认情况下,paccache将删除已安装软件包的最后三个版本,但会删除所有其他版本,但是您可以使用-k, --keep开关更改此数字。还有一个-d, --dryrun开关可以预览您的更改。请参阅paccache --help所有开关。

pacman-contrib软件包中包含许多实用程序,可协助软件包管理,值得仔细研究它们的全部内容,并了解它们的工作方式,并使Arch的运行更加轻松。您可以通过以下方式查看完整列表:

pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin/ {print $NF}'

jasonwryan表示:)也要非常小心使用双重--clean开关:如果最新版本发生任何问题(例如新软件包依赖于较早的lib或Python版本;硬件和最新版本相同),则禁止轻易恢复到工作软件包。核心)。除了/更好的解决方案外,我发现在其他地方设置pacman缓存(只需在/etc/pacman.conf中设置路径)。
tuk0z

2
如果没有paccache,可以通过安装pacman-contrib软件包来获得。
pfrenssen

+1,但我建议$ pacman -Ql pacman-contrib | awk -F"[/ ]" '/\/usr\/bin\/./ {print $NF}'避免在结果中留空行?;-)
Cbhihe

Welp,这rm -rf /var/cache/pacman/pkg是做错的事
发布自己


13

您的软件包缓存位于中/var/cache/pacman/pkg/

注意: pacman软件包已于2018年更新,此外还需要安装pacman-contrib才能使用如下paccache所述的脚本/工具。

做:

paccache -d

要执行一项操作,-dryrun并查看下次执行该实用程序可能会删除的内容:

paccache -r

删除缓存的软件包。17GB确实听起来很陡。确保您没有一些失控日志。做:

du -h /var/log

甚至只是:

du -h /var

有关正在发生的事情的更一般的想法。


7

pacman -Scc满足您的要求,但不建议这样做。来自维基

也可以使用pacman -Scc完全清空缓存文件夹,但这样做是不明智的,因为除上述内容外,如果需要,它还会阻止直接从缓存文件夹中重新安装软件包,从而迫使重新下载。除非迫切需要更多磁盘空间,否则切勿使用它。

顺便说一句,当我卸载软件包时,我更喜欢使用pacman -Rnsc,因为它还删除了软件包依赖性以及依赖于此软件包的软件包。与往常一样,请仔细阅读要删除的软件包,因为您很容易将我们的系统置于无法使用的状态。


太酷了-等于rm /var/cache/pacman/pkg/*那时吗?或者-我猜至少是默认情况下。/tmp很久以前,我已经将我的pkg缓存重定位到了大多数机器上,并让它squid在路由器上处理了一个中央缓存。并不是那么容易pacman -Scc
mikeserv

@mikeserv路由器上的中央Pacman软件包缓存?您是如何设置的,我喜欢它的声音,因为我同时拥有Arch台式机和笔记本电脑。

6

我强烈建议您使用paccache代替pacman -Sc。甚至还有一个非常有效的标志,可以有选择地删除已卸载软件包的版本-upaccache我推荐的标志是(作为paccache v5.0.2的一部分):

  • -d--dryrun:执行空运行,仅查找候选包
  • -r--remove:删除候选软件包
  • -u--uninstalled:仅针对已卸载的软件包
  • -k--keep <num>:将每个软件包的“ num”保留在缓存中(默认值:3)

示例:检查已卸载软件包的其余缓存版本

paccache -dvuk0

1
除了打印出选项以外,这如何添加到现有答案中?
jasonwryan

如果您删除了许多未使用的大包,则要从pacman的缓存中删除它们。的标志是可能-upaccache。大型软件包的示例包括Gnome,KDE或Texlive,以便为您提供一个想法。
strpeter

1
是的,我对国旗很熟悉。我的观点是,仅在答案中添加更多标志并不会改变它只是复制已经存在的事实。
jasonwryan

-k标志对我来说是新的,并且在帮助对话框中没有得到很好的解释,因此此处使用它很有用。
HLK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.