Linux 符号链接与硬链接的区别

Linux 有两种链接文件,即“符号链接”和“硬链接”。

这两种都是使用ln命令创建。请注意,使用ln命令不加任何参数时,创建的是硬链接,反之就是符号链接。对已创建的链接可以查看 inode 号码来区分,号码一样的是硬链接,号码不一样的是符号链接。

  1. ln [-sf] 源文件 目标文件

参数-s表示创建符号链接。如果不加任何参数,则创建硬链接。
参数-f表示如果目标文件已存在,则先删除,然后重新创建。

硬链接

硬链接(Hard Link)又名“硬式链接”或“实际链接”。

优点:与符合链接相比,创建的链接更安全。说安全是因为,每一个硬链接都是独立的存在,互相之间没有关联,即使删除原文件名,还是通过新建的硬链接读取文件数据。不会占用 inode 号码。

缺点:不能给目录创建硬链接。不能跨文件系统创建硬链接。

使用ln命令,创建硬链接。如下所示:

  1. [root@centos7 ~]# ln 123si.org 123si.org-hard
  2. [root@centos7 ~]# ls -lhi 123si*
  3. 1052336 -rw-r--r-- 2 root root 76 May 24 13:41 123si.org
  4. 1052336 -rw-r--r-- 2 root root 76 May 24 13:41 123si.org-hard

通过观察,源文件123si.org与目标文件123si.org-hard的 inode 号码1052336是一样的。第三个字段2表示,有多少个文件名链接到这个 inode 号码。

由此可见,硬链接只是创建了一个文件名并链接到某个 inode 号码。此时,如果删除源文件123si.org,文件数据并不会被删除。可以通过123si.org-hard文件名,继续读取文件数据。硬链接虽然创建了不同的文件名,但是每个文件名都指向了同一个 inode 号码,而 inode 号码指向文件数据(或称之为区块)。因此,硬链接比较安全,不会出现不能读取文件数据的情况。

符号链接

符号链接(Symbolic Link)又名“软链接”或“快捷方式”。

优点:使用灵活方便,可以给“目录”或“文件”创建符号链接。相比硬链接,增加了能对目录创建链接了。可跨文件系统创建符号链接。

缺点:从读取数据方面来说,安全性差。因为类似“套娃”,如果源文件名或目录被删除,则不能再读取到文件数据或目录。另外,创建的符号链接是一个独立文件,它会占用 inode 号码。

使用ln命令,加-s参数创建符号链接。

  1. [root@centos7 ~]# ln -s 123si.org 123si.org-soft
  2. [root@centos7 ~]# ls -lhi 123si*
  3. 1052336 -rw-r--r-- 1 root root 76 May 24 13:41 123si.org
  4. 1049486 lrwxrwxrwx 1 root root 9 May 30 11:19 123si.org-soft -> 123si.org

通过观察,新建的符号链接123si.org-softinode 号码为1049486,与源文件不同,是一个独立的新文件,会占用 inode 号码;第六个字段9表示文件存储数据大小,而这与创建符号链接的文件名或目录有关,创建的符号链接文件保存的就是目标文件名称或目录名称,例如,这个9是因为文件名123si.org有 9 个字符,如果是目录,则会保存完整的路径,例如/etc/test-dir需要保存 13 个字符。这个->字符,就是符号链接文件指向的文件名或目录。

符号链接相当于 Windows 系统中的快捷方式。

由于符号链接的特性,当读取符号链接文件时,直接指向了上一级文件名,通过文件名读取到数据。类似于“套娃”效果,如果删除源文件名或目录,则不能在读取数据,报错找不到文件或目录。

(完)