我在这里对“独特性”的意思也是对时间的关注。
首先,我使用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 ===========
我的场景是一种日志文件收集。在日志记录目录中,可以创建,移动和删除日志文件。我们使用从文件偏移到时间戳的映射来做一些像工作一样的“检查点”。那么如何玷污刚刚提到的“文件”?
答案 0 :(得分:4)
除了inode编号之外,通常还会比较设备编号,因为两个不同文件系统上的两个文件可能具有相同的inode编号。
无论如何,比较inode / dev数字是一种回答问题“这两个文件描述符是否引用同一文件?”的方法。请注意问题中“文件描述符”而不是“路径”的使用,如果在其中的stat()'之后以及在比较inode / dev数字之前删除路径,则会避免竞争。正如您自己指出的那样,只要它们具有活动引用(路径和/或它们由某个进程打开),保证inode数量是唯一的。
在您的情况下,我想一个解决方案是跟踪您感兴趣的文件的inode / dev编号,如果文件被删除则从列表中删除。虽然我不确定你到底想要完成什么。