Linux课程笔记 软硬链接
1. 软硬链接的介绍和实践
1.1链接的概念
在linux系统中,链接分为硬链接和软链接。在默认不带参数的情况下,执行ln命令创建的是硬链接。
链接是指通过索引节点来进行链接。在linux系统中,多个文件名指向同一个索引节点是正常且允许的,这种是硬链接。硬链接的作用之一是允许一个文件有多个有效路径防止误删除源数据。
文件系统中,只要文件的索引节点还有一个以上的链接,只删除其中一个链接并不影响索引节点和其他的链接(即数据实体并未删除)。只有当最后一个链接被删除,此时如果有新数据要存储到硬盘时,被删除的文件的数据块及目录的链接才会被释放。
软链接实际上是一个文本文件,这个文件包含有软链接指向灵异文件的位置信息内容。
1.2示例
1.2.1文件示例:
[root@test2 test]# mkdir -p /test/qinbf [root@test2 test]# cd /test/qinbf/ [root@test2 qinbf]# touch qinbf [root@test2 qinbf]# ll 总计 4 -rw-r--r-- 1 root root 0 05-27 12:21 qinbf #------à此时还没有创建链接,链接数为1 [root@test2 qinbf]# ln qinbf qinbf_hard_link #----------à不加参数,默认创建硬链接 [root@test2 qinbf]# ll 总计 8 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf #-----------à此时由于硬链接的存在,链接数为2 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link [root@test2 qinbf]# ln -s qinbf qinbf_soft_link [root@test2 qinbf]# ll 总计 12 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf -rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf [root@test2 qinbf]# ll -rti 总计 24 1409027 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link 1409027 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf #---à对边,发现qinbf文件和其硬链接文件的inode号是一致的 1409028 lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf #------à而qinbf文件的软链接文件qinbf_soft_link的inode号则与qinbf文件inode号不一致 1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir 1409030 lrwxrwxrwx 1 root root 8 05-27 12:23 qinbfdir_soft_link -> qinbfdir |
1.2.2目录示例:
[root@test2 qinbf]# mkdir qinbfdir [root@test2 qinbf]# ll 总计 20 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir -rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf [root@test2 qinbf]# ln qinbfdir qinbfdir_hard_link ln: “qinbfdir”: 不允许将硬链接指向目录 #--------à目录不允许创建硬链接 [root@test2 qinbf]# ln -s qinbfdir qinbfdir_soft_link #----------à目录可以创建软链接 [root@test2 qinbf]# ll -rti 总计 24 1409027 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf_hard_link 1409027 -rw-r--r-- 2 root root 0 05-27 12:21 qinbf 1409028 lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf 1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir 1409030 lrwxrwxrwx 1 root root 8 05-27 12:23 qinbfdir_soft_link -> qinbfdir |
1.2.3内容输入示例:
[root@test2 qinbf]# echo "qinbf is a student" >>qinbf_soft_link [root@test2 qinbf]# cat qinbf_soft_link qinbf is a student [root@test2 qinbf]# cat qinbf_hard_link qinbf is a student [root@test2 qinbf]# cat qinbf qinbf is a student [root@test2 qinbf]# echo "yes,I do">>qinbf [root@test2 qinbf]# cat qinbf qinbf is a student yes,I do [root@test2 qinbf]# cat qinbf_hard_link qinbf is a student yes,I do [root@test2 qinbf]# cat qinbf_soft_link qinbf is a student yes,I do |
结论:无论是在软链接文件或者是硬链接文件还是源文件输入内容,这三种类型的文件内容都是同步的。
1.2.4删除示例:
[root@test2 qinbf]# rm -f qinbf #-----------à删除源文件 [root@test2 qinbf]# ll -rti 总计 24 1409028 lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf[q1] 1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir 1409030 lrwxrwxrwx 1 root root 8 05-27 12:23 qinbfdir_soft_link -> qinbfdir 1409027 -rw-r--r-- 1 root root 28 05-27 12:29 qinbf_hard_link [root@test2 qinbf]# cat qinbf_soft_link #------à此时,软链接文件失效 cat: qinbf_soft_link: 没有那个文件或目录 [root@test2 qinbf]# cat qinbf_hard_link #------à硬链接文件内容还在 qinbf is a student yes,I do =============================以下是自己测试补充=========================== [root@test2 qinbf]# touch qinbf #----------à之前已经删除,重新创建的同名新文件 [root@test2 qinbf]# ll -rti 总计 28 1409028 lrwxrwxrwx 1 root root 5 05-27 12:22 qinbf_soft_link -> qinbf[q2] 1409029 drwxr-xr-x 2 root root 4096 05-27 12:22 qinbfdir 1409030 lrwxrwxrwx 1 root root 8 05-27 12:23 qinbfdir_soft_link -> qinbfdir 1409027 -rw-r--r-- 1 root root 28 05-27 12:29 qinbf_hard_link 1409031[q3] -rw-r--r-- 1 root root 0 05-27 12:33 qinbf [root@test2 qinbf]# cat qinbf_soft_link #------àqinbf_soft_link文件和新文件qinbf内容一致,为空 [root@test2 qinbf]# echo "This is new file">>qinbf #-----à新增文件的内容 [root@test2 qinbf]# cat qinbf_soft_link #-------àqinbf_soft_link文件和新文件qinbf内容一致 This is new file [root@test2 qinbf]# cat qinbf_hard_link #------à此时qinbf_hard_link文件还是被删除的qinbf文件的内容 qinbf is a student yes,I do |
1.3链接总结
通过以上测试,我们可以得到以下几个结论:
(1) 删除软链接文件,对源文件和硬链接文件没有影响
(2) 删除硬链接文件,对源文件和软链接没有影响
(3) 删除源文件,对硬链接文件无影响,软链接失效
(4) 同时删除源文件,和硬链接文件,整个文件会真正的被删除
(5) 很多硬件设备的快照功能,就是利用了硬链接的原理
(6) 建立与被删除的源文件同名的新文件,软链接文件还是有效,而硬链接无效(inode号不一致),亲测。
对于目录,不可以创建硬链接,但可以创建软链接;目录不能跨越文件系统。
1.4空间不能释放的原因
(1) 硬链接的存在
(2) 另一个进程还在使用这个文件
(3) 磁盘剩余空间维护出现了问题