如何优雅地使用 rm 防止误删除?

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

于是…

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

《如何优雅地使用 rm 防止误删除?》 压力不大

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

《如何优雅地使用 rm 防止误删除?》 所以程序员喜欢跑步锻炼

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

rm -rf 的威力

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

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

rm -rf /home/test/

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

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

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

《如何优雅地使用 rm 防止误删除?》 解脱了

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

如何避免再次跑路?

一个方案就是重定向 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 即刻生效。

《如何优雅地使用 rm 防止误删除?》 大神果然厉害

使用

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

  • 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 防止误删除?》 很牛的样子

例行总结

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

via:https://www.cloudbility.com/club/6981.html

如果觉得有用,欢迎关注我的微信,一起学习,共同进步,不定期推出赠书活动~

《如何优雅地使用 rm 防止误删除?》 你的关注是对我最大的鼓励!

最近搜集到慕课网视频,视频内容涵盖 Python、Java、PHP、前端、小程序、算法、架构、数据库等等!关注本公众号,后台回复「慕课网」即可获取下载地址。

    原文作者:hoxis
    原文地址: https://www.jianshu.com/p/9a22ef48a2eb
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