Linux下的硬链接和软链接

本文深入剖析Linux系统中的硬链接和软链接原理,包括它们的特点、创建方式及应用场景,帮助读者理解这两种链接机制如何提高文件管理效率。

文件的组成

一个文件有文件名数据,而数据在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_h
ProductA:20
ProductB:50
ProductC:20
ProductD:30
ProductE:99
ProductF:120
Hello,world
Hello,world
Hello 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 file
lrwxrwxrwx. 1 root root   4 Apr 23 06:52 file_s -> file

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

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

Linux 系统中,硬链接软链接是两种同的文件链接方式,它们在定义、实现机制、功能、限制等方面存在差异[^2]。 ### 定义 硬链接文件系统的多个入口点,是同一文件的多个名称,共享 inode 数据;软链接是包含路径引用的特殊文件,是指向其他文件的路径引用[^1][4]。 ### 创建命令 创建硬链接软链接都使用 `ln` 命令,但格式选项同。创建硬链接的命令格式为 `ln 源文件 硬链接文件名`;创建软链接的命令格式为 `ln -s 目标文件或目录 软链接文件名`,其中 `-s` 表示创建软链接[^3]。 ### inode 数据共享 硬链接的多个文件名共享同一个 inode,删除其中一个文件名,影响其他文件名对数据的访问,因为数据本身并未被删除,只要还有硬链接指向该 inode,数据就会丢失。例如创建文件 `file.txt` 并为其创建硬链接 `hardlink.txt`,二者 inode 相同,删除 `file.txt` 后,`hardlink.txt` 仍然可以访问数据[^3]。 软链接有自己独立的 inode,它的内容是目标文件或目录的路径。软链接是一个独立的文件文件类型为 `l`(链接)。当删除目标文件后,软链接会变成悬空链接,无法再访问到原来的数据。例如创建文件 `target.txt` 并为其创建软链接 `softlink.txt`,删除 `target.txt` 后,`softlink.txt` 会失效[^3]。 ### 路径使用 使用相对路径创建软链接时,路径是相对于软链接文件本身,而非当前目录,这可能会导致路径引用错误,建议使用绝对路径创建软链接以避免混淆。硬链接存在此问题[^4]。 ### 使用场景 当需要保证文件存在性,且文件内容变时,适合使用硬链接;当需要灵活性,如跨系统或动态路径的情况,适合使用软链接[^1][4]。 ### 对目录的支持 硬链接通常允许对目录创建,主要是为了避免文件系统出现循环引用等复杂问题。软链接可以对目录创建,通过 `ln -s` 命令可以方便地为目录创建软链接[^3]。 ```bash # 创建文件 echo "Hello, Hard Link" > file.txt # 创建硬链接 ln file.txt hardlink.txt # 创建目录 mkdir target_dir # 创建目录的软链接 ln -s target_dir softlink_dir ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值