当我们需要在 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.txt
和 test.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
的内容并没有受到软链接的删除操作的影响。
注意点
软链接会增加文件查找的时间,因此在对系统性能要求较高的场合时应该慎重使用软链接。软链接也存在源文件被删除引发的问题。当源文件被删除时,软链接将变成破损的链接,文件引用它将无法访问到内容。