Linux rm命令 回收機制

        在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  將垃圾箱中的文件挽救出來。希望對讀者有用。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章