您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux 软链接和硬链接

时间:2020-10-23 10:24:44  来源:  作者:
Linux 软链接和硬链接

 

linux 系统中,链接是一种文件共享的方式,它分为软链接和硬链接,对应的命令是ln

什么是软连接

软链接又叫符号链接, 它类似于 windows系统中的快捷方式,常用于将目录层次较深的文件链接到比较容易访问的目录中

创建软链接

使用 ln -s 源文件 软链接 命令就可以创建一个软链接,软链接可以对文件、目录、跨文件系统的文件或目录

  • 创建文件的软链接
[root@ecs-centos-7 tt]# stat a.txt | grep Links
Device: fd01h/64769d    Inode: 131096      Links: 1

[root@ecs-centos-7 tt]# ln -s a.txt sa.txt
[root@ecs-centos-7 tt]# ls -il
total 4
131096 -rw-r--r-- 1 root root 15 Aug 25 20:19 a.txt
131100 lrwxrwxrwx 1 root root  5 Aug 25 20:22 sa.txt -> a.txt

[root@ecs-centos-7 tt]# stat a.txt | grep Links
Device: fd01h/64769d    Inode: 131096      Links: 1

上面的例子中,创建了 a.txt 的软链接 sa.txt ,创建成功之后,软链接文件名后面会有一个 -> 符号指向原始文件

创建软链接前后的 stat a.txt | grep Links 命令是查看原始文件 a.txt 的链接数量,从例子中可以看出,创建软链接之后,文件链接数保持不变

  • 创建目录的软链接
[root@ecs-centos-7 tt]# mkdir tmp
[root@ecs-centos-7 tt]# ln -s tmp/ stmp
[root@ecs-centos-7 tt]# ll
total 4
lrwxrwxrwx 1 root root    4 Aug 26 00:38 stmp -> tmp/
drwxr-xr-x 2 root root 4096 Aug 26 00:38 tmp
[root@ecs-centos-7 tt]# echo "1234" > stmp/a.txt
[root@ecs-centos-7 tt]# cat tmp/a.txt 
1234
  • 创建跨文件系统的软连接

首先查看所有的文件系统,结果如下:

[root@ecs-centos-7 tt]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           919M     0  919M   0% /dev/shm
tmpfs           919M  8.7M  911M   1% /run
tmpfs           919M     0  919M   0% /sys/fs/cgroup
/dev/vda1        40G   20G   18G  53% /
tmpfs           184M     0  184M   0% /run/user/0

从上面的例子可以看到,目前有 devtmpfs, tmpfs, /dev/vda1 三种文件系统,我们选取 tmpfs 和 /dev/vda1来测试跨文件系统的软链接,具体测试如下:

[root@ecs-centos-7 tt]# touch /run/test.txt
[root@ecs-centos-7 tt]# cat /run/test.txt 
[root@ecs-centos-7 tt]# ln -s /run/test.txt /st.txt
[root@ecs-centos-7 tt]# echo "haha" > /st.txt 
[root@ecs-centos-7 tt]# cat /run/test.txt 
haha

上面的测试中,首先在tmpfs 文件系统的/run目录中创建 test.txt 文件,此时文件是没有内容的

然后,在/dev/vda1文件系统的/ 目录创建 /run/test.txt 的软链接 st.txt, 同时往 st.txt 中写入字符串 haha

最后,查看原始文件 /run/test.txt, 内容和软链接文件是相同的

修改、删除软链接

软链接也是文件的一种,只要有权限,自然是可以修改的

  • 修改软链接

软链接是原始文件的快捷方式,所以修改软链接文件实际上修改的是原始文件,具体的请看以下实例

[root@ecs-centos-7 tt]# cat sa.txt 
this is a file
[root@ecs-centos-7 tt]# cat a.txt 
this is a file
[root@ecs-centos-7 tt]# echo "111" >> sa.txt 
[root@ecs-centos-7 tt]# cat sa.txt 
this is a file
111
[root@ecs-centos-7 tt]# cat a.txt 
this is a file
111

