Linux增加回收站功能

发布于:2025-02-11 ⋅ 阅读:(47) ⋅ 点赞:(0)

功能简介

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


网站公告

今日签到

点亮在社区的每一天
去签到