在linux在rm的使用頻率很高,誤刪,錯刪的情況自然避免不了,本人就曾經在錯誤的目錄下使用了 rm -rf ./* 命令 ,花了半天才把環境重新搭建好...... 所以建立一種可回退的機制就很有必要。
看了網上的介紹,整體的實現方式分爲兩種:
1.利用github上的項目 使用一個新的命令 trash去刪除文件。
2.改寫rm命令,利用mv命令移動文件or文件夾到指定的文件夾下,再定時刪除。
很遺憾我看了幾篇文章的git地址都下載不了,只能利用第二種方法自己實現。
利用mv命令也有兩種實現方式:
1.改變rm的調用方式,讓其不再調用/bin/rm 命令而是轉而調用利用mv實現的刪除函數
2.新建一個命令。
考慮到本身環境的其他腳本已經調用rm命令,可能會導致其他腳本運行出錯,加上工作的環境多人在使用。這裏我採用了方式2,新建一個rmm命令,避免不必要的麻煩。(真正的工作環境中推薦這種方式)
實現rmm命令的方式也有兩種方式:
1.在根目錄下創建一個 .myrm.sh 然後 alias rmm='sh /root/.myrm.sh'
2.將移動文件夾的函數trash()直接寫入/etc/bashrc中,然後 alias rmm=trash
考慮到其他用戶調用/root/.myrm.sh存在權限問題,這裏值得一提的是就算採用第一方式 再chmod 777 /root/.myrm.sh也會存在權限問題。具體原因未知。拋開第一種的權限問題,第二種方法也更加簡單明瞭。
綜合網上的文章,我的具體實現方式如下:
#rm回收機制機制
1.切換root用戶
2.vi /etc/bashrc #在文件末尾加添加下方代碼 --寫入 /etc/bashrc 而不寫入~/.bashrc的原因是讓rmm命令在此機器的每個用戶都生效
3.source /etc/bashrc --讓/etc/bashrc 生效
4.設置crontab定時任務,利用rm去清空垃圾桶中超過三天的文件 --eg:find /home/用戶/.trash/* -ctime +3 |xargs rm -rf 推薦全部寫入root用戶的定時任務中
5.關閉已經打開的xshell窗口,重新打開
#需要在文件末尾添加的內容如下
#rmm刪除文件
alias rmm=trash
#顯示垃圾桶內的文件
alias rl=' ls -a $HOME/.trash'
#使用rmtrash清空回收站 這裏註釋掉的原因是我會設置定時任務去清空 有需要的同學可以放開
#alias rmtrash=cleartrash
trash()
{
#採用$HOME是爲了在每個用戶的家目錄下都新增一個垃圾桶,讓便查看和操作,避免root權限問題
trash_path="$HOME/.trash"
if [ ! -d $trash_path ]; then
mkdir -p $trash_path
fi
for i in $*; do
#避免習慣性使用rm 帶-f -rf參數
if [ "$i" == "-f" -o "$i" == "-rf" ] ;then
continue
fi
#避免短時間內刪除同名文件
STAMP=`date +%Y%m%d-%H:%M:%S`
FileName=`basename $i`
mv $i $trash_path/$FileName"_"$STAMP
done
}
cleartrash()
{
read -p "確定要清空回收站嗎?[y/n]" confirm
[ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/*
}
效果展示:
root用戶:
一般用戶:
如果及時發現刪除文件了,且未超過預置的存放時間(我這裏定時任務設置的三天),立即cd ~/.trash 將垃圾箱中的文件挽救出來。希望對讀者有用。