Linux硬链接和软链接详解

  • Post category:Linux

当我们需要在 Linux 系统中创建一个文件的副本时,可以使用链接(Linking)的概念。链接分为硬链接和软链接,下面我们将详细讲解这两种链接的作用、使用方式以及注意事项等。

硬链接

硬链接是一种文件链接方式,它允许多个文件名指向同一个文件数据块。硬链接是以同一个 i 节点(inode) 号码创建的链接,因此多个硬链接之间是完全相同的,无法区分哪个是源文件。

硬链接的特点如下:

  • 同一个文件可以有多个不同的文件名(硬链接)。
  • 每个硬链接都指向同一个 inode 节点,因此多个硬链接之间没有区别,删除其中任意一个硬链接文件,被链接的文件都不会受到影响。
  • 只有在同一个文件系统里才能创建硬链接。

创建硬链接

创建硬链接的命令是 ln,它的语法是:

ln 源文件 链接文件名

比如我们在文件夹中新建一个文本文件 test.txt,并写入一行测试文字,然后创建一个硬链接 hard.txt

echo "This is a test file" > test.txt
ln test.txt hard.txt

可以使用 ls -li 命令查看文件的 inode 节点和目录内容:

ls -li

输出结果如下:

3245495 -rw-r--r-- 2 user user 21 Nov  5 12:38 hard.txt
3245495 -rw-r--r-- 2 user user 21 Nov  5 12:38 test.txt

可以看到 hard.txttest.txt 文件的 inode 节点完全相同。现在,在任意一个文件修改文件内容,它们都会同步修改。

删除硬链接

如果我们想要删除硬链接 hard.txt,则不会影响原文件 test.txt。使用 rm 命令删除硬链接:

rm hard.txt

现在再次查看原文件 test.txt:

cat test.txt

输出结果为:

This is a test file

我们可以看到,原文件 test.txt 的内容并没有受到硬链接的删除操作的影响。

注意点

在创建硬链接之前,要确定源文件和链接文件是存在于同一个文件系统中的,否则会创建软链接。由于硬链接之间是完全相同的,因此强烈建议不要为同一个文件创建多个硬链接,这会增加系统的混乱度并浪费硬盘空间。

软链接

软链接又称符号链接(Symbolic Link),是一种另类的文件链接方式。它不像硬链接那样直接指向源文件的 inode 节点,而是以文件名来指向另一个文件名,这个文件名是由用户手工定义的。

软链接的特点:

  • 可以跨越不同的文件系统。
  • 在默认情况下,使用软链接的访问会有一个额外的文件寻找过程,因此在某些情况下,软链接的性能会降低。

创建软链接

创建软链接的命令是 ln,它的语法是:

ln -s 源文件 链接文件名

比如我们在文件夹中新建一个文本文件 test.txt,并写入一行测试文字,然后创建一个软链接 soft.txt

echo "This is a test file" > test.txt
ln -s test.txt soft.txt

可以使用 ls -li 命令查看文件的 inode 节点和目录内容:

ls -li

输出结果如下:

3245496 lrwxrwxrwx 1 user user 8 Nov  5 13:23 soft.txt -> test.txt
3245495 -rw-r--r-- 2 user user 21 Nov  5 12:38 test.txt

可以看到 soft.txt 链接文件的 inode 节点与 text.txt 不同,同时它也是一个软链接。

删除软链接

如果我们想要删除软链接 soft.txt,则不会影响原文件 test.txt。使用 rm 命令删除软链接:

rm soft.txt

现在再次查看原文件 text.txt

cat test.txt

输出结果为:

This is a test file

我们可以看到,原文件 test.txt 的内容并没有受到软链接的删除操作的影响。

注意点

软链接会增加文件查找的时间,因此在对系统性能要求较高的场合时应该慎重使用软链接。软链接也存在源文件被删除引发的问题。当源文件被删除时,软链接将变成破损的链接,文件引用它将无法访问到内容。