让我们谈谈 Arch Linux(基于)发行版的一些有趣的事情:自动化包缓存清理。

清理 pacman 缓存

pacman 是 Arch 的官方包管理器。当使用它从官方存储库安装一个包时,它会被下载,存储在我们的系统中(具体来说,在/var/cache/pacman/pkg中),最后它被安装并且包文件保留在那里,以防我们将来需要重新安装它(对于例如,如果我们已经卸载了它,然后我们想再次安装它),或者如果我们安装了更新的版本,它不能按预期工作,我们想降级。

但是,包缓存永远不会自动清理,并且随着我们安装和升级包,它的大小会增长。我们可以等到我们的/已满,然后清理它......或者自动清理它,保留可能有用的文件。

pacman 具有清理已卸载包的缓存pacman -Sc和清理每个包的缓存pacman -Scc的操作。但是,清理它可能会很有趣,保留每个包的两个最新版本(已安装的一个和以前的一个),所以我们总是为每个包都有一个以前的版本,但不是每个包,以防我们不得不降级。我们可以使用来自pacman-contrib包的脚本paccache来实现这一点。

运行paccache -rk2,我们清理包缓存,只保留每个包的两个最新版本。此外,我们可以使用-u选项来仅清理已卸载软件包的缓存,例如,如果我们希望为已安装的软件包保留两个最新版本,而为已卸载的软件包保留最新版本(以防我们将来要重新安装它们) ,例如对于 AUR 包的 make 依赖项),我们可以运行:

$ paccache -rk2 && paccache -ruk1

清理缓存

yay 是一个 AUR 助手和一个 pacman 包装器,一个使用它的特性和一些附加特性的程序;在这种情况下,从 AUR(Arch 用户的社区驱动存储库)安装包。

AUR 不存储二进制包,但称为PKGBUILDs 的脚本从外部源下载源或二进制文件并制作 pacman 包和一些额外的文件。 yay 会自动执行此操作,但在缓存(位于~/.cache/yay)中,它不仅存储创建的包,还存储原始源文件或二进制文件以及过程中生成的文件。我们必须记住,每个包都有自己的缓存目录。

是的,有一个类似于 pacman 的操作-Sc,但同样,paccache似乎更有趣。这个脚本有一个选项,-c用于指定缓存位置,所以我们可以为每个安装了 yay 的包编写缓存目录。例如,如果我们想清理 yay 缓存,为已安装的包保留两个最新版本,而为已卸载的包保留任何内容,我们可以运行:

$ paccache -rk2 -c ~/.cache/yay/*/ && paccache -ruk0 ~/.cache/yay/*/

但是,此命令仅删除 pacman 软件包,而不删除其他文件。保留已安装版本的源文件或二进制文件(如果我们升级包并且它使用与以前版本相同的包)和 AUR 包的 git 存储库中的文件可能会很有趣(否则,会抛出错误当我们尝试升级包时),但不是其余的源文件或二进制文件,也不是在创建包期间生成的文件。

用于清理两个缓存的 Bash 脚本

首先,如果你还没有安装pacman-contrib包:

$ sudo pacman -S pacman-contrib

我编写了一个 bash 脚本,用于轻松清理 pacman 和 yay 缓存,基于这些我在 GitHub Gist 上找到,由luukvbaal创建。

它使用paccache清理两个缓存,保留已安装软件包的两个最新版本,官方存储库中已卸载软件包的最新版本,AUR 中未卸载软件包的任何内容,它从位于 yay 缓存中的 AUR 中删除已卸载软件包的目录和额外文件已安装包的目录,git 跟踪的文件、pacman 包和已安装版本的源文件或二进制文件除外。

例如,我们可以将脚本保存在~/.local/bin或您喜欢的$PATH中的任何目录中,因此我们只需键入yaycache即可运行它。

用于自动缓存清理的 Pacman 挂钩

这个脚本对于清理 pacman 和 yay 缓存很有用,但我们还没有达到自动化部分。

为了实现自动化,我编写了一个 pacman 钩子,一个在安装、删除或升级某些包后运行命令的文件。

在这种情况下,脚本在删除或升级任何包后运行。安装软件包后它不会运行,因为 yay installs make dependencies 在需要时运行脚本会删除必要的文件,因此安装会失败。

不要忘记更改Exec路径,使其指向您保存脚本的正确路径。

我们必须将钩子文件保存在/usr/share/libalpm/hooks中,因此在使用 pacman 时会触发它。

https://gist.github.com/albertored11/bfc0068f4e43ca0d7ce0af968f7314db

仅此而已...

我希望这种清理 pacman 和 yay 缓存的方法对你有用,当然,我感谢任何建议和意见。

Logo

更多推荐