小言_互联网的博客

“你的rm -rf /*,我接盘了“——刚毕业的运维小姐姐总误删文件,我送了她一个命令行版 “回收站”

254人阅读  评论(0)

目录

事情是这样的

Linux命令行实现回收站功能

1、创建回收站文件夹

2、重新一下rm命令

3、重写rm完整脚本

4、立即生效

5、测试删除

6、回收站定期删除

7、真实删除命令在哪呢?

送给运维小姐姐的回收站


事情是这样的

运维组新来了的一个小姐姐,在服务器上玩命令行,误删了一个重要的配置文件。

 

本来是件挺严重的事,但她泪眼汪汪的看着我,真的不忍心责怪

 

 

只能硬着头皮,翻文档 七拼八凑一下午 才把文件内容找回来

 

 

不能让她在服务器上过于奔放,只能找个方法限制她。

 

 

Linux命令行实现回收站功能

 

rm -rf 是一个极其危险的操作,而且Linux端不像windows,有回收站的的后悔药可以吃。

所以一旦误操作,就有可能造成不可挽回的后果。

 

1、创建回收站文件夹


  
  1. 创建一个路径来作为我们的回收站: cd ~ && mkdir .trash
  2. #/root/.trash路径,即作为我们的回收站路径

当然,这里要注意你分区空间的情况,这个回收站位置,生产环境尽量放在空间较大的分区下。

如果,只是自己玩玩,可以随便放。

2、重新一下rm命令

在.bashrc中重写删除命令的代码


  
  1. 赋予最高权限:chmod 777 .trash
  2. 修改你的 home 目录下的:.bashrc:vim ~/.bashrc

3、重写rm完整脚本


  
  1. # rm transform
  2. function rm() {
  3. # 定期清理回收站,时间可调整
  4. now=$(date +%s)
  5. for s in $(ls --indicator-style=none $HOME/.trash/) ; do
  6. dir_name= ${s//_/-}
  7. dir_time=$(date +%s -d $dir_name)
  8. # if big than one month then delete
  9. if [[ 0 -eq dir_time || $(( $now - $dir_time)) -gt 2592000 ]] ; then
  10. echo "Trash " $dir_name " has Gone "
  11. /bin/rm $s -rf
  12. fi
  13. done
  14. # 重写rm命令,将文件mv到回收站下
  15. prefix=$(date +%Y_%m_%d)
  16. hour=$(date +%H)
  17. mkdir -p $HOME/.trash/ $prefix/ $hour
  18. if [[ -z $1 ]] ; then
  19. echo 'Missing Args'
  20. return
  21. fi
  22. echo "Hi, 小姐姐 " ${!#} "已被移到回收站了呢~"
  23. mv ${!#} $HOME/.trash/ $prefix/ $hour
  24. }

4、立即生效


  
  1. source ~/.bashrc
  2. #使配置文件立即生效,最后 我们来做一下测试

5、测试删除


  
  1. #创建测试文件
  2. [root@mail ~] # touch test.txt
  3. #使用rm -rf 删除该文件
  4. [root@mail ~] # rm -rf test.txt
  5. Hi, 小姐姐 test.txt 已被移到回收站了呢~
  6. #创建测试文件
  7. [root@mail ~] # touch aaa.txt
  8. #使用rm 删除该文件
  9. [root@mail ~] # rm aaa.txt
  10. Hi, Trashing aaa.txt to /root/.trash
  11. #查看一下回收站里的文件,已经被成功移过来了
  12. [root@mail ~] # ll /root/.trash/2020_07_17/17/
  13. total 0
  14. -rw-r--r-- 1 root root 0 Jul 17 17:16 222
  15. -rw-r--r-- 1 root root 0 Jul 17 17:36 aaa.txt
  16. -rw-r--r-- 1 root root 0 Jul 17 17:14 eeee
  17. -rw-r--r-- 1 root root 0 Jul 17 17:36 test.txt

现在我们删除一个测试文件:

rm a.txt 或者 rm -rf aaa.txt

会显示:Hi, 小姐姐 aaa.txt 已被移到回收站了呢~

 

6、回收站定期删除

因为我们上面的 shell 每次触发 rm 命令的时候都会去删除一个月前的目录,

所以就不需要定时器来删除 .trash 里面的文件了。

当然,你也可以不用定期删除。

选择手动去清空回收站

 

7、真实删除命令在哪呢?


  
  1. 如果强制清空 "回收站"(即清空 .trash 目录),
  2. 可以使用真正的 rm 命令:/bin/rm -rf ~/.trash/*

 

送给运维小姐姐的回收站

做一个回收站送给爱删除的你

从今以后,你的删除 我接盘了

rm -rf 你随便用,你玩删除的时候,已经不是删除了~emmm

 

欢迎关注微信公众号:hacklex

 


转载:https://blog.csdn.net/weixin_42350212/article/details/115628436
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场