Mac系统数据爆满?ncdu磁盘占用分析与清理实战
2026/9/17 19:50:13 网站建设 项目流程

关于本机里那个"系统数据",是我见过最会藏东西的分类。上周帮朋友收拾他那台 256G 的 MacBook Air,储存空间里"系统数据"一栏写着 187GB,可用空间剩 3GB,微信一打开就提示磁盘空间不足。他把侧边栏里能看见的文件夹全加了一遍,加起来不到 80G,剩下的 100 多个 G 就跟蒸发了一样。后来我用 mac 磁盘大小统计工具 ncdu 扫了一遍,三十秒出结果,键盘按了几下就定位到两个大头:一个 60GB 的 Xcode 编译缓存,一个 40GB 的 iPhone 本机备份。这两个东西在访达里默认都不显示,在"储存空间"那张饼图里也被统统计进了"系统数据"。

这篇东西就是把这个过程完整写下来。ncdu 是什么、为什么我在 Mac 上说它"没有之一"、怎么装、怎么扫、扫出来的一堆目录哪些能删哪些不能碰、哪些占用它根本扫不到,以及在什么场景下它的确不如图形化工具。不管你是被"系统数据"搞懵的普通用户,还是天天和构建产物打交道的 iOS/后端开发者,或者手里管着几台机器的运维,这套流程都能直接照搬。

1. 访达和"储存空间"说不清磁盘去哪了,问题出在分类逻辑

1.1 "关于本机 - 储存空间"那张饼图,是按文件类型算的

很多人第一次用 Mac 都会踩这个坑:点开储存空间,看到"文稿""应用""照片""系统数据"这些分类,下意识以为它们是四个文件夹。不是。macOS 这套分类走的是文件类型和统一类型标识符(UTI)的判断逻辑,它扫描磁盘上的文件,根据扩展名、UTI 以及文件所在的路径,把它塞进预定义的几个桶里。照片进"照片",应用包进"应用",能识别出属于某个用户文档的进"文稿"。

那识别不出来或者不方便归类的呢?全部扔进"系统数据"。所以"系统数据"不是一个真实存在的目录,它是一个兜底分类,本质上是系统在说"这些东西我懒得管"。日志、缓存、模拟器镜像、第三方应用的 Application Support、虚拟机磁盘映像、容器镜像、iOS 备份、本地快照,全都在里面。你不可能在访达里找到一个叫"系统数据"的文件夹,因为它在磁盘上根本不存在。

这就解释了一个很反直觉的现象:你在访达里把所有文件夹的"显示简介"加起来,得到的数字永远对不上饼图。因为访达默认不显示隐藏目录,而用户目录下的~/Library就是一个隐藏目录,这里恰恰是大户聚集地。一个用了三年的 Mac,~/Library占到 50G 以上是家常便饭,但绝大多数人从来没打开过它。

1.2 可清除空间和 APFS 快照:真正"看不见"的那部分

比分类逻辑更让人困惑的是"可清除空间"。你会发现一件怪事:明明只剩 5GB 可用空间,往桌面拷一个 20GB 的镜像,居然成功了。这不是系统算错了,而是因为可清除空间会被系统在需要时自动腾出来。

可清除空间大致包括三类东西。第一类是 iCloud 云盘的"优化 Mac 储存空间"留下的占位符,文件图标在,内容还在云端,点开才下载。第二类是各类缓存,系统认为随时可以丢。第三类,也是量最大的一类,是 APFS 本地快照。

APFS 是写时复制(Copy-on-Write)的文件系统。快照创建的那一刻,它并不复制数据,只是记录了一份元数据引用。之后你修改文件,旧的数据块因为还被快照引用着,所以不能释放,新数据写到新的块上。时间机器开启后,系统会在本地自动生成这些快照,通常一天若干个,保留 24 小时左右。这意味着你昨天删掉的 30GB 文件,今天可能还实实在在地占着盘。

