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

    效果看着应该还可以吧。

  

  例行总结

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

如何优雅地使用 rm 防止误删除?的更多相关文章

  1. 高性能Linux服务器 第6章 ext3文件系统反删除利器ext3grep extundelete工具恢复rm -rf 误删除的文件

    高性能Linux服务器 第6章  ext3文件系统反删除利器ext3grep  extundelete工具恢复rm -rf 误删除的文件 只能用于ext3文件系统!!!!!!!高俊峰(高性能Linux ...

  2. 下厨房6月26日数据丢失事故总结 MYSQL主分区被rm 命令误删除

    下厨房6月26日数据丢失事故总结 MYSQL主分区被rm 命令误删除 http://tech.xiachufang.com/?p=18 在6月26日凌晨12点左右,我们在做线上数据库的备库时,误将线上 ...

  3. 使用 trash-cli 逃出 rm 命令误删除重要文件的阴影

    今天是一个难忘的日子,当时本来想清除我们公司网站cms目录下面一些cdn推送网页后残留的垃圾文件,结果在执行rm -rf conten* 时打成了rm -rf conten *结果就悲剧了.cms目录 ...

  4. [rm] Linux 防止"rm -rf /" 误删除

    一.缘由: 最近看到这则新闻,很是悲伤,因为我最近也在用ansible:然而这一错误源自Ansible上糟糕的代码设计,这款Linux实用工具被用于在多台不同服务器上自动执行脚本. 开发者解释到,实际 ...

  5. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用

    1.下载extundelete包,安装依赖 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. yum ...

  6. 使用trash-cli防止rm -rf 误删除带来的灾难(“事前”非“事后”)

    trash-cli是一个使用 python 开发的软件包,包含 trash-put.restore-trash.trash-list.trash-empty.trash-rm等命令,我们可以通过这写命 ...

  7. Linux防止“rm -rf /”误删除

    说明:不解释了,运维应该在每台服务器都去配置这个问题以减少灾难的发生 方法: 1.safe-rm safe-rm是一个开源软件用来替代不太安全的rm,可以在/etc/safe-rm.conf中配置路径 ...

  8. linux下修改rm命令防止误删除

    前言:相信很多朋友都遇到过在linux下用rm命令误删除文件的时候,此刻的心中仿佛有无数的羊驼在奔腾.那么怎么防止这种情况发生呢?当然是有方法的,我们可以写一个shell脚本,改变一下rm命令的作用. ...

  9. 用extundelete恢复rm -rf删的文件

    “慎用rm -rf命令,除非你知道此命令带来的后果.”这是一条Linux用户守则,虽然大多数用户都明白这条语句的含义,但是我觉得还需要完善一下,为这条语句加 上一个使用前提:在你确认自己拥有清醒头脑, ...

随机推荐

  1. HTTP和HTTPS的请求和响应

    HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法.HTTPS(Hypertext Transfer Protocol ove ...

  2. Purpose of ContextLoaderListener in Spring

    The ApplicationContext is where your Spring beans live. The purpose of the ContextLoaderListener is ...

  3. Html5游戏开发-145行代码完成一个RPG小Demo

    lufy前辈写过<[代码艺术]17行代码的贪吃蛇小游戏>一文,忽悠了不少求知的兄弟进去阅读,阅读量当然是相当的大.今天我不仿也搞一个这样的教程,目地不在于忽悠人,而在于帮助他人. 先看de ...

  4. Spark源码分析之Sort-Based Shuffle读写流程

    一 .概述 我们知道Spark Shuffle机制总共有三种: 1.未优化的Hash Shuffle:每一个ShuffleMapTask都会为每一个ReducerTask创建一个单独的文件,总的文件数 ...

  5. linux 下路由配置

    转自 https://www.cnblogs.com/kevingrace/p/6490627.html 在日常运维作业中,经常会碰到路由表的操作.下面就linux运维中的路由操作做一梳理:----- ...

  6. Mysql—(2)—

    数据库存储引擎 (更多详见) 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存 ...

  7. HDU - 2732 Leapin' Lizards (拆点最大流)

    题意:有N*M的矩形,每个格点有一个柱子,每根柱子有高度c,允许蜥蜴经过这根柱子c次,开始有一些蜥蜴在某些柱子上,它们要跳出这个矩形,每步最大能跳d个单位,求最少有多少蜥蜴不能跳出这个矩形. 分析:转 ...

  8. cocosBuider 控件命名的坑

    这几天遇到了各种坑.... 各种控件名字问题.... bool CLevelLayer::onAssignCCBMemberVariable(cocos2d::CCObject * pTarget, ...

  9. 无密码ssh操作步骤备忘

    需求:A机器无密码登陆到B机器 1.A机器执行   ssh-keygen -t rsa  ,在~/.ssh/下生成id_rsa 和  id_rsa.pub两个文件,其中id_rsa.pub是公匙 2. ...

  10. Lucene.Net 3.0.3如何从TokenStream中获取token对象

    Lucene.Net最高版本为3.0.3,并且apache已经不再提供Lucene.Net的更新,没仔细研究过Lucene.Net的所有版本,Lucene.Net3.0.3遍历TokenStream获 ...