前记: 脚本称为《rm后悔药》吧,虽然多年运维,依旧无法避免误操作,既然无法避免,就做好误删准备。脚本参考之前转载的文章,进行了简单的完善。 脚本内容:

#!/bin/bash

#创建回收站
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呢?因为计划任务是非交互非登陆的,环境变量不生效