在Linux系统中,当一个文件被删除时,其实该文件的数据并没有立即从磁盘上消失,而是文件的链接计数减为0,系统才会真正释放该文件所占用的磁盘空间。因此,在文件刚被删除后的一段时间内,我们仍然有可能通过特定的方法找回这些“已删除”的文件。
要查找被删除但仍被进程占用的文件,可以使用lsof
命令。lsof
(List Open Files)是一个列出当前系统打开文件的工具,它能够列出系统打开的所有文件,包括被删除但仍被进程占用的文件。
lsof
命令lsof | grep deleted
这条命令会列出所有被标记为“deleted”的文件,这些文件虽然已经被删除,但因为仍有进程在使用它们,所以它们的数据仍然保留在磁盘上。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 12345 user 4r REG 253,0 102400 123456 /var/tmp/file.txt (deleted)
在这个例子中,file.txt
文件虽然已经被删除,但进程ID为12345的Python进程仍然在使用它。
如果确认需要恢复某个被删除的文件,可以采取以下步骤:
cp
命令将文件复制到一个新的位置,以确保数据不会丢失。cp /proc/12345/fd/4 /path/to/newfile.txt
在这个例子中,/proc/12345/fd/4
是进程ID为12345的进程打开的文件描述符,指向被删除的文件。
通过lsof
命令可以查找并列出被删除但仍被进程占用的文件,然后可以使用cp
命令将这些文件复制到新的位置进行恢复。这种方法适用于文件刚被删除且仍被进程占用的情况。
领取专属 10元无门槛券
手把手带您无忧上云