對於在Linux系統下誤刪除的文件,我們是否真的無法透過軟體進行復原?
「
#這種情況通常是有活動的進程持續進行標準輸入或輸出,導致檔案被刪除後,進程PID仍然存在。這也是為什麼有些伺服器刪除某些檔案但磁碟空間不釋放的原因。
」
#已收到訊息. 對於在Linux系統下誤刪除的文件,我們是否真的無法透過軟體進行恢復?
檔案復原可以分為兩種情況 – 一種是刪除後進程仍然存在刪除資訊 – 另一種是刪除後進程都找不到,只能藉助工具進行復原。> 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 | grep delete | grep rumenz tail 10222 root 3r REG 253,1 4 70911074 /root/test/rumenz.txt (deleted)「#######进程ID是10222,从上面可以看出,当前文件状态为已删除(deleted)
”
> 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中文網其他相關文章!