📅  最后修改于: 2023-12-03 15:36:42.787000             🧑  作者: Mango
有时候,我们会不小心删除了某些重要的文件,但后来发现我们确实需要它们。在这种情况下,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
或数据块。
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` 或数据块。