作为一个运维人员,在服务器上删除文件时为了方便经常会直接使用rm *.txt这类通配符,甚至为了省事加-rf参数,如果是确定的话还好,要是在删除的时候一个不留神,那事可就大了。

  俗话说常在河边站哪有不湿鞋,没人能保证自己就能一次失误都不犯,但天天提心吊胆的整成个强迫症也不是事,所以就想到了在linux服务器上也整一个类似win的回收站功能。

  以下是本人实现回收站的脚本,在启用回收站后如果需要删除文件,只需执行"del 文件名/文件夹名称"即可

 [root@localhost tools]# tree Trash_1./
Trash_1./
├── install_Trash.sh
└── Trash_mkdir.sh

  很简单,就两个脚本文件,Trash_mkdir.sh是写到crontab定时任务里的内容,负责每天生成对应日期的回收站文件夹,并定期清理回收站内超过5天的文件,也就是说回收站能保留你五天内删除的文件,install_Trash.sh脚本负责自动配置定时任务、加载用户个性化配置等。

  Trash_mkdir.sh的内容:

 [root@localhost Trash_1.]# cat Trash_mkdir.sh
#!/bin/bash
month=`date "+%m"`             #获取当前月份
day=`date "+%d"`               #获取当前日期  last_day=`date -d "-1 day" "+%d"`      #获取前天月份
last_day_m=`date -d "-1 day" "+%m"`    #获取前天日期 del_day=`date -d "-5 day" "+%d"`      #获取五天前月份
del_day_m=`date -d "-5 day" "+%m"`     #获取五天前日期 Trash_dir="/tmp/del_bak"          #回收站总目录
tmp_dir="/tmp/del_bak/tmp"         #每天删除文件存放目录
#下面是创建相应目录,并赋予777权限 if [ ! -d $Trash_dir ]
then
/bin/mkdir -p $Trash_dir
/bin/chmod $Trash_dir
fi if [ ! -d $tmp_dir ]
then
/bin/mkdir -p $tmp_dir
/bin/chmod $tmp_dir
fi if [ ! -d /tmp/del_bak/$month ]
then
/bin/mkdir /tmp/del_bak/$month
/bin/chmod /tmp/del_bak/$month
fi if [ ! -d /tmp/del_bak/$month/$day ]
then
/bin/mkdir /tmp/del_bak/$month/$day
/bin/chmod /tmp/del_bak/$month/$day
fi Trash_file=`/bin/ls -A $tmp_dir` if [ "$Trash_file" != "" ]            #这是定时在每天凌晨将昨天删除的文件放到已月份和日期分类的目录下,保证/tmp/del_bak/tmp目录下只存放当天删除的文件
then
cd $tmp_dir
if [ ! -d /tmp/del_bak/$last_day_m/$last_day/ ]
then
/bin/mkdir -p /tmp/del_bak/$last_day_m/$last_day/
fi
/bin/mv $tmp_dir/* /tmp/del_bak/$last_day_m/$last_day/
fi if [ -d $Trash_dir/$del_day_m/$del_day/ ]        #清理五天前删除的文件
then
cd $Trash_dir/$del_day_m/$del_day/ && {
/bin/rm -rf $Trash_dir/$del_day_m/$del_day/
}
fi

  install_Trash.sh脚本内容:

 [root@localhost Trash_1.]# cat install_Trash.sh
#!/bin/bash
USER=`/usr/bin/whoami`                          #获取当前用户
TOOLS="/usr/local/tools"                         #存放Trash_mkdir.sh定时任务脚本的路径,可根据个人自行修改
HOME_DIR=`/bin/grep "$USER" /etc/passwd|awk -F ":" '{print $6}'`  #获取当前用户家目录
CONF=$HOME_DIR"/.bashrc"                          #拼接当前用户的配置文件路径
Trash=`/bin/grep "del" $CONF`                      #判断是否已经配置了回收站机制 if [ "$Trash" = "" ]                            #添加回收站别名del
then
echo "alias del='mv -t /tmp/del_bak/tmp/ --backup=t'" >>$CONF
fi if [ ! -d $TOOLS ]
then
/bin/mkdir -p $TOOLS
fi /bin/cp Trash_mkdir.sh $TOOLS                      #拷贝定时任务脚本到指定目录
/bin/chmod +x $TOOLS/Trash_mkdir.sh if [ -z "`grep 'Trash_mkdir.sh' /var/spool/cron/root`" ]      #判断定时任务crontab里是否已经加了回收站脚本
then
echo "10 0 * * * $TOOLS/Trash_mkdir.sh" >>/var/spool/cron/root
fi /bin/sh $TOOLS/Trash_mkdir.sh                      #初始化回收站

部署说明:

1、将两个脚本放在同一目录下

2、使用需要启用回收站功能的用户去执行install_Trash.sh脚本即可一键安装

以上就是本人在Centos6.5服务器上实现的回收站机制,有兴趣的朋友可以一起讨论改进。

Centos实现回收站机制的更多相关文章

  1. ORACLE回收站机制介绍

    回收站概念 从ORACLE 10g开始,引入了一个叫回收站(Recycle Bin)的概念.它的全称叫Tablespace Recycle Bin.回收站实际是一个逻辑容器(逻辑区域),原理有点类似于 ...

  2. centos rm 回收站

    桌面版本的linux就默认有,非桌面版本貌似没(反正我没找到) linux rm删除文件之后,恢复就比较麻烦了,即使恢复了,文件名格式都变成一串数字了. 修改root用户的环境变量 vi ~/.bas ...

  3. 系统优化——建立linux回收站机制

    前言: linux系统下的rm是不可挽回的,命令设计本身没有问题,问题在于我们通常非常的自信,执行的时候喜欢rm -rf,这样的话就非常危险了,在执行的时候如果执行命令不对,甚至是执行的目录不对,那么 ...

  4. postgresql如何实现回收站机制

         在oracle10G之后:oracle提供一种回收站的机制:即闪回技术.闪回技术通常用于快速简单恢复数据库中出现的认为误操作等逻辑错误.发展到11G之后:回收站更加完善:对在可闪回时间内:数 ...

  5. centos建立回收站

    linux下的回收站在每一个当前用户目录./local/share/Trash中. 也可以给linux添加一个回收站. mkdir /tmp/trash_tmp 建立一个回收站目录 vi /bin/t ...

  6. 1.10HDFS 回收站机制

  7. Sharepoint 2013 回收站知识整理

    回收站机制可有利于防止内容的永久删除与误删除. 一.SharePoint 2013 回收站包括两种:第一回收站(End user Recycle Bin items)与 第二回收站(Deleted f ...

  8. ORACLE 回收站导致的故障

    ORACLE 回收站导致的故障 一.故障 (1)现象     一个生产环境,oracle数据库挂死,严重影响生产.查死锁sql,发现大量日志插入语句,并且每条运行时间都超过一分钟,插入非常缓慢.据分析 ...

  9. linux/mac下命令行rm回收站--rmtrash

    Linux.mac的命令行下没有回收站功能,很多时候手一抖就把重要文件给 rm -fr * 了,虽然linux下有可能通过lost +found/debugfs找回,但难度也比较大,不能保证一定能够找 ...

随机推荐

  1. 1、B2BUA

    链接1:proxy和B2BUA的区别和联系:http://www.cnblogs.com/gnuhpc/archive/2012/12/11/2813499.html 链接2:http://blog. ...

  2. ios 给图片添加水印

    //第一种添加水印方法 -(UIImage *)watermarkImage:(UIImage *)img withName:(NSString *)name{ NSString* mark = na ...

  3. JS 学习(四)对象

    对象 在JS中,对象是数据(变量),拥有属性和方法. JS中所有事物都是对象:字符串.数字.数组.日期等. 对象是拥有属性和方法的特殊数据类型. 属性是与对象相关的值. 方法是能够在对象上执行的动作. ...

  4. 通过rem编写自适应移动端要点

    直接上干货 1,dpr 苹果手机像素是2 普通安卓机是1 也就是说1像素下苹果需要的像素点是安卓机的两倍 所以一个需要15x15显示的图像安卓机仅需要提供15X15即可显示清楚 苹果手机需要要30X3 ...

  5. [转载:]C#与Fortran混合编程之本地调用Fortran动态链接库

    前言 C#发展到现在,已是一门相当完善的语言,他基于C语言风格,演化于C++.并依靠强大的.NET底层框架.C#可以用来快速构建桌面及Web应用.然而在我们的实际工作中,尽管C#已经非常完善,但还是不 ...

  6. Ninject之旅之三:Ninject对象生命周期

    摘要 DI容器的一个责任是管理他创建的对象的生命周期.他应该决定什么时候创建一个给定类型的对象,什么时候使用已经存在的对象.他还需要在对象不需要的时候处理对象.Ninject在不同的情况下管理对象的生 ...

  7. C++读入XML文件

    最近要做一个VRP的算法,测试集都是放在Xml文件中,而我的算法使用C++来写,所以需要用C++来读取Xml文件. 在百度上搜"C++读取Xml文件",可以出来很多博客,大多数是关 ...

  8. Orcle基本语句(三)

    COMMIT; --查询表内所有内容 SELECT * FROM stu_info; --查询部分列,并赋予别名 SELECT stu_id 学生标号,stu_name 学生姓名 FROM stu_i ...

  9. 利用cubieboard设置samba打印服务器

    #注意安装下面软件前,先将cubieboard的动态地址改为静态地址! apt-get install samba #安装samba vi /etc/samba/smb.conf //配置 workg ...

  10. Mac Aria2 使用Privoxy将socks代理转化为http代理

    安装Privoxy 打开终端安装privoxy来实现这里我是通过brew来进行的安装 brew install privoxy 看到这行已经安装成功 ==> Caveats To have la ...