shell编程之软硬链接ln

 |   

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

定义

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

命令格式

1# 硬链接(source只能是文件)
2ln source target
3# 软链接(source可以是文件也可以是目录)
4ln -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源码
技术茶话会
< 前一篇 后一篇 >