zoukankan      html  css  js  c++  java
  • 细思极恐:被软链接拯救的数据

    事情的起因

    今天本来调休的。
    但是故障是不会休息的,于是就在家里办公了。
    下午下班的时候,同事发消息给我,问我为什么她的定时任务不能够执行。
    我的第一反应就是:/etc/security/access.conf限制了普通用户的crond,登陆之后证明我是错误的,事实上的确如此:所有节点是放开普通用户的定时任务权限的。
    那么问题出在哪里,验证一下不就知道了。
    我用自己的普通用户登陆系统之后,编辑了一个测试任务如下:

    # crontab -e

    */1 * * * * date >> /home/liwl/hello_test.txt
    

    保存退出之后,一分钟过后,发现了生成了hello_test.txt文件。那么系统层面应该是没毛病的。

    我切换到她用户的家目录下,在隐藏目录.rms下找到了她的脚本:cleanup.sh
    很直白的工作:清除垃圾
    # vim cleanup.sh,如下:

    #!/bin/sh
    file=`ls |grep -v cleanup.sh|xargs`
    rm -rf $file
    

    脚本看起来挺清爽的,粗略看一下,并无毛病:

    查找目录下的所有文件,删除除脚本之外的所有东西

    然后我通过# crontab -e 查看了一下她的定时任务写法:

    */1 * * * * /home/ligl/.rms/cleanup.sh
    

    感觉没什么毛病啊?!

    不管了,先测试脚本能不能执行

    灾难的开始

    定时任务无法执行,那就手动执行一下试试看:

    # cd /home/ligl/.rms/

    # ./clearup.sh && ls -l

    没毛病啊,文件妥妥都删掉了。那定时任务为啥不能够执行呢?难不成绝对路径不行?

    然后,我# cd /home/ligl/.rms/ && touch hello

    # /home/ligl/.rms/cleanup.sh

    OK,执行完毕,# ls -l看一下,卧槽! hello还在! 什么情况?!

    无奈之下我# cd 了一下,#ls

    更绝望的事情发生了!!!

    家目录下空的!!!空的!!!

    我突然明白过来发生什么事情了,赶紧电话同事,确认一下是不是数据还在。

    同事被我这么一下,也是懵逼了。但是她ls 之后发现,数据还在啊!!!

    我不信!!!

    我重新登陆,ls 空的,再退出登陆ls ,还是空的!从其他节点登陆,ls 空的,绝望了......

    rm -rf 的事情,发生在我一个系统管理员身上了....

    可是同事的数据,已经无法恢复了。

    怎么办?怎么办?

    绝处逢生

    突然同事问我,为什么她那边ls可以看到数据呢?

    我也很奇怪,但是突然想起来了:

    我们的用户家目录是在NAS上的,用户的数据放置在全局文件系统,通过软连接的方式进入全局文件系统

    那也就是说,其实我删掉的是她家目录下的软链接。她能够ls,是因为没有exit出bash环境。

    可是为什么我会删除数据呢?

    分析了一下定时任务的脚本发现,发现

    file=`ls |grep -v cleanup.sh|xargs`
    

    当以绝对路径(定时任务)执行脚本时,这个ls是没有目标目录的,ls默认家目录,然后删除了家目录。

    为什么没有删除真实数据,而是软件链接呢?

    rm -rf link删除软连接文件
    rm -rf link/ 删除软连接和真实数据

    重新创建链接,查看正在运行的业务,正常的。好了,到此算是一场惊吓结束了。

    总结

    虽然脚本不是我写的,但是脚本是我执行的....
    总之,感觉是被软连接救了我的前途。
    还有啊,脚本能不能认真写,目标文件写成全局变量啊,命令要加参数啊,参数不是你想的那样,要你指定的那样,先调试好再说啊,调试不是简单执行一下就OK的.....
    至于到底是不是我的手动执行删除了她的家目录数据 ,还是定时任务删除的,当时没在意,不得而知了.....

  • 相关阅读:
    vs2019编译错误:Exception Processing Message 0xc0000005 Parameters...
    error LNK2001
    Debug Assertion Failed
    对路径“………………”的访问被拒绝
    c语言打开文件为什么总是以二进制方式打开
    关于typedef的用法总结
    xml学习第一天
    关于VS2017编译成功系统找不到指定文件.exe的问题
    引入的外部js文件在html文件在浏览器中乱码显示
    结对作业(四则运算)
  • 原文地址:https://www.cnblogs.com/liwanliangblog/p/7275462.html
Copyright © 2011-2022 走看看