当前位置:首页>Linux>Linux运维小技巧-文件防误删

Linux运维小技巧-文件防误删

  • 2026-10-11 06:01:08
Linux运维小技巧-文件防误删

运维老司机血泪总结:别等删库跑路才后悔

一、那些年我们踩过的rm -rf巨坑

凌晨两点,手机巨震,群里炸锅:“数据库目录被删了!” 你揉着眼睛打开电脑,心跳加速,手指发抖---rm -rf /data/mysql,回车的那一刻,世界安静了。
这不是段子,这是无数运维人的噩梦。
rm -rf / 被称为“运维界核按钮”,敲错一次,轻则加班恢复数据,重则直接“删库跑路”。
但今天我要告诉你:这个悲剧完全可以避免,而且只需要一个不到100KB的小工具---safe-rm 0.12。

二、safe-rm是什么?为什么选0.12?

safe-rm是一个轻量级的rm替代工具,它的核心逻辑极其简单:在黑名单里的目录,谁也删不掉--包括root。
我推荐0.12版本,原因有三:

特性
说明
免编译
纯perl脚本,下载即用,无需安装任何依赖
零侵入
不修改系统文件,只通过软链接替换rm
极轻量
不到50MB,不影响系统性能

对比新版safe-rm1.x版,需要rust编译环境,0.12简直是内网离线服务器的救星。

三、5分钟极速部署教程

第一步:下载解压
第二步:复制到系统目录

cp safe-rm-0.12/safe-rm /usr/local/bin/safe-rm
chmod 755 /usr/local/bin/safe-rm

第三步:替换rm

软链接
ln -sf /usr/local/bin/safe-rm /usr/local/bin/rm
或直接move
move safe-rm rm

第四步:确保PATH顺序

echo 'export PATH=/usr/local/bin:$PATH' >> /etc/profile
source /etc/profile

验证是否生效

which rm
# 输出应为:/usr/local/bin/rm

第五步:配置保护黑名单

cat > /etc/safe-rm.conf << 'EOF'
/
/etc
/bin
/sbin
/boot
/dev
/lib
/lib64
/proc
/sys
/usr
/var
/data
/opt
EOF

验证是否生效:看到skipping,你就可以安心了。

四、灵魂拷问:这玩意儿靠谱吗?

1:root也能拦住
是的,safe-rm在程序层面做拦截,即使是root执行rm -rf /,也会被拒绝。它比alias更底层,无法被command rm绕过。
2:会影响系统正常运行吗?
不会,系统脚本通常使用/bin/rm或/usr/bin/rm的绝对路径,不受safe-rm的影响。只有通过PATH解析的rm命令才会走safe-rm。
3:万一我想删黑名单里的目录怎么办? 两步走:
1.先从/etc/safe-rm.conf中移除对应路径
2.执行删除操作
3.操作完立刻加回黑名单
4:和alias rm='rm -i'比那个更好?
safe-rm完胜。rm -i只是多问一句,疲劳操作时照样会手滑输入yes,safe-rm是直接物理拦截,不给手滑的机会。

五、sudo rm不生效的特殊情况

你当前终端which rm已显示/usr/local/bin/rm,但sudo rm仍走原版,是因为sudo默认用secure_path覆盖了PATH:

sudo which rm
# 仍显示 /usr/bin/rm  ← 这是正常的 sudo secure_path 行为

修复sudo下的safe-rm(生产推荐做法):
用visudo修改sudoers,调整secure_path把/usr/local/bin方最前

visudo

找到这行(类似):

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

改为:

Defaults    secure_path = /usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

保存后验证

sudo which rm
# 应显示 /usr/local/bin/rm

最新文章

随机文章