如何在 Linux 中创建软链接(Symlink)和硬链接

在Linux 中,符号链接有两种类型:软链接和硬链接。

软链接(Soft Link 也称为Symlink)

  • 使用它只会创建指向原始文件的链接(快捷方式)。
  • 创建的快捷方式的大小为空。
  • 如果我们删除该文件,则创建的链接(快捷方式)将不起作用。
  • 如果我们删除快捷方式链接,则不会影响原始文件

硬链接(Hard Link)

  • 创建该文件的另一个副本。
  • 两个文件都具有相同的 inode 编号。
  • 其中一个文件中所做的任何更改都将显示在另一个文件中。
  • 删除任何一个文件不会影响另一个文件。

在Linux创建软链接

创建软链接要遵循的语法

# ln -s /path/to/source    /path/to/destination

说明:

我们必须提供源文件和目标文件的完整路径,除非它们都必须存在于同一目录中。

# echo 12345 > ~/myfile.txt

现在我们将在其他位置创建此文件的软链接

# ln -s ~/myfile.txt /tmp/
# cd /tmp
# ls -l
lrwxrwxrwx 1 root root 16 Jan 20 07:26 myfile.txt -> /root/myfile.txt

现在,如我们所见,已创建一个符号链接,以蓝色显示

注意:如果您看到红色符号链接而不是蓝色,则表示符号链接未正确创建或者原始文件已被移动或者删除。

  • 现在让我们检查两个文件之间的差异。
# stat ~/myfile.txt
File: `myfile.txt'
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 20142421 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/root) Gid: ( 0/root)
Access: 2013-05-20 07:24:13.000000000 +0530
Modify: 2013-05-20 07:24:12.000000000 +0530
Change: 2013-05-20 07:24:12.000000000 +0530
# stat /tmp/myfile.txt
File: `/tmp/myfile.txt' -> `/root/myfile.txt'
Size: 16 Blocks: 0 IO Block: 4096 symbolic link
Device: fd00h/64768d Inode: 22479090 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/root) Gid: ( 0/root)
Access: 2013-05-20 07:26:06.000000000 +0530
Modify: 2013-05-20 07:26:03.000000000 +0530
Change: 2013-05-20 07:26:03.000000000 +0530

所以两个inode都没有。
似乎不同。

  • 让我们检查两个文件的大小
# du -sch ~/myfile.txt
4.0K /root/myfile.txt
4.0K total
# du -sch /tmp/myfile.txt
0 /tmp/myfile.txt
0 total

因此,我们可以得出结论,软链接下的上述所有观点都是正确的。

在Linux创建硬链接

创建软链接要遵循的语法

# ln  /path/to/source /path/to/destination
# ls -l ~
-rw-r--r-- 2 root root 6 Jan 20 07:24 myfile.txt
# ln ~/myfile.txt /tmp/
# cd /tmp
# ls -l
-rw-r--r-- 2 root root 6 Jan 20 07:24 myfile.txt

因此,正如我们所看到的,文件之间没有区别,很难找出哪个是原始文件,哪个是创建的硬链接。

  • 让我们检查两个文件的大小
# du -sch /tmp/myfile.txt
4.0K myfile.txt
4.0K total
# du -sch ~/myfile.txt
4.0K /root/myfile.txt
4.0K total

所以看起来这两个文件在磁盘上占用的大小相同。

  • 让我们尝试对任何一个文件进行一些更改
# echo 123 >> ~/myfile.txt
# cat /tmp/myfile.txt
12345
123

因此,如上所示,在一个文件中所做的更改会反映在另一个文件中。
我在 root 中的原始文件中添加了 1 行,并且相同的更改反映在另一个文件上。

  • 让我们检查两个文件的 inode 号
# stat ~/myfile.txt
File: `/root/myfile.txt'
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 20142421 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/root) Gid: ( 0/root)
Access: 2013-05-20 07:50:32.000000000 +0530
Modify: 2013-05-20 07:50:28.000000000 +0530
Change: 2013-05-20 07:50:28.000000000 +0530
# stat /tmp/myfile.txt
File: `/tmp/myfile.txt'
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 20142421 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/root) Gid: ( 0/root)
Access: 2013-05-20 07:50:32.000000000 +0530
Modify: 2013-05-20 07:50:28.000000000 +0530
Change: 2013-05-20 07:50:28.000000000 +0530

因此,如我们所见,两者都使用相同的 inode 编号。
因此,对 1 个文件所做的任何更改都会反映在另一个文件上。

日期:2020-06-02 22:18:29 来源:oir作者:oir