昨日凌晨精神恍惚,误删了在虚拟机中写的程序文件,谷歌度娘数据恢复方法失败,使昨天的工作功亏一篑,幸好程序改动不多。现准备在所有服务器用机制来解决误删问题。这样总比花时间恢复付出的代价小得多把。

脚本说明:

随意用法:rm -rf /data/test* /data/00000  /data/023-rf-r-f  /home/steven/dddd  /home/steven/  dirdir/ /home/steven/test* ddd

rm -rf *

禁止删除 / 和根下面的重要目录(rm.py中的deny变量内容)

开发平台:CentOS6.2 X86_64

1、编写回收站脚本程序 rm.py

#!/usr/bin/env python

# Linux Recycle

# Author Steven

# Modify 2013-12-18

import time,sys,os,shutil

recy_path = "/data/Recycle/"

now = time.strftime('%Y%m%d_%H_%M_%S',time.localtime(time.time()))

if not os.path.isdir(recy_path):

os.makedirs(recy_path)

para = sys.argv[1:]

if '-f' in para:

para.remove('-f')

if '-r' in para:

para.remove('-r')

if '-rf' in para:

para.remove('-rf')

deny = ['/usr','/usr/','/var','/var/','/root','/root/','/etc','/etc/','/home','/home/','/proc','/proc/','/boot','/boot/','/bin','/bin/','/sbin','/sbin/','/lib','/lib/','/

lib64','/lib64/','/']

for p in tuple(para):

if p in deny:

para.remove(p)

print "Dangerous command: %s" % p

if not para:

sys.exit('Nothing to run.')

for f in para:

try:

if '/' not in f:

recy_file = "%s/%s_%s" % (recy_path,now,f)

shutil.move(f,recy_file)

else:

path = os.path.dirname(f)

file = os.path.basename(f)

if file == "":

file = path.split('/')[-1]

recy_file = "%s/%s_%s" % (recy_path,now,file)

shutil.move(f,recy_file)

except Exception,e:

print e

提示:deny 列表中包含的是禁止删除的目录或文件,可以根据自己的需要来增减。

2、其他步骤

chmod 755 /bin/rm.py

chmod 777 /data/Recycle  支持一般用户rm

echo "alias rm='/bin/rm.py'" >> /etc/bashrc

source /etc/bashrc 回收站生效

3、删除文件测试

rm  /root/text.txt

此时,text.txt文件就会被mv 到 回收站目录 /data/Recycle

远程脚本调用时,须用全路径:/bin/rm.py

4、删除回收站文件

/bin/rm -rf /data/Recycle/text.txt

5、回收站机制是为了解决不小心误删问题,如果确定某个文件永久删除则直接删除

/bin/rm -rf  filename

6、为防止回收站目录遗留文件过多而占用太多的硬盘资源,使用crontab定时删除历史文件

a、编写定时删除回收站文件程序脚本[root@master bin]# cat /root/clean_recycle.sh

#!/bin/sh

# Author Steven

# Modify 20131218

if [ `whoami` != 'root' ];then

echo "Must be root run this scripts!!" >> /var/log/messages

exit

fi

dirpath=/data/Recycle/

ago=`date -d "-15 day" +%Y%m%d`

if [ ! -d $dirpath ];then

echo "This path [${dirpath}] not exist, please check." >> /var/log/messages

exit

fi

for i in `ls $dirpath`

do

# Get datestamp and check it. For example: 20130304_09_54_25_ld.lock

datestamp=`echo $i | awk -F'_' '{print $1}'`

check=`echo "$datestamp" | grep "^[0-9]\{8\}$"`

if [[ `echo $check` -ne "" ]];then

# Remove old files.

if [ "$datestamp" -lt "$ago" ];then

/bin/rm -rf $dirpath/$i

fi

fi

done

b、添加计划任务

crontab -e

1 5 * * 0 sh /root/clean_recycle.sh

c、给文件加锁,避免被修改。

chattr +i /bin/rm.py

chattr +i /root/clean_recycle.sh

d、回收站内容[root@master ~]# ls /data/Recycle/

20131217_19_01_26_ 20131217_19_05_48_test33.txt 20131217_19_19_30_test0df-.211.txt 20131217_19_20_50_test1.txt

20131217_19_05_48_ 20131217_19_05_48_test3436.txt 20131217_19_19_30_test1.txt 20131217_19_20_50_test322.txt

20131217_19_05_48_000 20131217_19_05_48_testdd.txt 20131217_19_19_30_test322.txt 20131217_19_20_50_test33.txt

20131217_19_05_48_0234-f12-rf 20131217_19_05_48_testdgg.txt 20131217_19_19_30_test33.txt 20131217_19_20_50_test3436.txt

20131217_19_05_48_dddd 20131217_19_05_48_testg.txt 20131217_19_19_30_test3436.txt

7、失误是无法避免的,我们猜不到失误会在何时,何地,何种情况下发生。既然有这种因素存在,能用机制解决就用机制解决把。

linux 恢复回收站,避免误删文件:Linux回收站机制(升级版)相关推荐

  1. linux恢复deleted状态的文件,Linux恢复被删除的文件 How To Recover Deleted Files From Your Linux System ....

    先介绍一些文件的基本概念, 文件实际上是一个指向inode的链接, inode链接包含了文件的所有属性, 比如权限和所有者, 数据块地址(文件存储在磁盘的这些数据块中). 当你删除(rm)一个文件, ...

  2. 恢复被删除的文件-linux篇

    恢复被删除的文件-linux篇 http://blog.chinaunix.net/u2/83058/showart_1404769.html 本文转自IBM中国上的文档 [http://www.ib ...

  3. Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴

    Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴 Linux避免用rm误删文件 - 遗失的记忆 - 博客大巴 Linux避免用rm误删文件 日期:2010-12-11 | 分类:Linux使 ...

  4. linux恢复意外删除的文件

    author:skate time:2013/10/12 linux恢复意外删除的文件 当进程打开某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中.这意味着,进程并不知道文件已经 ...

  5. Ubuntu中恢复rm命令误删文件

    环境 :ubuntu16.04 extundelete介绍 extundelete是一个实用程序,可以从ext 3或ext 4分区恢复已删除的文件.ext 3和ext 4文件系统是Linux发行版(如 ...

  6. linux 磁盘不回收站,避免误删文件:Linux回收站机制

    1.编写回收站脚本程序 [root@SlaveA data]# cat /bin/rm.sh #!/bin/sh # Author steven # Modify 20120709 dirpath=/ ...

  7. linux恢复移动硬盘数据恢复,移动硬盘文件误删后用数据恢复软件如何恢复

    移动硬盘最初是用于笔记本电脑的专用小型硬盘,容量大.轻便易携带,用于文件存储于数据传送.另外,普通的计算机硬盘通过硬盘盒或其他转接口设备,也能够达到移动硬盘的效果.移动硬盘通常采用USB接口与计算机连 ...

  8. linux 的pwd文件被删,恢复被删除的文件-linux篇

    本文转自IBM中国上的文档 [http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc/] [http://www.ibm.com/develop ...

  9. linux 恢复已删除的文件,恢复已删除的Linux文件

    恢复已删除的Linux文件 发布时间:2008-09-08 17:09:31   作者:佚名   我要评论 作为一个多用户.多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只 ...

最新文章

  1. SQL语句备份和还原数据库
  2. 会说话,减少奋斗30年
  3. c语言药房系统书写指导书,C语言药房管理系统[文书借鉴]
  4. php中0与NULL,False,“0”,\0的区别
  5. 关于「无人驾驶」的学习路线...
  6. [推荐]大量 Blazor 学习资源(三)
  7. php代码里加图片,php如何添加图片
  8. android js调试
  9. 谈谈OAB离线地址簿无法更新问题?(服务器是Exchange 2007和Exchange 2010)
  10. 合同html样式,css 合同打印print--水印
  11. Android开发笔记之视频录制
  12. linux把光标移到文件开头的命令,linux操作命令总结,希望可以帮助到菜鸟
  13. 深信服VMP 内存分配一点看法
  14. IDEA 在DEBUG模式下如何不执行后续代码直接停止程序?
  15. 用批处理删除N天前或指定日期时间(前后)创建(或修改)的文件
  16. 数据结构(54) B树、B+树
  17. jess笔记_(2)
  18. 简单粗暴的抓取糗百的段子——1
  19. pyinstaller 打包的exe在某些win7上面报错 faild to execute script pyi_rth_multiprocessing
  20. springboot使用junit单元测试是发生报错 Field taskUtils in com.xxx.xxx.xxxx.xxx required a bean of type 'xxx.xxx.

热门文章

  1. educoder算法设计与分析 实验五回溯法
  2. 计算机课程设置图片,《计算机图形图像处理》课程简介
  3. 天下事,有所激有所逼而成者居其半
  4. 32岁学python有前途吗_Python发展前景如何?学习Python游戏开发有前途吗?
  5. 爪哇夜未眠 - 内容简介
  6. 服务器选择SATA还是SCSI
  7. p2p网络测试工具_DHT之路丨大规模网络测试的全新工具!
  8. 关于网站中图片排名优化的技巧是?
  9. 奥义蛇皮走位之反复横跳(二)
  10. Java包名如何命名