{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

如何恢復(fù)LINUX中意外刪除的文件?

zhangwangzhangwang 回答0 收藏1
收藏問題

1條回答

Jason_Geng

Jason_Geng

回答于2022-06-28 11:07

當(dāng)進(jìn)程打開某個文件時,只要該進(jìn)程保持打開該文件,即使將其刪除,它依然存在于磁盤中。這意味著,進(jìn)程并不知道文件已經(jīng)被刪除,它仍然可以向打開該文件時提供給它的文件描述符進(jìn)行讀取和寫入。除了該進(jìn)程之外,這個文件是不可見的,因?yàn)橐呀?jīng)刪除了其相應(yīng)的目錄索引節(jié)點(diǎn)。在這種情況可以通過lsof來恢復(fù)這些文件。

在/proc目錄下,其中包含了反映內(nèi)核和進(jìn)程樹的各種文件。/proc目錄掛載的是在內(nèi)存中所映射的一塊區(qū)域,所以這些文件和目錄并不存在于磁盤中,因此當(dāng)我們對這些文件進(jìn)行讀取和寫入時,實(shí)際上是在從內(nèi)存中獲取相關(guān)信息。大多數(shù)與lsof相關(guān)的信息都存儲于以進(jìn)程的PID命名的目錄中,即/proc/12中包含的是PID為12的進(jìn)程的信息。每個進(jìn)程目錄中存在著各種文件,它們可以使應(yīng)用程序簡單地了解進(jìn)程的內(nèi)存空間、文件描述符列表、指向磁盤上的文件的符號鏈接和其他系統(tǒng)信息。lsof程序使用該信息和其他關(guān)于內(nèi)核內(nèi)部狀態(tài)的信息來產(chǎn)生其輸出。所以lsof可以顯示進(jìn)程的文件描述符和相關(guān)的文件名等信息。也就是我們通過訪問進(jìn)程的文件描述符可以找到該文件的相關(guān)信息。

下面舉例說明

我/tmp目錄下創(chuàng)建了腳本文件,時刻在后臺運(yùn)行,但是tmp目下會被系統(tǒng)定時刪除的,但犯懶不想重寫腳本,想把原來的找回,具體步驟如下。

1.查看已經(jīng)被刪除的文件diamon.sh,已經(jīng)不存在了

[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來查看當(dāng)前哪個進(jìn)程正在打開文件”/tmp/diamon.sh“

[root@centos5 ~]# lsof | grep diamon

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

[root@centos5 ~]#

從上面的輸出可以看到,進(jìn)程8455正在以只讀的方式打開這個文件,打開的文件描述符為255,同時文件/tmp/diamon.sh被標(biāo)記刪除。然后我查看文件" /proc/8455/fd/255"

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

#variables

dir=/tmp

while (true)

do

v_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 &

fi

done

[root@centos5 ~]#

3. 已經(jīng)找到已經(jīng)被刪除的文件了嗎然后利用I/O重定向?qū)⑵浠謴?fù)到指定文件中,如下

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

檢查文件已經(jīng)被恢復(fù)了

[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 ~]#

查看恢復(fù)的文件內(nèi)容是否正常

[root@centos5 ~]#

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

#variables

dir=/tmp

while (true)

do

v_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 &

fi

done

[root@centos5 ~]#

至此linux恢復(fù)刪除文件成功結(jié)束

總結(jié):

A.在文件被刪除時,不要慌,盡可能保存現(xiàn)場

B.對于某些數(shù)據(jù)庫文件被誤刪除很有效

評論0 贊同0
  •  加載中...

相關(guān)問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關(guān)注的人
向幫助了您的網(wǎng)友說句感謝的話吧!
付費(fèi)偷看金額在0.1-10元之間
<