細思極恐:被軟鏈接拯救的數據


事情的起因

今天本來調休的。
但是故障是不會休息的,於是就在家里辦公了。
下午下班的時候,同事發消息給我,問我為什么她的定時任務不能夠執行。
我的第一反應就是:/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的.....
至於到底是不是我的手動執行刪除了她的家目錄數據 ,還是定時任務刪除的,當時沒在意,不得而知了.....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM