Linux 链接文件

一、简介

1、在Linux中有两种链接文件,一种叫做硬链接,它是在某个目录下新建一个文件名链接到某inode号码的关联记录而已,注意,它只是通过文件系统的inode链接来产生新的文件名,而不是产生新的文件;而另一种是类似Windows中的快捷方式功能的文件,它是创建一个独立的文件,而这个文件会让数据的读取指向它链接的那个文件的文件名,叫做符号链接。

二、硬链接

1、由Ext2文件系统我们知道每个文件都会占用一个inode,文件的内容由inode指向的block来保存。要读取文件的内容,需要通过目录记录的文件名来指向到该文件的inode,从而读取文件内容。

硬链接就是多个文件名对应到同一个inode号码。如下图,目录/tmp/ln01的inode号码是11号,该inode指向的block中存有一个叫做/tmp/ln01/passwd的文件名,该文件名的inode号码是33号,33号的inode指向的block就是直接保存了文件内容。现在有一个叫做/tmp/ln02的目录,该目录的inode号码是22号,22号inode指向的block中保存了一个叫做/tmp/ln02/passwd_hd的文件名,而该文件名的inode号码也恰恰是33号,与/tmp/ln01/passwd文件名的inode号码一样,这两个文件名都对应了同一个inode号码,所以这两个文件名就是链接到同一个文件内容了,这就是硬连接。

2、创建硬链接及硬连接的特性

创建硬链接的方式为:ln 源文件 产生的链接文件。如上图所示,/tmp/ln02/passwd_hd是创建的一个硬链接,它只是在/tmp/ln02目录下添加一个/tmp/ln02/passwd_hd的文件名而已,只是这个文件名的inode号码是已经存在了的33号inode,只要在加入这个文件名时,/tmp/ln02目录的block还能够存储该文件名,就不会为/tmp/ln02目录增加额外的block来存储该目录中的文件名,此时创建的硬链接就不会额外增加新的inode和block。但是如果在/tmp/ln02目录中加入该文件名时恰恰使得/tmp/ln02目录的block不够存储/tmp/ln02目录下的文件名时就会增加额外的block来存储/tmp/ln02目录中的文件名,这时候创建的硬链接才会增加额外的block。如下图:

创建了硬链接文件/tmp/ln02/passwd_hd,它与文件/tmp/ln01/passwd的inode都是1317167号,且注意观察,这两个文件除了文件名不一样之外,其它信息都是一样的,因为它们链接到同一个inode。文件属性中所属用户前面那个数字就是代表有多少个文件名链接到这个inode号码,可以发现在创建了硬连接后该数字由1变成了2。且创建了该硬连接之后,该文件系统的inode使用情况和bock的容量使用情况都没有发生改变。

硬连接除了以上的特性之外,还有如下的特性:

  • 不能跨文件系统;
  • 不能链接到目录;因为如果是链接到目录,则除了目录外,目录中的所有文件都还需要做链接。
  • 如果有多个文件名链接到同一个inode,删除任何一个文件名后,只要还有文件名链接到该inode,那么该inode和inode指向的block都还是存在的,还可以通过另一个文件名来读取数据。
  • 不论使用哪个文件名来对文件内容进行编辑,最终结果都会写入到相同的block中,所以都能进行数据的修改。

三、符号链接

1、符号链接会创建一个独立的文件,这个文件会让数据的读取指向它链接的那个文件的文件名。如下图所示,创建了一个符号链接文件/tmp/ln02/passwd_so,它链接到/tmp/ln01/passwd文件,在创建该符号链接文件时,它会在该文件所在的目录/tmp/ln02的block中增加该符号链接的文件名,并为该文件分配新的inode(44号),然后还会为该inode(44号)分配新的block,该block中就保存了符号链接所真正链接的文件的文件名,所以就会指向真正链接的文件的文件名所在的目录的inode(11号),因为要读取某个文件类型,需要通过目录记录的文件名来指向到该文件的inode,从而读取文件内容嘛。

2、符号链接的创建及特性

创建符号链接的方式为:ln -s 源文件 产生的链接文件。如下图所示,从结果中就能发现/tmp/ln01/passwd和/tmp/ln02/passwd_so两个文件分别指向了不同的inode号码,所以它们是两个独立的文件存在,系统为符号链接文件/tmp/ln02/passwd_so分配了新的inode和block,系统的inode和block使用情况均发生了变化。而且符号链接文件/tmp/ln02/passwd_so的右边写上了目标文件的文件名/tmp/ln01/passwd。这时从44号inode读取到链接文件的内容仅仅是目标文件的文件名,根据文件名链接到正确的目录去取得目标文件的inode,然后就能读取目标文件的数据了。所以,当目标文件被删除后,符号链接文件就会打不开,就是因为找不到目标文件的文件名了。

这里的符号链接文件/tmp/ln02/passwd_so的大小为16byte,为什么呢?因为它的block中存放的目标文件的文件名“/tmp/ln01/passwd”共有16个字符,每个字符占用1byte,所以大小为16byte。

当修改符号链接文件时,改动的是源文件。除了对文件做符号链接之外,符号链接还可以用于目录,比如:ln -s /bin /root/bin,当进入到/root/bin这个目录时其实就是进入到/bin这个目录内。

三、关于目录的链接数量

1、我们知道当使用ls -i命令查看某个文件或者目录时,第一列属性值表示的是该文件或者目录的inode号码,而第三列属性值表示有多少个文件链接到这个inode号码。当新建一个空的目录时,会为该目录分配一个inode号码,而该空目录中会存在两个目录,那就是“.”与“..”目录,而该空目录的目录名与“.”实际是一样的,都是表示该目录,所以新建一个空目录时会有两个目录名链接到该目录的inode号码,而“..”表示该空目录的上层目录,所以新建一个空目录时会增加一个目录名链接到该目录的上层目录的inode号码,如下图:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值