1. 程式人生 > 實用技巧 >rm 防誤刪指令碼

rm 防誤刪指令碼

前記:
指令碼稱為《rm後悔藥》吧,雖然多年運維,依舊無法避免誤操作,既然無法避免,就做好誤刪準備。指令碼參考之前轉載的文章,進行了簡單的完善。
指令碼內容:

#建立回收站
mkdir -p /opt/apps/.recover/
chmod 777 /opt/apps/.recover
mkdir -p /opt/apps/shell/
#建立回收指令碼
cat >/opt/apps/shell/remove.sh <<EOF
#!/bin/bash
RECOVER_DIR="/opt/apps/.recover/\$USER"
if [[ ! -d "/opt/apps/.recover/\$USER" ]]
then
    mkdir "/opt/apps/.recover/\$USER"
fi
for i in \$*; do
    STAMP=\`date +%s\`
    fileName=\`basename \$i\`
    mv \$i \$RECOVER_DIR/\$fileName.\$STAMP
done
EOF

chmod +x /opt/apps/shell/remove.sh

#增加環境變數
cat >>/etc/bashrc <<EOF
alias rm='sh /opt/apps/shell/remove.sh'
EOF

#設定rm別名,用於刪除back檔案
ln -s /usr/bin/rm /usr/bin/rm-rm

#設定凌晨清空檔案
cat >>/etc/crontab <<EOF
0 3 * * * root rm -rf /opt/apps/.recover/*
EOF
#生效環境變數
source /etc/bashrc

簡單說明下:
1.將要刪除的檔案mv至回收站,凌晨3點清空。
2.為什麼要加入/etc/bashrc呢?因為使用者互動式登陸系統或者互動式非登陸系統,/etc/bashrc都會執行,這樣,系統所有使用者都可以共享此功能。
3.將rm軟連線rm-rm,有臨時需要永久刪除的檔案,可以使用此命令立即生效
4.為什麼計劃任務可以使用rm呢?因為計劃任務是非互動非登陸的,環境變數不生效