菜鸟笔记
提升您的技术认知

硬链接和符号链接的区别

在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号

文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。

 链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。  

Linux中的两种链接

 Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic link)。

硬链接 

硬链接是文件的别名。从技术上讲,他们公用一个inode(inode中包含了一个文件的所有必要的信息,说inode就是文件也是没有问题的)。 

由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接也可以认为是一个指向文件索引节点的指针,系统并不为它重新分配inode,

每添加一个一个硬链接,文件的链接数就加1, 删除一个则链接数减1。

大多数系统不允许创建一个目录的硬链接。在允许创建目录硬链接的系统上,只有超级用户才能才能这样做。

不能创建跨文件系统(分区)的硬链接(这些限制在POSIX中都不是强制性的)。

 

 硬链接的创建语法 : ln 存在的文件 新的文件

[root@localhost link]# touch SingleFile ;新建一个空文件 [root@localhost link]# ls -l total 0 -rw-r--r-- 1 root root 0 Mar 30 17:48 SingleFile ;空文件的链接数为1 [root@localhost link]# ln SingleFile HardLinkFile [root@localhost link]# ls -l total 0 -rw-r--r-- 2 root root 0 Mar 30 17:48 HardLinkFile ;新文件的链接数为2 -rw-r--r-- 2 root root 0 Mar 30 17:48 SingleFile ;旧文件的链接数为2 [root@localhost link]# echo "Hello" > SingleFile ;向旧文件中写入6个Bytes的字符串 [root@localhost link]# ls -l total 8 -rw-r--r-- 2 root root 6 Mar 30 17:49 HardLinkFile ;新文件的大小变为6个Bytes -rw-r--r-- 2 root root 6 Mar 30 17:49 SingleFile ;旧文件的大小变为6个Bytes [root@localhost link]# cat HardLinkFile ;显示新文件中的内容 Hello ;结果与向旧文件中写入的内容相同 [root@localhost link]# rm -f HardLinkFile ;删除新文件(删除旧文件也是相同的) [root@localhost link]# ls -l total 4 -rw-r--r-- 1 root root 6 Mar 30 17:49 SingleFile ;旧文件的链接数为1

  

软链接(符号链接)

 软链接是一种特殊的文件类型,其中包含对另一个 文件/目录 以 绝对/相对 路径形式的引用.

 软链接可以看做是对一个文件的间接指针,相当于windows下的快捷方式。

软链接没有任何文件系统的限制,任何用户可以创建指向  文件/目录 的符号链接。甚至可以跨越不同机器、不同网络对文件进行链接。

创建文件的软链接时,软链接会使用一个新的inode,所以软链接的inode号和文件的inode号不同(表明他们是两个不同的文件),

软链接的inode里存放着指向文件的路径,删除源文件,软链接也无法使用了,因为文件的路径不存在了;删除软链接对原文件没有任何影响。

当我们再次创建这个文件时(文件名与之前的相同),软链接又会重新指向这个文件(inode号与之前的不同了),而硬链接不会受其影响.

当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,

而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

 

软链接的创建语法 : ln -s 存在的文件 新的文件

[root@localhost link]# touch SingleFile ;新建一个空文件 [root@localhost link]# ln -s SingleFile SoftLinkFile ;创建一个软链接 [root@localhost link]# ls -l total 0 -rw-r--r-- 1 root root 0 Mar 30 18:28 SingleFile ;源文件的链接数不变 lrwxrwxrwx 1 root root 10 Mar 30 18:28 SoftLinkFile -> SingleFile ;最前面的"l"表明此文件是一个软链接,后面的提示说明指向的源文件 [root@localhost link]# rm -f SingleFile ;删除源文件(或者移动到别的位置) [root@localhost link]# ls -l total 0 lrwxrwxrwx 1 root root 10 Mar 30 18:28 SoftLinkFile -> SingleFile ;"SingleFile" 高亮闪烁,提示文件找不到 [root@localhost link]# echo "World" > SoftLinkFile ;向软链接中写入字符串 [root@localhost link]# ls -l total 4 -rw-r--r-- 1 root root 6 Mar 30 18:29 SingleFile ;SingleFile 被重新创建 lrwxrwxrwx 1 root root 10 Mar 30 18:28 SoftLinkFile -> SingleFile [root@localhost link]# cat SingleFile World [root@localhost link]# 

 

 硬链接 和 软链接 的区别

1、硬链接 和 源文件 是同一个文件;软链接 和 源文件 是2个不同的文件。

2、大部分系统不能创建 目录 的硬链接,软链接没有这个限制。

3、硬链接不能跨文件系统(分区),软链接没有这个限制。