無論在哪個系統中,刪除文件都是必須謹慎的操作。
因為如果不小心刪除了重要文件,就會導致個人或公司出現重大的損失。
類似于windows系統誤刪了文件,可以使用一些軟件進行恢復操作。Linux也是有幾款軟件可以做到誤刪恢復的。
注意事項:雖然有軟件可以對誤刪的數據進行恢復,但是完全恢復數據的概率并不是百分百的。
因此,使用rm命令刪除文件的時候,一定要小心;重要的數據一定要有備份;并且恢復刪除的數據前,刪除文件的目錄內不能往進存放新東西,否則覆蓋掉的信息無法找回。
下面介紹的就是對Linux中誤刪文件的恢復操作。
原理:
這個命令實際上并不能直接用來恢復文件,不過它可以列出被各種進程打開的文件信息。
配合其他命令,從/proc目錄下的信息中恢復“文件已刪除,但進程仍保持打開該文件的狀態”的文件。
/proc目錄是掛載的是在內存中所映射的一塊區域,當我們對這些文件進行讀取和寫入時,實際上是在從內存中獲取相關信息。
因此,當我們對文件進行讀取或寫入時(即有進程正使用文件時),哪怕硬盤中的該文件已刪除,還可以從內存中的信息恢復文件。
注意:
必須以 root 用戶的權限運行, 因為lsof 需要訪問核心內存和各種文件。
只能恢復“文件已刪除,但進程仍保持打開該文件的狀態”的文件。
如果誤刪了目錄,目錄中的其他文件未被進程打開,沒有進行使用的文件將無法使用此方法恢復。
lsof輸出信息的意義:
COMMAND 進程的PID(進程標識符)
USER 進程所有者
FD 用來識別該文件(文件描述符)
DEVICE 指定磁盤的名稱
SIZE 文件的大小
NODE 索引節點(文件在磁盤上的標識)
NAME 打開文件的確切名稱
最常用參數:
-c 顯示某進程現在打開的文件
-p 顯示哪些文件被某pid進程打開
-g 顯示歸屬某gid的進程情況
-d 顯示目錄下被進程開啟的文件
-d 顯示使用fd為4的進程
-i:80 顯示打開80端口的進程
恢復文件操作
環境:
在/mnt下有一些文件,其中一個文件train.less正在被查看,然后另一個終端將其刪除
【1】lsof查看
查看正在使用刪除文件的進程號
lsof /mnt
【2】恢復
切換到/proc下,刪除文件對應的進程的pid下的文件描述符中的目錄中;將對應的內容重定向或cp到其他文件中
cd /proc/31284/fd/
cat 4 > /mnt/ferris_train.less
原理:
使用存儲在分區日志中的信息,嘗試恢復已從ext3或ext4的分區中刪除的文件
優點:
相比于ext3grep只能恢復ext3文件系統的文件,其適用范圍更廣,恢復速度更快
extundelete官方地址(官方文檔):
http://extundelete.sourceforge.net
extundelete下載地址:
http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
(最新版本的extundelete是0.2.4,于2013年1月發布)
注意:
安裝
1、依賴安裝
centos安裝操作
yum install e2fsprogs-devel e2fsprogs* gcc*
ubuntu安裝操作
apt-get install build-essential e2fslibs-dev e2fslibs-dev
2、編譯安裝
wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar xf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure
make
make install
cd /root/extundelete-0.2.4/src
extundelete -v
執行make命令會在src目錄下生成extundelete可執行文件,可在此直接執行恢復命令。
執行make install會將程序安裝在/usr/local/bin/下
恢復文件操作
執行extundelete命令的當前目錄必須是可寫的。
1、查看要恢復文件的分區的文件系統
df -Th
2、對要恢復文件的分區解除掛載
umount /mnt
3、查看可以恢復的數據
指定誤刪文件的分區進行查找
extundelete /dev/vdb1 --inode 2 (根分區的inode值是2)
4、恢復單個目錄
指定要恢復的目錄名
如果是空目錄,則不會恢復
extundelete /dev/vdb1 --restore-directory ferris
當執行恢復文件的命令后,會在執行命令的當前的目錄下生成RECOVERED_FILES目錄,恢復的文件都會放入此目錄中。如未生成目錄,即為失敗。
5、恢復單個文件
指定要恢復的文件名
extundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz
6、恢復全部刪除的文件
無需指定文件名或目錄名,恢復全部刪除的數據
extundelete /dev/vdb1 --restore-all
作者:漠效
http://r6d.cn/JzNf
丟失數據是任何用戶都可能經歷的最令人不安和痛苦的經歷之一。一旦珍貴數據被刪除或丟失,就再也找不不回來通常會引發焦慮,讓用戶感到無助。值得慶幸的是,有幾個工具可以用來恢復 Linux 機器上被刪除的文件。我們嘗試了一些數據恢復工具,可以幫助您恢復刪除的文件,其中一個脫穎而出就是 TestDisk 數據恢復工具。
TestDisk 是一個開源的、功能強大的數據恢復工具,除了恢復數據之外,還可以重建和恢復引導分區并修復分區表。它從 FAT、exFAT ext3、ext4 和 NTFS 等文件系統中恢復被刪除的文件,并將它們復制到另一個位置。TestDisk 是一個命令行數據恢復工具,這是它區別于其他數據恢復工具的特點之一。
在本指南中,我們將演示如何使用 TestDisk 實用工具在 Linux 中恢復被刪除的文件。我們將演示 TestDisk 如何在 Ubuntu 20.04 中從可移動 USB 驅動器恢復被刪除的數據。
在 Debian / Ubuntu 系統中,更新軟件包列表,然后安裝 TestDisk,如下所示
$ sudo apt update
$ sudo apt install testdisk
如果您正在運行 CentOS 8、RHEL 8、Rocky Linux 8、AlmaLinux 8,那么您首先需要安裝 EPEL 存儲庫。
$ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
接下來,更新系統,安裝 Test disk,如下所示
$ sudo dnf update
$ sudo dnf install testdisk
安裝后,您可以通過檢查 TestDisk 的版本,如下所示
$ testdisk --version
從輸出中,可以看到我們已經安裝了 TestDisk 7.1,讓我們模擬一下如何從驅動器中恢復已刪除的文件。
為了演示如何恢復從磁盤刪除的文件,我們從 USB 驅動器刪除了兩個文件。這些文件甚至都不在垃圾桶里,我們的目標是找回它們。
在您的終端上,運行以下命令來啟動 TestDisk
$ testdisk
作為一個命令行工具,TestDisk 提供了如下所示的選項列表。默認情況下,它會在開始時突出顯示最符合邏輯的選項。因此,在 create 選項上按 ENTER。
下一個屏幕顯示掛載的卷。但是,要查看所有磁盤和分區,您需要 sudo 權限。
因此,使用方向前進鍵,選擇 sudo 并按 ENTER。
注意: 為了避免麻煩,您可以簡單地從終端以 sudo 用戶的身份運行 testdisk 實用程序。
$ sudo testdisk
現在,這一次將顯示所有掛載的分區。選擇您的首選驅動器。在我們的情況下,我們選擇了可移動 USB 驅動器。使用方向前進鍵,選擇 Proceed 并按 ENTER。
TestDisk 自動檢測分區表類型。對于未分區的磁盤,如 USB 驅動器,將檢測到未分區的媒體類型。所以,按 ENTER。
您的可移動驅動器的分區表將按指示列出。在底部,選擇 Unelete
TestDisk 掃描驅動器中已刪除的文件,并用紅色突出顯示它們。
要恢復這些文件,您需要首先選擇它們。因此,向下滾動并為每個選擇輸入一個完整的冒號 (:),您將發現每個文件都用綠色突出顯示。
然后,按 SHIFT + C 大寫 C 復制文件。系統將提示您選擇保存文件的首選目的地。在本例中,我們選擇將文件保存在 Public 目錄中。選擇目錄后,按 ENTER。
會顯示目標目錄的修改日期,您可以選擇任何選項,并再次按 ENTER。
TestDisk 將通知您文件已成功復制
要確認文件已被復制,請轉到目標目錄并確認文件存在。
恢復的文件以 root 權限和所有權保存,可以使用 chown 命令修改權限
$ sudo chown linuxtechi 'Cover letter.txt' 'How-to-get-CLIENTS-to-say-YES.pdf'
要退出 TestDisk,請重復按 q,直到最終返回到 bash shell