Linux自定義防誤刪腳本
阿新 • • 發佈:2018-10-15
工具 roo 分享圖片 本想 name 刪除 多看 快照 file 一、背景
俗話說的真好,常在河邊走,怎能不濕鞋子,之前作為工程師自覺的很細心的我,今天終於有了誤操作,想刪除服務器上臨時的系統掃描文件如下圖:
由於是在root的家目錄,本想這/tmp/下有很多系統掃描文件,系統性的tab了一下,由於是自己的監控測試服務器也沒多想,tab了一下應該是有多個文件,之後直接跟*
然後刪除全部掃描文件,但發現回車的一瞬間,發現只有一個掃描文件,瞬間頭皮發麻,雖然只是自己的測試服務器,但下面也有很多腳本和數據文件,心裏又氣又恨。查看了下測試服務器只有一個根也沒其他磁盤,此時ext3grep/extundelete這類工具就沒辦法了,想想也是有其他辦法,但比較麻煩,算了就當買個教訓吧,裏面寫個自定義rm命令腳本,來避免此類事情的發生。
二、思路
由於是過度自信,操作執行rm -rf
手速感人,也沒多看,因此自定義rm命令即可
- 通過alias rm來移動文件到一個回收站目錄
- 定期的在系統磁盤允許可控的使用率情況下來對文件進行刪除
因此寫了一下腳本來實現,與其說放勿刪,不如說是延遲刪除更為確切
#!/bin/bash # auth:kaliarch # function:自定義rm命令,每天晚上定時清理 # 定義rm刪除命令替換腳本 CMD_SCRIPTS=$HOME/.rm_scripts.sh # 定義回收站目錄 TRASH_DIR=$HOME/.TRASH_DIR CRON_FILE=/var/spool/cron/root BASHRC=$HOME/.bashrc [ ! -d ${TRASH_DIR} ] && mkdir -p ${TRASH_DIR} cat > $CMD_SCRIPTS <<EOF PARA_CNT=\$# TRASH_DIR=$TRASH_DIR for i in \$*; do DATE=\$(date +%F%T) fileName=\$(basename \$i) mv \$i \$TRASH_DIR/\$fileName.\$DATE done EOF sed -i "s@$(grep ‘alias rm=‘ $BASHRC)@alias rm=‘bash ${CMD_SCRIPTS}‘@g" $BASHRC source $HOME/.bashrc echo "0 0 * * * rm -rf $TRASH_DIR/*" >> $CRON_FILE echo "刪除目錄:$TRASH_DIR" echo "刪除腳本:$CMD_SCRIPTS" echo "請執行:source $BASHRC 來加載文件或退出當前shell重新登錄"
三、測試
- 運行腳本替換rm命令
之後推出重新登錄,或按提示source文件加載生效 - 腳本生成文件
可以看到在腳本運行用戶的家目錄,會生成回收站目錄和文件刪除腳本,會創建定時任務定時清理回收站,可以根據後期磁盤情況,自定義周期清理, - 測試文件刪除
對文件或目錄進行rm命令操作,可以發現是已經成功移動到回收站,定時任務會定時清理該目錄下的東西,延遲我們日常rm -rf
誤操作命令四、擴展
- 作為工程師,日常操作一定還是要小心
- 使用雲服務器,做好定時快照策略
- 如果為傳統服務器做好文件異地備份
- 安裝使用數據恢復軟件工具ext3grep、extundelete等第一時間恢復誤操作數據。
Linux自定義防誤刪腳本