◆

Linux 软链接与硬链接的区别及创建方法

2023-02-02 01:370

linux 文件系统前置知识

在 Linux 文件系统中,一个文件被分成两个部分:元数据(metadata)与用户数据(user data)。

  • 元数据:文件的附加属性,如索引节点(Inode)、文件大小、文件创建时间、文件所有者等。 元数据中并不包含文件名,文件名仅仅是为了方便用户使用。Linux 文件系统为每一个保存在磁盘分区中的文件(无论什么类型)都分配一个索引节点号(Inode Number), 索引节点号是文件在一个文件系统中的唯一标识,不同文件所对应的索引节点号是不相同的

  • 用户数据,即文件数据块(data block),文件数据块中以二进制的形式记录着文件的真实内容。

查看某个文件的索引节点

ls  -i hello.txt
什么是软链接和硬链接

硬链接(Hard link)

在 Linux 中允许多个文件名指向同一个索引节点号,硬链接指的就是通过索引节点号进行的链接。可以通过 ln 指令为文件创建硬链接:

创建示例

创建命令

ln [源文件或目录]  [目标文件或目录]

创建示例代码

ln hello.txt ./hello-hard-one
ln /Users/miofly/Documents/mio/new-mio/github/test/hard-link/source/hello.txt /Users/miofly/Documents/mio/new-mio/github/test/hard-link/source/hello-hard-two.txt
ln /Users/miofly/Documents/mio/new-mio/github/test/hard-link/source/hello.txt hello-hard-three.txt
什么是软链接和硬链接

如上图所示,我们创建了三个文件,它们的索引节点都和源文件 hello.txt 相同,相当于我们为 hello.txt 创建了三个硬链接,相应的修改他们中的任意一个文件,其它的文件也会同步修改。 上图中有一个数字 4,它标识当前的硬链接数。

软链接创建方式

创建命令

ln -s  [源文件或目录]  [目标文件或目录]

测试

如下我有这样一个目录结构,主要就是一个 source 目录,还有一个 hello.txt 文件

什么是软链接和硬链接

首先记录下在网上百度软链接时遇到的一个大坑,某个老六给出的软链接命令如下,咋一看没什么差别。

ln –s  [源文件或目录]  [目标文件或目录]

我们来执行以下 ln –s ./source ./source-link 这个命令,一直报错 No such file or directory,经过长时间的研究是因为 – 这个符号错了,真是个老六。

什么是软链接和硬链接

言归正传,我们执行

ln -s  ./source ./source-link

如图所示,可以看到我们创建了一个 source-link 文件夹,并且文件夹上方有一个小箭头,它便是软链接

什么是软链接和硬链接

创建的软链接有什么作用呢,它类似与 windows 的快捷方式,相当于我们在 source 中的更改,软链接同步也会更改,可以理解为所有软链接的真实路径就是源文件路径, 在软链接路径做的所有操作就相当于是在源文件路径中操作,双方会一直保持同步。

需要注意的是源文件或目录最好使用绝对路径

可以尝试一下绝对路径与相对路径生成的软链接的效果

ln -s /Users/miofly/Documents/mio/new-mio/github/test/soft-connection/source /Users/miofly/Documents/mio/new-mio/github/test/source-link-bak
ln -s ./source /Users/miofly/Documents/mio/new-mio/github/test/source-link-baks

如图所示可以看出来,当我们使用绝对路径去生成 source-link-bak 软链接时,是没有问题的,并且在 ls 查看时,source-link-bak 指向的也是绝对路径的 source 目录。 但是当我们使用相对路径去生成时错误就发生了,为什么呢,从 ls 的结果可以看出 source-link-baks 指向的是 ./source 目录, 但是 source-link-baks 当前目录下是没有 source 目录的,所以,源文件目录使用绝对目录可以避免此类问题。

什么是软链接和硬链接

软链接和硬链接创建的文件修改时会同步到原始文件吗

软链接和硬链接在文件修改时的行为有所不同:

  • 硬链接:硬链接与原始文件共享相同的数据块,因此当你通过硬链接修改其中一个文件时,实际上修改了共享的数据块,这将影响所有硬链接。因为硬链接共享相同的 inode 和数据块,所以文件内容的更改会在所有硬链接之间同步。

  • 软链接:软链接只包含指向原始文件的路径信息,它们并不共享相同的数据块。如果你通过软链接修改原始文件,软链接并不会受到影响,因为它仅指向原始文件的位置。软链接本质上是一个快捷方式,当你访问它时,系统会自动跳转到实际的文件位置。

因此,硬链接会在不同文件入口之间同步修改,而软链接不会同步。你可以使用这些特性来实现不同的文件链接行为,具体取决于你的需求。

💬留言板0

还没有留言,来发表第一条吧~

PAGE LOAD / LIVELinux 软链接与硬链接的区别及创建方法加载中