1. 链接概念:

Linux 系统中,链接可以分为两种:ㄧ种为硬链接(Hard link),另一种为软链接或符号链接(symbolic Link or soft link)

我们前面讲过ln这个命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建的链接是硬链接

如果使用ln -s 创建链接则为软链接,前面文件类型为l(字母L)的是软链接

实践直观命令演示理解:

硬链接: ln 源文件 目标文件---->透过索引节点(inode)来进行链接

软链接: ln -s 源文件 目标文件 (目标文件不能事先存在)


1.1硬链接:

1)透过索引节点(inode)来进行链接

2)硬链接文件就将当于文件的另外一个入口

3)允许ㄧ个文件拥有多个有效的路径名(多个入口)

4)可以避免档案被误删而不见


演示:

[root@oldboy oldboy]# pwd
/oldboy
[root@oldboy oldboy]# echo 1 > a
[root@oldboy oldboy]# ls -l a
-rw-r--r--. 1 root root 2 Jul 17 22:40 a
[root@oldboy oldboy]# cat a
1
[root@oldboy oldboy]# ln a b
[root@oldboy oldboy]# ls -hil a b ----->注意 两个文件的inode号相同
390210 -rw-r--r--. 2 root root 2 Jul 17 22:40 a   
390210 -rw-r--r--. 2 root root 2 Jul 17 22:40 b
[root@oldboy oldboy]# rm -rf a
[root@oldboy oldboy]# ls -lhi a b 
ls: cannot access a: No such file or directory
390210 -rw-r--r--. 1 root root 2 Jul 17 22:40 b
[root@oldboy oldboy]# cat b
1



因为文件系统(ext2)的原理是,只要文件的索引节点号(inode index)还有一个以上的硬链接,只删除其中一个

硬链接(即仅仅删除了该文件的链接指向)并不影响索引节点本身和其他的链接(即数据文件实体并未被删除),只

有当文件的最后一个链接被删除后,此时如果有新数据要存储在硬盘上时或者系统通过类似fsck做硬盘检查时。

被删除文件的数据以及目录的链接才会被释放,空间被新数据占用并覆盖。此时,数据就再也无法找回了。也就是说,

Linux系统中,删除静态文件(没有进程调用) (目录也是文件)的条件是与之相关的所有硬链接文件均被删除。(暂时这样理解即可,后文会讲和进程的占用也有关)



硬链接的创建:

直接执行命令"ln 源文件 硬链接文件" ,即可完成创建硬链接,具体实例后文演示。


硬链接知识小结:

1) 具有相同inode节点号的多个文件互为硬链接文件

2) 删除硬链接文件或者删除源文件任意之ㄧ,文件实体并没有被删除

3) 只有删除了源文件以及所有对应的硬链接文件,文件实体才会被删除

4) 当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者时磁盘fsck检查的时候,删除的数据也会被系统回收

5) 硬链接文件就是文件的另一个入口(相当于超市的前门跟后门ㄧ样)

6) 可以透过给文件设置硬链接文件,来防止重要文件被误删

7) 透过执行命令 "ln 源文件 硬链接文件",即可完成创建应链接

8) 硬链接文件是普通文件,因此可以用rm 命令删除

9) 对于静态文件 (没有进程正在调用的文件)来讲,当对应硬链接数为0 (i_link),文件就被删除。i_link的查看方法就是(ls -l 结果的第三列就是)



1.2软链接

软链接(Soft Link)也称为符号链接(Symbolic Link)linux 里的软链接文件就类似于windows系统中的快捷方式。linux里的软链接文件实际上是一个特殊的文件,

文件类型是l。软链接文件实际上可以理解为ㄧ个文本文件,这个文本文件中包含有软链接指向另ㄧ源文件的位置信息内容,因此,通过访问这个"快捷文件"就可以迅速定位到

软链接指向的源文件实体。


演示:

[root@oldboy oldboy]# touch file
[root@oldboy oldboy]# ln -s file soft_file
[root@oldboy oldboy]# ls -lhi file soft_file    ---->两者的inode号不同
390210 -rw-r--r--. 1 root root 0 Jul 17 23:33 file
390227 lrwxrwxrwx. 1 root root 4 Jul 17 23:34 soft_file -> file



软链接的创建:

执行命令"ln -s 源文件 软链接文件",即可完成创建软链接,具体实例后文演示

误区创建软链接源文件是需要存在的,要创建的软链接文件是不能存在的,是要用ln命令创建的。


软链接知识小结:

1) 软链接类似windows的快捷方式(可以透过readlink查看其指向)

2) 软链接类似ㄧ个文本文件,里面存放的是源文件的路径,指向源文件实体。

3) 删除源文件,软链接文件依然存在,但是无法访问指向的源文件路径内容了。

4) 失效的时候ㄧ般是白字红底闪烁提示。oldboy_soft_link_file --> oldboy_file

5) 执行命令"ln -s 源文件 软链接文件",即可完成创建软链接(目标不能存在)

6) 软链接和源文件是不同类型的文件,也是不同的文件。inode号也不同。

