liunx誤刪檔案回覆方式

2021-07-14 22:00:12 字數 2532 閱讀 8966

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

Linux中誤刪檔案的恢復方法

做為linux的從業者大家對 rm rf 這個命令肯定又愛又恨。他的簡潔霸氣,勢不可擋,可謂 十步殺一人,千里不留行 他乾淨徹底,不留痕跡,狠狠按下回車鍵後,事了拂衣去,深藏功與名 但是,這個世界總是遺憾常有,而後悔藥不常有,刪錯後多半會呆呆地盯著螢幕,莫名奇妙地會 哀吾生之須臾,羨長江之無窮 環境...

git 誤刪分支恢復方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!在使用git的過程中,因為人為因素造成分支 commit 被刪除,可以使用以下步驟進行恢復。1.建立分支 abc git branch abc2.檢視分支列表 git branch a abc develop remotes origin dev ...

git 誤刪分支恢復方法

1.建立分支 abc git branch abc 2.檢視分支列表 git branch a abc develop remotes origin dev develop 3.切換到abc分支,隨便修改一下東西後 commit 切換分支 git checkout abc 建立乙個檔案 echo a...