查快照的命令是tmutil listlocalsnapshots /,这会列出所有本地快照的时间戳。看 APFS 容器整体情况用diskutil apfs list,里面能看到每个卷的快照数量和容量信息。知道这两个命令的存在很重要,因为它能解释很多"我明明删了为什么空间没变"的疑惑,也能解释为什么 ncdu 扫出来的数字和你期待的差了一截——ncdu 走的是文件系统目录树,它看不到被快照单独引用的那些共享数据块。

1.3 找空间这件事,本质上一棵树一层层往下钻

磁盘占用在结构上是一棵树。根目录下有若干大分支,每个大分支下有子分支,一直分到文件。你要找的是"最粗的那根枝条",而最有效的办法就是笨办法:每一层都按大小排序,看谁最大,进到最大的那个里面,重复。

du -sh * | sort -h能实现这个过程,我自己也用了很多年。但它有两个硬伤:一是每次换目录都要重新敲一遍命令;二是它只给你一个静态结果,你想知道某个 20GB 的目录里面到底是什么,得再敲一次命令。图形化工具在这一点上走了另一个极端,它们给你一张漂亮的环形图或者方块图,哪一个色块大一眼就能看到,但色块和真实路径之间隔了一层——你知道这里有个 30G 的东西,但不确定它是不是你电脑上唯一一份,删起来没有安全感。

ncdu 的解法很朴素:保留完整的目录树和路径,把du的结果攒在内存里不丢,然后给你一个能用方向键移动的光标。你看到的每一行都是"路径 + 大小",排序永远按大小来,回车进去,左方向键退出来,三层五层下去就能精确到具体文件。这就是它在 Mac 上一直没被替代的原因,不是因为它功能多,而是因为它做的事情刚刚好,没有多余的一层抽象。

2. ncdu 敢说"没有之一",靠的是三件很硬的事

2.1 一次扫描只保留聚合信息,快而且不吃内存

ncdu 全称是 NCurses Disk Usage,最早的版本是 C 写的,现在的 2.x 系列用 Zig 重写了一遍,Homebrew 里brew install ncdu装到的就是 2.x。它扫描的机制很简单:从指定目录开始递归遍历,对每个文件做一次lstat系统调用,拿到大小和元数据,然后在内存里把这棵树建起来。

关键在于它只保留目录级别的聚合值和每个文件条目的大小,不读文件内容,不计算校验和,不做任何多余的事。所以扫描速度基本等于你磁盘的随机读性能上限,在 SSD 上每秒几万到十几万个文件是很常见的量级。内存占用方面,百万文件量级的目录树通常也就占几十到一两百 MB,扫完关闭就释放,没有任何常驻进程。

和图形化工具对比一下就很明显了。图形化工具为了画那张图,要额外算色块面积、做布局计算、渲染,扫描阶段往往还要读一遍 inode 再读一遍目录,甚至要申请完全磁盘访问权限后重新扫一次。我实测过同一台机器扫用户目录,DaisyDisk 大概两分钟左右出图,ncdu 十几秒,而且 ncdu 不会在扫的过程中让你等动画。

另外它是个单文件二进制,装完就是一个可执行文件,没有后台守护进程,没有菜单栏图标,不申请辅助功能权限,不常驻。对一个"一年用五次、每次用五分钟"的工具来说,这是最合适的形态。

2.2 键盘就是全部交互,几个键位记熟就够了

ncdu 所有的交互都在键盘上。第一次打开会觉得界面过于朴素,但把下面这组键位记熟,效率比鼠标点图形界面高得多。

按键作用
kj上下移动光标
Enter进入选中的目录
返回上一级
d删除选中项(会弹确认,可以勾多个一起删)
g切换大小显示方式(条形图 / 百分比 / 图形)
a切换"表观大小"和"磁盘占用"两种口径
nsCM分别按名称、大小、子项数量、修改时间排序
i查看选中项的详细信息(完整路径、大小、inode、硬链接数、修改时间)
e显示或隐藏排除项和被排除的目录
r重新计算当前目录
q退出

