硬链接和软连接

2024/3/20 Linux

在Linux中,文件名和文件的数据是分开保存的。

链接是一种文件共享的方式。

ln(link)命令功能是为某一个文件/目录在另外一个位置建立一个同步的链接。

# 硬链接

硬链接(Hard Link),是对原文件起了一个别名。

特性:

(1)文件有相同的 inode 及 data block;

(2)只能对已存在的文件进行创建;

(3)不能交叉文件系统进行硬链接的创建;

(4)不能对目录进行创建,只可对文件创建;

(5)删除一个硬链接文件并不影响其他有相同inode 号的文件;

(6)只有文件的硬链接数等于零,文件才会被删除。

创建硬链接:

ln 被链接的源文件 链接文件
1

查找指定文件的硬链接:

# 获取文件的inode号码
stat test.txt

# 根据Inode号码查找,把错误提示丢弃
find / -inum 1486772 >/dev/null
1
2
3
4
5

# 软连接

软链接(Soft Link),也叫符号链接(Symbolic Link),它包含了到原文件的路径信息,类似于Windows的快捷方式。

特性:

(1)软链接有自己的文件属性及权限等;

(2)可对不存在的文件或目录创建软链接;

(3)软链接可交叉文件系统;

(4)软链接可对文件或目录创建;

(5)创建软链接时,链接计数 i_nlink 不会增加;

(6)删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

创建软链接:

ln -s 被链接的源文件 链接文件
1

查找指定文件的软连接:

find ./  -type l -exec ls -l {} \;| grep 'test.txt'
1

# 硬链接和软链接的区别

硬链接 软链接
本质 本质是同一个文件 本质不是同一个文件
inode号 相同 不同
跨设备 不支持 支持
文件夹 不支持 支持
相对路径 原始文件相对路径是相对于当前工作目录 原始文件的相对路径是相对于链接文件的相对路径
文件类型 和原文件相同 链接文件,和原文件无关
文件大小 和原文件相同 原文件的路径的长度
链接数目 创建新的硬链接,链接数会增加,删除硬链接,链接数减少 创建或删除,链接数不会变化
删除源文件 只是链接数减一,但链接文件的访问不受影响 链接文件将无法访问