macOS底层文件读写追踪需启用FSEvents并实时捕获内核I/O行为,核心工具包括:1. fs_usage实时抓取系统调用;2. fswatch监听目录事件;3. log stream查统一日志上下文,均无需预开启日志。
直接开启 macos 底层文件读写追踪,核心是启用系统原生的 fsevents 事件流并捕获实际 i/o 行为,不是“开启日志开关”,而是实时抓取内核级操作。以下三类终端指令覆盖不同精度与用途,按需选用:
用 fs_usage 实时抓取所有文件系统调用
这是最贴近内核的追踪方式,显示每个进程的 open、read、write、unlink 等动作,含路径、大小、耗时:
- 运行
sudo fs_usage -w -f filesys:持续输出完整路径的文件操作(-w防截断,-f filesys限定文件系统层) - 只看写入行为:
sudo fs_usage -w | grep "write "(注意 write 后带空格,避免匹配 writev) - 监控特定应用:
sudo fs_usage Safari或sudo fs_usage -p 4567(PID) - 排除自身干扰:
sudo fs_usage -e fs_usage -w
用 fswatch 监控目录级变更事件
基于 FSEvents API,轻量、低开销,适合监听某目录下新增/修改/删除动作(不显示数据量):
- 安装后运行:
fswatch -o ~/Documents(每有变动输出一行路径) - 带时间戳和事件类型:
fswatch -l 0.1 -0 --format="%T %e %w%f" ~/Downloads - 多目录监听:
fswatch ~/Projects ~/Desktop - 配合命令响应:
fswatch -o ~/Downloads | xargs -n1 -I{} echo "收到新文件: {}"
用 log stream 查看统一日志中的文件操作上下文
fs_usage 不进 unified logging,但部分高权限服务(如 mds、sandboxd、trustd)会在日志中记录文件访问决策,可用于交叉验证:
- 查沙盒拒绝访问:
log stream --predicate 'subsystem == "com.apple.sandbox.reporting" AND eventMessage contains "deny"' --info - 查 Spotlight 索引行为:
log stream --predicate 'process == "mds" OR process == "mdworker"' --debug - 过滤出含路径的访问记录:
log stream --predicate 'eventMessage CONTAINS "/"' --level debug 2>/dev/null | grep -E "(open|read|write)"
不需要提前“开启日志功能”,macOS 默认持续采集这些底层事件。关键在权限(fs_usage/fswatch 多数操作需 sudo)、过滤精度和结果解读。不复杂但容易忽略。


















