linux 判断硬链接文件,如何判断硬链接(hard link)文件?

Python的os.path模块和stat模块,都有函数用来判断一个文件是否为link文件。不过它们的判断都是文件是否为soft link软链接,或者说symbolic link符号链接。没有函数用来判断此文件是否为hard link硬链接文件。

我们自己写点Python代码来判断是否为硬链接文件,不过首先,我们需要先搞清楚硬链接的特点,主要有几下几点:

硬链接文件,其实就是一个普通文件;

硬链接文件的metadata中,能看到link数不为1,是一个大于1的整数;

硬链接文件的指向一定与它自己在同一个分区里面,即同一个mount point下面;(在创建的时候,Linux系统就限制了不能跨区)

指向相同的硬链接文件,Inode编号一致;

删除某个硬链接文件,不会导致数据丢失,因为还有其它指向相同文件的硬链接存在;只有指向相同(Inode编号相同)的所有硬链接都删除的时候,才是真的删除。

有了以上特点,我们就可以写代码来判断和分析了。

先上代码:

>>> import os

>>> fs = os.stat('123.txt')

>>> fs.st_nlink

2

123.txt文件,通过os.stat获取文件的metadata,发现st_nlink的值是2,这就能说明,123.txt是一个硬链接文件。

用Inode编号寻找相同指向的硬链接

根据硬链接的特点,一定在相同mount point挂载点下,存在Inode相同的文件。

获取Inode编号:

>>> fs.st_ino

2115578

遍历某个文件夹:

本小站已经介绍了两种遍历文件夹的方法,分别是使用os.walk函数,或者是递归遍历目录树的方法。从解决判断硬链接文件的角度看,这两个方法都可以使用。

也许还有一个函数,你能用得上,os.path.ismount(path)。这个函数判断某个路径是否为mount point(挂载点)。你可以试着从已有的那个硬链接文件的路径开始,一层层沿着它的路劲往上判断,直到找到mount point(一定可以找到,因为根路径就是mount point),然后从这个mount point开始遍历下面的所有文件,将每个文件的Inode编号与原有文件的进行对比判断,如果相同,就算找到了。

至于找到相同Inode的硬链接文件后怎么处理,这个就要看你自己的业务需求了。

-- EOF --

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值