在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