例子中,对软链接 sa.txt 进行了修改,原始文件 a.txt 的内容也跟着同步改变了

  • 删除原始文件
Linux 软链接和硬链接

 

软链接文件是原始文件的快捷方式,上面的例子中可以看到,删除原始文件之后,软链接文件后面的箭头指向的原始文件 a.txt 在不停机的闪动,表示链接指向的原始文件已经失效了

通过cat sa.txt 命令查看链接内容时会提示文件不存在

什么是硬链接

硬链接可以看成文件的别名, 它和原始文件拥有相同的索引节点(关于索引节点的知识请查看 理解Linux中inodes)

删除任何一处的文件,都不影响另一处文件的正常访问,只有删除最后一个文件之后,文件内容的数据块才会被删除

熟悉 c/c++ 指针的朋友可以把硬链接看成指向同一块内存的多个指针变量,文件内容存储在指针变量指向的内存块中

指针变量超出其作用域时会被系统回收,此时不会回收它所指向的内存的,当所有的指针变量都被回收时,才会回收它们所指向的内存(这里假设应用程序能正确的处理堆内存的回收)

创建、修改、删除硬链接

  • 创建硬链接

创建硬链接命令: ln 源文件 硬链接

[root@ecs-centos-7 tt]# stat b.txt | grep Links
Device: fd01h/64769d    Inode: 131096      Links: 1

root@ecs-centos-7 tt]# ln b.txt hb.txt
[root@ecs-centos-7 tt]# ls -li
total 8
131096 -rw-r--r-- 2 root root 17 Aug 25 23:40 b.txt
131096 -rw-r--r-- 2 root root 17 Aug 25 23:40 hb.txt

[root@ecs-centos-7 tt]# stat b.txt | grep Links
Device: fd01h/64769d    Inode: 131096      Links: 2

上面的例子中,创建了 b.txt 的硬链接 hb.txt

创硬链接前后的 stat b.txt | grep Links 命令是查看 b.txt 的链接数量,从例子中可以看出,创建硬链接后文件链接数增加了

  • 修改硬链接,删除原始文件
Linux 软链接和硬链接

 

从以上例子中可以看出,修改硬链接文件内容,原始文件也会同步修改,而删除原始文件时,硬链接文件内容没有任何变化

硬链接注意事项

  • 无法跨文件系统创建硬链接
[root@ecs-centos-7 /]# ln /run/test.txt /htest.txt
ln: failed to create hard link ‘/htest.txt’ => ‘/run/test.txt’: Invalid cross-device link
  • 不允许创建目录的硬链接
[root@ecs-centos-7 tt]# ln tmp/ htmp
ln: ‘tmp/’: hard link not allowed for directory

总结

以上分别介绍了软链接和硬链接,下面以图表的形式总结下两者的异同

链接索引节点号权限大小创建目录链接跨文件系统原始文件的链接计数软链接新的索引节点有自己的文件属性和权限和原始文件不同能能不会增加硬链接和原始文件相同和原始文件相同和原始文件相同不能不能会增加

推荐阅读

理解Linux中inodes



Tags:Linux 软链接   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
软连接是linux中一个常用命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。具体用法是:ln -s 源文件 目标文件 当我们需要在不同的目录,用到相同的文件时,我们不...【详细内容】
2020-11-12  Tags: Linux 软链接  点击:(151)  评论:(0)  加入收藏
在Linux 系统中,链接是一种文件共享的方式,它分为软链接和硬链接,对应的命令是ln什么是软连接软链接又叫符号链接, 它类似于 windows系统中的快捷方式,常用于将目录层次较深的...【详细内容】
2020-10-23  Tags: Linux 软链接  点击:(143)  评论:(0)  加入收藏
链接(Link)是一种快捷访问机制,它通过一个文件指向原始文件或目录的方式实现快捷访问,同时还记录了原始文件或目录的一些信息。 来源:https://linux.cn/article-12270-1.html 作...【详细内容】
2020-06-02  Tags: Linux 软链接  点击:(58)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条