关于硬连接和符号连接的理解

Linux下面有两种连接文件的方式

hard link (硬连接或者实际连接)

由于Linux里面每个文件都对应一个inode,而文件名是记录在目录的block里的,也就是说文件名和inode没有关系,这样就可以把多个文件名对应同一个inode,这就是hard link,简单的说:hard link只是在某个目录下新建一条文件名连接到某inode号码的关联记录而已。hard link具有以下特点:

1.用hard link新建一个文件,实质是在新建文件所在目录的block上写一条记录,指向源文件的inode,hard link不需要占用额外的inode和block,除非新建文件所在目录的block刚好被写满了,则该目录会被新分配一个block用来写新的记录


2.文件的“连接字段”,如下图

如题

18表示的就是该编号为2的inode的当前文件连接数,这个数字是128B的inode里的一个字段

意思是有多少个文件名连接到这个inode号码上,当新建一个文件连接到某个inode下面时,在该inode里的连接字段就会+1(这一点很重要)


3.hard link最大的好处是安全,不同的文件名对应同一个inode,删除时也只是删掉文件名到inode的连接记录,实际存放数据的inode和block都还在,因此还可以通过另一个文件名来取得正确的数据,同时,由于不同文件名对应的是相同的inode和block,不管对哪个文件进行了修改,其他的关联文件的内容也发生了相应的变化,具有天然的一致性


4.删除inode对应的某个文件时,只删除该文件目录里的对应信息,同时在该inode的连接字段 -1,当最后一个对应文件名被删掉的时候(也就是inode连接字段=0的时候),系统会自动删除相应的inode和block,这下是真的彻底找不回来了


5.网上有的分析是片面的,如下图

如题


这种解释并未理解到当前连接数的实质,下面通过一个实验予以说明,在/etc路径下新建目录test1,再在/etc/test1路径下新建目录test2,其连接数如下:

如题

/etc/test1目录的连接数为3

如题

/etc/test1/test2目录的连接数为2

如题

通过查看/etc/test1/test2目录下的详细内容,发现隐藏文件名/etc/test1/test2/.  (实际上这个路径代表的就是/etc/test1/test2的当前目录),其inode号和/etc/test1/test2是相同的,也就是说这两个文件名就是第153465号inode的两个当前连接

注意:上图还可以看到/etc/test1/test2/.. 目录的inode号是153404,这个目录是代表/etc/test1/test2的上级目录的意思

如题

通过查看/etc/test1目录下的详细内容,可以看到 /etc/test1/. 的inode号也是153404,这意味着,对于第153404号inode:

/etc/test1

/etc/test1/.  (代表 /etc/test1 当前目录的意思)

/etc/test1/test2/..  (代表 /etc/test1/test2 的父目录的意思)

这三个文件名是当前的三个连接


这都是在未计算硬连接的情况下,符合网上所说的“(count-2)等于本目录包含的直接子目录数”这一说法


结合硬连接的原理,可以归纳如下:

在没有硬连接的情况下,当前连接数=直接子目录数(因为这些子目录都有父目录路径文件,比如 /etc/test1/test2/..)+ 2 (即本目录文件,如/etc/test1;和当前目录路径文件,如/etc/test1/.)

在没有硬连接的情况下,对于根目录来说,当前连接数则是=直接子目录数+ 3 (因为根目录的上级目录 /.. 也是自己)


在有硬连接的情况下,对于除根目录以外的目录来说,当前连接数 = 直接子目录数 + 硬连接数 + 2


6.下面回到硬连接,缺点也是有的,通过原理分析可以看到:

(1).不能跨文件系统做hard link

(2).不能连接到目录

通过之前的分析可以看到,目录文件的连接往往非常多,在创建到目录的硬连接的时候,也会同时与目录下的相关文件创建硬连接(也就是在文件名列表里写入相关inode指向记录),同时在某个目录下新建文件时,也要在另一个目录下新建hard link,给环境造成了相当大的复杂度,因此目前还不支持对目录做hard link



symbolic link 软连接或者符号连接

软连接创建一个新的文件,有自己的inode和block,只是在block里记录的是到连接目标文件的指向,读取到这个指向记录以后,系统再从根目录一层层进到目标文件的block里把数据读出来

symbolic link有如下特点:

1.等于是文件的一个“快捷方式”,只起一个指向作用

2.是一个独立的新文件,对目标文件没有任何影响

3.目标文件一旦删除,软连接会打不开
























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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值