可能重复:
How to check whether two file names point to the same physical file
如何知道两个硬链接是否从Linux中的C连接到一个文件。
感谢。
答案 0 :(得分:7)
对两个路径使用stat() or fstat()功能。如果在返回的结构中st_dev和st_ino字段都相同,则路径引用相同的文件系统对象。
编辑:
请注意您需要同时检查st_dev和st_ino 。否则,您可能会遇到恰好具有相同inode编号的不同文件系统中的两个文件匹配的风险。如果您在两个挂载点上运行stat
,则可能会看到此内容:
$ stat / /boot | grep Device
Device: 903h/2307d Inode: 2 Links: 23
Device: 902h/2306d Inode: 2 Links: 3
您可以在输出中清楚地看到相同的inode编号。
答案 1 :(得分:3)
使用stat
或fstat
。他们填写的stat
结构包含inode编号。如果两者都已连接,则st_ino
字段应具有相同的值。
由于inode编号仅对设备而言是唯一的,因此您还需要检查设备ID(st_dev
)。
答案 2 :(得分:2)
stat()
或fstat()
函数将返回一个包含st_nlink
字段的结构,该字段指出存在该文件的硬链接数。我想你可以比较两个不同路径的inode,因为硬链接应该重用相同的inode。
答案 3 :(得分:0)
您也可以使用
$ ls -i
它列出了inode编号,它是文件的唯一ID。