Linux rm命令 回收机制

        在linux在rm的使用频率很高,误删,错删的情况自然避免不了,本人就曾经在错误的目录下使用了 rm -rf  ./*  命令 ,花了半天才把环境重新搭建好......    所以建立一种可回退的机制就很有必要。

        看了网上的介绍,整体的实现方式分为两种:

              1.利用github上的项目 使用一个新的命令 trash去删除文件。

              2.改写rm命令,利用mv命令移动文件or文件夹到指定的文件夹下,再定时删除。

       很遗憾我看了几篇文章的git地址都下载不了,只能利用第二种方法自己实现。

       利用mv命令也有两种实现方式:

               1.改变rm的调用方式,让其不再调用/bin/rm 命令而是转而调用利用mv实现的删除函数

                2.新建一个命令。 

       考虑到本身环境的其他脚本已经调用rm命令,可能会导致其他脚本运行出错,加上工作的环境多人在使用。这里我采用了方式2,新建一个rmm命令,避免不必要的麻烦。(真正的工作环境中推荐这种方式)

        实现rmm命令的方式也有两种方式:

               1.在根目录下创建一个 .myrm.sh 然后  alias rmm='sh /root/.myrm.sh' 

               2.将移动文件夹的函数trash()直接写入/etc/bashrc中,然后 alias rmm=trash

       考虑到其他用户调用/root/.myrm.sh存在权限问题,这里值得一提的是就算采用第一方式 再chmod 777 /root/.myrm.sh也会存在权限问题。具体原因未知。抛开第一种的权限问题,第二种方法也更加简单明了。

 

综合网上的文章,我的具体实现方式如下:

#rm回收机制机制
1.切换root用户  
2.vi /etc/bashrc  #在文件末尾加添加下方代码 --写入 /etc/bashrc 而不写入~/.bashrc的原因是让rmm命令在此机器的每个用户都生效 
3.source /etc/bashrc   --让/etc/bashrc 生效
4.设置crontab定时任务,利用rm去清空垃圾桶中超过三天的文件 --eg:find /home/用户/.trash/*  -ctime +3 |xargs rm -rf  推荐全部写入root用户的定时任务中
5.关闭已经打开的xshell窗口,重新打开

#需要在文件末尾添加的内容如下
#rmm删除文件
alias rmm=trash
#显示垃圾桶内的文件
alias rl=' ls -a  $HOME/.trash'
#使用rmtrash清空回收站  这里注释掉的原因是我会设置定时任务去清空 有需要的同学可以放开
#alias rmtrash=cleartrash 

trash()
{
#采用$HOME是为了在每个用户的家目录下都新增一个垃圾桶,让便查看和操作,避免root权限问题
 trash_path="$HOME/.trash"
 if [ ! -d $trash_path ]; then
    mkdir -p $trash_path
 fi
 for i in $*; do
       #避免习惯性使用rm 带-f -rf参数
       if [ "$i" == "-f" -o "$i" == "-rf" ] ;then
           continue
       fi  
       #避免短时间内删除同名文件
       STAMP=`date +%Y%m%d-%H:%M:%S`
       FileName=`basename $i`
       mv $i $trash_path/$FileName"_"$STAMP
 done
}

cleartrash() 
{ 
 read -p "确定要清空回收站吗?[y/n]" confirm 
 [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/* 
}

效果展示:

root用户:

Linux rm命令  回收机制

 

 

一般用户:

Linux rm命令  回收机制

       如果及时发现删除文件了,且未超过预置的存放时间(我这里定时任务设置的三天),立即cd ~/.trash  将垃圾箱中的文件挽救出来。希望对读者有用。

 

上一篇:Linux编写回收站详解


下一篇:Linux-运维-实现回收站功能