这里必须单独说一下a键切换的两种口径,因为很多人被这两个数字搞晕过。"表观大小"(apparent size)是文件逻辑上的字节数,"磁盘占用"(disk usage)是它在磁盘上实际占的块数。APFS 的块通常是 4096 字节,所以一个 100 字节的小文件,表观大小是 100B,磁盘占用是 4KB。反过来,稀疏文件、APFS 克隆文件、带压缩的文件,磁盘占用可能远小于表观大小。

这直接影响你的判断。比如~/Library下面有几万个小文件,按表观大小看可能只有几个 G,按磁盘占用看可能翻倍。清理缓存这种"小文件海"场景,看磁盘占用更有意义;判断一个视频文件是不是真的大,看表观大小更直观。我的习惯是默认看磁盘占用,确认具体文件时按一下a对照。

2.3 导出和导入:把一次扫描变成可以归档的体检报告

这个是 ncdu 被严重低估的功能。-o可以把扫描结果导出成一个文件,-f可以把这个文件重新加载回界面里浏览。

# 后台把整个根目录扫一遍,结果写到 /tmp 下的文件里 sudo ncdu -x -o /tmp/root-scan.json / # 之后随时离线打开这份结果,不会再碰磁盘 ncdu -f /tmp/root-scan.json

这个用法解决了好几个实际问题。第一,扫一个几十 TB 的外接阵列可能要几十分钟,你不想干等着,那就挂后台扫,扫完再看。第二,你可以在性能强的机器上扫描、把结果文件拷到另一台机器上分析,完全不产生额外 IO。第三,也是我最常用的一点:清理前导出一份,清理后再导出一份,两份对着看,谁变大了谁变小了一目了然。这比"感觉好像清理出空间了"靠谱得多。

需要注意版本兼容性。ncdu 1.x 的导出格式是自定义的二进制格式,2.x 换成了 JSON。2.x 能读 1.x 导出的文件,反过来不行。如果你是在一两台不同版本的机器之间传递扫描结果,先确认一下ncdu --version。JSON 格式还有个额外好处,你可以用jq之类的工具去解析,做自动化统计,比如定期扫描然后对比大目录的增长趋势。

3. 从装到跑通:Homebrew 装 ncdu 的完整路径和几个卡点

3.1 装之前先确认命令行工具,再决定路径

在 Apple Silicon 的机器上,Homebrew 默认装在/opt/homebrew;在 Intel 机器上,默认装在/usr/local。这个差异会影响到后面 PATH 的配置,也是很多人"装完了但是提示 command not found"的根源。

装 Homebrew 之前先确认 Xcode 命令行工具在不在,因为编译和很多依赖都要用到它:

# 有输出说明已经装了 xcode-select -p # 没有的话装一下,会弹窗,跟着点就行 xcode-select --install

然后跑 Homebrew 的官方安装脚本,过程中会要求输入密码,它需要创建目录和改权限:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

装完之后,Apple Silicon 的机器上脚本会提示你把下面这行加到~/.zprofile里,照做就行:

eval "$(/opt/homebrew/bin/brew shellenv)"

加完执行source ~/.zprofile,然后brew --version确认能跑起来。接下来就一条命令:

brew install ncdu ncdu --version

如果你只是偶尔用一次,不想为了它装整个 Homebrew,也可以去 ncdu 的项目发布页下载对应架构的预编译二进制。Apple Silicon 要选 arm64 版本,Intel 选 x86_64 版本。下载后解压、赋执行权限、丢到 PATH 里的某个目录(比如/usr/local/bin或者~/bin)就能用。这条路我在临时借来的机器上试过,完全可行。

3.2 装不上、装得慢的几种典型情况

Homebrew 在国内的网络环境下第一次用经常遇到几个问题,我基本都踩过。

第一种,卡在Updating Homebrew一直转圈。这是它在自动更新仓库,第一次装或者很久没更新的时候很慢。临时跳过自动更新的办法是在命令前面加环境变量:

