Fork me on GitHub
0%

Linux 系统下的软链接和硬链接

之前一直不是很明白 Linux 系统下的软链接 (soft link) 和硬链接 (hard link) 的区别和用法,今天刚好又用到了,特意花了点时间去了解了一下,暂且在这里记录一下吧。

在介绍硬链接和软链接之前先介绍一下 Linux 系统下面的文件结构,文件在 Linux 下可以分为两个部分:元数据和用户数据。元数据中主要包含文件的一些附加属性,比如:文件大小,创建时间,所有者信息以及 文件的 inode 索引号,inode 索引号是文件索引节点号,也是文件的唯一标识,我们平常看到的文件名并非是用来区分文件而是一个别名便于我们识别和记忆;用户数据则是文件的数据块内容,也就是该文件保存的真正内容。

硬链接

(1) 含义
硬链接表示的是一个文件的 inode 索引号对应于多个文件名,也就是说我们对一个文件创建了多个文件名,它们都对应于同一个 inode 索引号标识的文件,当我们删除其中任意一个文件名,都不会对其他文件名有影响,每删一个文件名,该文件的链接数减一,只有当该文件的链接数为 0 时系统会将其数据块和 inode 索引号回收。

(2) 创建方式
eg. 为 /root/fileA 创建硬链接 /home/fileB

1
ln /root/fileA /home/fileB

注意:应该使用文件的绝对路径,避免使用相对路径。

(3) 特性

  • 文件有相同的 inode 及 data block
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件
  • 文件的链接数为 0 时系统会将其数据块和 inode 索引号回收

(4) 使用限制

  • 不能对目录创建硬链接,只能对文件创建
  • 不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下
  • 只能对已存在的文件进行创建

软链接

(1) 含义
软链接其实就是一个普通的文件,有着自己的 inode 索引号和数据块,特殊的是该文件的用户数据块中存放的是另一个文件的路径,有点类似于 Windows 系统中的快捷方式,通过快捷方式可以打开它所指向的文件,链接文件的删除不影响该链接文件数据块存放的路径指向的文件。

(2) 创建方式
eg. 为 /root/fileA 创建软链接 /home/fileB

1
ln -s /root/fileA /home/fileB

注意:应该使用文件的绝对路径,避免使用相对路径。

(3) 特性

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

(4) 使用限制

  • 可以跨文件系统创建
  • 可以对文件或者目录创建
  • 可以对一个不存在的文件或者目录创建

文件类型

最后说一下文件的类型主要有以下几种:

1
2
3
4
5
6
7
d :目录   
- :文件
l :链接
s :socket
p :named pipe
b :block device
c :character device
 wechat
扫描上面图中二维码关注微信公众号