注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇敢的劳尤条

 
 
 

日志

 
 

linux rm的替代脚本(rm -rf实在太危险了)  

2013-11-21 15:45:31|  分类: unix/linux |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
前几天在工作的时候,一个不小心,本来要删除home下面某个文件的,结果,我敲入 rm -rf ~/ ,还没找到那个东西的时候,手贱按了enter,结果你懂的,整个home目录里面的东西都没掉了。

说说损失吧。
我编了整整一个月的程序以及各种测试脚本和测试客户端,付之一炬啊。那会一直想着找什么方法来解救,可以最后没有成功。那时紧张的心,想死的心都有了。一个月白干了!!!上司会叼我的!!!吓死我了!!!

不幸中的万幸。
在一个礼拜之前,我为了做测试,将整个虚拟机拷贝了一遍,为了是将系统放到其他电脑上作为测试机,所以,所有的损失只有一个礼拜的时间,而且我这个礼拜做的事大部分是测试,修改的代码较少,只有几个控制脚本,所以,庆幸了一番。
最后,提提几个做法。
1.定期备份真的很重要,一旦失手,损失无法挽回。
2.写了一个rm的替代脚本,rm的动作用mv替代,将文件放到某个角落。

cd /bin
mv rm rm1 #将原来的rm,改个名字,屏蔽掉
然后
touch rm
vim rm 

这里我在home目录下建了一个文件夹$HOME/.trash,用于存放删除的文件,并且以时间戳开头,所以可以有时间删除顺序。想要恢复也比较容易,直接到该目录,然后自己找去。(点目录在home下面是看不到的,要在shell命令下面,或者在目录下面按ctrl-h,那样可以显示隐藏目录)
这个rm跟原来的rm不一样,删除的时候,不需要-i -r -f等

#!/bin/bash
#首先要将带“-”的选项删除,因为rm可以-r -f -i,所以首先删掉这几个,最后是删除文件,

while echo "$1" |grep \- >/dev/null 2>&1
do
shift
done

if [ ! -d $HOME/.trash ]
then mkdir $HOME/.trash
fi

#循环删除文件,并加上时间戳
for i in "$@"
do
time=`date +%m-%d_%H-%M-%S`
mv "$i" $HOME/.trash/"$time"_"$i"
done;

最后增加执行权限:chmod oug+x rm
3.可以考虑写一个文件恢复脚本,不过目前需求并不大。
4.如果真的rm误删了,那么赶紧找工具抢救吧。
这里推荐一个工具extundelete,http://extundelete.sourceforge.net/
上面的链接有详细介绍这个东西,并且怎么使用。
一般,误删之后,要立刻将该分区umount,或者置为只读,防止写进去覆盖了删掉文件的磁盘空间。
然后使用extundelete吧,很有可能恢复的,不过并非一定能够成功。

*********************重要的发现*****************************************
我的虚拟机系统,经常出现开机黑屏,无法正常进入系统,一直很郁闷,不知道为什么!!!
我将整个系统的重要文件搬到另外一台也是一样,哎,郁闷了很久。
于是我对这个问题很敏感,经常试验性的关机重启。
最近一次的发现是,我修改了rm,变成安全版,于是就出现了重启失败,进而发现这个是根源,将rm1改回原来的rm,安全版的rm另外命名就可以了,解决了一大疑问!!!开心死了!!!!!
那rm的安全版本怎么破?哎,只好另外命名了,看来有些系统命令和工具,俺们还是不能随便碰的,只能自己在搞的别的,叫个别的啥咯。
  评论这张
 
阅读(560)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017