CSDN写了Bug,误执行 rm-fr/×,我删删删删库了,要跑路吗?( 三 )
$ bash test.sh
hello
可以发现 , echo $a 输出了一个空行 , Bash 忽略了不存在的 $a , 然后继续执行 echo hello 。
最好是遇到变量不存在 , 脚本应该报错 , 而不是一声不响地往下执行 。
set -u 就用来改变这种行为 , 在脚本加上它 , 遇到不存在的变量就会报错 , 并停止执行 。
#!/bin/bash
set-u
rm -fr$a/*
echohello
运行结果如下:
可以看到 , 因为 a 是未定义变量 , 脚本报错了 , 并且不再执行后面的语句 。
方案三:safe-rm 替换 rm
safe-rm 是一个开源软件工具 , 这名字听起来就很安全嘛 , 所以它是用来替代不太安全的 rm 。
它可以在 /etc/safe-rm.conf 中配置路径黑名单 , 定义哪些不能被 safe-rm 删除 。
我们可以将 safe-rm 更名为 rm , 假设定义了 /etc/ 无能被删除 , 那么删除 /etc 时就会报错:
$ rm -rf/etc/
safe-rm: skipping/etc/
方案四:建立回收站机制
Windows 是有回收站的 , 即使误删了 , 也可以在回收站恢复 。
所以 , 我们也可以在 Linux 实现回收站的机制 。
实现思路:
删除文件时 , 它并不真正执行删除操作 , 而是将文件移动到一个特定目录 , 可以设置定时清楚回收站 , 或者在回收站里面的文件大小达到一定容量时(或者用时间做判断)执行删除操作以腾出空间 。
可以写个 Shell 脚本替换 rm 命令 , 或者在需要删除文件的时候使用 mv 命令将文件移动到回收站 。
创建回收站目录
mkdir/home/.trash
编写 remove.sh 脚本 , 内容如下
本文插图
修改 ~/.bashrc ,用我们自建的 remove.sh 替代 rm 命令
aliasrm="sh /home/remove.sh"
设置 crontab , 定期清空垃圾箱 , 如每天 0 点清空垃圾箱:
0 0* ** rm -rf /home/.trash/*
最后 , 执行以下命令 , 使之生效
source~/.bashrc
方案五:根文件挂载成只读
在 /etc/fstab 文件 , 把 / 文件系统挂载成只读的方式 。
本文插图
其中 remount,ro , 就表示只读的方式挂载 。
只读的方式挂载后 , 进行删除操作是无法成功的:
本文插图
事后反思
涉及到 rm -fr 命令的代码 , 要留个心眼 , 要反复检查 , 要做好预防误执行 rm -fr /* , 并在测试机验证完后 , 再拖到实体机上跑 , 千万不可大意 。
就算的发生了 rm -fr /* , 要第一时间停掉它 , 并且要做到三不要:
不要慌 , 不要心跳爆炸(稳住稳住)
不要隐瞒删库事件(不丢人)
不要重启服务器或断开 ssh 会话(保留现场)
只要立马掐断 rm -fr /*, 它是干不死我们的 。
利用当下环境剩有的命令 , 冷静分析 , 是有机会恢复的 。
小林现在是一个删过库没跑路的男人了 , Goodbye ,我们下次见 。
【CSDN写了Bug,误执行 rm-fr/×,我删删删删库了,要跑路吗?】版权声明:本文为CSDN博主「小林coding」的原创文章 , 遵循CC 4.0 BY-SA版权协议 , 转载请附上原文出处链接及本声明 。
推荐阅读
- 新设技|一直在引发话题的马斯克,这次真的改写了人类航天史!
- CSDN|牛!2020年,这项技术将获得99000000000元人民币“国家领投”!
- CSDN|儿童节教你用 Python 画出童年回忆
- CSDN|“不要害怕 RAID!”
- 驱动之家|Win10 2004 又有新 bug?自动登录到底哪去了
- 雷科技|苹果最强Bug!千万别更新iOS,会立刻死机,目前无解
- CSDN|Rust 让人奔溃的那些特性!
- CSDN|基础软件,未来只有开源一条路?
- CSDN|本来想用“{{”秀一波,结果却导致了内存溢出!
- CSDN|云计算,巨头们的背水一战