如何使用lsof命令恢復刪除的檔案

2021-10-10 16:04:31 字數 1713 閱讀 1619

在linux檔案系統中,檔名實際是指向索引節點"inode"的鏈結。linux建立檔案系統後,就會生成inode表,inode索引節點會包含檔案的屬性、block塊的指標等資訊關於inode介紹看我這篇博文。

當使用"rm"命令刪除某檔案時,只是刪除了指向inode索引節點的鏈結,但是沒有刪除inode索引節點,也就是說inode所指向的block塊中所存放的資料並沒有被刪除。其它程序仍然可以使用此inode索引節點所指向的資料。若是乙個inode索引節點沒有任何程序呼叫,也沒有任何檔名鏈結時,就會定時被系統**這部分儲存空間。

"lsof"命令用於檢視系統中程序開啟的檔案、開啟檔案的程序、程序開啟的埠(tcp、udp)。所以當我們使用"rm"命令刪除某個檔案時,可以通過"lsof"命令來檢視是否還有程序呼叫此檔案的inode索引節點。若是有,就可以恢復;若是沒有,哭吧。因為"lsof"命令需要訪問核心記憶體和各種檔案,所以需要root使用者執行。

語法:

lsof(選項)

引數:-a:列出開啟檔案存在的程序;

-c程序:列出指定程序所開啟的檔案;

-g:列出gid號程序詳情;

-d檔案:列出占用該檔案號的程序;

+d目:列出目錄下被開啟的檔案;

+d目:遞迴列出目錄下被開啟的檔案;

-n目:列出使用nfs的檔案;

-i條:列出符合條件的程序。(4、6、協議、:埠、 @ip )

-p程序:列出指定程序號所開啟的檔案;

-u:列出uid號程序詳情;

-h:顯示幫助資訊;

-v:顯示版本資訊。

比如要檢視22埠有哪些程序在訪問:

losf輸出各列資訊的意義如下:

恢復檔案

下面和大家分享一下如何恢復檔案,我拿"/var/log/messages"日誌檔案來舉例;大家自己在做測試的時候做好現備份一下。

第一步:備份檔案

第二步:在程序呼叫"/var/log/messages"時,就把"/var/log/messages"這個檔案刪掉

第三步:刪除"/var/log/messages"檔案之後,再來看看程序的變化

大家可以看到原來呼叫"/var/log/messages"檔案的程序發生了變化,提示資訊後面多了"deleted"。要找到"/var/log/messages"現在在**,還要看看這個"pid:900 fd:4 「,於是我們就進入」/proc/900/fd"這個目錄中檢視有哪些檔案:

我們看到了有乙個名稱為"4"的檔案是指向"/var/log/messages"的鏈結,於是我們可以通過檔名為"4"的內容恢復"/var/log/messages"的檔案內容:

如何使用lsof恢復誤刪除的檔案

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

Linux利用lsof命令恢復刪除的檔案

lsof命令 lsof命令用於檢視你程序開打的檔案,開啟檔案的程序,程序開啟的埠 tcp udp 找回 恢復刪除的檔案。是十分方便的系統監視工具,因為lsof命令需要訪問核心記憶體和各種檔案,所以需要root使用者執行。在linux環境下,任何事物都以檔案的形式存在,通過檔案不僅僅可以訪問常規資料,...

使用lsof恢復rm rf刪除後的檔案

在linux系統中使用rm rf刪除檔案後,其實檔案只是從磁碟中移除,檔案內容還是在系統後台等待 此時可以使用系統程序號將檔案考貝出來,內容不會有更改。1.刪除乙個檔案 root iz62f427er8z logs ll access.log rw r r 1 root root 11723908 ...