前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux硬连接和软连接详解

Linux硬连接和软连接详解

作者头像
我是李超人
发布2020-08-20 17:06:40
8.6K0
发布2020-08-20 17:06:40
举报

Lnux也有类似于windows下的快捷方式,这种快捷方式在linux下称作硬连接(hard link)或软连接(symbolic link,又称作符号链接)。

创建链接文件 创建linkfile.txt文件

代码语言:javascript
复制
[root@localhost tmp]# touch linkfile.txt
[root@localhost tmp]# echo 'testlink' > linkfile.txt 

创建硬连接

代码语言:javascript
复制
[root@localhost tmp]# ln linkfile.txt hardlink

创建软连接

代码语言:javascript
复制
[root@localhost tmp]# ln -s linkfile.txt softlink

读取文件内容,可以看出三个文件的内容都是一样的

代码语言:javascript
复制
[root@localhost tmp]# cat hardlink 
testlink
[root@localhost tmp]# cat softlink 
testlink
[root@localhost tmp]# cat linkfile.txt 
testlink

通过链接文件修改文件内容

代码语言:javascript
复制
[root@localhost tmp]# echo 'testlink2' >> hardlink 
[root@localhost tmp]# cat linkfile.txt 
testlink
testlink2
[root@localhost tmp]# echo 'testlink3' >> softlink 
[root@localhost tmp]# cat linkfile.txt 
testlink
testlink2
testlink3

可以看出,通过修改链接文件内容,源文件的内容也发生了改变。这就是链接文件的作用,链接文件基本上代表了源文件,通过链接文件可以查看修改源文件内容,也可以通过链接文件修改源文件属性等等。

硬连接和软连接有什么不同? 实际上软连接更接近windows的快捷方式,可以看下面的操作。

这里写图片描述
这里写图片描述

我将源文件给删除了,通过硬连接依然可以读取文件内容,软连接则显示文件不存在(源文件被删除,软连接文件的颜色都发生了改变)。这就奇怪了,源文件都删除了,为啥还可以读取文件内容?这涉及到linux的文件系统原理,linux中一个文件是由inode和block来存储的,block中存放文件内容,inode存放文件属性和block的位置。当用户读取文件内容的时候,系统会先找到该文件对应的inode,从inode中获取该用户是否有权限读取文件内容,如果有权限,则通过inode中存放的block位置找到相应的block,获取文件的内容。我这里只是简单的介绍linux的文件系统,详细内容推荐去看下linux相关书籍。

我们再重复最开始的操作,创建源文件,创建链接文件。

代码语言:javascript
复制
[root@localhost tmp]# rm -rf testlink.txt 
[root@localhost tmp]# rm -rf hardlink 
[root@localhost tmp]# rm -rf softlink 
[root@localhost tmp]# touch testlink.txt
[root@localhost tmp]# ln testlink.txt hardlink
[root@localhost tmp]# ln -s testlink.txt softlink
[root@localhost tmp]# ll -i testlink.txt hardlink softlink 
50801629 -rw-r--r-- 2 root root  0 Nov 16 15:54 hardlink
50801663 lrwxrwxrwx 1 root root 12 Nov 16 15:54 softlink -> testlink.txt
50801629 -rw-r--r-- 2 root root  0 Nov 16 15:54 testlink.txt

其中ll -i 指令可以查看文件的inode(第一列为inode编号)。可以看到hardlink和testlink.txt对应的是同一个inode,而softlink则占用了另外一个inode。软连接是指向源文件的,所以当删除源文件后,由于无法找到源文件的inode,自然就无法读取源文件的内容。但是对于硬连接来说,硬连接和源文件共享同一个inode,删除了源文件,inode和对应的block并没有被删除,所以依然可以通过硬连接来读取源文件的内容。

这样看来,硬连接貌似更安全。删除了源文件,依然可以通过硬连接来查看源文件的内容。但是由于硬连接的限制比较多,比如不能给文件夹创建硬连接。所以实际上,软连接用得更多一些。

给文件夹创建软连接

代码语言:javascript
复制
[root@localhost tmp]# mkdir dirlinktest
[root@localhost tmp]# ln dirlinktest/ dirhardlink
ln: ‘dirlinktest/’: hard link not allowed for directory --不允许给文件夹创建硬连接
[root@localhost tmp]# ln -s dirlinktest/ dirsoftlink
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档