学习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