首页 > 代码库 > 软链接与硬链接

软链接与硬链接

文件引用模型

  在linux中,一切皆文件,而文件包含元数据(metedata)和用户数据(user data)。元数据中的inode号是系统标识和获取用户数据的唯一凭证,而文件名仅是为了方便用户记忆和使用。为了管理和组织文件,目录被引入系统,也正是在目录中记录了文件名和inode号的对应关系,可用如下模型表示:

技术分享

(注:可以通过stat和ls -i命令获得文件的inode号)

  *为了解决文件的共享使用,引入了软链接(soft link 或 symbolic link)和硬链接(hard link),同时也有隐藏文件路径、增加权限的安全和节省存储空间等好处。

1. 硬链接

  若一个inode号对应多个文件名,则称这些文件为硬链接。(硬链接为文件的一个别名,他们有共同的inode)硬链接有如下几个特点:

  • 文件有相同的inode号和数据块(data block);
  • 只能对已存在的文件创建;
  • 不能交叉文件系统创建硬链接;
  • 不能对目录创建(防止产生目录环),只能对文件创建;
  • 删除一个硬链接文件不会影响其他具有相同inode号的文件。

2. 软链接

  若文件用户数据块中存放的是另一个文件的路径名,则该文件就是软链接。软链接就是一个普通的文件,只是文件的数据块内容有点特殊。软链接拥有自己的inode号和数据块,其有如下特点:

  • 软链接有自己的文件属性和权限等;
  • 可对不存在的文件或目录创建软链接;
  • 可交叉文件系统创建;
  • 可对文件或目录创建;
  • 创建软连接时,链接计数不会增加;
  • 删除软链接并不影响所指向的文件,但若指向的原文件被删除,则相关软链接变成了死链接(所指向的文件被重新创建,死链接可恢复为正常的软链接)。

软、硬链接的访问示意图:

技术分享

 

软链接与硬链接