如何在Arch Linux中清理程序包缓存

时间:2020-03-21 11:46:45  来源:igfitidea点击:

我们都知道,Arch Linux及其衍生版本的默认软件包管理器Pacman会将所有下载的软件包存储在/var/cache/pacman/pkg /文件夹中。

我们也知道,它不会自动从缓存中删除旧的或者已卸载的软件包。
在特定时间段后,缓存文件夹的大小将变大。
因此,建议定期清理Arch Linux中的程序包缓存,以释放硬盘空间。

Pacman具有内置选项,可删除所有缓存的软件包。
我们可以通过运行“ sudo pacman -Sc”命令来清理缓存的软件包。
但是,此命令将删除所有旧版本,仅保留当前安装的软件包的版本可用。
这不是推荐的方法。
因为,有时我们可能希望将特定的软件包降级到其较旧的版本。

因此,如果我们清理了所有旧软件包,则无法选择从Cache文件夹安装它们。
我们只能从Arch Linux官方存储库中安装它们。
这是Paccache脚本提供帮助的地方。

Paccache脚本由Pacman软件包本身提供。
因此,我们不必费心安装步骤。
默认情况下,Paccache将保留3个最新的软件包版本。
除3个最新的软件包版本外,它将删除每个软件包的所有缓存版本,无论是否已安装。
此教程讲授如何使用paccache脚本在Arch Linux及其衍生版本中正确清理程序包缓存。

在Arch Linux中清理程序包缓存的推荐方法

首先让我检查一下我的缓存文件夹中有多少个可用的缓存程序包。

$sudo ls /var/cache/pacman/pkg/| wc -l
3185

如我们在上面的输出中看到的,我总共有3185个缓存的软件包。
让我检查一下缓存文件夹使用的总磁盘空间。

$du -sh /var/cache/pacman/pkg/
9.7G /var/cache/pacman/pkg/

目前,我已缓存9.7 GB的程序包。
这太多了。
我不想保留所有这些。

要清除所有软件包,除了3个最新版本,请运行以下命令:

$sudo paccache -r
[sudo] password for sk:
==> finished: 854 packages removed (disk space saved: 4.37 GiB)

看到了吗?
Paccache从缓存中删除了854个旧的和/或者卸载的软件包,并节省了4.37 GB磁盘空间。
让我检查一下缓存文件夹中还剩下多少个软件包。

$sudo ls /var/cache/pacman/pkg/| wc -l
2331

伟大的!现在,“高速缓存”文件夹中有2331个高速缓存的程序包可用。
这是每个高速缓存程序包的3个最新版本。

让我再次检查缓存文件夹使用的总磁盘空间。

$du -sh /var/cache/pacman/pkg/
5.4G /var/cache/pacman/pkg/

现在,我已经节省了多达4GB的磁盘空间。

还是要删除更多软件包?
当然可以! Paccache使我们可以决定要保留多少个最新版本。
例如,如果我们只想保留一个最新版本,请运行以下命令:

$sudo paccache -rk 1

其中,k表示在缓存中保留每个包的“ num”个。

要删除所有已卸载软件包的缓存版本,请使用以下命令重新运行paccache:

$sudo paccache -ruk0

其中,u标志指示已卸载的软件包。

或者,只需使用以下pacman命令删除所有已卸载的软件包:

$sudo pacman -Sc

要从缓存中完全删除所有软件包(无论已安装还是卸载),请运行以下命令:

$sudo pacman -Scc

使用此命令时请小心。
一旦删除了缓存的程序包,就无法检索它们。

自动清理程序包缓存

如果我们懒得手动清理软件包缓存,则可以使用pacman挂钩自动执行此任务。
每次pacman事务处理后,pacman挂钩都会自动清除软件包缓存。

为此,创建一个文件/etc/pacman.d/hooks/clean_package_cache.hook:

$sudo mkdir /etc/pacman.d/hooks
$sudo nano /etc/pacman.d/hooks/clean_package_cache.hook

添加以下行:

[Trigger]
Operation = Upgrade
Operation = Install
Operation = Remove
Type = Package
Target = *
[Action]
Description = Cleaning pacman cache...
When = PostTransaction
Exec = /usr/bin/paccache -r

保存并关闭文件。
从现在开始,每次pacman事务(如升级,安装,删除)后,程序包缓存都将自动清除。
我们不必每次都手动运行paccache命令。

有关更多详细信息,请通过运行以下命令来参考“ Paccache帮助”部分:

$paccache -h