在Linux中检测移动或重命名为文件的最佳方法?

时间:2010-08-18 17:20:48

标签: linux file inode

某些解决方案可能适用于Windows,但我不熟悉Windows操作系统,因此这将是针对Linux的。

据我所知,Unix文件系统都具有inode的概念,这是存储文件系统元数据和“文件”的地方。因此,我想知道是否可以使用带有一些附加信息的inode号来跟踪重命名或移动的文件?

我建议做的是初始扫描,它将创建一个文件名/路径数据库,它所在的磁盘/驱动器,它们的inode编号,最后是某种校验和(sha-1)。

这将使系统能够使用inode编号快速检测文件是否被移动或重命名,然后它将跟进校验和以检查它是否实际上是相同的文件。

我可以看到这个方案可能存在的一些问题:

  1. 文件可以被修改然后移动/重命名,这将无法检测到它,因为校验和不匹配。
  2. 一些(大多数?)应用程序在修改文件时会创建一个新的临时文件然后用当前文件切换它,因此即使文件最终未经修改,inode也无法匹配....
  3. 需要存储它所在的设备/文件系统,因为每个文件系统上的inode对于该文件系统是唯一的。
  4. 需要处理硬链接
  5. 我想知道我在这里忘记了还有其他问题吗?我希望能够使用inode快速跟踪哪些文件被移动或重命名,然后跟进校验和以确认它实际上是同一个文件。

3 个答案:

答案 0 :(得分:8)

查看inotify,它允许您在任何人对指定文件系统或目录中的文件执行任何操作时接听电话。

答案 1 :(得分:0)

请注意,这将是依赖于文件系统。它在ext3和类似的文件系统中是可行的,但在其他文件系统中可能没有。这可能也是一个相当资源饥饿操作,因为它需要扫描磁盘以检查所有inode,因此您需要查找解决方案以在更改inode时通知(而不是扫描它们全部)。

答案 2 :(得分:0)

logroate use mv命令,有一篇文章解释了为什么文件被移动时fd不会改变 How do the UNIX commands mv and rm work with open files?