HOMEBREW_NO_AUTO_UPDATE=1 brew install ncdu

第二种,git clone 阶段超时或者失败。可以考虑把 Homebrew 的仓库地址换成国内镜像源,通过HOMEBREW_BREW_GIT_REMOTEHOMEBREW_CORE_GIT_REMOTE两个环境变量指定,写进~/.zshrc里就不用每次敲了。换源之后记得删掉旧的缓存目录重新初始化,否则可能会读到半截的仓库。

第三种,权限报错,典型信息是/usr/local或者/opt/homebrew目录归属不对。这种情况多半是之前用sudo装过东西,导致一部分目录变成 root 所有。修复思路是把相关目录的归属改回当前用户,但改之前先看清楚路径,别对整个/usr/local无脑递归改权限,有把系统依赖搞坏的风险。

第四种,公司配发的机器上装了终端安全软件,curl 下载被拦、证书校验失败。这个不是技术问题,得找 IT 放行对应域名,别自己去绕过检测。

第五种,装完了ncdu提示找不到命令。九成是 PATH 没配,echo $PATH看一眼有没有/opt/homebrew/bin,没有就是shellenv那行没写对或者没生效。这种情况直接敲全路径/opt/homebrew/bin/ncdu也能验证它确实装上了。

3.3 加不加 sudo,扫出来的东西差一大截

这个问题值得单独说,因为很多人第一次扫的时候被满屏的红色提示吓到。

不加sudo扫用户目录,遇到自己没有读权限的目录会失败,ncdu 会在界面里显示成cannot open directory的条目,并且用不同的颜色标出来。加sudo之后权限全开,能看到的东西完整得多,但同时你也会扫到一堆不该碰的东西:系统保护卷/System、交换文件所在的/private/var/vm、各种系统级日志、/dev下的设备节点。

我的建议是这样分工:扫描阶段用sudo-x-x的作用是"不要跨越文件系统边界",它会跳过挂载的外接盘、网络卷、磁盘映像,既加快了速度,也避免把不相干的容量混进来。清理阶段只在用户目录动手,也就是~/Library~/Downloads、各种项目目录这些,系统级的目录一律交给系统自己的维护机制处理。

还有两个参数值得记住。--exclude可以在命令行里排除某个路径模式,-X可以指定一个排除文件,把一堆不想看的路径写进去。我自己的排除文件里常年写着几个大而明确的目录——正在做的大型项目、需要长期保留的资料库、备份盘挂载点。这两个参数配合使用,能让每次扫描的结果干净很多,不会每次都重复看到同样那几个不想动的目录。

4. 实战:把 200GB"系统数据"拆开看

4.1 第一层先看整盘,第二层直奔用户目录

拿到一台空间告急的机器,我的第一步不是直接开 ncdu 扫根目录,而是先看整体情况和快照。

df -h # 看总量和挂载点 tmutil listlocalsnapshots / # 看本地快照有多少个 diskutil apfs list # 看 APFS 容器和卷的分布

df -h的输出里有个细节要注意:/System/Volumes/Data这一行往往显示着最大的已用容量。这不是说系统卷占了这么多,而是因为 APFS 把系统卷和数据卷分开了,你的用户数据、应用、第三方文件都在数据卷上,它挂载在/System/Volumes/Data,而/Users实际上是指向它的 firmlink。所以你在 ncdu 里扫/,会同时看到/Users/System/Volumes/Data两条路径,数字可能重复计算。正确做法是扫/System/Volumes/Data或者干脆扫用户目录~,别被重复的数字误导。

扫根目录的完整命令长这样:

sudo ncdu -x -o /tmp/root.json /

第一次扫完,通常会看到这么几个大分支:/Users(最大头,通常是几十到几百 G)、/Library(系统级和第三方共享资源)、/Applications(应用本体)、/private/var(日志、数据库、交换文件)、/opt(Homebrew 装的东西,Apple Silicon 上在这)。按大小排序,光标停在最大的那个上回车,就进去了。

