使用为Centos7创建回收站的方法,可以有效地防止误删文件,并对删除信息进行记录。
实现:
- 每个用户都可以使用回收站功能
- 每个用户具有独立的回收站,用户删除的文件会移动到自己专属的回收站中,不会被未授权的用户看到。
- 回收站内按照天建立文件夹,移入的文件添加时间后缀进行重命名,防止同名文件覆盖。
- 可以记录删除记录,对每个文件的删除时间,源位置,删除到回收站中的位置进行记录。
- 可以手动快速删除3天前移入回收站的文件,快速释放磁盘空间。
- 直接使用rm命令,对使用者无感,即使是其他人来使用这个系统也可以使用回收站功能。
- 如果想直接将文件删除,而不是移动到回收站,可以使用/usr/bin/rm进行删除
步骤:
1、/usr/bin
目录创建两个新文件,名字为delete、cleantrash,并赋予可执行权限
#!/bin/bash ######################################### # File Name: delete # Date: 2024-06-18 # Version: v1.0 # Author: jason ######################################### # Records information. Such as when it was "deleted", original location, and location in the recycle bin function log_trash() { file=$1 mark1="." mark2="/" if [ "$file" = ${file/$mark2/} ]; then fullpath="$(pwd)/$file" elif [ "$file" != ${file/$mark1/} ]; then fullpath="$(pwd)${file/$mark1/}" else fullpath="$file" fi # The output format is: ${delete time} \t ${original location} \t ${location in the recycle bin} echo -e "$3\t$fullpath\t$2" >>$HOME/.trash/.log } # The function that actually performs the "delete" operation function move_to_trash() { if [ ! -d $HOME/.trash/ ]; then mkdir -m 777 -p $HOME/.trash touch $HOME/.trash/.log chmod 666 $HOME/.trash/.log fi prefix=$(date +%Y_%m_%d) if [ ! -d $HOME/.trash/$prefix ]; then mkdir -p $HOME/.trash/$prefix fi files=() for arg in "$@"; do # If the input parameter is indeed a file, directory, or link, add it to the array if [[ -e "$arg" || -e "$arg" || -L "$arg" ]]; then files+=("$arg") fi done echo "move files to trash" for file in ${files[@]}; do if [ -f "$file" -o -d "$file" ]; then now=$(date +%Y%m%d_%H%M%S_%N) file=${file%/} filename=${file##*/} move_trash_path="${HOME}/.trash/${prefix}/${filename}_${now}" /usr/bin/mv $file $move_trash_path [ $? -eq 0 ] && log_trash $file $move_trash_path $now fi done } # If the number of parameters is 0, display help information if [ $# -eq 0 ]; then echo "Usage: rm file1 [file2 file3....]" exit 128 fi move_to_trash "$@"
#!/bin/bash ######################################### # File Name: cleantrash # Date: 2024-06-18 # Version: v1.0 # Author: jason ######################################### # Clean up files that were moved to the recycle bin 3 days ago now=$(date +%s) for s in $(ls --indicator-style=none $HOME/.trash/); do dir_name=${s//_/-} dir_time=$(date +%s -d $dir_name) # If the file is moved to the recycle bin for more than one month, delete it if [[ 0 -eq dir_time || $(($now - $dir_time)) -gt 259200 ]]; then /bin/rm -rf $s fi done echo "trash files has gone"
chmod +x delete cleantrash
2、修改/etc/bashrc文件,添加如下内容
alias sudo='sudo' alias rm='delete'
source /etc/bashrc
3、cleantrash加入定时任务
0 0 3 * * /usr/bin/cleantrash
测试:
1、查看当前账户的trash目录
[root@localhost bin]# echo $HOME/.trash /root/.trash
2、测试删除文件和目录
[root@localhost home]# rm -rf test.txt move files to trash [root@localhost jason]# rm -rf dnsub_linux_amd64_v2.0/ move files to trash
3、查看删除的文件和删除日志记录
.log
文件一共有3列,第一列是删除时间,第二列是文件删除前的位置,第三列是文件位于回收站中的位置
进入具体的日期文件夹,查看删除的文件:
可以看到删除的文件,文件自动被重命名了,可以防止重名文件相互覆盖
参考:
https://blog.uusite.com/system/linux/408.html
标签:误删除,文件,file,bin,HOME,trash,回收站 From: https://www.cnblogs.com/xiaoyou2018/p/18253874