Aar*_*lla 18
我将其翻译为:如何删除某人仍在使用的文件?
好吧,在 Linux 上,文件系统的一部分在 RAM 中,一部分在磁盘上。当进程 A 打开一个文件并保持打开状态(比如共享库)时,进程 A 会获取文件的“inode”的副本。这是告诉系统文件在磁盘上的位置的数据结构。
现在我们有两个 inode,一个在磁盘上,一个在 RAM 中。如果第二个进程请求同一个文件,我们有三个 inode。现在第二个进程删除inode。这给我们留下了 1 个 inode:进程 A 的 inode。
这意味着进程 A 仍然可以看到该文件(并读取它),即使其他人都看不到(因为磁盘上的 inode 已被删除并且第二个进程早已消失)。一旦进程 A 终止,最后剩余的 inode 就会被删除,文件就真的消失了。
Linux 通过以下方式利用此功能:
那么会发生什么?起初,不多。最终,错误将被记录到已删除的日志文件中,因为某些文件无法找到。如果您尝试运行新命令,它将失败。停止一个进程将让它陷入困境。最终,您将遇到一个无法重新启动或关闭的挂起系统,因为这些命令不再存在。
| 归档时间: |
|
| 查看次数: |
6479 次 |
| 最近记录: |