避免 rm -rf /*删库:建立回收站机制(完美解决)

1. 写在前面

rm -rf /*形式有很多

  • rm -rf /* (直接潇洒走一回)
  • rm -rf $abc/* (变量所指不存在)
  • rm -rf abc /* (多了一个硬核空格” “)

它的威力,懂的人自然懂。

对于此,除了重新认识 rmrm -rf以及空格,也要做一些安全措施,避免此类事情的再次发生。

2. 两种思路

以下两种思路,可能在本质上来看都是一样的:

  • 将需要删除的文件移动(而不是删除)到指定的目录,比如/trash/
  • 定期清理/trash/下的文件

但是在具体使用上还是有些区别(推荐方法二)

2.1 方法一:rm 指向mv实现的函数

参考:写了Bug,误执行 rm -fr /*,我删删删删库了,要跑路吗?

过程

  • 创建回收站目录:mkdir /home/.trash

  • 编写 remove.sh 脚本
    在这里插入图片描述

  • 修改 ~/.bashrc, 用我们自建的 remove.sh 替代 rm 命令

  • 设置 crontab,定期清空垃圾箱
    如设置每天 0 点清空垃圾箱:
    (1)进入编辑

    crontab -e 
    

    (2)写入以下内容:

    0 0 * * * rm -rf /home/.trash/*
    

    在这里插入图片描述
    (3)退出编辑:control x

  • 执行source ~/.bashrc,使得.bashrc生效

  • 使用举例

     rm ./test_delete
    

缺点

  • 缺点1:/home/.trash/ 容易 Permission denied
    在这里插入图片描述
  • 缺点2:可能影响到已经在使用rm命令的脚本

2.2 方法二:新建用mv实现的命令

这里使用新命令rmm来替代系统的rm

参考:Linux rm命令 回收机制

过程

  • root身份
  • 将以下代码写入/etc/bashrc 或者 /etc/bash.bashrc中:
#rmm delete
alias rmm=trash
alias rl='ls -a  $HOME/.trash'

trash()
{
 trash_path="$HOME/.trash"
 if [ ! -d $trash_path ]; then
    mkdir -p $trash_path
 fi
 for i in $*; do
       if [ "$i" == "-f" -o "$i" == "-rf" ] ;then
           continue
       fi
       STAMP=`date +%Y%m%d-%H:%M:%S`
       FileName=`basename $i`
       mv $i $trash_path/$FileName"_"$STAMP
 done
  • source 以上文件,使之立马生效
  • 设置定期清理(请看方法一)

使用举例

  • rmm :移动(删除)
    注:后来改为srm
  • rl:显示回收站内信息

(1)root 身份

root@suer-virtual-machine:/etc# rmm /home/suer/test_dir4
root@suer-virtual-machine:/etc# rl
.   test_dir2_20210127-10:42:49  test_dir4_20210127-14:24:36
..  test_dir3_20210127-10:46:24

(2)普通用户身份

suer@suer-virtual-machine:~$ rmm test_dir5
suer@suer-virtual-machine:~$ rl
.  ..  test_dir5_20210127-14:44:59

可能遇到的问题

如果觉得文章可以或者对你有帮助可以点个赞支持一下博主。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值