详解 Linux 中的硬链接和软链接

LychieFan 2020-05-18

首先要区分 “文件” 和 “文件的数据块”,文件由数据块和元数据两部分构成,在 Linux 中以文件数据块相应的索引号 ( inode ) 来区分文件的数据块,而索引号存储在于文件的元数据中。

可以使用 stat <文件名> 命令查看包括 inode 在内的元数据。

无论硬链接还是软链接,它们都是特殊的文件。

硬链接

硬链接和复制比较相像,但与复制不同的是,因为文件和其硬链接具有相同的 inode,修改文件实际上是修改 inode 指向的数据块,因此修改硬链接文件时,原文件也会被修改,反之亦然。

这里说 “文件和其硬链接” 其实是不准确的,因为二者当属 “同一级别”,并不会因为删除了原文件而同时删除其硬链接,因为此时还有一个 inode 指向它们的数据块。

而复制的文件具有独立的新的 inode 和数据块,与原文件毫无关系。

$ ln File HardLinkFile
# 这样就对 File 创建了一个硬链接

注意事项:

  • 不能对文件夹建立硬链接。

软链接(符号链接)

软链接类似于 Windows 操作系统中文件的快捷方式,软链接和硬链接的不同之处在于,软链接文件拥有自己独立的 inode 和数据块,但数据块中的内容很特殊,是原文件的指向。

$ ln -s File SoftLinkFile
# 这样就对 File 创建了一个软链接

注意事项:

  • 可以对文件夹建立软链接。
  • 若删除了原文件,则软链接随即失效。

最后,可以参考 ln 命令的官方文档

相关推荐