然后重点来了:进到~,按i看一眼完整路径,再按s按大小排序,你会看到一个叫Library的目录排在最前面。这就是访达里看不到的那个~/Library。所有好戏都在这里面。

4.2 高频大户清单:哪些能删、哪些别碰

下面这张表是我这几年在不同机器上反复验证出来的。体积那一列是范围,不同人的使用习惯差异很大。

路径典型体积是什么处理方式风险
~/Library/Developer/Xcode/DerivedData10-80G编译中间产物、索引缓存直接整个删低,下次编译重建
~/Library/Developer/CoreSimulator/Devices5-60G模拟器设备镜像xcrun simctl delete unavailable
~/Library/Developer/Xcode/iOS DeviceSupport5-50G真机调试符号文件删掉旧版本的低,重新插真机会再生成
~/Library/Application Support/MobileSync/Backup10-200GiPhone 本机备份在访达的备份管理里删中,删了备份就没了
~/Library/Caches5-50G各应用缓存挑着删,别整个删中,正在用的会重建
~/Library/Containers10-100G沙盒应用的数据尽量在应用内清理高,可能丢聊天记录
~/.npm/_cacache~/.yarn/cache1-20Gnpm/yarn 包缓存对应工具的清缓存命令
~/.gradle/caches~/.m2/repository5-50GJava 构建缓存和依赖可以删,会重新下载
~/.cache/huggingface10-200G模型权重确认不再需要再删高,重下很慢
~/Library/Application Support/Docker下的 Docker.raw20-100G容器磁盘映像docker system prune中,会删掉未使用的镜像和卷
/private/var/vm约等于内存大小交换文件加休眠镜像不用手动删高,别动
~/Library/Group Containers变化很大应用间共享容器谨慎,逐个确认

关于这张表有几个补充。~/Library/Caches不要图省事整个删掉,删完之后所有应用都会在接下来几天疯狂重建缓存,尤其是浏览器、IDE、设计软件,你会明显感觉到变慢。我一般只删明显过期的,比如某个早就不用的软件留下的缓存目录。

~/Library/Containers更不能乱来。微信、QQ、钉钉这些应用的本地数据都在各自的容器里,聊天记录、接收的文件、图片视频缓存全在里面,直接在 ncdu 里删目录,很可能把聊天记录一起带走。正确姿势是在应用自己的设置里找"清理缓存""管理存储空间",让它自己删。

/private/var/vm是交换文件和休眠镜像所在的地方,大小通常等于或略大于物理内存。这是系统运行的必要组成,别碰。你在 ncdu 里看到它会觉得刺眼,但它不是垃圾。

4.3 删除前的核对流程,我固定走四步

ncdu 的d键可以直接删,但我给自己定了一套流程,避免手滑。

第一步,看到想删的目标,光标停上去按i,把完整路径从头到尾读一遍。这一步看着多余,但真的能救命——很多目录名高度相似,比如Application Support下面几十个应用的目录,差一个单词就是另一个软件的数据。

第二步,确认这个目录是不是被某个正在运行的应用占用。占用状态下删了也没用,应用会立刻重建,或者删到一半失败。先把相关应用退出。

第三步,优先使用该软件自己的清理命令,而不是在 ncdu 里直接删。Xcode 的模拟器和缓存有官方命令,Docker 有docker system df看用量、docker system prune清理,npm 有npm cache clean --force,Homebrew 有brew cleanup -s。官方命令知道什么是安全的、什么是还在用的,比你自己猜准得多。ncdu 在我这里的定位是"定位工具"而不是"清理工具",它负责告诉你空间在哪,动手清理尽量交给专用工具。

第四步,真要在 ncdu 里删,就从最小的那个开始试,删完按r重新计算当前目录,看数字有没有变。确认没问题再去动更大的。删除操作会弹确认框,别一路按回车冲过去。

5. ncdu 扫不到的角落,以及为什么扫不到

5.1 快照引用的数据块,目录树里根本不存在

