一、前言
文件都有文件名与数据,在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux中,元数据中的inode号(inode号即索引节点号,是文件元数据的一部分但其并不包含文件名)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode号寻找正确的文件数据块。
二、软硬链接介绍
1、硬链接
硬链接是指通过索引节点来进行链接。在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。一般这种链接就称为硬链接。只有当最后一个链接删除后,被删除的文件数据块及目录的链接才会被释放。
2、软链接
软链接(也叫符号链接),类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接可对文件或目录创建。
图示:

三、软链接和硬链接的特点
软链接:
1、是存放另一个文件的路径的形式存在。
2、可交叉文件系统创建 ,硬链接不可以。
3、可以对目录进行链接。
4、有自己的文件属性及权限等。
5、可对不存在的文件或目录创建软链接。
6、软链接可对文件或目录创建。
7、创建软链接时,链接计数 i_nlink 不会增加。
8、删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
硬链接:
1、不能对目录进行创建硬链接,只可对文件创建。
2、以文件副本的形式存在,但不占用实际空间。
3、文件名有相同的 inode 及 data block。
4、只有在同一个文件系统中才能创建,不能交叉文件系统进行硬链接的创建。
5、 删除其中一个硬链接文件并不影响其他有相同inode号的文件。
6、只能对已存在的文件进行创建。
注:无论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
四、适用场景
硬链接:
1、用于镜像数据文件,防止误删。
软链接:
1、便于文件管理,将复杂路径下的文件链接到简单路径下访问。
2、解决某个目录空间不足问题。
五、使用方式
linux系统可以用ln命令来创建链接文件。
ln命令格式:
ln [参数] [源文件或目录] [目标文件或目录]
主要参数:
-i 交互模式,文件存在则提示用户是否覆盖。
-s 软链接(符号链接)。
-d 允许超级用户制作目录的硬链接。
-b 删除,覆盖以前建立的链接。
-f 强制执行。
软链接 (符号链接) ln -s source target
硬链接 (实体链接) ln source target
注:可以用stat命令或ls -i查看文件的inode号。




