Loading

Linux 教你如何预防删库到跑路

学习linux之前,有几个命令是必须记住的

我们最常见的删库命令

rm -rf /**

 

这个命令可以在你心情不好的时候,对着公司服务器操作一番,保证让你一时爽,

删完库这个时候你就该跑路了,但是你真的能跑的掉吗,恐怕等待你的就是牢狱之灾;

所以我们要在这里提前做好预防。

 

1.我们可以使用温和的删除命令,每一次删除都会要你进行确认,避免删错

rm -ir directory

 

2.在每一次删除前,我们先做好备份

touch test     #新建文件
cp test test.bak #复制为带后缀bak的备份文件
mv test test.bak #修改为带后缀bak的备份文件

 

默认是当前路径,你也可以放在其他路径

mkdir backup                 #创建文件夹backup
mv test /backup/test.bak     #将test文件移动到backup文件夹并且重命名为test.bak

 

3.将rm命令构建为自己的回收站,编辑 /etc/bashrc文件

vi /etc/bashrc

 

 

新增内容

### 重定义rm命令 ### 
 
# 定义回收站目录 
trash_path='~/.trash' 
 
# 判断 $trash_path 定义的文件是否存在,如果不存在,那么就创建 $trash_path. 
if [ ! -d $trash_path ]; then 
 mkdir -p $trash_path 
fi 
 
# 定义别名:使用 rm 就调用 trash 
alias rm=trash 
 
# 使用 rl 就调用 'ls ~/.trash' 
# 如果更改上面的回收站目录这里的目录也需要修改 
alias rl='ls ~/.trash' 
 
# 使用 unrm 就调用 restorefile,需要在删除目录的父目录下执行 
alias unrm=restorefile 
 
# 使用 rmtrash 就调用 claearteash 
alias rmtrash=cleartrash 
 
# 恢复文件的函数 
restorefile() 
{ 
 mv -i ~/.trash/$@ ./ 
} 
 
# 删除文件的函数 
trash() 
{ 
 mv $@ ~/.trash/ 
} 
 
# 清空回收站的函数 
cleartrash() 
{ 
 read -p "确定要清空回收站吗?[y/n]" confirm 
 [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /bin/rm -rf ~/.trash/* 
}

 重新加载下文件,使配置生效

source /etc/bashrc

 

4.创建你刚才在文件中定义的回收站文件夹.trash

mkdir .trash

 

5.我们来进行测试一下

[root@iZj6cet3mqlrzqmdk2a20qZ ~]# touch chen
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# mkdir bao
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# ls
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# rm -f chen 
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# ll /root/.trash/     #查看回收站
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# rl                   #查看回收站
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# unrm chen            #恢复文件
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# rmtrash              #清空回收站
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# /bin/rm -r bao       #强制删除文件

使用这种方式存在一个缺陷,每次删除同名文件,都会覆盖回收站原有的文件,那么这个时候我们怎么解决呢

 

编写shell脚本

vi rm.sh

 

于是乎,写了下面的shell脚本(rm.sh):

#version  : 1.0 
#author   : zzy
# 删除文件
#主要功能,将文件已到指定的目录
#缺陷:当转移的目录中已经存在需要转移的文件时,尚未处理
 
 
recycle_dir=~/.recycle
if ! [ -d $recycle_dir ]
then
    mkdir $recycle_dir
    echo "创建目录$recycle_dir 保存删除得文件" ... ok
    chmod 777 $recycle_dir
    echo "修改权限" ..ok
fi
#将需要删除得文件移到该目录
file_dir=$(cd `dirname $1`; pwd)
file_name=`basename $1`
rmFiles="$file_dir/$file_name"
 
cur_date=`date +%Y%m%d_%H_%M_%S`
save_dir="$recycle_dir/$cur_date";
 
if ! [ -e $save_dir ] 
then
 mkdir $save_dir
 chmod 777 $save_dir 
fi
save_dir="$save_dir/$file_name"
 
 
if [ -e $rmFiles ]
then
    if [ -e $save_dir ]
    then
         echo "$save_dir已经存在,可以通过-f选项移除之前的文件"  
    else
       mv $rmFiles $save_dir
       if [ $? -eq 0 ]
       then
           rm -rf $rmFiles
           echo "$rmFiles已经成功删除...若想恢复,请到$save_dir中查找"
           #添加日志
           logTime=`date "+%Y-%m-%d %H:%M:%S"`
           curUser=`whoami`
           echo "[$curUser] $logTime $rmFiles ====> $save_dir" >> "$recycle_dir/del.log"
       else
          echo "请使用相对目录删除"
         fi
    fi
else
    echo "你没有权限或是文件不存在哦!!!"
fi

给脚本授权

[root@iZj6cet3mqlrzqmdk2a20qZ ~]# chmod 777 rm.sh

 

创建回收站目录

[root@iZj6cet3mqlrzqmdk2a20qZ ~]# mkdir .recycle

 

测试脚本

[root@iZj6cet3mqlrzqmdk2a20qZ ~]# touch index.html
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# ./rm.sh index.html
/root/index.html已经成功删除...若想恢复,请到/root/.recycle/20190708_20_29_12/index.html中查找

 

如果我嫌这个脚本太长了怎么办,没事,我们可以把他定义为自己的命令

编辑文件.bashrc

vi ~/.bashrc

 

添加内容

alias del=~/rm.sh

 

 重新加载下文件

source .bashrc

 

测试下

[root@iZj6cet3mqlrzqmdk2a20qZ ~]# touch hello.txt
[root@iZj6cet3mqlrzqmdk2a20qZ ~]# del hello.txt
/root/hello.txt已经成功删除...若想恢复,请到/root/.recycle/20190708_20_30_12/hello.txt中查找

 

github有一个完整的脚本,

github项目地址: https://github.com/LaiJingli/rmtrash

 

Linux安装

wget --no-check-certificate https://raw.githubusercontent.com/LaiJingli/rmtrash/master/rmtrash.sh
mv rmtrash.sh /bin/
chmod +x /bin/rmtrash.sh

 

 

单个用户授权

/bin/rmtrash.sh

 

 

所有用户授权

echo "alias rm=/bin/rmtrash.sh" >>/etc/bashrc

 

帮助命令

rm -h

 

如果有问题,执行以下2条命令排查,或者退出重新登录系统

source ~/.bashrc
alias |grep rm

 

 

如果需要彻底删除文件

rm -e                 清空回收站
/bin/rm file          直接删除文件而不经过回收站
/bin/rm -r directory  直接目录而不经过回收站

 

 

如果你想设置某个目录不被删除,加个elif 条件

vi /bin/rmtrash.sh

 

 

测试结果

 

 回收站存放的目录

cd .rmtrash
vi .rmtrash.log

 

 

原文地址:http://www.findme.wang/blog/detail/id/238.html

 

posted @ 2019-07-07 12:19  Reasonzzy  阅读(917)  评论(0编辑  收藏  举报