前面提过 APFS 快照,这里说它对扫描结果的具体影响。快照是写时复制产生的,它引用的数据块在文件系统层面是"活的",但没有一个路径指向它们。你用任何基于路径遍历的工具——ncdu、du、图形化工具都一样——都扫不到这部分。这就造成一个现象:你把某个 30GB 的目录删掉,df -h看可用空间只多了 5GB。

处理办法是查快照并清理。tmutil listlocalsnapshots /列出所有本地快照,如果要删就执行tmutil deletelocalsnapshots加上对应的时间戳。不过我不建议养成随手删快照的习惯,因为那是时间机器的本地临时备份,删了就等于放弃了一个短期的恢复点。更稳妥的做法是把它纳入常规维护:确认重要数据已经在别处有备份之后,需要腾空间时再删。

还有一个特殊情况是"可清除空间"。这部分容量系统标记为随时可回收,df里不计入已用,也不在任何目录里。它大小波动很大,你不需要管它,系统在真正需要空间时会自己处理。

5.2 巨型单文件:容器镜像、虚拟机、模型权重

ncdu 有个很实用但很多人没注意到的行为:如果你在一个目录里看到某一行特别大,但它不是目录(没有可进入的箭头),那它就是一个单文件。这种时候按i能看到完整路径和大小,往往就是这几类东西。

容器镜像的磁盘映像是典型代表,它是一个看起来不大的.raw文件,实际可能膨胀到几百 G,里面的内容由容器运行时管理,你在 ncdu 里进去看只能看到稀疏结构。它的清理必须在容器工具里做,先看用量再清理,注意prune的变体里带不带--volumes,带上的话会把你没在用的数据卷也一起删掉,如果有挂在卷里的数据就会丢。

虚拟机的磁盘映像也是同类问题,.utm.pvm.vmwarevm这些包,里面是一个或多个虚拟磁盘文件。删除整个包意味着这台虚拟机彻底没了,不是"清理空间"。如果只是想缩小它,要在虚拟机软件里做磁盘压缩(修剪未使用的块),直接删文件是灾难。

还有一类是模型权重文件和数据集,动辄几十上百 G。这类文件的特点是删除容易、重下极慢,动手之前一定确认清楚是不是还在用。我一般会给这类目录加个标记文件,在 ncdu 里一眼能认出来。

5.3 外接卷、网络卷和权限盲区

-x参数会跳过挂载点,所以扫根目录时不会跑到外接硬盘和磁盘映像里去。想单独扫某块外接盘,直接指定它的挂载路径就行,注意外接盘的格式差异会带来不同表现:exFAT 和 NTFS 上 ncdu 能正常扫,但删除操作在 NTFS 上可能因为权限或兼容层而失败。

网络卷(SMB、NFS 这些)我不建议用 ncdu 扫。原因是每一次lstat都要走网络,一个几万文件的共享目录能让扫描卡到失去响应,而且走网络拿到的大小信息可能不准。真要统计网络存储的用量,去看存储端自己的配额和用量界面更靠谱。

最后一类盲区是系统保护卷。macOS 的系统卷是只读的签名卷,你sudo扫能扫到,数字也真实,但在 ncdu 里对它执行删除一定失败。这不是 ncdu 的问题,是系统设计如此。另外一些应用把数据放在受沙盒保护的位置,目录你能看到、能进入,但删除会被拒绝,表现为操作没反应或者报错。遇到这种情况,回到应用本身去找清理入口。

6. ncdu 不是万能药,说说它和其他工具的配合

6.1 du、df、dust、dua-cli 各自的位置

工具没有绝对的好坏,关键是知道什么时候用哪个。

df -h是第一眼,看的是文件系统级别:哪个卷挂在哪、总共多大、用了多少、剩多少。它永远是我打开终端后的第一条命令,因为如果挂载点不对,后面所有的扫描都是在错误的目标上做。

