📌  相关文章
📜  保存已删除文件的 linux 进程 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:36:42.787000             🧑  作者: Mango

保存已删除文件的 Linux 进程 - Shell/Bash

有时候,我们会不小心删除了某些重要的文件,但后来发现我们确实需要它们。在这种情况下,Linux 提供了一种非常有用的进程,可以帮助我们恢复已删除的文件。这个进程叫做 lsof

什么是 lsof

lsof 是一个命令行工具,可以用来列出当前系统中打开的文件(或文件夹)的信息,包括进程 ID(PID)、文件描述符等。

如何使用 lsof 查找已删除的文件?

当我们删除一个文件时,这个文件的 inode 节点和数据块不会立即被清除。相反,它们会在磁盘上被标记为“可重复使用”。只要没有其他数据覆盖了它,该文件就可以被恢复。

首先,我们需要确定文件的 inode 号。我们可以通过 ls -i 命令来找到:

$ ls -i /path/to/deleted/file

然后,运行 lsof 命令来查找该 inode 号的文件:

$ sudo lsof | grep <inode号>

如果 grep 命令没有返回任何结果,说明该文件没有被打开。否则,可以看到该文件被哪个进程打开了。这里需要注意的是,这个进程可能是被那个文件打开的任意进程,而不仅仅是你删除该文件时正在运行的进程。

最后,可以使用 cpdd 命令从 /proc/<pid>/fd/<fd> 中恢复该文件。其中 <pid>lsof 列出的进程 ID,<fd> 是列出的文件描述符。

总结

lsof 可以帮助我们找回已经被删除但是没有被重写的文件。需要注意的是,这种恢复文件的方法并不总是成功的,因为当你删除一个文件后,其他应用程序可能已经覆盖了它的 inode 或数据块。

Markdown 代码如下:

# 保存已删除文件的 Linux 进程 - Shell/Bash

有时候,我们会不小心删除了某些重要的文件,但后来发现我们确实需要它们。在这种情况下,Linux 提供了一种非常有用的进程,可以帮助我们恢复已删除的文件。这个进程叫做 `lsof`。

## 什么是 `lsof`?

`lsof` 是一个命令行工具,可以用来列出当前系统中打开的文件(或文件夹)的信息,包括进程 ID(PID)、文件描述符等。

## 如何使用 `lsof` 查找已删除的文件?

当我们删除一个文件时,这个文件的 `inode` 节点和数据块不会立即被清除。相反,它们会在磁盘上被标记为“可重复使用”。只要没有其他数据覆盖了它,该文件就可以被恢复。

首先,我们需要确定文件的 `inode` 号。我们可以通过 `ls -i` 命令来找到:

$ ls -i /path/to/deleted/file


然后,运行 `lsof` 命令来查找该 `inode` 号的文件:

$ sudo lsof | grep <inode号>


如果 `grep` 命令没有返回任何结果,说明该文件没有被打开。否则,可以看到该文件被哪个进程打开了。这里需要注意的是,这个进程可能是被那个文件打开的任意进程,而不仅仅是你删除该文件时正在运行的进程。

最后,可以使用 `cp` 或 `dd` 命令从 `/proc/<pid>/fd/<fd>` 中恢复该文件。其中 `<pid>` 是 `lsof` 列出的进程 ID,`<fd>` 是列出的文件描述符。

## 总结

`lsof` 可以帮助我们找回已经被删除但是没有被重写的文件。需要注意的是,这种恢复文件的方法并不总是成功的,因为当你删除一个文件后,其他应用程序可能已经覆盖了它的 `inode` 或数据块。