[碎片化时间]谈shell的软链接和硬链接

软链接(Symbolic link)和硬链接(Hard link)是Unix-like操作系统中用于创建文件链接的两种方式。

区别如下:

1. 硬链接可以将多个文件链接到同一个inode(文件索引节点),多个文件实际上指向同一个物理文件,因此对其中一个文件的操作会影响其他链接文件。而软链接是一个指向目标文件的文件,它实际上是一个特殊的文件,里面存储着目标文件的路径名,因此对软链接文件的操作并不会影响到目标文件。

2. 硬链接只能链接到同一个文件系统中的文件,而软链接可以链接到不同的文件系统中的文件。

3. 硬链接没有文件大小的概念,因为多个链接文件实际上指向的是同一个物理文件。而软链接本身有文件大小,但是非常小,只是保存了目标文件的路径名。

4. 删除目标文件时,如果有硬链接指向它,它并不会真正删除,只有当所有硬链接都被删除后,物理文件才会被释放。而软链接则不会受到影响,只是指向的目标文件不存在时,软链接会变为无效链接。

总结来说,硬链接更像是对物理文件的多个名称引用,而软链接更像是对目标文件的一个符号性的链接。

以下是一个示例的Shell脚本,用来表示软链接和硬链接的不同:

#!/bin/bash

# 创建目标文件
echo "This is the target file" > target.txt

# 创建硬链接
ln target.txt hardlink.txt

# 创建软链接
ln -s target.txt softlink.txt

# 打印目标文件的内容
echo "Content of target file:"
cat target.txt

# 打印硬链接的内容
echo "Content of hardlink:"
cat hardlink.txt

# 打印软链接的内容
echo "Content of softlink:"
cat softlink.txt

# 修改目标文件的内容
echo "Modified content of target file" > target.txt

# 打印目标文件的内容
echo "Content of target file (after modification):"
cat target.txt

# 打印硬链接的内容
echo "Content of hardlink (after modification):"
cat hardlink.txt

# 删除目标文件
rm target.txt

# 打印目标文件的内容
echo "Content of target file (after deletion):"
cat target.txt

# 打印硬链接的内容
echo "Content of hardlink (after deletion):"
cat hardlink.txt

# 打印软链接的内容
echo "Content of softlink (after deletion):"
cat softlink.txt

运行上述脚本后,可以观察到以下结果:

- 目标文件(target.txt)和硬链接(hardlink.txt)的内容完全一样。

- 软链接(softlink.txt)的内容为目标文件的路径名。

- 修改目标文件的内容后,目标文件和硬链接的内容都发生了变化,而软链接的内容没有变化。

- 删除目标文件后,硬链接仍然可以正常访问目标文件的内容,而软链接变为无效链接。

以下是另一个示例的Shell脚本,用来表示软链接和硬链接的不同:

#!/bin/bash

# 创建目标文件
echo "This is the target file" > target.txt

# 创建硬链接
ln target.txt hardlink.txt

# 创建软链接
ln -s target.txt softlink.txt

# 打印目标文件的inode号码和文件大小
echo "Target file:"
ls -li target.txt
ls -l target.txt

# 打印硬链接的inode号码和文件大小
echo "Hard link:"
ls -li hardlink.txt
ls -l hardlink.txt

# 打印软链接的inode号码和文件大小
echo "Soft link:"
ls -li softlink.txt
ls -l softlink.txt

# 删除目标文件
rm target.txt

# 打印目标文件的inode号码和文件大小(已删除,无法查看)
echo "Target file after deletion:"
ls -li target.txt
ls -l target.txt

# 打印硬链接的inode号码和文件大小(链接的物理文件还存在)
echo "Hard link after deletion of target file:"
ls -li hardlink.txt
ls -l hardlink.txt

# 打印软链接的inode号码和文件大小(链接的目标文件不存在)
echo "Soft link after deletion of target file:"
ls -li softlink.txt
ls -l softlink.txt

运行上述脚本后,可以观察到以下结果:

- 目标文件(target.txt)和硬链接(hardlink.txt)在inode号码和文件大小上完全一样。

- 软链接(softlink.txt)的inode号码与目标文件不同,而文件大小非常小(通常是目标文件路径名的长度)。

- 删除目标文件后,目标文件无法再访问,但是硬链接仍然可以访问相同的内容。

- 删除目标文件后,软链接变为无效链接(inode号码不再和目标文件对应),不能再访问目标文件。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 2
关注 28
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