
如果不小心删库了,跑路是不可能的。
首先:感觉不对,立马掐断运行中的脚本,然后
保留案发现场:不要重启服务器,不要断开ssh连接会话。
查看被删除了哪些文件:ls、cd + Tab 等 然后逐个装回去。。。。用上传下载、weget、别台拷贝系统文件过来等。。。。
预防误执行rm -rf /*
方案一:rm -rf 删除目录时要判断目录
#!/bin/bash
work_path=`pwd`
#如果目录不为空,才执行删除操作
if [ ${work_path} != "" ];then
rm -fr ${work_path}/*
fi
方案二:Shell 脚本指定 set -u
#!/bin/bash
echo $a
echo hello
可以发现,echo $a 输出了一个空行,Bash 忽略了不存在的 $a,然后继续执行echo hello。
最好是遇到变量不存在,脚本应该报错,而不是一声不响地往下执行。
set -u 就用来改变这种行为,在脚本加上它,遇到不存在的变量就会报错,并停止执行。
#!/bin/bash
set -u
rm -fr $a/*
echo hello
运行结果如下:
$ bash test.sh
test.sh: line 4: a: unbound variable
方案三: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 脚本,内容如下
TRASH_DIR="/home/.trash"
for i in $*;do
STAMP=`date +%s`
fileName=`basename $i`
# 将对应的文件 mv 至 .trash 目录
mv $i ${TRASH_DIR}/${fileName}.${STAMP}
done
③ 修改 ~/.bashrc, 用我们自建的 remove.sh 替代 rm 命令
alias rm="sh /home/remove.sh"
④ 设置 crontab,定期清空垃圾箱,如每天 0 点清空垃圾箱:
0 0 * * * rm -rf /home/.trash/*
⑤ 最后,执行以下命令,使之生效
source ~/.bashrc
方案五:根文件挂载成只读
[~]$ cat /etc/fatab
# /etc/fstab:static file system infomation.
#<file system> <mount pt> <type> <option> <dump> <pass>
/dev/root / ext4 remount,ro,noatime 0 1
...
其中 remount,ro,就表示只读的方式挂载。
只读的方式挂载后,进行删除操作是无法成功的

本文详细介绍了在不小心删除重要文件后,如何迅速反应并采取措施恢复数据的方法。包括立即中断删除操作,保留现场,使用多种手段恢复丢失的文件,以及预防误删的五种策略,如使用安全脚本、配置安全删除工具、建立回收站机制、只读挂载根文件系统。

1764

被折叠的 条评论
为什么被折叠?



