~/Library/Caches:这个博客里一半内容背后的那个文件夹
Mac 上大部分应用的缓存都堆在 ~/Library/Caches 这一个文件夹里。这里讲清楚里面到底存了什么、怎么用 du 按大小给各个应用排名,以及哪些内容可以放心清理。
更多同类指南目前仅提供英文版本。 查看全部文章
如果你读过这个博客不止一篇文章,应该已经注意到一个规律:DerivedData、浏览器缓存、Electron 应用缓存、CocoaPods、JetBrains 索引——它们中的绝大多数,其实都住在同一个目录下面。与其一个应用一个应用地查,不如直接把这个目录整个看一遍,一次搞定。
open ~/Library/Caches
访达默认会隐藏 ~/Library——按住 Option 键的同时点击访达的前往菜单就能显示出来,或者直接用上面这条
open 命令,完全绕过隐藏文件夹的设置。
这个文件夹为什么存在,以及为什么它天生就安全
~/Library/Caches
正是苹果自己为这个用途专门指定的位置——存放任何应用都能重新生成或重新下载的数据,操作系统在磁盘紧张时被明确允许清空这里的内容。这不是开发者自己发明的惯例,而是苹果文件系统布局里有文档记载的一部分,任何行为规范的
Mac 应用,凡是非必要的数据都应该放在这里。
正是这一点事实,让这个文件夹在你磁盘上几乎所有位置里,都显得异常适合大范围清空:按照苹果自己的设计,这里的任何东西都不应该是任何重要数据的唯一副本。 实际存在的例外——少数几个把 Caches 文件夹用来存放并非真正可丢弃数据的应用——数量少到值得专门点名,本文下面就会讲到。
直接读一遍,按大小排序
du -sh ~/Library/Caches/* 2>/dev/null | sort -hr | head -30
在几乎任何一台用了一年以上的 Mac 上,光这一条命令,就会翻出这个博客其他指南里讲到的那些一模一样的名字:
com.apple.Safari、Google/Chrome、org.swift.swiftpm、Homebrew、CocoaPods、pip、
JetBrains,外加几十个体积较小的条目,来自你根本想不到要单独去查的各种应用。
这些文件夹名几乎总是反向 DNS 格式的包标识符
(com.company.AppName),要么就是普通的包名(pip、Homebrew)——如果看到一个不认识的,
mdfind "kMDItemCFBundleIdentifier == '<the-name>'" 通常能告诉你它属于哪个已安装的应用。
大范围清空的做法
对大多数人来说,大多数时候,这样做真的没问题:
rm -rf ~/Library/Caches/*
每一个行为规范的应用,下次运行时都会从这个文件夹里重新生成自己需要的东西——这正是这个目录存在的全部意义。看得见的代价,就是本博客其他地方讲到的每一项单独代价加总起来:浏览器重新拉取资源、包管理器在下次安装时重新下载、Xcode 的索引重建,等等——不会有什么东西坏掉,只是有几样东西会短暂变慢。
值得点名记住的例外
有少数应用把自己的 Caches 子文件夹用来存放一些丢了代价比“缓存”这个词听起来要大得多的数据,各自的详细情况在专门的文章里讲过:
- Slack 的
IndexedDB可能保存着还没发出去的草稿消息——见 Slack 和 Discord 指南。 - 任何把 IndexedDB 当作本地优先存储来用的应用(一些 PWA、一些笔记应用)——见 浏览器缓存指南。
- Docker 的缓存严格来说完全不在这个文件夹里 ——它在
~/Library/Containers下面的一个虚拟机磁盘镜像里,而不是~/Library/Caches,值得知道这一点,免得整体清空 Caches 之后,产生一种“Docker 也顺便处理掉了”的错觉。见 Docker 磁盘空间指南。
本博客讲到的其他一切——DerivedData 严格来说是在 ~/Library/Developer 下面,不是
~/Library/Caches,这是另一个值得知道、正好躲在这个文件夹波及范围之外的地方——要么直接就在
~/Library/Caches
里面,要么即便苹果把它归档在稍微不同的顶层目录下,也依然遵循同一条“可以安全重新生成”的原则。
为什么扫描一遍终究比直接整体删除更好
rm -rf ~/Library/Caches/* 是安全的,但它也是盲目的——它没法告诉你 45 GB
里有 40 GB 是哪三个应用占的,也没法在上面提到的 Slack IndexedDB
例外发生之前提醒你。一份逐字节的明细,排好序、标好名字,能把“清空缓存文件夹、祈祷别出事”变成“这四件事才是真正值得了解的,按顺序来”。
DevCruft 是一款正在开发中、面向开发者的免费 Mac 应用。它要读的正是这个文件夹——外加 DerivedData、Docker
的容器存储,以及其他所有紧挨在它外面的东西——设计目标是给出和上面 du
命令一样的排名明细,只不过每一项都标注它实际是什么、安不安全,而不是一个要你自己手动去查的包标识符。想在它推出时第一时间知道,可以加入候补名单。
这是本轮新增的十篇指南里的最后一篇。想要更全面地了解都是什么东西塞满了开发者的 Mac,可以从完整的开发者存储指南开始看起。