应禁用 rm -rf 等高危命令,通过函数 rmrf 拦截并提示,配合 alias 映射常见误输形式;同时加固 rm 行为,推荐 alias rm='trash' 或 alias rm='rm -iv --one-file-system',并辅以 safe-rm 工具和 chattr 锁定关键目录。

直接禁用 rm -rf 这类递归删除命令,不能靠简单 alias 覆盖(因为 alias rm='...' 对已带参数的 rm -rf 不生效),必须用函数+alias 组合实现主动拦截。
用函数拦截 rm -rf 组合
在 ~/.bashrc 中定义一个函数,专门捕获常见危险写法,并阻止执行:
- 添加以下内容:
echo "⛔ 检测到高危操作:rm -rf 或类似组合";
echo "请改用安全方式:";
echo " • 确认路径后手动运行:command rm -rf \"\$@\"";
echo " • 或使用 trash:trash \"\$@\"";
}
- 再设置别名映射常见误输形式:
alias rm_rf='rmrf'
alias 'rm -rf'='rmrf'
这样输入 rm -rf /tmp/test 不会执行,但输入 rm-rf /tmp/test 会被拦截并提示。虽然不能覆盖所有 shell 解析场景,但覆盖了绝大多数手误情形。
同时加固基础 rm 行为
即使不删,日常 rm 也需设防,避免单文件误删演变成连锁事故:
-
alias rm='rm -Iv --one-file-system':-I 对多文件才确认,-v 显示动作,--one-file-system 阻止跨挂载点删除(如/home下执行不会误进/boot) - 若已安装
trash-cli,更推荐:alias rm='trash',文件进回收站,可用trash-list和trash-restore恢复 - 禁用裸
rm直接调用:加一行alias rm='echo \"请勿直用 rm,请检查 alias 是否生效\" >&2; false'作为兜底(慎用,仅调试期)
防止绕过 alias 的“反斜杠逃逸”
用户仍可通过 \rm -rf 绕过 alias。如需进一步限制,可配合:
- 在函数中检查
$0或调用栈,但 Bash 层面较难可靠识别;更实际的做法是:对关键环境(如生产服务器)统一部署safe-rm工具,并用alias rm='safe-rm'替代原生 rm - 用
chattr +i锁定核心目录(如/etc、/usr),即使 root 也无法直接删 - 普通用户禁用
sudo rm -rf:在/etc/sudoers中不授予该权限,或用sudoers的!rm排除规则
生效与验证
配置完记得保存并重载:
source ~/.bashrc- 验证是否生效:
alias | grep rm、type rm、type rm-rf - 测试原始命令是否仍可用:
\rm --version应正常输出 - 测试拦截效果:
rm-rf /tmp/dummy应只打印提示,不真删











