linux恢復意外刪除的檔案

2021-06-18 17:31:12 字數 2578 閱讀 7962

author:skate

time:2013/10/12

linux恢復意外刪除的檔案

當程序開啟某個檔案時,只要該程序保持開啟該檔案,即使將其刪除,它依然存在於磁碟中。這意味著,程序並不知道檔案已經被刪除,它仍然可以向開啟該檔案時提供給它的檔案描述符進行讀取和寫入。除了該程序之外,這個檔案是不可見的,因為已經刪除了其相應的目錄索引節點。在這種情況可以通過lsof來恢復這些檔案。

在/proc目錄下,其中包含了反映核心和程序樹的各種檔案。/proc目錄掛載的是在記憶體中所對映的一塊區域,所以這些檔案和目錄並不存在於磁碟中,因此當我們對這些檔案進行讀取和寫入時,實際上是在從記憶體中獲取相關資訊。大多數與lsof相關的資訊都儲存於以程序的pid命名的目錄中,即/proc/12中包含的是pid為12的程序的資訊。每個程序目錄中存在著各種檔案,它們可以使應用程式簡單地了解程序的記憶體空間、檔案描述符列表、指向磁碟上的檔案的符號鏈結和其他系統資訊。lsof程式使用該資訊和其他關於核心內部狀態的資訊來產生其輸出。所以lsof可以顯示程序的檔案描述符和相關的檔名等資訊。也就是我們通過訪問程序的檔案描述符可以找到該檔案的相關資訊。

下面舉例說明

我/tmp目錄下建立了指令碼檔案,時刻在後台執行,但是tmp目下會被系統定時刪除的,但犯懶不想重寫指令碼,想把原來的找回,具體步驟如下。

1.檢視已經被刪除的檔案diamon.sh,已經不存在了

[root@centos5 ~]# ll /tmp/

total 28

-rw-r--r-- 1 root  root   402 sep 26 14:19 load_tab.sh

srwxrwxrwx 1 mysql mysql    0 sep 16 15:20 mysql.sock

drwx------ 2 root  root  4096 oct 12 15:44 ssh-hipbw10887

drwx------ 2 root  root  4096 oct 10 16:12 ssh-luxbjf6337

2. 使用lsof來檢視當前哪個程序正在開啟檔案」/tmp/diamon.sh「

[root@centos5 ~]# lsof | grep diamon

sh         8455      root  255r      reg              253,0        173               764298 /tmp/diamon.sh (deleted)

[root@centos5 ~]#

從上面的輸出可以看到,程序8455正在以唯讀的方式開啟這個檔案,開啟的檔案描述符為255,同時檔案/tmp/diamon.sh被標記刪除。然後我檢視檔案" /proc/8455/fd/255"

[root@centos5 ~]# more /proc/8455/fd/255

#variables

dir=/tmp

while (true)

dov_num=`ps -ef | grep load_tab | grep -v grep | wc -l`

if [ $v_num -lt 4 ] ; then

sh /tmp/load_tab.sh > /dev/null 2>&1 &

fidone

[root@centos5 ~]#

3. 已經找到已經被刪除的檔案了嗎然後利用i/o重定向將其恢復到指定檔案中,如下

[root@centos5 ~]# cat /proc/8455/fd/255 > /tmp/diamon.sh

檢查檔案已經被恢復了

[root@centos5 ~]# ll /tmp

total 36

-rw-r--r-- 1 root  root   173 oct 12 16:53 diamon.sh

-rw-r--r-- 1 root  root   402 sep 26 14:19 load_test10.sh

srwxrwxrwx 1 mysql mysql    0 sep 16 15:20 mysql.sock

drwx------ 2 root  root  4096 oct 12 15:44 ssh-hipbw10887

drwx------ 2 root  root  4096 oct 10 16:12 ssh-luxbjf6337

[root@centos5 ~]#

檢視恢復的檔案內容是否正常

[root@centos5 ~]#

[root@centos5 ~]# more /tmp/diamon.sh

#variables

dir=/tmp

while (true)

dov_num=`ps -ef | grep load_test | grep -v grep | wc -l`

if [ $v_num -lt 4 ] ; then

sh /tmp/load_test10.sh > /dev/null 2>&1 &

fidone

[root@centos5 ~]#

至此linux恢復刪除檔案成功結束

總結:a.在檔案被刪除時,不要慌,盡可能儲存現場

b.對於某些資料庫檔案被誤刪除很有效

---end----

Oracle 意外刪除資料檔案的恢復

文章 今天有客戶的資料庫意外被刪除了整個目錄中的資料檔案,作業系統級別的刪除,然而幸運的是這個資料庫沒有崩潰,仍然處於open狀態的時候,客戶就發現了問題,求助到我們,最終完整地恢復了所有資料檔案。在linux下大致重新演示一下恢復的過程,恢復的步驟與資料庫版本沒有太大關係,與作業系統的不同會有所不...

linux 恢復刪除的檔案

檔案實際上是乙個指向inode的鏈結,inode鏈結包含了檔案的所有屬性,比如許可權和所有者,資料塊位址 檔案儲存在磁碟的這些資料塊中 當你刪除 rm 乙個檔案,實際刪除了指向inode的鏈結,並沒有刪除inode的內容.程序可能還在使用.只有當inode的所有鏈結完全移去,然後這些資料塊將可以寫入...

Linux 恢復誤刪除的檔案

目標內容 恢復linux下誤刪除的檔案 1.恢復linux下誤刪除的檔案 刪除檔案和資料夾 rm rf 檔名或目錄名 r 遞迴刪除 可以刪除目錄和目錄裡面的東西 f 強行刪除 ext4檔案系統上刪除檔案,可以恢復 extundelete windows恢復誤刪除的檔案 final data v2.0...