shell编程之软硬链接ln

原创
02/19 23:58
阅读数 1.6W

在 Windows 里面我们经常通过快捷方式来创建链接以方便我们使用电脑。而 Linux 中有两种方式创建链接,分别为软链接和硬链接。下面我们就来详细说下二者的区别。

定义

lnlink file 的简称)是 GNU 核心工具包中的基本工具。该命令是为某个文件在另外一个位置建立一个同步链接。当我们需要在不同的目录用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,此时只需用 ln 创建对应文件的链接,不必重复的占用磁盘空间。

命令格式

# 硬链接(source只能是文件)
ln source target
# 软链接(source可以是文件也可以是目录)
ln -s source target

软链接

软链接 symbolic link 跟 Windows 里面的快捷方式等价。它的内容是指向另一个文件的位置。所以可以创建某个目录的软链接,也可以对一个不存在的文件进行链接。除此之外,它可以跨文件系统。这三点硬链接都无法实现。

硬链接

硬链接 hard link 可以理解为文件的别名,而且别名可以有多个。

原理

对于 Linux 而言,文件的结构与 Windows 有点类似,由文件名,inode(类似于 Windows 下的 FCB 文件控制块,保存文件的一些信息)和数据组成。比如创建 origin 文件,会得到下面的信息。

origin

注意 Inode 和硬链接,下面创建 origin 的硬链接 hardlink。 hardlink

比对发现,创建硬链接的文件 hardlink 与原文件 origin 之间除了名称不同之外其他完全相同,就像同一个人它有个正式的名称也可能会有小名。它们的数据显然完全一样。

接下来,我们创建 origin 的软链接 softlink。 softlink

对比发现,origin 和 softlink 是完全不同的文件,有着不同的 size,不同的块,不同的 Inode,不同的 type。唯一的联系是 softlink 文件指向 origin 文件(有点文件指针的味道)。

用例

删除源文件对软硬链接的影响

rmorigin

由上图可以看出 hardlink 中硬链接的个数少了一个,而 softlink 还是安然无恙的存在着。接着我们通过两个链接来打开文件。 linkshow

由上图发现,hardlink 依旧能打开文件,而软链接却无法查看原文件。

参考文献

  1. GUN核心工具包
  2. 维基百科ln
  3. ln源码

如果该文章对您产生了帮助,或者您对技术文章感兴趣,可以关注微信公众号: 技术茶话会, 能够第一时间收到相关的技术文章,谢谢!

技术茶话会


本篇文章由一文多发平台ArtiPub自动发布
展开阅读全文
打赏
1
19 收藏
分享
加载中
之前删除软链的时候 打多了一个/ 结果悲剧了
02/21 11:48
回复
举报
删除软链 建议使用unlink命令
02/22 14:50
回复
举报
禹过留声博主
赞,的确unlink更适合做删除软链的操作
02/23 22:58
回复
举报
更多评论
打赏
3 评论
19 收藏
1
分享
返回顶部
顶部