Linux 符号链接与硬链接的区别
Linux 有两种链接文件,即“符号链接”和“硬链接”。
这两种都是使用ln
命令创建。请注意,使用ln
命令不加任何参数时,创建的是硬链接,反之就是符号链接。对已创建的链接可以查看 inode 号码来区分,号码一样的是硬链接,号码不一样的是符号链接。
ln [-sf] 源文件 目标文件
参数-s
表示创建符号链接。如果不加任何参数,则创建硬链接。
参数-f
表示如果目标文件已存在,则先删除,然后重新创建。
硬链接
硬链接(Hard Link)又名“硬式链接”或“实际链接”。
优点:与符合链接相比,创建的链接更安全。说安全是因为,每一个硬链接都是独立的存在,互相之间没有关联,即使删除原文件名,还是通过新建的硬链接读取文件数据。不会占用 inode 号码。
缺点:不能给目录创建硬链接。不能跨文件系统创建硬链接。
使用ln
命令,创建硬链接。如下所示:
[root@centos7 ~]# ln 123si.org 123si.org-hard
[root@centos7 ~]# ls -lhi 123si*
1052336 -rw-r--r-- 2 root root 76 May 24 13:41 123si.org
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
参数创建符号链接。
[root@centos7 ~]# ln -s 123si.org 123si.org-soft
[root@centos7 ~]# ls -lhi 123si*
1052336 -rw-r--r-- 1 root root 76 May 24 13:41 123si.org
1049486 lrwxrwxrwx 1 root root 9 May 30 11:19 123si.org-soft -> 123si.org
通过观察,新建的符号链接123si.org-soft
inode 号码为1049486
,与源文件不同,是一个独立的新文件,会占用 inode 号码;第六个字段9
表示文件存储数据大小,而这与创建符号链接的文件名或目录有关,创建的符号链接文件保存的就是目标文件名称或目录名称,例如,这个9
是因为文件名123si.org
有 9 个字符,如果是目录,则会保存完整的路径,例如/etc/test-dir
需要保存 13 个字符。这个->
字符,就是符号链接文件指向的文件名或目录。
符号链接相当于 Windows 系统中的快捷方式。
由于符号链接的特性,当读取符号链接文件时,直接指向了上一级文件名,通过文件名读取到数据。类似于“套娃”效果,如果删除源文件名或目录,则不能在读取数据,报错找不到文件或目录。
(完)