Linux软硬链接

目录

    • inode
    • 软链接
    • 硬链接
    • 目录的硬链接


在Linux中,ln命令会在文件之间创建链接,这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称,看上去就像是Windows的快捷方式。但是,链接分为两种,一种叫作硬链接(Hard Link),另一种叫作符号链接(Symbolic Link),后者又称为软链接。实际上,软链接才真正像是Win中的快捷方式,而硬链接却大有不同。

ln -s source dist # 建立软链接
ln source dist    # 建立硬链接

inode

要想了解软硬链接的区别,就要先明白inode这一概念,这里简单阐述下。

文件储存在硬盘上,硬盘的最小存储单位叫做扇区(Sector),每个扇区储存512字节。操作系统在读取硬盘的时候,不会一个个扇区去读,这样效率太低了,而是一次性连续读取多个扇区,即一次读取一个块(block)。这种由多个扇区组成的块,是文件存取的最小单位。的大小,最常见的是4KB,即连续八个sector组成一个block。

文件数据都存储的中,那么很显然,我们还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等,它们能够唯一的标识一个文件。这种存储文件元信息的区域就叫做inode,中文译名为索引节点

对于一个文件来说,有唯一的inode与之对应,而对于一个inode而言,可以有多个文件名/路径与之对应。也就是说,一个inode唯一标识一个文件,但是找个文件可以有多种不同的访问路径。这里啰嗦一嘴,Linux下一切皆文件,包括目录、硬盘等等。

可以使用ls -i example.txt来查看某文件的inode编号,同样,可以使用ls -li来查看当前目录下所有文件的inode编号,第一列就是。
Linux软硬链接_第1张图片


软链接

软连接实际上是通过名字来引用另外一个文件,类似于Windows的快捷方式。软连接和目标文件有着不同的inode号,也就是说软链接本身是一个独立的文件。可以理解为,软链接是一个独立文件,但是这个文件存储的是目标文件的路径,起到指针的作用。
Linux软硬链接_第2张图片
当系统访问软链接后,会自动跳转到对应的目标文件处进行处理。当你使用vim abc_s对该文件进行更改时,实质上更改的是abc.txt,当再次打开abc.txt后,发现其内容就是你刚改的东西。


硬链接

硬链接和软链接大不相同。硬链接是通过inode引用另外一个文件,因此硬链接和目标文件具有相同的inode号。也就是说,软链接是一个独立文件,但是硬链接和目标文件本质上就是同一个,可以理解为一个实际文件有多个文件名。
Linux软硬链接_第3张图片
硬链接与文件原有的名字是平权的,在Linux看来它们是等价的。由于这个原因,硬链接不能连接两个不同文件系统上的文件,但是软链接就可以跨文件系统。

每当我们为文件创建一个硬链接,该文件的硬链接数就是增加,上图中的2就是硬链接数。可以看到,因为abc_h和abc.txt本质上是一个文件,所以它们的硬链接数都为2。硬链接数也就表示的就是指有多少个文件的名字/路径和该文件的inode产生映射关系。info ln中这么解释硬链接:

A “hard link” is another name for an existing file; the link and the
original are indistinguishable. Technically speaking, they share the
same inode, and the inode contains all the information about a
file–indeed, it is not incorrect to say that the inode is the file.

Linux是不允许用户将硬链接指向的目录的。但是,Linux一切皆文件,包括目录,因此目录理应也可以硬链接。实际上,目录是有硬链接的,只不过这个操作只能由系统完成,用户是不能进行的。


目录的硬链接

在这里插入图片描述
可以看到,新创建的目录默认有两个硬链接数,说明有两条路径指向这个目录文件的inode。很显然,/home/sakura/test/testDir也即这个目录本身是一个,那么另一个是什么呢?

我们知道,每个目录都可以通过.来表明当前目录,也就是指向它自己。进入testDir内部,使用ln -ali来查看更详细的信息,发现.的inode号和testDir的inode号一模一样。也就是说,目录文件初始的两个硬链接,一个是其本身,另一个就是其下的.
Linux软硬链接_第4张图片
现在,我们在testDir下再新建一个目录,重新查看其硬链接数,发现变为了3。
在这里插入图片描述
这是因为,新的目录下的..指向该目录的上级目录,就是testDir,它也是testDir的inode的一条路径,所以硬链接数变为了3。更一般的,一个新建的目录初始硬链接数为2,每当在该目录下新建一个子目录,其硬链接数就会加一,关系可以归为下图:
Linux软硬链接_第5张图片

你可能感兴趣的:(linux,运维,服务器,os)