一、Linux链接概念
1、Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

【硬连接】
硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索 引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户 就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和 其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

【软连接】
另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

2、实验加深理解

[auto4s@Mallux test]$ touch f1
[auto4s@Mallux test]$ ln f1 f2
[auto4s@Mallux test]$ ln -s f1 f3
[auto4s@Mallux test]$ ls -li

// 硬链接和源文件 i节点一样, 软连接和源文件 i节点不一样
total 8
17828730 -rw-rw-r--. 2 auto4s auto4s 17 Jan 22 11:44 f1
17828730 -rw-rw-r--. 2 auto4s auto4s 17 Jan 22 11:44 f2
17828731 lrwxrwxrwx. 1 auto4s auto4s  2 Jan 22 11:42 f3 -> f1

// 修改任何一个文件,软连接,硬链接,源文件都改变

[auto4s@Mallux test]$ echo 'I am a test file' >> f1
[auto4s@Mallux test]$ cat f2
I am a test file
[auto4s@Mallux test]$ cat f3
I am a test file

// 修改 软连接的权限,其实是修改源文件的权限

[auto4s@Mallux test]$ chmod 444 f3
[auto4s@Mallux test]$ ll
total 8
-r--r--r--. 2 auto4s auto4s 17 Jan 22 11:44 f1
-r--r--r--. 2 auto4s auto4s 17 Jan 22 11:44 f2
lrwxrwxrwx. 1 auto4s auto4s  2 Jan 22 11:42 f3 -> f1

// 删除源文件,对硬链接无影响,对软连接有影响

[auto4s@Mallux test]$ rm -f f1
[auto4s@Mallux test]$ cat f2
I am a test file
[auto4s@Mallux test]$ cat f3
cat: f3: No such file or directory

3.总结
依此您可以做一些相关的测试,可以得到以下全部结论:
1).删除符号连接f3,对f1,f2无影响;
2).删除硬连接f2,对f1,f3也无影响;
3).删除原文件f1,对硬连接f2没有影响,导致符号连接f3失效;
4).同时删除原文件f1,硬连接f2,整个文件会真正的被删除。


二、区别

1.原理上:

硬链接(hard link):A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即一个inode节点对应两 个不同的文件名,两个文件名指向同一个文件,A和B对文件系统来说是完全平等的。如果删除了其中一个,对另外一个没有影响。每增加一个文件名,inode 节点上的链接数增加一,每删除一个对应的文件名,inode节点上的链接数减一,直到为0,inode节点和对应的数据块被回收。注:文件和文件名是不同 的东西,rm A删除的只是A这个文件名,而A对应的数据块(文件)只有在inode节点链接数减少为0的时候才会被系统回收。

软链接(soft link):A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的 inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除 了,A仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

2.使用限制上:

硬链接:

a.不能对目录创建硬链接,原因有几种,最重要的是:文件系统不能存在链接环(目录创建时的".."除外,这个系统可以识别出来),存在环 的后果会导致例如文件遍历等操作的混乱(du,pwd等命令的运作原理就是基于文件硬链接,顺便一提,ls -l结果的第二列也是文件的硬链接数,即inode节点的链接数)

b:不能对不同的文件系统创建硬链接,即两个文件名要在相同的文件系统下。

c:不能对不存在的文件创建硬链接,由原理即可知原因。

软链接:

a.可以对目录创建软链接,遍历操作会忽略目录的软链接。

b:可以跨文件系统

c:可以对不存在的文件创建软链接,因为放的只是一个字符串,至于这个字符串是不是对于一个实际的文件,就是另外一回事了

3.命令

硬:ln 源文件 链接名

软:ln -s 源文件 链接名