唯一文件ID?

时间:2012-04-29 17:45:37

标签: linux shell command-line filesystems

我正在制作一个能够保存某些文件信息的应用程序。我想知道跟踪文件的最佳方法是什么。我正在考虑使用文件的绝对路径,但如果文件被重命名,则可能会改变。我发现如果你运行ls -i,每个文件旁边都有一个唯一的id(?)。可以用于唯一的文件ID吗?

2 个答案:

答案 0 :(得分:2)

每个设备的inode是唯一的,但我不建议使用它,因为想象你的盒子崩溃并且你将所有文件移动到一个新的文件系统,现在你的所有文件都有新的id。

这实际上取决于您选择的语言,但几乎所有语言都包含用于生成UUID的库。虽然碰撞在理论上是可能的,但它是一个真正的非问题。生成UUID会将其添加到文件的前面,然后您就可以开展业务了。随着实现的增长,它还允许您创建文件的HashTable索引,以便以后快速查找。

答案 1 :(得分:0)

问题是,“什么是唯一的?”

如果在给定的时间点在给定的机器上需要一些独特的东西,那么是的,inode编号+设备编号几乎总是唯一的 - 这些可以从stat()或类似的C,os.stat获得( )在python中。但是,如果删除文件并创建另一个文件,则可以重用inode编号。此外,两个不同的主机可能对设备,inodeno对有什么完全不同的想法。

如果您需要某些内容来描述文件的内容(因此具有相同内容的两个文件具有相同的ID),您可能会查看其中一个SHA或RIPEMD函数。这将是非常独特的 - 意外碰撞的几率是天文数字低。

如果您需要其他形式的独特性,请详细说明。