博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何优雅地使用 rm 防止误删除?
阅读量:7114 次
发布时间:2019-06-28

本文共 1948 字,大约阅读时间需要 6 分钟。

  IT 界的有一个老梗,一次某论坛的数据库管理员抱怨自己老板一直虐待他,结果他一气之下就删库跑路了......

  于是...

  据新华社北京 8 月 20 日电 ,北京一软件工程师徐某离职后因公司未能如期结清工资,便利用其在所设计的网站中安插的后门文件将网站源代码全部删除。记者 20 日从北京市丰台区人民法院获悉,徐某破坏计算机信息系统罪成立,获刑五年。

  

  我在服务器维护的时候不小心执行了rm -rf命令......现在整台服务器被我删光了肿么办???

  

  好吧,现在先来介绍一下rm。

  rm -rf 的威力

  rm是 linux 系统下删除文件的命令,-r代表删除这个下面的一切,一切的一切那种的一切。f表示不需要用户确认,直接执行。

  通常这个命令都是指定文件夹用的,比如

  rm -rf /home/test/

  就是删除 /home/test/ 这个文件夹下面的所有东西。

  但是如果后面的文件夹路径没有加对,

  rm -rf /在服务器上也就意味着...

  

  俗话说的好:常在河边走, 哪能不湿鞋。 那该怎么避免这种悲剧的发生呢?

  如何避免再次跑路?

  一个方案就是重定向rm命令以嫁接为mv命令, 相当于给 Linux 系统定制了一个回收站。

  实现方式如下:

  ### 重定义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/*

  }

  最后将上述脚本写入/etc/bashrc,并立即执行命令source /etc/bashrc即刻生效。

  

  使用

  这个脚本定义了几个命令:

  rl:查看回收站下的文件

  unrm 文件名或目录:恢复到当前的路径下

  rmtrash:清空回收站,不过会友好提示。执行 rm 不会真正删除,而是使用 mv 移动到我们指定的回收站。

  实在真的想删除可以/bin/rm来进行删除。

  另外,需要注意的时,之前rm指令的一些参数可能不再使用,因为rm现在其实是mv了。

  # touch hoxistest

  # touch 1

  # mkdir haha

  # ls

  1 haha hoxistest

  # rm 1

  # ls

  haha hoxistest

  # 查看回收站文件

  # rl

  1 myftp1

  # 恢复已删除文件

  # unrm 1

  [root@CESHI-CLM-10-254-4-48 test]# ls

  1 haha hoxistest

  # rm haha/

  # rm hoxistest

  # rl

  haha hoxistest

  # 情况回收站

  # rmtrash

  确定要清空回收站吗?[y/n]y

  # rl

    效果看着应该还可以吧。

  

  例行总结

  看着是还可以,但是也有一些问题,比如删除文件不能重名,若重名了会提示你是否进行覆盖。那就需要再进行特殊处理了,比如删除时加个时间戳什么的,有兴趣的动手实现下吧。

转载于:https://juejin.im/post/5c35b0d66fb9a049cd54626a

你可能感兴趣的文章
简单聊聊DOM
查看>>
【JavaScript】JavaScript Array 对象(数组)
查看>>
github 上有趣又实用的前端项目(持续更新,欢迎补充)
查看>>
opencv python 直方图均衡化
查看>>
HotFrameLearning 热门框架学习(前言)
查看>>
git团队开发流程
查看>>
【Under-the-hood-ReactJS-Part6】React源码解读
查看>>
深入理解css之vertical-align
查看>>
Laravel事件
查看>>
matlab绘制peano(皮亚诺)曲线和koch(科赫曲线,雪花曲线)分形曲线
查看>>
使用pipenv代替virtualenv管理python包
查看>>
Docker零基础入门指南(四):Docker容器使用
查看>>
React 深入系列4:组件的生命周期
查看>>
Mybatis之设计模式之迭代器模式
查看>>
房间号生成器
查看>>
CentOS 6.8 安装vsftpd
查看>>
js设计模式 --- 装饰设计模式
查看>>
Flask源代码阅读笔记(一)——应用启动
查看>>
IOS精品源码,仿探探UIButton封装iOS提示弹框迅速引导页自定义导航栏
查看>>
setState的一个Synthetic Event Warning
查看>>