Linux下的硬链接和软链接

来源:互联网 发布:丝丽隆鼻 知乎 编辑:程序博客网 时间:2024/06/04 23:29

文件的组成

一个文件有文件名数据,而数据在Linux上又被分成了两个部分,分别是用户数据元数据*

用户数据:即文件数据块(block),是记录文件真实内容的地方。

元数据(metadata):记录文件的附加属性(文件大小,创建时间,所有者信息等等)。


文件的唯一标识inode

在文件中的元数据中,有一项被称为inode号,在Linux系统下,inode号唯一的表示一个文件,那么有人会问,那么文件名呢?
其实,文件名代表的只是文件的别名;在Linux系统下,操作系统也是通过inode号来找到正确的文件数据块的。
这里写图片描述


软链接和硬链接的引入

为了解决文件的共享使用问题,另外还考虑了隐藏文件路径,增加权限安全以及节省存储空间的好处,在Linux系统下引入了软链接和硬链接这两个概念。

什么是硬链接?

若一个inode号对应多个文件,则这些文件为硬链接,即硬链接就是同一个文件使用了多个别名,这个是不是和C++的引用计数很类似~

硬链接的相关特点

1.文件有相同的inode和block,并且文件信息相同。
这里写图片描述
上图我们在创建了硬链接后,使用stat命令查看硬链接文件和源文件的信息。

2.文件信息要改一起改。

下面我们来进行验证,我们在源文件中追加一行,然后查看硬链接文件。

[root@leap_ awk_test]# echo "Hello leap" >> file[root@leap_ awk_test]# cat file_hProductA:20ProductB:50ProductC:20ProductD:30ProductE:99ProductF:120Hello,worldHello,worldHello leap

其实这里不光是内容发生了改变,相应的文件状态也发生了改变,并且同一个inode对应的硬链接文件信息都相同。

3.删除一个硬链接文件并不影响其他具有相同inode号的文件。
这个很好理解,因为Linux系统下为每个文件的硬链接维护了一个引用计数,当我们删除一个文件时,如果这个文件的引用计数是大于1的,那么我们仅仅是将链接清除掉,并不影响源文件。

4.硬链接只能对文件进行创建,不能对目录进行创建。
大家可以自行进行验证~。


什么是软链接?

若文件用户数据块存放的内容是另一文件的路径名的指向,则该文件就是软链接,软链接就是一个普通文件,只是数据块内容有点特殊,它有着自己的inode号以及用户数据块。
软链接与源文件的关系如下图:
这里写图片描述

软链接的相关特点

1.软链接有着自己的文件属性和权限;
2.可对不存在的文件或者目录创建软连接;
3.软链接可交叉文件系统;
4.创建软连接时,引用计数不会增加;
5.删除软链接不影响软链接指向的文件;
6.删除软链接指向的源文件,则相关软链接被称为死连接,若执行路径被重新创建,死连接可以恢复为正常的软链接。
7.修改软链接的文件状态会影响软链接所指向的文件的状态。

相关测试

1.首先我们验证软链接有着自己的文件权限和属性;

[root@leap_ awk_test]# ln -s file file_s[root@leap_ awk_test]# ls -al file file_s -rw-r--r--. 2 root root 108 Apr 23 06:44 filelrwxrwxrwx. 1 root root   4 Apr 23 06:52 file_s -> file

2.下面我们对一个不存在的文件进行软链接的创建
这里写图片描述

只不过此时的软链接是一个死链接,它不指向任何文件,不信你可以cat它一下。

1 0