Linux增加回收站功能
功能简介
rm命令是非常危险的命令,为了防止用户误删文件,所以我们在执行rm命令时将文件添加到回收站,防止误删文件。
相关环境变量
名称 | 描述 |
TRASH_DIR | 回收站目录,默认为/Recycle_Bin |
文件命名规则 | 文件名生成格式为 原始文件名_删除时间 例如:test.txt-20240223192209 |
操作步骤
1. 编写脚本,使其登录后执行
在 profile.d文件夹中创建脚本文件
##进入profile.d文件夹 cd /etc/profile.d ## 创建并编写 vi trash.sh ## 修改脚本权限 chmod 755 loginRecord.sh ## 创建回收站根目录 mkdir /Recycle_Bin chmod 777 /var/log/history chattr +a /Recycle_Bin |
LoginRecord.sh 脚本文件内容
# 功能:修改rm命令将文件删除至指定文件夹(回收站) export TRASH_DIR=/Recycle_Bin trash(){ del_date=`date +%Y%m%d%H%M%S` # 循环是因为可能rm多个文件 for arg in "$@" do # 这里将删除时间加入到文件名后是因为mv命令不能覆盖非空目录以及不能使用文件覆盖文件夹 # 加上时间就不会有同名的文件了 if [ "-f" = "$arg" ] || [ "-rf" = "$arg" ] || [ "-fr" = "$arg" ];then { ## 跳过用户输入参数 continue } fi if [ -e $arg ];then ## 文件或目录存在才删除 { ## 删文件 if [ -f $arg ];then { ## 获取文件名 filename=${arg##*/} mv $arg ${TRASH_DIR}/$filename-${del_date} } else { ## 获取目录全名,删除掉最后一个/及其右边的字符串 arg=${arg%/*} ## 获取目录名,删除最后一个/及其左边的字符串 dirname=${arg##*/} mv $arg ${TRASH_DIR}/$dirname-${del_date} } fi } else { echo "[err] No such file or directory!!!" continue } fi done } alias rm=trash alias rl="ls ${TRASH_DIR}" #${TRASH_DIR} /Recycle_Bin |
2. 更改root账户配置
注释掉自带的rm环境变量
# 找到root用户下~/.bashrc 文件,注释rm环境变量如下 #alias rm='rm -i' |
编写自动清理文件脚本autoclean.sh
DAY=+7 find $TRASH_DIR -mtime $DAY -maxdepth 1 -exec chattr -a {} \ find $TRASH_DIR -mtime $DAY -maxdepth 1 -exec /usr/bin/rm -rf {} \ |
添加定时任务
0 0 * * * /etc/profile.d/autoclean.sh |