Linux下使用shell脚本增加回收站功能,并实现对回收站的内容自动清理【测试成功】

Linux下使用shell脚本增加回收站功能,并实现对回收站的内容自动清理【测试成功】

一、需求背景

在Linux上,可能存在误执行rm命令导致服务器崩溃的情况发生,

为尽量降低风险,故增加回收站功能。

二、增加回收站

1、编辑系统环境配置文件

 vim /etc/profile
####### trash #######
mkdir -p ~/.trash          # 路径可以自己创建和命名,不受限制,修改路径名后,记得修改下面三个函数里面的路径
alias rm=trash             # 将rm别名成trash,调用trash函数
alias ur=undelfile         # 使用别名定义一个ur命令,调用undelfile函数,作用是还原文件

function undelfile(){      # 通过$@将ur后面的参数逐一传给mv移动到当前目录下
  mv -i ~/.trash/$@ ./     # mv -i 当目标文件存在时,提示是否覆盖
}

function trash(){          # 在终端输入的rm命令,会通过别名alias调用trash函数,再通过$@将rm后面的参数逐一传给mv移动到.trash目录下
  mv $@ ~/.trash/
}

function cleartrash(){     # 在终端输入 cleartreash ,就会调用这里的函数,输入'y 或 Y',就会清空.trash目录下的内容
    read -p "clear sure?[n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf ~/.trash/*    # /bin/rm 不受别名的限制,会直接删除文件
}
####### trash end #######

alias rm=trash             
alias ur=undelfile         
function undelfile(){      
  mv -i /home/trash/$@ ./     
}function trash(){          
  mv $@ /home/trash/
}
function cleartrash(){     
   read -p "clear sure?[n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf /home/trash/* 
}
####### trash end #######

2、使其立即生效

source /etc/profile

三、验证测试

1、删除文件测试

[root@JQNode1 home]# touch 2
[root@JQNode1 home]# rm -f 2
[root@JQNode1 home]# cd trash/
[root@JQNode1 trash]# ls
2  test.txt

2、删除目录测试

[root@JQNode1 home]# mkdir dir
[root@JQNode1 home]# cd dir/
[root@JQNode1 dir]# touch 1 2 3 4 5 
[root@JQNode1 home]# rm dir/
[root@JQNode1 home]# ls
trash  yxtf
[root@JQNode1 home]# cd trash/
[root@JQNode1 trash]# ls
2  dir  test.txt
[root@JQNode1 trash]# cd dir/
[root@JQNode1 dir]# ls
1  2  3  4  5

备注:使用绝对路径/bin/rm进行删除,不会被移动到回收站,会直接进行删除。

四、实现自动清理回收站

比如自动删除7天以前的回收站文件

vim trash.sh

#!/usr/bin/env bash
find /home/trash -ctime 7 -type f -name "*" -exec /bin/rm -rf {} \;

实现每天0:00自动清理回收站

crontab -e

0 0 * * * /ops/trash.sh

image-20240415164325896

posted @ 2024-04-15 16:44  寻梦99  阅读(102)  评论(0)    收藏  举报