软链接和硬链接

软链接和硬链接异同

在Linux中,软链接的创建使用与创建硬链接同样的命令,但是它们之间的实际行为差别很大。

硬链接仅仅是一个与文件关联的名字,且不能与目录关联,它不能离开关联文件而独立存在。当一个硬链接被移动、重命名或者删除时,其余关联到同一文件的硬链接不受影响。只有当最后一条指向该文件的硬链接被删除时,该文件内容将会消失。软链接不仅能够指向文件,还能够指向目录。

硬链接只存在同一个文件系统中,而软链接可以跨越不同的文件系统。

由于硬链接是有着相同inode号仅文件名不同的文件,因此硬链接存在以下几点特性:

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

image

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的inode号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:

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

image

软链接的用户数据也可以是另一个软链接的路径,其解析过程是递归的。但需注意:软链接创建时原文件的路径指向使用绝对路径较好。使用相对路径创建的软链接被移动后该软链接文件将成为一个死链接。

使用find命令不仅可查找某文件的软链接,还可以用于查找相同inode的所有硬链接。

系统根据磁盘的大小默认设定了inode的值,如若必要,可在格式文件系统前对该值进行修改。如键入命令mkfs -t ext4 -I 512/dev/sda4,将使磁盘设备/dev/sda4格式成inode大小是512字节的ext4文件系统。

分类: Linux笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注