开启macos底层文件系统实时追踪需结合三条路径:用fs_usage捕获内核级i/o调用,fswatch监听fsevents目录变更,stat循环观测文件大小变化;三者互补还原写入全貌。
要开启 macos 系统的底层文件系统读写实时追踪,关键不是轮询或采样,而是直接接入内核级事件机制(fsevents)和底层 i/o 调用链。终端里没有“一键开启追踪”的开关,但可通过三条互补路径实现真实、低延迟、可落地的实时监控:
用 fs_usage 捕获实时读写调用
这是最贴近内核的方案,能显示每个进程对磁盘的实际操作(open、read、write、unlink 等),含路径、数据量和时间戳:
- 运行 sudo fs_usage -w -f filesys:持续输出所有文件系统行为;加 -e fs_usage 可过滤掉自身日志干扰
- 聚焦某目录:sudo fs_usage -w | grep -E "(write|open).*/Users/you/Downloads"
- 盯住某个程序:sudo fs_usage TextEdit 或 sudo fs_usage -p 1234(PID 替换为实际值)
用 fswatch 监控目录变更事件
fswatch 是基于 FSEvents 的轻量封装,响应快、不漏事件,适合监听文件增删改动作:
- 安装后执行:fswatch -o ~/Documents,每有变动就输出一行路径
- 配合命令响应:fswatch -o ~/Downloads | xargs -n1 -I{} echo "新下载:{}" | say
- 防抖动处理:fswatch -l 0.3 ~/Projects(0.3 秒内合并重复事件)
用 stat + 循环观测文件大小秒级变化
当需要确认是否发生“静默写入”(如日志膨胀、缓存增长、APFS 克隆体被修改),可用此法追踪体积变化:
- 监视单个文件:while true; do stat -f "%z bytes — %Sm" -t "%H:%M:%S" ~/Library/Logs/system.log; sleep 1; done
- 判断是否触发写时复制:stat -f "%i %z" original.txt copy.txt,若 inode 不同且大小增大,说明已脱离克隆
- 同步观察磁盘空间:watch -n1 'df -h / | grep "/"'
三者不互斥:fs_usage 查“谁在写”,fswatch 查“写了什么路径”,stat 查“写了多少”。组合使用,就能完整还原一次异常写入的全貌。











