首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何确定linux中文件的唯一性?

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

Stack Overflow用户
提问于 2012-11-01 07:10:14
回答 1查看 876关注 0票数 0

我在这里所说的“独特性”也是关于时间的。

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

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

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

如果有创建文件的时间呢?这样我就可以使用inode+creation-time来识别文件系统历史记录中的一个文件。但linux并没有提供这方面的支持。

我也尝试过inode+file_md5,但是如果A.txt和B.txt有相同的con怎么办?

那么,你有什么想法吗?

===========编辑===========

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

EN

回答 1

Stack Overflow用户

发布于 2012-11-01 07:30:51

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

无论如何,比较inode/dev编号是回答“这两个文件描述符引用同一个文件吗?”问题的一种方法。注意问题中“文件描述符”而不是“路径”的用法,这避免了如果路径随后在stat()之后以及在比较inode/dev号之前被删除的话。正如您自己指出的,inode编号只有在它们具有活动引用(路径的和/或它们是由某个进程打开的)时才是唯一的。

在您的例子中,我想一种解决方案是跟踪您感兴趣的文件的inode/dev号,如果文件被删除,则从列表中删除。虽然我不知道你到底想做什么。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13172534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档