一、创建一个垃圾篓
给你的linux创建一个垃圾篓/回收站,防误删
创建一个垃圾回收站,保存被删除距今3天的文件,过期则被删除
1. 在你的主目录下,创建文件夹 .trash
cd ~
mkdir .trash
2. 在你的常用脚本目录下创建这俩脚本
#!/bin/bash
TRASH_DIR="/home/lixy/.trash"
for i in $*; do
STAMP=`date +%s`
fileName=`basename $i`
if [[ -d $TRASH_DIR/$fileName.$STAMP ]];then
mkdir $TRASH_DIR/$fileName.$STAMP
fi
mv $i $TRASH_DIR/$fileName.$STAMP
done
##################################################
# File Name : /home/lixy/bin/removeRF.sh
# Author : biolxy
# E-mail : [email protected]
# Created Time: Wed 17 Apr 2019 02:48:47 PM CST
##################################################
#!/bin/bash
# 该文件夹下文件名字格式为 : JZ201810081226.1555481687
# 文件夹即为你设置的垃圾箱地 : /home/lixy/.trash
inputdir=`realpath $1`
STAMP=`date +%s`
cd ${inputdir}
for i in `ls -a $inputdir `
do
fileRemoveTime=${i##*.} # 表示从左边开始删除最后(最右边)一个 . 号及左边的所有字符
#if [ $fileRemoveTime ] # 检测字符串是否为空,不为空返回 true。
# ${#fileRemoveTime} 返回字符串长度,也是一个str
if [ ${#fileRemoveTime} = 10 ] # = 检测两个字符串是否相等,相等返回 true; 检测字符串长度是否等于10,等于则返回 true。
then
# echo $STAMP $fileRemoveTime
# echo ${#fileRemoveTime}
difference=$[ $STAMP - $fileRemoveTime ] # 支持的运算符与let相同,但也只支持整数运算
# echo $difference
# 24 * 60 * 60 * 3 = 259200 s 即 3 天
if [ $difference -gt 259200 ];then
echo "# `date` : rm file $i"
/usr/bin/rm -rf $i
fi
fi
done
3. 用 remove.sh 替换 rm
vim ~/.bashrc # 你用的是zsh的话就改为 ~/.zshrc
chmod +x /home/lixy/bin/remove.sh # 给remove.sh 添加可执行权限
alias rm='/home/lixy/bin/remove.sh' # 替换rm, 保存退出
source ~/.bashrc # 刷新环境变量
替换过之后,rm
删除的文件,会被移动到 /home/lixy/.trash 文件夹,并且会在文件后添加 .1555481687
的后缀,该后缀为删除时的时间(秒)
4. 添加定时任务
30 6 * * * /bin/bash /home/lixy/bin/removeRF.sh /home/lixy/.trash > /home/lixy/.trash/remove.log
每天早上6.30 调用脚本,删除指定的.trash
文件夹下的文件,脚本中会根据文件移动到.trash 时添加的后缀,判断移动时间,移动时间大于3天的,即被 /usr/bin/rm
强制删除
二、误删恢复
好的,现在就该神器extundelete上场了。
1、安装
apt install extundelete
2、查找要恢复的驱动器名
df -h or lsblk Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 495844 64150 406094 14% /boot
3、运行恢复
默认恢复到当前目录下的RECOVERED_FILES目录中去
恢复单个文件
extundelete /dev/sdb1 --restore-file hosts
恢复一个目录
extundelete /dev/sdb1 --restore-files test/
恢复整个分区
extundelete /dev/sdb1 –-restore-all
这个工具貌似支持EXT4文件系统,经过实际测试,restore-all比较好用,在初次删除后可以很好的恢复文件及目录结构,但是如果我在相同位置新建了相同的文件名或者目录名,就会恢复失败(找不到了)。而恢复单独的文件或者目录则没有成功,如果有成功的可以告诉我。