首頁 > 系統教程 > Linux > 主體

Linux手誤rm可能不需要跑路

王林
發布: 2024-02-11 21:33:19
轉載
440 人瀏覽過

對於在Linux系統下誤刪除的文件,我們是否真的無法透過軟體進行復原?

Linux手誤rm可能不需要跑路

#檔案復原可以分為兩種情況

  • 一種是刪除後進程仍然存在刪除訊息
  • # 另一種是刪除後進程都找不到,只能藉助工具來復原。

今天我們只討論檔案被刪除後,相關進程仍然存在的情況

#這種情況通常是有活動的進程持續進行標準輸入或輸出,導致檔案被刪除後,進程PID仍然存在。這也是為什麼有些伺服器刪除某些檔案但磁碟空間不釋放的原因。

#已收到訊息. 對於在Linux系統下誤刪除的文件,我們是否真的無法透過軟體進行恢復?

檔案復原可以分為兩種情況 – 一種是刪除後進程仍然存在刪除資訊 – 另一種是刪除後進程都找不到,只能藉助工具進行復原。

今天我們只討論檔案被刪除後,相關進程仍然存在的情況 > 這種情況通常是有活動的進程持續進行標準輸入或輸出,導致檔案被刪除後,進程PID仍然存在。這也是為什麼有些伺服器刪除某些檔案但磁碟空間不釋放的原因。

案例示範

建立一個檔案

#
> vim  rumenz.txt
123
//保存退出
> cat rumenz.txt
123
登入後複製
tail -f開啟
rumenz.txt

檔案

#目的是讓

rumenz.txt

被刪除後,進程依然存在

#
> tail -f rumenz.txt
登入後複製
新開一個終端刪除
rumenz.txt

> rm -f rumenz.txt
登入後複製
找到佔用
rumenz.txt

的流程
  • lsof查看刪除的檔案進程是否還存在。
  • 如沒有安裝請自行yum install lsof或apt-get install lsof

> lsof | grep delete | grep rumenz
tail      10222          root    3r      REG              253,1          4   70911074 /root/test/rumenz.txt (deleted)
登入後複製

「#######

进程ID是10222,从上面可以看出,当前文件状态为已删除(deleted)

恢复文件

  • /proc/10222/fd:进程操作的文件描述符目录
> cd /proc/10222/fd
> ls -al
dr-x------ 2 root root  0 May 11 21:41 .
dr-xr-xr-x 9 root root  0 May 11 21:41 ..
lrwx------ 1 root root 64 May 11 21:41 0 -> /dev/pts/1
lrwx------ 1 root root 64 May 11 21:41 1 -> /dev/pts/1
lrwx------ 1 root root 64 May 11 21:41 2 -> /dev/pts/1
lr-x------ 1 root root 64 May 11 21:41 3 -> /root/test/rumenz.txt (deleted)
lr-x------ 1 root root 64 May 11 21:41 4 -> anon_inode:inotify
登入後複製

开始恢复文件

> cp 3 /root/test/rumenz.txt
> cat /root/test/rumenz.txt
123
登入後複製

能恢复的根本原因

当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行rm -f删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件。

以上是Linux手誤rm可能不需要跑路的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:lxlinux.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!