rm -rf -----誤刪代碼事件 (干貨分享)

rm -rf 需永遠警惕

今日在測試環(huán)境修改代碼,測試的時候,刪除舊的日志文件(方便查看當前最新生成的日志),由于多個終端的切換,導致沒有關(guān)注文件目錄,直接在src目錄下執(zhí)行rm -rf *!!!,
真是一個悲慘的教訓,上周的代碼沒有備份,也沒有提交版本庫........

警惕 :

  • 要時刻保持警惕,在執(zhí)行一些無法逆轉(zhuǎn),容易產(chǎn)生不可預估的后果的命令時,一定要再三確認.
  • 要隨時保持備份,保持第二方案,做好最壞的打算.

解決方案:

在總結(jié)一番后,決定寫一個類似回收站一樣的腳本來防止類似事情的發(fā)生.

  • 編寫shell 腳本,使用mv命令代替rm命令。

添加以下代碼到~/.bashrc


alias rm='trash'
alias rl='trash_ls'
alias rr='trash_rm'
alias rg='trash_log'
alias realrm='/bin/rm'

#-------回收站
TrashHome="${HOME}/.data/"
TrashDir="${TrashHome}rubbish/"
TrashLog="${TrashHome}Log"

trash()
{
    mkdir -p ${TrashDir}

#顯示幫助提示
    if [[ $1 = "" ]];then 
        echo "[ rm ] ---- 'remove' File Or Directory"
        echo "             eg : rm filename"
        echo "             eg : rm filename1 filename2 dirname ..."
        echo "[ rl ] : List trash directory file"
        echo "[ rr ] : Clean trash directory"
        echo "[ rg ] : Get Trash Log"
        echo "[ realrm ] : original rm!!"
        echo ""
        echo "This [ rm ] is [ mv ]!!"
        echo "The trash directory is [ ${TrashDir} ]"
        echo "The trash Log is [ ${TrashLog} ]"
    fi

#循環(huán) ‘刪除’ 傳入文件 
#命令后面跟 -- 是參數(shù)結(jié)束標記
    for i in $*
    do
        Dir=`pwd`
        DATETIME=`date +%Y%m%d%H%M%S`
        fileName=`basename -- $i`
        filesize=`du -sch -- $i | awk 'END{print $1}'`
        mv -- $i ${TrashDir}/${fileName}.${DATETIME}
            #添加日志信息
        if [[ $? -eq 0 ]];then
            if [[ -d ${TrashDir}/${fileName}.${DATETIME} ]];
            then
                echo "-d ${fileName}  ${Dir}/ ${filesize} `date +'%Y-%m-%d-%H:%M:%S'` Success " >> ${TrashLog}
            elif [[ -f ${TrashDir}/${fileName}.${DATETIME} ]];
            then
                echo "-f ${fileName}  ${Dir}/ ${filesize} `date +'%Y-%m-%d-%H:%M:%S'` Success " >> ${TrashLog}
            else
                echo "-- ${fileName}  ${Dir}/ ${filesize} `date +'%Y-%m-%d-%H:%M:%S'` Success " >> ${TrashLog}
            fi
        else
            if [[ -f  ${TrashDir}/${fileName}.${DATETIME} ]];
            then
                echo "-f ${fileName}  ${Dir}/ ${filesize} `date +'%Y-%m-%d-%H:%M:%S'` Failure" >> ${TrashLog}
            elif [[ -d  ${TrashDir}/${fileName}.${DATETIME} ]];
            then
                echo "-d ${fileName}  ${Dir}/ ${filesize} `date +'%Y-%m-%d-%H:%M:%S'` Failure" >> ${TrashLog}
            else
                echo "-- ${fileName}  ${Dir}/ ${filesize} `date +'%Y-%m-%d-%H:%M:%S'` Failure" >> ${TrashLog}
            fi
        fi
    done
}

#展示回收站內(nèi)容
trash_ls()
{
#ls -lt $TrashDir
    ls -lt --color $TrashDir| sort -s -k 1,1
    trashsize=`du -chs ${TrashDir} | awk 'END{print $1}'`
    echo "回收站總大小: ${trashsize}" 
}

#清空回收站內(nèi)容
trash_rm()
{
    read -p "確定清空回收站嗎(同時會刪除回收站日志)?(y/n)" action
    if [ $action = "y" ];then
        /bin/rm -rf ${TrashDir}*
        echo "">${TrashLog}
    elif [ $action = "Y" ];then
        /bin/rm -rf ${TrashDir}
        echo "">${TrashLog}
    fi
}

#打印回收站日志
trash_log()
{
    clear
    cat ${TrashLog}| awk 'BEGIN{printf "%-6s %-15s %-30s %-10s %-15s %-10s\n","類型","文件名","原文件路徑","文件大小","日期","刪除狀態(tài)";
    printf "---------------------------------------------------------------------------------------------------------\n"}
    { printf "%-*s %-*s %-*s %-*s %-*s %-*s\n",6,$1,15,$2,40,$3,10,$4,20,$5,10,$6}
    END {printf "---------------------------------------------------------------------------------------------------------\n"}
    '
}

trash_time_clean()
{
#定時刪除回收站中的文件,定時器執(zhí)行crontab
#定時刪除兩天以上的文件
    find ${TrashDir} -maxdepth 1 -mtime +2 -exec rm -rf  {}  \;
}

#--------end 回收站

保存退出后執(zhí)行 source .bashrc,使修改立即生效

下面是回收站命令:
直接執(zhí)行rm可以顯示提示

rm 執(zhí)行的是trash函數(shù)


rg 打印刪除日志


rl 顯示回收站內(nèi)容


rr 清空回收站


realrm 真正的刪除(原rm)


如果想要定時清空回收站,可使用定時器

  • 添加用戶的定時器crontab -e 打開定時器編輯文件,添加如下代碼

0 0 */2 * * trash_time_clean;

每兩天的0時0分執(zhí)行 trash_time_clean;刪除兩天以前的文件.

謝謝大家.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容