【Linux】Linux文件系统——探讨软链接(symboliclink)
- 游戏开发
- 2025-08-21 23:45:01

ℹ️大家好,我是练小杰,周五又到了,明天应该就是牛马的休息日了吧!!😆
前天我们详细介绍了 硬链接的特点,现在继续探讨 软链接的特点,并且后续将添加更多相关知识噢,谢谢各位的支持🙏
前情回顾: 【看懂Linux文件的硬链接】 Linux专栏:🔝 【Linux零基础开始】【Shell 脚本编程】 【Linux文件系统 】
主页:👉【练小杰的CSDN】 Linux文件的软链接 主页:👉【[练小杰的CSDN]( blog.csdn.net/weixin_55767624?spm=1011.2415.3001.5343)】 什么是软链接特点缺点实际应用场景 软链接的创建、查看和删除创建软链接查看软链接删除软链接 理解软链接创建软链接并查看权限查看两个文件的inode查看两个文件的详细信息查看并执行软链接 软链接与硬链接的区别mv命令移开文件并查看查看并执行硬链接 testln.sh区别总结 实操练习创建硬链接创建软链接⚠️注意 什么是软链接软链接:又叫符号链接,是系统新建一个链接文件,它实际上是一个特殊的文件。在符号链接中,链接文件实际上是一个文本文件,其中包含所链接的那个文件的位置信息,软链接可以跨系统。软链接文件类似于Windows的快捷方式,快捷方式删了就删了,原来文件还是存在的。
特点类似Windows快捷方式;
软链接拥有自己的索引节点和Block块,但是数据块中只保存原有文件的文件名和索引节点号,并没有实际的文件数据;
lrwxrwxrwx 软链接 ,软链接文件权限都为 rwxrwxrwx
修改任意文件,另一个都改变;
删除原文件,软链接不能使用。
软链接本身只占用很少的磁盘空间,因为它只是一个指向目标文件或目录的指针。
缺点依赖性: 软链接依赖于目标文件或目录的存在。如果目标被删除或移动,软链接将成为悬挂链接,导致访问失败。
性能开销: 访问软链接时需要进行额外的解析步骤,可能会带来轻微的性能开销,尤其是在深层嵌套的目录结构中。
安全性风险:软链接可能被用于恶意目的,例如创建循环链接或指向敏感文件,从而引发安全问题。
权限问题: 软链接的权限设置不当,可能会导致未经授权的访问。比如,一个软链接可能指向一个受保护的文件,如果软链接的权限设置不正确,可能会被非授权用户访问。
可读性: 在文件系统中,软链接可能会增加复杂性,使得文件结构不易理解,尤其是当有多个软链接指向同一个目标时。
实际应用场景 版本管理:在软件开发中,可以使用软链接来指向不同版本的库或可执行文件,方便版本切换和管理。
快捷访问:创建软链接作为快捷方式,方便快速访问常用文件或目录。例如,可以在用户主目录下创建一个软链接指向一个常用的配置文件。
共享数据:在多用户环境中,可以使用软链接来共享数据文件或目录,而不需要复制数据,节省磁盘空间。
系统配置:在系统配置中,可以使用软链接来指向不同的配置文件或脚本,方便系统管理和维护。
备份和恢复:在备份和恢复过程中,可以使用软链接来指向备份目录或文件,方便数据恢复和管理。
模块化设计:在模块化设计中,可以使用软链接来动态加载或卸载模块,例如在Linux内核模块管理中,软链接被广泛使用。
软链接的创建、查看和删除 创建软链接 使用命令 ln -s 可以创建软链接文件 ln [选项] [源文件] [目标文件] #选项 -s 用于创建软链接 例如,创建指向 /path/to/target 的软链接 /path/to/link ln -s /path/to/target /path/to/link 查看软链接 输出结果中会显示软链接的类型和指向的目标 ls -l /path/to/link 删除软链接 执行命令后只会删除软链接本身,而不会影响目标文件或目录 rm /path/to/link 理解软链接为了更好的理解软链接的概念,我们进行以下实验操作:
博客【看懂Linux文件的硬链接】中,我们已经创建了文件/inodetest/test.sh和子目录/inodetest/inodedir,接下来我们在这个子目录下创建文件test.sh的软链接testsln,然后分别查看两个文件的inode 创建软链接并查看权限 [root@localhost inodedir]# ln -s ../teat.sh testsln [root@localhost inodedir]# ls -l lrwxrwxrwx. 1 root root 10 Jul 11 03:16 testsln -> ../test.sh可以发现权限部分以”l”开 头,链接数为1。
查看两个文件的inode [root@localhost inodedir]# ls -i ../test.sh 52621635 ../test.sh [root@localhost inodedir]# ls -i testsln 16791568 testsln⚠️这时,我们可以看到,两者的inode号是不同的!!!
查看两个文件的详细信息 源文件 test.sh [root@localhost inodedir]# stat ../test.sh File: '../test.s' Size: 38 Blocks: 8 IO Block: 4096 regular file Device: 803h/2051d Inode: 52621635 Links: 2 Access: (0744/-rwxr--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:default_t:s0 Access: 2020-07-11 00:28:44.386701866 -0700 Modify: 2020-07-11 00:26:37.532584298 -0700 Change: 2020-07-11 00:28:24.648216773 -0700 Birth: -这里的 Links还是2,尽管创建了一个软链接,但没有改变Links的值
软链接 testsln [root@localhost inodedir]# stat testsln File: 'testsln' -> '../test.sh' Size: 10 Blocks: 0 IO Block: 4096 symbolic link Device: 803h/2051d Inode: 16791568 Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:default_t:s0 Access: 2020-07-11 03:17:34.296526567 -0700 Modify: 2020-07-11 03:16:43.018567745 -0700 Change: 2020-07-11 03:16:43.018567745 -0700 Birth: - 查看并执行软链接 [root@localhost inodedir]# cat testsln #!/bin/sh echo "This is a hard link!" [root@localhost inodedir]# ./testsln This is a hard link!可知,用cat命令打开软链接文件testsln的内容与test.sh的内容一样!实际上读的是test.sh文件!并且,软链接testsln运行结果与test.sh一样!
软链接与硬链接的区别 我们进行以下操作理解它们的区别,首先将原始文件/inodetest/test.sh文件移开到 /inodetest/testbak.sh文件。然后比较硬链接文件/inodetest/subinodedir/testln.sh与软链接文件/inodetest/inodedir/testsln 的特点。 mv命令移开文件并查看 [root@localhost inodedir]# mv ../test.sh ../testbak.sh [root@localhost inodedir]# cat testln cat: testln: No such file or directory [root@localhost inodedir]# ./testln -bash: ./testln: No such file or directory这时,我们已经无法打开软链接文件testsln,并且也无法运行软链接文件testsln。
查看并执行硬链接 testln.sh [root@localhost inodedir]# cat ../subinodedir/testln.sh #!/bin/sh echo "This is a hard link!" [root@localhost inodedir]# ../subinodedir/testln.sh This is a hard link!可知,删除test.sh不影响打开硬链接文件testln.sh,而且,也不影响运行硬链接文件testln.sh。
区别总结 从以上命令可以看出,软链接文件testsln和文件test.sh的inode号虽然不一样,但是,文件testsln的内容其只是文件test.sh的路径。当读取文件testsln时,系统会自动将访问者指向文件test.sh。因此,无论打开哪一个文件,最终读取的都是文件test.sh。软链接文件testsln必须依赖于文件test.sh而存在,如果删除了源文件test.sh,打开文件testsln就会报错:“No such file or directory”。软链接与硬链接最大的不同:文件testsln指向文件test.sh的文件名,而不是文件test.sh的inode号码,文件test.sh的inode"链接数"不会因此发生变化。⚠️注意: 软链接和硬链接的重要区别是如果删除源文件,那么软链接不可用,但不影响硬链接的使用。
实操练习 创建硬链接 第一步:首先在“/”目录下创建两个目录user1和user2,然后在user1下创建一个文件test.txt [root@localhost /]# mkdir user1 [root@localhost /]# mkdir user2 [root@localhost /]# cd user1 [root@localhost user1]# vim test.txt第二步:在目录user2下创建文件test.txt的硬链接testln.txt
操作1:创建链接文件 [root@localhost user1]# ln test.txt /user2/testln.txt 操作2: 查看输出结果 [root@localhost user1]# ls -l /user2 -rw-r--r--. 2 root root 16 May 17 07:43 testln.txt第三步:查看源文件和链接的关系
[root@localhost user1]# cat test.txt This is a test! [root@localhost user1]# cat /user2/testln.txt This is a test!这里的 /user1/test.txt和/user2/testln.txt内容相同
[root@localhost user1]# vim test.txt [root@localhost user1]# cat test.txt This is a LXJ test! [root@localhost user1]# cat /user2/testln.txt This is a LXJ test!当 /user1/test.txt 改变内容,/user2/testln.txt跟着改变!
第四步:查询两个文件的 inode是否一致 [root@localhost user1]# ls -i test.txt /user2/testln.txt 2652713 test.txt 2652713 /user2/testln.txt结果显示两个文件的 inode完全一致!!!我们还可以再创建test.txt的多个硬链接文件,用上面的方式查看是否都一样?!这里大佬们去尝试一下,我不过多重复!!
第五步:删除test.txt文件,查看testln.txt [root@localhost user1]# rm -rf test.txt [root@localhost user1]# cat /user2/testln.txt This is a LXJ test!易看到,删除源文件 /user1/test.txt文件并不影响/user2/testln.txt文件的使用
创建软链接 第一步:在/user1下创建文件test.txt文件 [root@localhost user1]# vim test.txt [root@localhost user1]# cat test.txt This is a symbolic link test! 第二步:在目录user2下创建文件test.txt的软链接test.sym [root@localhost user2]# ln -s /user1/test.txt /user2/test.sym [root@localhost user2]# ls -l lrwxrwxrwx. 1 root root 15 May 17 08:57 test.sym -> /user1/test.txt [root@localhost user2]# cat test.sym This is a symbolic link test!显然,/user1/test.txt和/user2/test.sym显示的内容相同。
⚠️注意在创建软链接时,必须指明所链接的文件的完整路径,否则无法实现软链接,我们可以按下面操作进行测试。
第一步:不指定完整路径 [root@localhost user1]# ln -s test.txt /user2/test.sy [root@localhost user1]# ls -l /user2 lrwxrwxrwx. 1 root root 8 May 17 08:41 test.sy -> test.txt [root@localhost user1]# cat /user2/test.sy cat: /user2/test.sy: No such file or directory以上操作中没有指明test.txt的完整路径,导致无法链接!!!
第二步:查询/user1/test.txt和/user2/test.sym两个文件的 inode是否一致 [root@localhost user1]# ls -i test.txt /user2/test.sym 2655739 test.txt 17804334 /user2/test.sym/user1/test.txt和/user2/test.sym两个文件的 inode不一致
第三步:修改一个,测试另一个是否也发生变化。为了说明问题,我们修改/user2/test.sym文件做为测试(也可以修改/user1/test.txt文件进行测试) [root@localhost user1]# vim /user2/test.sym [root@localhost user1]# cat /user2/test.sym This is a NEW symbolic link test! [root@localhost user1]# cat test.txt This is a NEW symbolic link test!两个文件被同时修改!!!事实上,在软链接中,只保存所指向文件的名字而已,当编辑软链接这个软链接文件时,首先通过所指向的文件去找到指向的文件,然后通过指向文件的inode来找到实体存放的inode,所以,编辑软链接文件实际上就是修改真实存放在block中的内容。
第四步:测试删除原文件,软连接是否有效。 [root@localhost user1]# rm -rf test.txt [root@localhost user1]# cat /user2/test.sym cat: /user2/test.sym: No such file or directory这里删除了源文件,软连接无效!!!
今天的Linux系统的文件软链接内容到这里就结束了,感谢各位朋友的陪伴👋 ℹ️了解更多,主页【练小杰的CSDN】 ⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!! 下周同一时间再见,各位伙伴们🚴🏻~~
【Linux】Linux文件系统——探讨软链接(symboliclink)由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Linux】Linux文件系统——探讨软链接(symboliclink)”