Linux硬链接和软链接

Linux连接概念

linux的链接分为两种,一种被称为硬链接(Hard Linx),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

什么是链接

链接简单说是一种文件共享的方式,是POSIX中的概念,主流文件系统都支持连接文件。

链接的作用

链接可以简单的理解为windows中常见的快捷方式,

Linux中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更加容易访问的目录中。在这些用途上,我们通常会使用软链接(也成为符号链接)。

inode定义

inode指的是Linux系统中用作数据索引的标识符。

inode指示了一个文件的基本信息:inode编号,修改时间,文件位置等。

如同同一本书的目录,会直接告诉你想看的章节在第几页。Linux和书不同的是,Linux文件存取是以块为单位的。

操作系统在读取硬盘时,会一次性读取一个块,而inode就告诉了文件位于哪个块,于是系统就会从这个块开始读取内容,我们就可以看出这个文件的内容。

在系统内部,打开一个文件分为三步:

  1. 系统找到文件名对应的inode号
  2. 通过inode号,获取inode信息
  3. 根据inode信息,找到文件数据所在的块,读取内容。

inode内容

基本信息:

  • 文件字节数
  • inode编号
  • 文件拥有者Uid
  • 文件所属group的Gid
  • 文件的读,写,执行权限
  • 文件的时间戳:
    • change:上次变动时间
    • modify:文件内容上一次变动时间
    • access:文件上一次打开的时间
  • 链接数量:即有多少文件名指向这个inode
  • 文件数据块的位置

硬链接

硬链接通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管什么类型都分配一个inode。

Linux中,多个文件名指向同一个索引节点是存在的,比如:A是B的硬链接,则A的目录项的inode节点号与B的目录项的inode节点号相同。即一个inode节点对应两个不同的文件名,两个文件名指向同一个文件。A和B对文件系统来说是完全平等的,删除任何一个不会影响另一个访问。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。

只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

软链接

另外一种链接称为符号链接,也叫软链接,类似于Windows的快捷方式。实际上是特殊的文件,在符号链接中,文件实际上是一个文本文件,包含另一个文件的位置信息。比如A是B的软链接,A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

软硬链接的不同

  1. 本质不同:硬连接指向同一个文件,而软连接指向的不是同一个文件
  2. 删除时:硬连接不受影响,软连接失效
  3. 创建链接时:创建硬链接链接数加1,创建软链接连接数不变
  4. 跨分区:硬链接不可以跨分区,软链接可以跨分区
  5. 目录是否可以创建链接:硬链接不可以对目录创建,软链接可以对目录创建
  6. 硬连接的inode号相同,软链接inode号不同

参考文献

linux链接概念

理解Linux的硬链接与软链接

深入讲解 linux 中 inode、硬链接、软链接的原理