du -sh * | sort -h是一次性快照,优点是任何机器上都有、可以写进脚本、可以通过一些远程执行方式在服务器上跑。缺点是每次都要重新扫、不能交互下钻。远程机器上没装 ncdu 的时候,我就用这套组合。

ncdu是我本机的主力,交互式、能下钻、能导出。它解决的是"我要在一棵很大的树里找最粗的枝"这个问题。

dust是另一类工具,它输出的是一份带条形图的树状摘要,一条命令从根往下展开几层,一眼看完。它比du好看太多,比ncdu更快看到全局。缺点是它只给你一次性的视图,不能像 ncdu 那样反复下钻。我现在偶尔用它做快速预览,确认大概分布之后再用 ncdu 深入。

dua-cli介于两者之间,既有交互模式也有聚合模式,用法上更现代一些。如果你已经习惯了 ncdu 的键位,其实没有太大必要换。

6.2 图形化工具什么时候真的值得用

说 ncdu "没有之一"是指命令行场景,图形化工具在某些情况下有它的价值,我不装作看不见。

DaisyDisk 是我给不熟悉命令行的同事推荐得最多的一个,环形图视觉效果直观,扫描速度也不错,可以直接在界面里预览和删除。它的价值在于"给非技术同事解释空间去哪了"这件事上,一张图比一堆路径有说服力。

GrandPerspective 是免费的,方块图(treemap),找"一大堆小文件堆起来"的占用特别强。有时候你会遇到一种情况:某个目录里几十万个小文件合计占了 20G,但单个看起来都不大,这种时候方块图的视觉冲击力比数字列表更强。

OmniDiskSweeper 是老牌工具,按大小排序列表,界面极简,免费。功能上和 ncdu 高度重合,但操作靠鼠标,慢一些。

这几个工具共同的短板是:扫描更慢、需要授予完全磁盘访问权限、删除操作的反馈不如命令行透明、卸载时可能留下后台组件。所以我的用法是分工的——命令行负责定位和计算,图形化负责沟通和演示。真要动手清理,还是回到命令行走官方清理命令。

6.3 我固定用的那套磁盘体检流程

最后把这套流程完整写一遍,你可以直接照搬,也可以按自己的情况裁。

  1. df -h看总量和挂载点,确认目标盘是哪个。
  2. tmutil listlocalsnapshots /看本地快照的数量和时间。
  3. sudo ncdu -x -o /tmp/scan-before.json /扫一遍,结果导出留档。
  4. 打开结果,进~,再进Library,按s排序,把前面的几个大目录记下来。
  5. 对着上面第 4.2 节那张表判断每一项的可删性,不确定的先不动。
  6. 优先用官方清理命令:模拟器用xcrun simctl delete unavailable,容器用容器工具自己的清理,包管理缓存用各自的 clean 命令,Homebrew 用brew cleanup -s
  7. 清理完重启一次,让系统和应用释放掉临时文件。
  8. sudo ncdu -x -o /tmp/scan-after.json /再扫一次,和 before 那份对着看,确认空间确实释放了。
  9. 把这套流程设成每季度一次的例行公事,扫描结果文件按日期命名归档。

再说个我自己的小技巧:把常用的清理命令写成 shell 函数或者别名,放在~/.zshrc里,比如一个diskcheck用来跑前三步、一个cleancache用来跑几个包管理器的清理。这样每次维护只需要敲两个词,不容易因为嫌麻烦而拖着不做。但要提醒一句,别把这些命令串成一条无脑执行的脚本——清理动作涉及数据删除,任何时候都值得停下来看一眼再确认。

我个人这几年用下来最大的体会是:磁盘空间这件事,问题从来不是"没有工具",而是"不知道空间在哪"。一旦定位清楚了,删什么都心里有数。所以与其装一堆清理软件让它自动帮你删东西,不如用一个可靠的工具把目录树摊开看明白,然后自己决定动手。ncdu 在我这里就是这个角色的唯一选择,它不聪明,不主动,不驻留,但它把一件最基础的事情做得又快又准,你要的全部信息都在那一屏里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询