歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix資訊

3種找回nix刪除文件方法

我們知道Unix刪除一個文件的具體步驟是: 根據文件i節點的地址表逐一釋放文件占用的磁盤數據塊,然後清空相應的節點,最後釋放i節點。 刪除一個目錄的過程是: 首先逐一刪除目錄裡的所有文件,然後刪除目錄。目錄本身也是一個文件,故Unix刪除方法與刪除文件一致。

要恢復被刪除的文件,只能根據刪除後留下的東西去做文章。Unix刪除文件後留下了什麼呢?由上述分析可知: 其一,留下了文件的內容; 其二,留下了“現場”。文件的恢復策略只能從這兩個方面來分析。

根據內容恢復

若現場已被破壞,即硬盤發生過寫操作,那麼只好根據內容來恢復。而且,由於Unix是一個多進程、多用戶系統,它每一次開關機或硬件、通信故障等都會記錄 系統日志、.sh_history等,硬盤現場被破壞的可能性極大。因此討論按內容恢復的方法具有更大的實用價值。筆者經過實際探索得出下列幾種恢復策略 供參考。

● Unix刪除文件關鍵字搜索法

如果知道被刪除的文件內容中若干字節的內容,而且該文件長度又不超過一個磁盤 塊,那麼可以在整個文件系統中搜索這一字節串,得出一個文件所在的數據塊,將它們的塊號填入一個i節點,即可恢復一個文件。

搜索文件系統的算法很簡單,說 明如下: 首先,用“#df -k”命令確定文件系統的設備文件名(如/dev/root); 然後,用下述函數搜索,若成功,返回數據塊號,反之返回-1。其中fsname是文件系統的設備名,如/dev/root,comp()參數是實現搜索條 件的函數。
 

  1. long searchfs(char *fsname , int comp())   
  2. { FILE *fp;   
  3. char buf[1024];   
  4. long i=0;   
  5. fp=fopen(fsname,"r");   
  6. while (!feof(fp))   
  7. { fread(buf,1024,1,fp);   
  8. if (comp()) /* 檢查是否符合搜索條件 */   
  9. return i; /* 若成功返回塊號 */   
  10. i++;   
  11. }   
  12. fclose(fp);   
  13. return -1; /* 未找到符合條件的塊,返回-1*/ }  

● Unix刪除文件精確長度搜索法

如果知道被刪除文件的精確長度(字節數),那麼可根據一個數據塊的大小,計算出文件的最後一個數據塊中數據的精確長度,該數據塊中其他字節必然是全0。根 據這一條件,通過搜索整個文件系統,找出其中符合條件的數據塊,若出現多個塊符合要求,則還需要根據其他條件區分。但不管怎樣,根據精確長度分析也是恢復 數據的一個策略。

● Unix刪除文件內容關聯法

如果知道文件內容中存在某種可實現的關聯,例如文件的校驗和或者文件內容的某種上下文關系,那麼也可通過搜索整個文件系統,通過反復嘗試尋找符合關聯條件的磁盤數據塊,進而恢復一個文件。

Unix刪除的文件找回方法,我們就講解到這裡。

Copyright © Linux教程網 All Rights Reserved