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