我的 Mac 提示“磁盘空间已满”的时候,我扫了一眼“关于本机-储存空间”,好家伙,系统数据直接占了 100 多G。一开始我还以为是安装包没删干净,后来才发现真正的坑远比我想象的多。这篇文章就是把我踩过的坑、试过的方法、清理完又复发的教训全整理一遍,尽量把每一步都写清楚,适合所有被 Mac 存储空间折磨的人参考。
先说结论:Mac 存储空间被吃掉 100G 以上的情况非常常见,绝大多数不是什么“中毒”或“坏了”,而是系统备份快照、缓存文件、日志文件、开发者工具这几个大头在搞鬼。解决思路也简单,先用工具定位哪里占空间,再按优先级逐项清理,最后配合定期维护防止反弹。整个过程不需要重装系统,风险相对可控,按下面的步骤走基本都能清出几十个G。
1. 先用自带工具看清楚,空间到底去哪了
1.1 别急着删,先打开储存空间概览
点击左上角苹果图标,选择“关于本机”,切到“储存空间”标签页。这里会给你一个大致的分类图,比如应用程序、文稿、系统数据、macOS、照片、邮件等。如果你发现“系统数据”或“其他”占了很大一部分,那基本可以断定问题出在缓存、日志、本地快照这类系统文件上。
我第一次看到“系统数据”这一项,足足有 80 多G,第一反应是“这是什么鬼”。后来才慢慢搞清楚,这个分类在旧版 macOS 里叫“其他”,包括的内容非常杂:缓存、日志、临时文件、Time Machine 本地快照、旧的系统更新包、磁盘映像文件、开发者工具、虚拟机镜像,甚至 Spotlight 索引文件都在里面。所以这个数字很大,不代表哪里出问题了,它只是把不属于“应用程序”“文稿”“照片”的东西一股脑归到这一类。
1.2 系统为什么会悄悄占这么多空间
一个比较隐蔽的原因是“本地快照”。只要你开过 Time Machine,就算没有外接备份盘,macOS 也会在本地留一份快照,方便你恢复误删的文件。问题在于,有些情况下本地快照不会自动清理,尤其当你的外置备份盘很久没插上时,系统会持续保留这些快照,导致空间被慢慢吃光。另一个大头是“缓存”,App 的缓存、系统的缓存、浏览器的缓存,日积月累相当可观。再加上每次系统更新留下的旧安装包、旧版动态库,以及各类开发工具的中间产物,100G 根本不稀奇。
1.3 先建立一个排查清单
如果你也想系统地排查,我建议的顺序是:先看 Time Machine 快照,再看系统缓存,然后是日志和临时文件,最后是开发者工具相关文件夹。这个顺序符合“越容易清理、越安全”的原则。别一上来就找文件夹乱删,容易误伤。
2. 定位大文件的利器,图形化工具加命令行双管齐下
2.1 用图形化工具快速找到“空间黑洞”
App Store 里有不少磁盘占用分析工具,比如 DaisyDisk、OmniDiskSweeper、GrandPerspective。DaisyDisk 是可视化的环形图,扫一眼就知道哪个目录最大。GrandPerspective 是免费的,用色块显示文件大小分布。OmniDiskSweeper 更朴素,直接列出每个文件夹的大小。
我最常用的还是 GrandPerspective,因为它免费且能按文件大小排序。打开后选择根目录,等它扫描完,你会看到很多大色块,通常颜色最深、面积最大的那几个就是“罪魁祸首”。鼠标悬停可以看具体路径,然后右键在 Finder 中显示,就能定位到具体文件。
2.2 命令行定位更精准,推荐这几个配方
图形化工具适合看全景,但真要针对某个目录深挖,命令行效率更高。我常用的几条命令:
# 查看磁盘整体占用 df -h # 查看当前目录下每个子目录的大小,按从大到小排序 du -sh * | sort -rh # 查看隐藏目录的大小(前面加 . 就行) du -sh ./* ./.??* 2>/dev/null | sort -rh # 查看 Library 下哪几个目录最肥 du -sh ~/Library/* | sort -rh | head -30小技巧:如果某个目录一直显示不出来大小,可能是权限问题。你可以在命令前面加sudo,输入密码后再试。比如sudo du -sh /Library/* | sort -rh。
2.3 随手记录下“哪个目录最肥”
我个人的习惯是,先用du统计一遍,心里有个底,然后针对性清理。下面这个例子是我在朋友电脑上执行的结果,截取了最占空间的前几个:
45G ~/Library/Containers 28G ~/Library/Application Support 15G ~/Library/Caches 9G /System/Volumes/Data/Library 5G ~/Downloads可以看到,Containers和Application Support占了很大比例。这两个目录,一个存放 App 的沙盒数据,一个存放 App 的配置文件和缓存,里面很容易积累垃圾。后面我会详细展开这两个目录的清理方法。
3. 按优先级清理,先动安全的,再动顽固的
3.1 第一步:处理 Time Machine 本地快照
如果你开了 Time Machine 但长期不接备份盘,本地快照就会越攒越多。检查方法用终端最快:
tmutil listlocalsnapshots /如果列出的快照数量很多,可以根据时间判断哪些可以删。删除单条快照的命令是:
tmutil deletelocalsnapshots 2024-01-01-000000但这样一条条删比较费劲,可以一次性禁用本地快照。执行下面的命令会暂时关闭 Time Machine 的本地快照功能,重启后才会重新生效:
sudo tmutil disablelocal注意,这个参数在高版本 macOS 里已经被移除了,如果你执行报错,那就别纠结,直接用tmutil listlocalsnapshots /配合上面的删除命令来处理。亲测下来,把本地快照清理一遍,通常能释放 20 到 50G 空间。
另外,别忘了把 Time Machine 自动备份的间隔时间调大一些,或者在“系统设置-Apple ID-iCloud-云盘”里看看有没有同步的在云端占空间的文件。本地快照只是“防治”,从源头减少快照数量才是长久之计。
3.2 第二步:清理缓存目录,安全系数最高
缓存是最好欺负的对象,删了之后系统会自动重建,而且不会影响正常使用。重点看这几个地方:
~/Library/Caches ~/Library/Logs ~/Library/Application Support/CrashReporter /System/Volumes/Data/Library/Caches其中~/Library/Caches最安全,可以直接把里面的子目录都删了。但有个细节要注意:有些 App 正开着,它的缓存文件可能正在被占用,导致删除失败或者下次启动时重建出错。建议先把相关 App 退出再删。
~/Library/Logs和CrashReporter里的崩溃日志,如果你不是开发者,基本可以全删。系统日志、崩溃报告这类文件,对普通用户来说毫无价值,我最多留最近几天,其余都删。
3.3 第三步:清理系统缓存与临时文件
除了用户目录,系统层面的缓存也不小。执行下面命令可以尝试清理系统缓存,但前提是你能接受某些 App 首次打开时变慢,因为缓存都没了,需要重新生成:
sudo rm -rf /System/Volumes/Data/Library/Caches/com.apple.iconservices.store sudo find /System/Volumes/Data/Library/Logs -type f -mtime +7 -delete/private/var/folders目录是临时文件的存放地,很多隐藏的缓存也在这里。安全起见,不建议手动整个删除,可以使用系统自带的“存储空间”管理工具来清理“临时文件”。
在“储存空间”界面点一下“管理”,会有一个“系统数据”的入口,点进去可以看到“开发人员工具”“缓存”“日志”等分类,里面能一键删除的内容就一键删。不过实测这个交互比较鸡肋,有时点“删除”后,空间释放并不明显,所以我的习惯还是以命令行为主,图形界面为辅。
3.4 第四步:处理“其他”里的旧系统更新包和安装镜像
macOS 每次大版本更新都会下载好几个G的安装包,安装完成后旧安装包可能会遗留在~/Downloads或~/Library/Application Support/com.apple.TCC之类的目录。还有一种是.dmg或.iso镜像文件,一旦安装完就可以删了。
你可以在“访达”里用快捷键Cmd+Shift+G,输入~/Downloads,看看里面有没有已经安装完的 dmg 文件。另外系统自带的“储存空间-管理-文稿”里也会列出大文件,比如缓存、废纸篓、iCloud 云盘里的旧版本文稿,能删就删。
有一点必须注意:不要手动删除/System/Volumes/Update或/Library/Updates下的文件,除非你明确知道自己在做什么。这些目录与系统更新完整性有关,乱删可能导致下一次系统更新失败。如果你确实想清理旧更新缓存,建议用系统自带的“系统设置-通用-储存空间”里的“优化储存空间”,它会在后台帮你处理部分更新遗留文件。
4. 容易被忽略的“存储大户”,逐个击破
4.1 开发者工具的“隐藏炸弹”
如果你是开发者,那你的 Mac 里可能躺着几十G的开发工具缓存。最典型的是 Xcode。~/Library/Developer/Xcode/DerivedData这个目录,我见过有超过 30G 的。它存放的是项目编译的中间产物,删了之后下次编译会重新生成,所以非常安全。
清理命令很简单:
rm -rf ~/Library/Developer/Xcode/DerivedData另外 Xcode 设备支持文件 (iOS DeviceSupport) 和模拟器运行时也可能占几个G,如果你不需要调试旧版本系统,也可以删:
rm -rf ~/Library/Developer/Xcode/iOS DeviceSupport rm -rf ~/Library/Developer/Xcode/watchOS DeviceSupport还有 CocoaPods 缓存和 Swift Package Manager 缓存,位置在~/Library/Caches/org.swift.swiftpm和~/Library/Caches/CocoaPods,删掉不影响项目,只是下次pod install或swift build会重新下载依赖。
4.2 虚拟机镜像和容器,这个是大头
用 UTM、Parallels Desktop、VMware Fusion 跑虚拟机的朋友要注意,虚拟机镜像文件动辄几十个G,通常放在~/Parallels或~/Documents下。如果你有不再需要的虚拟机系统,直接在虚拟软件里删除,能一口气释放大量空间。
还有 Docker Desktop,它的镜像和容器数据默认在~/Library/Containers/com.docker.docker/Data。我用docker system prune -a清理无用的镜像时,发现能释放超过 40G 空间。虽然这个命令不是纯 Mac 存储优化命令,但对 Mac 本地存储的影响非常直接。
容器中那些“悬空镜像”和“停止的容器”,长时间不清理,都是磁盘杀手。建议定期执行:
docker system prune -a --volumes docker builder prune4.3 邮件附件和下载目录
邮件客户端如果设置了“下载所有附件”,那邮件里的图片、PDF 会被缓存到本地。在“邮件”App 的偏好设置里,把“下载附件的方式”改为“最近观看的”或“不自动下载”,能缓解不少。如果你用的是 Outlook,它的缓存目录也可能巨大,建议在设置里限制离线缓存大小。
~/Downloads这个目录很容易被忽略,因为看起来只是零散几个文件,但日积月累,几百MB到几个G都很正常。可以定期把需要的文件归档到移动硬盘或云盘,其余清空。
4.4 App 容器的“沙盒垃圾”
回到刚才提到的~/Library/Containers,这是 App 沙盒数据的存放目录。大部分 App 的缓存和离线数据都在这里。我用群晖和 NAS 的时候,发现像com.tencent.xinWeChat(微信)这类聊天工具的缓存能到 5G 以上。很多聊天工具会把图片、视频、语音全部缓存在本地,而且清理入口藏得很深。
最好的办法不是在终端里删,而是打开 App 自带的清理功能。比如微信的设置里可以选择“存储空间-管理”来清理聊天缓存。在删终端里~/Library/Containers/com.tencent.xinWeChat时,建议先把微信完全退出,然后删除Data/Library/Application Support/com.tencent.xinWeChat下的临时缓存目录。不过这种方法只建议对纯缓存目录操作,别直接删整个 App 数据目录,否则聊天记录和登录状态会丢失。
4.5 iOS 备份文件与旧设备备份
iTunes/Finder 曾经给你 iPhone 或 iPad 做过完整本地备份的话,备份文件会放在~/Library/Application Support/MobileSync/Backup。每个备份可能 20G 到 60G 不等,如果你不打算恢复旧设备,可以全删。这个目录是我清理别人电脑时见过最大的单个目录之一。
在终端里操作很快:
du -sh ~/Library/Application\ Support/MobileSync/Backup/* rm -rf ~/Library/Application\ Support/MobileSync/Backup/<备份名称>删之前可以先用访达打开该目录,确认备份时间,以免误删。
5. 清理完之后,空间怎么又满了
5.1 刚删完就反弹?多半是这几个原因
我自己就遇到过,第一天清了 40G,第二天又变成 30G,整个人都快崩溃了。后来复盘,主要原因有三:
一是 iCloud 的优化存储功能。如果你开启了“桌面与文稿”同步,Mac 会将本地文件替换为云端占位符,但也可能反过来下载很多文稿。最好去“系统设置-Apple ID-iCloud”里看看哪些 iCloud 云盘文件已经被下载到本地,选“移除下载”来释放空间。
二是页面文件与内存交换。Mac 在内存压力大的时候会使用交换文件(swap),这些文件在/private/var/vm下面,占用几个G很正常。重启一下系统就能释放,不用特意处理。
三是日志和统计分析。某些系统服务会周期性写入日志,比如 Spotlight 的索引日志,CloudKit 的同步日志。这属于正常现象,但如果你发现~/Library/Logs一直在生成巨型日志,可以观察一下是哪个 App 导致的,然后去它的设置里关掉诊断上报。
5.2 “系统数据”里的“其他”还能怎么挖
如果你已经做了上面所有操作,系统数据依然占着几十G,那就要考虑这几个方向了:
- Homebrew 的缓存:
~/Library/Caches/Homebrew,可以执行brew cleanup -s。 - Node 的缓存:
~/.npm和~/Library/Caches/yarn,可以执行npm cache clean --force。 - 模拟器 / Android 虚拟设备:
~/.android/avd、~/Library/Android/sdk/system-images,很容易有 10G 以上。 - 旧版本系统保留的“资源库”:在
/Library和/System/Volumes/Data/Library下,可能有些不再被系统引用的库文件,建议用清理工具扫描后再删,自己手动翻容易误删。
5.3 常见问题速查表
| 现象 | 常见原因 | 处理方式 |
|---|---|---|
| 系统数据 80G+ | Time Machine 本地快照、缓存 | tmutil listlocalsnapshots /删除快照;清理~/Library/Caches |
| 应用程序占 30G+ | 部分 App 的容器数据 | 卸掉不用的 App,或用 App 自带的“清除缓存” |
| 电影 / 其他 50G+ | Downloads、虚拟机镜像、iOS 备份 | 用 GrandPerspective 扫大文件逐一定位 |
| 刚清理完又满 | iCloud 下载、日志、页面文件 | 调整 iCloud 优化存储,重启系统,关诊断上报 |
| 更新系统后空间骤减 | 旧安装包未清理 | 用“储存空间”管理里的“系统数据”清理,或删除旧更新缓存 |
6. 日常维护建议,避免下次再为新空间发愁
6.1 给未来的自己定一个清理周期
我现在的习惯是每个月做一次简单清理,大概三步:打开“关于本机-储存空间”,看一眼“系统数据”有没有异常增长;跑一次sudo tmutil listlocalsnapshots /,把旧的本地快照删掉;最后用 GrandPerspective 扫一遍~/Library/Containers和~/Downloads。
如果你嫌手动麻烦,可以写一个简单的 Shell 脚本,定时执行缓存清理。但这里不推荐自动化删除所有缓存,因为有些 App 的缓存里有未同步的数据,删了可能造成登录状态丢失。
6.2 善用外部存储和 iCloud 分摊压力
个人强烈建议把不常用的大文件(电影、安装包、旧项目压缩包)移到外置硬盘或云盘,不要一直留在本地。Mac 自带的“优化储存空间”功能可以自动移除已观看的 Apple TV 影片和已经上传到 iCloud 的文稿本地副本,这个可以打开。
用 NAS 的话,还可以把虚拟机镜像和 Docker 数据目录放到网络存储上,但前提是你的网络环境和 NAS 性能足够好,否则虚拟机或者 Docker 的运行体验会明显下降。
6.3 工具选择心得:系统自带优先,第三方选对不选贵
清理工具五花八门,我的原则是:能用系统自带解决的就用自带,比如“储存空间”管理、tmutil、du和GrandPerspective。如果非要买第三方工具,优先考虑专门针对“磁盘占用分析”的,比如 DaisyDisk 这类可视化工具,不要用那种号称“一键清理”但实际操作不透明的工具。
第三方清理工具有时候会误删配置文件,之前有个朋友用某清理软件清完后,Safari 的历史记录被清空了不说,某些 App 的登录凭证全部失效,得不偿失。
6.4 最后的体会
Mac 磁盘空间管理,说到底就是和“系统数据”斗智斗勇。我踩过最大的坑就是一上来猛删Library里的东西,结果把 App 的登录状态弄丢,还得重新配置。后来学聪明了,先看快照,再看缓存,最后才动配置类数据。这套流程走下来,我的系统数据从原来的 105G 降到了 30G 左右,而且保持稳定。如果你也被这个问题困扰,按照这篇文章的顺序从第一步开始试,应该有不错的收获。