连接文件: ln

参考自 <<鸟哥的私房菜 基础学习篇>> 加入点自己的理解。
在LInux下面的连接文件有两种,一种是类似WIndows的快捷方式功能的文件,可以让你快速连接到目标文件(或目录);另一种则是通过文件系统的inode连接来产生新文件名,而不是产生新文件,这种称为硬连接(hard link)。

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

首先介绍几个信息:
1:每个文件都会占用一个inode,文件内容由inode的记录来指向。
2:想要读取文件,必须要经过目录记录的文件名来指向到正确的inode号码才能获取。
因此,文件名只与目录有关,但是文件内容则与inode有关那么有没有多个文件名对应于同一个inode号码呢?这就是硬连接的由来。因为,简单的说hard link只是在目录下新建一条文件名连接到某inode号码的关联记录而已。

举个例子:

在目录/tmp下创建一个example.txt文件,然后对其创建一个硬链接文件hard_link
gedit example.txt
ln example.txt hard_link
ls -li example.txt hard_link

得到的结果为:
这里写图片描述

这里可以发现这两个文件都连接到528661这个inode号码,并且文件的类型、属性、权限完全一样,因为这两个“文件名其实是一模一样的“文件”,并且发现第二个字段由原来的1变成2了这个字段称为”连接”.这个字段的意义为“有多少个文件名连接到这个inode号码”如果将读取到正确数据的方式画成示例图,如果所示:
这里写图片描述
不知道UBunut有什么好的画图软件,将就一下,
这幅图的意思是
首先inode结点1 代表的是/tmp这个目录的inode结点 2 其实代表的也是/tmp的inode结点,因为我的example.txt结点是定义在一个目录下的,其实找到真正的数据的过程是这样的。
1:首先根据文件目录的inode到达文件目录的block,因为block里面记录的是目录底下对用的文件名及其对应的inode编号。
2:得到了这个inode,就知道了你想要查看的文件的inode,也就是这里的real,inode指向文件的实际内容。

这样做有什么好处呢?最大的好处是“安全”,如果你将任何一个文件名删掉了,其实inode和block还是存在的,此时可以通过另外一个文件名进行读取。如图:
这里写图片描述
此外,不论你使用哪个“文件名”进行编辑,最终的结果都会写入到相同的inode和block内
重要的点
hard link只能在单一文件系统中进行的,不能够跨文件系统。
因此,hard link是有限制的。
1:不能跨文件系统
2:不能连接到目录

symbolic link(符号连接,也即是快捷方式)

定义
symbolic link就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名,由于只是文件来作为指向的操作,所以当源文件被删除之后,symbolic link的文件会开不了,会一直说“无法打开文件”
我们创建一个example.txt的软连接soft_link。

这里写图片描述

这里会发现example.txt和soft_link的inode号码不一样,所以是不一样的文件。
那个软连接是怎么实现的呢?如图:
这里写图片描述
过程:
1:首先根据这个目录的inode到达目录的block,然后在block里面记录着文件名与其对应的inode号码
2:然后根据这个inode重复1,得到真实数据的inode,最后就能读取到文件实际内容了。

关于目录的连接数量

首先我们知道,当我们以hard_link进行文件的连接时,在ls -l所显示的第二字段会增1,那么新建目录时,它默认的;连接数量是多少?
当我们新建一个目录时,例如在tmp下建立一个文件夹testing
则在这个空目录下有三个东西

/tmp/testing
/tmp/testing/.
/tmp/testing/..


/tmp/testing/. 代表的就是当前目录,而/tmp/testing/.. 代表的是/tmp目录,所以新建一个目录时,新的目录的连接数为2
这里写图片描述
原本的上层目录由14->15 而新建的目录/tmp/testing则为2。

猜你喜欢

转载自blog.csdn.net/u014303647/article/details/80536595
ln