7) 软链接的文件类型为(l),可以用rm 命令。



综合演示:

[root@oldboy oldboy]# mkdir /test/oldboy -p
[root@oldboy oldboy]# cd /test/oldboy/
[root@oldboy oldboy]# touch oldboyfile
[root@oldboy oldboy]# ln oldboyfile oldboy_hard_link
[root@oldboy oldboy]# ln -s oldboyfile oldboyfile_soft_link
[root@oldboy oldboy]# ls -lhi     ---->此处要注意inode号的不同与相同
total 0
402520 -rw-r--r--. 2 root root  0 Jul 18 22:25 oldboyfile
402521 lrwxrwxrwx. 1 root root 10 Jul 18 22:26 oldboyfile_soft_link -> oldboyfile
402520 -rw-r--r--. 2 root root  0 Jul 18 22:25 oldboy_hard_link




1.3. 有关文件的链接小结:

透过以上的测试,我们可以得到以下几个结论:

1)删除软链接 oldboyfile_soft_link ,oldboyfile, oldboy_hard_link无影响。

全局讨论:删除软链接文件对源文件及硬链接文件没有任何影响。

2)删除硬链接 oldboy_hard_link, oldboyfile, oldboyfile_soft_link都没有影响。

全局讨论: 删除硬链接文件对源文件及软链接文件没有任何影响。

3)删除原文件 oldboyfile ,oldboy_hard_link没有影响,但是会导致 oldboyfile_soft_link失效

全局讨论: 删除源文件,对硬链接文件没有影响,但是会导致软链接失效,白字红底闪烁。

4)同时删除源文件oldboyfile及硬链接oldboy_hard_link,才会导致文件真的被删除。

5)很多硬件设备中的快照功能,就是利用了硬链接的原理。

6)源文件和硬链接文件具有相同的inode号,可以视为同一个文件或ㄧ个文件的多个入口

7)源文件和软链接文件inode号不同,是不同的文件,软链接文件相当于源文件的快捷方式,含有源文件的位置指向。



1.4有关目录的链接小结:

1)对于目录,不可以创建硬链接,但可以创件软链接

2)对于目录的软链接是生产场景运维中常用的技巧(例子:第二关课前apache企业题)

3)目录的硬链接不能跨越文件系统(从硬链接原理可以理解)

4)每个目录下面都有一个硬链接"."号,和对应上级目录的硬链接".."

5)在父目录里创件ㄧ个子目录,父目录的链接数增加1(子目录里都有..指向父目录)

 但是在父目录里创建文件,父目录的链接数不会增加



实例演示:

[root@oldboy oldboy]# mkdir oldboydir
[root@oldboy oldboy]# ln oldboydir oldboydir_hard_link
ln: `oldboydir': hard link not allowed for directory     ---->不能创建硬链接
[root@oldboy oldboy]# ln -s oldboydir oldboydir_soft_link
[root@oldboy oldboy]# ls -lhi
total 4.0K
402522 drwxr-xr-x. 2 root root 4.0K Jul 18 23:05 oldboydir
402520 lrwxrwxrwx. 1 root root    9 Jul 18 23:06 oldboydir_soft_link -> oldboydir
[root@oldboy oldboy]# ls -a oldboydir oldboydir/. -ldi          ---->注意inode号是相同的 
402522 drwxr-xr-x. 2 root root 4096 Jul 18 23:05 oldboydir
402522 drwxr-xr-x. 2 root root 4096 Jul 18 23:05 oldboydir/.
[root@oldboy oldboy]# ls -a oldboydir/.. ../oldboy/ -ldi ---->注意inode号是相同的
402519 drwxr-xr-x. 3 root root 4096 Jul 18 23:06 ../oldboy/    (本身ㄧ个,下面的点ㄧ个,下面里的目录里面的..也是一个)
402519 drwxr-xr-x. 3 root root 4096 Jul 18 23:06 oldboydir/..


1.5企业面试题:

企业面试题10:描述linux下软链接和硬链接的区别

1) 默认不带参数情况下,ln命令创建的是硬链接,带-s 参数的ln命令创建的是软链接

2) 软链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同

3) ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到

4) 删除软链接文件,对源文件及硬链接文件无任何影响

5) 删除文件的硬链接,对源文件及软链接文件无任何影响

6) 删除链接文件的源文件,对硬链接文件无影响,但会导致软链接文件失效

7) 同时删除源文件及其硬链接文件,整个文件才会被彻底删除

8) 很多硬件设备中的快照功能,使用的就类似硬链接的原理

9) 软链接文件可以跨文件系统,硬链接文件不可以跨文件系统

上述企业面试题的必胜思路1

1.介绍软硬链接的概念

2.如何创建软硬链接

3.对于文件的软硬链接区别

4.对于目录的软硬链接区别

上述企业面试题的必胜思路2:画图


企业案例:

Web服务器磁盘满故障深入解析

C.P http://oldboy.blog.51cto.com/2561410/612351

实际操作请看企业案例(1)