系统学习 macOS 学习路径:从 BSD 文件命令到系统、网络与开发维护

rm

永久删除文件或目录,不进入废纸篓,误删后通常无法恢复。

补充说明

macOS 的 rm 来自 BSD,删除是直接解除目录项,不经过 Finder 的废纸篓,也没有系统级回收站。-r/-R 递归删除目录,-i 逐个确认,-I 在参数超过三个时只确认一次,-d 可删除空目录,-v 显示删除过程,-x 不跨挂载点。

与 GNU 的差异:macOS 的 rm -P 只是为兼容保留,手册明确说明它没有效果,不要把它当安全擦除;GNU 的 --preserve-root、--one-file-system 长选项在 macOS 上不存在,对应短选项是 -x。macOS 的 -W 只用于处理 unionfs 的 whiteout,对普通文件没有“反删除”作用。

影响范围:rm 删除的是当前用户有权限写入的目录项,sudo rm 可扩大到系统范围;删除后空间可能仍被打开该文件的进程占用,但文件名已不可见。 先备份:重要目录先确认 Time Machine 有最近备份,或先 cp -a 到另一块盘;不确定时把 rm 换成 mv 移到临时目录。 如何回滚:没有内置撤销。Time Machine 开启时可用本地快照或备份恢复;没有备份只能停止写入并尝试数据恢复,成功率不保证。

常用示例

# 先确认位置和内容,再删除单个文件
% pwd && ls -l notes.txt && rm -i notes.txt

# 多个文件只确认一次,避免交互式脚本卡住
% rm -I ~/Downloads/*.dmg

# 删除构建目录;路径写死或先用变量校验,不要直接拼空变量
% rm -rf ~/Projects/app/build

# 先预览再删除,find 的 -delete 不会进废纸篓
% find ~/Downloads -name '.DS_Store' -print
% find ~/Downloads -name '.DS_Store' -delete

# 变量为空时立即退出,避免 rm -rf 作用到根目录
% rm -rf "${BUILD_DIR:?BUILD_DIR 未设置}/"

# 删除前确认文件是否仍被进程占用,空间要等进程退出才释放
% lsof +L1 | head

# Time Machine 开启时查看本地快照,作为误删后的恢复线索
% tmutil listlocalsnapshots /

易错点与排错

相关命令

参考链接

读完自测

合上页面,先回答,再展开对照。

  1. macOS 的 rm 会把文件放进废纸篓吗?rm -P 能安全擦除数据吗?
  2. 为什么 rm -rf $DIR/* 在变量为空时极其危险?给出一种安全写法。
  3. 删除大文件后 df 没有释放空间,应该检查什么?
答案
  1. 不会进废纸篓;-P 在 macOS 上无效果,不能作为安全擦除手段。
  2. 空变量会让通配符变成 /*;应写 rm -rf "${DIR:?}/" 并先校验变量。
  3. 检查是否有进程仍打开已删除文件,用 lsof +L1 定位。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令