恢復刪除的檔案

2022-03-17 14:02:58 字數 2440 閱讀 6458

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

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

3>當系統中的某個檔案被意外地刪除了,只要這個時候系統中還有程序正在訪問該檔案,那麼我們就可以通過lsof從/proc目錄下恢復該檔案的內容。

a.檢視/var/log/secure檔案,發現已經沒有該檔案

[root@localhost ~]# ll /var/log/secure

ls: cannot access /var/log/secure: no such file or directory

b.使用lsof命令檢視當前是否有程序開啟/var/log/secure

[root@localhost ~]# lsof | grep secure

rsyslogd 642 root 7w reg 253,0 200 4686549 /var/log/secure (deleted)

in:imjour 642 654 root 7w reg 253,0 200 4686549 /var/log/secure (deleted)

rs:main 642 655 root 7w reg 253,0 200 4686549 /var/log/secure (deleted)

c.從上面的資訊可以看到 pid 642(rsyslogd)開啟檔案的檔案描述符為7。同時還可以看到/var/log/ secure已經標記為被刪除了。因此我們可以在/proc/642/fd/7(fd下的每個以數字命名的檔案表示程序對應的檔案描述符)中檢視相應的資訊,如下:

tail /proc/642/fd/7 

nov 6 09:45:14 localhost sshd[6246]: accepted password for root from 192.168.6.8 port 52497 ssh2

nov 6 09:45:14 localhost sshd[6246]: pam_unix(sshd:session): session opened for user root by (uid=0)

d.從上面的資訊可以看出,檢視/proc/642/fd/7就可以得到所要恢復的資料。如果可以通過檔案描述符檢視相應的資料,那麼就可以使用i/o重定向將其重定向到檔案中,如:

[root@localhost ~]# cat /proc/642/fd/7 > /var/log/secure

[root@localhost ~]# ll /var/log/secure

-rw-r--r--. 1 root root 200 nov 6 09:52 /var/log/secure

[root@localhost ~]# systemctl restart rsyslog

[root@localhost ~]# lsof | grep secure

login 650 root mem reg 253,0 11216 8505425 /usr/lib64/security/pam_securetty.so

rsyslogd 6447 root 8w reg 253,0 436 4686541 /var/log/secure

in:imjour 6447 6449 root 8w reg 253,0 436 4686541 /var/log/secure

rs:main 6447 6450 root 8w reg 253,0 436 4686541 /var/log/secure

linux 恢復刪除的檔案

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

恢復rm刪除的檔案

1 debugfs針對 ext2 ext3grep針對 ext3 extundelete針對 ext4 2df t 首先檢視磁碟分割槽格式 3umount data 解除安裝掛載,資料丟失請首先解除安裝掛載,或重新掛載唯讀 4 ext3grep dev sdb1 ls inode 2 記錄資訊繼續查...

git恢復刪除檔案

如果乙個檔案不小心被刪除了,可以有兩種方法恢復 1 需要記住所需恢復檔案的名字和版本號 commit id git checkout commit id file name 如果不加commit id,那麼git checkout file name 表示恢復檔案到本地版本庫中最新的狀態。2 不需要...