如何确定linux中文件的唯一性?

时间:2012-11-01 07:10:14

标签: linux inotify inode

我在这里对“独特性”的意思也是对时间的关注。

  • 每次在文件系统上创建文件时,都会有一个唯一的文件。
  • 同一目录中具有相同名称但在不同时间出现的文件 阶段是不同的。
  • 定义为“unique”与文件内容无关。

首先,我使用inode来识别文件,具有不同inode的文件是不同的,文件总是在其生命周期内具有固定的inode,即使它已被移动和触摸。

但是,操作系统可以重用inode。如果文件A.txt具有inode 22345,如果我删除A.txt并创建B.txt,则B.txt可以在ode 22345中。

如果有文件的创建时间怎么办?这样我就可以使用inode +创建时间来识别文件系统历史记录中的文件。但是linux没有提供这个。

我也尝试使用inode + file_md5,但是如果A.txt和B.txt有相同的内容呢?

那么,你有什么想法吗?

=========== edit ===========

我的场景是一种日志文件收集。在日志记录目录中,可以创建,移动和删除日志文件。我们使用从文件偏移到时间戳的映射来做一些像工作一样的“检查点”。那么如何玷污刚刚提到的“文件”?

1 个答案:

答案 0 :(得分:4)

除了inode编号之外,通常还会比较设备编号,因为两个不同文件系统上的两个文件可能具有相同的inode编号。

无论如何,比较inode / dev数字是一种回答问题“这两个文件描述符是否引用同一文件?”的方法。请注意问题中“文件描述符”而不是“路径”的使用,如果在其中的stat()'之后以及在比较inode / dev数字之前删除路径,则会避免竞争。正如您自己指出的那样,只要它们具有活动引用(路径和/或它们由某个进程打开),保证inode数量是唯一的。

在您的情况下,我想一个解决方案是跟踪您感兴趣的文件的inode / dev编号,如果文件被删除则从列表中删除。虽然我不确定你到底想要完成什么。