Linux自定义防误删脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux自定义防误删脚本相关的知识,希望对你有一定的参考价值。

一、背景

俗话说的真好,常在河边走,怎能不湿鞋子,之前作为工程师自觉的很细心的我,今天终于有了误操作,想删除服务器上临时的系统扫描文件如下图:
技术分享图片
由于是在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 "[email protected]$(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自定义防误删脚本的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

Redis6----应用问题解决和新功能预览

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段(vue主模板)

VSCode自定义代码片段——声明函数

VSCode自定义代码片段——.vue文件的模板