C

CoderNotCold

V1

2022/08/08阅读:33主题:默认主题

巧记硬链接与软链接

0、一句话总结

硬链接是“硬”的,因为它直接指向了inode。
软链接是“软”的,因为它是通过其他文件才指向了inode(就像是双节棍或多节棍,比较灵活,所以是软的)。

1、什么是软链接和硬链接?

软硬链接均可以理解成“无需copy文件,创建一个文件的别名”。示意图如下:

硬链接一旦创建后就无法区分哪个是“源文件”,也就是说指向同一个inode的所有硬链接都是等价的。对应到上图中,“硬链接A1”和“硬链接A2”是等价的,没有主次之分。

2、怎样创建软硬链接?

使用ln命令创建:

ln [-s] old_path new_path

不带-s表示创建硬链接,带上-s表示创建软链接。这里的s其实是symbolic(符号)的意思,不过记成soft也没啥影响。
有时可能容易混淆old_pathnew_path的顺序,可以通过下面这句话帮助记忆:

软硬链接不能“无中生有”,所以要先指定现有文件,再指定需要新建的链接。

3、硬链接与软链接有什么区别?

链接类型 能否对目录创建该链接 能否跨文件系统创建该链接
硬链接 不能 不能
软链接

注:Linux的文档明确说明不能跨挂载点创建硬链接(new_pathold_path必须在同一个挂载点上),即比“不能跨文件系统创建”的限制更加严格。 在Mac上实际测试,可以跨挂载点创建硬链接(两个挂载点文件系统相同)。

4、软硬链接有什么用途?

快捷方式

因为硬链接有上述两条限制,所以一般用软链接实现快捷方式。

控制动态库的实际版本

例如系统的libc.so.6通常只是一个软链接,链接到实际使用的libc.so.6的具体版本(一般位于同目录下)。这样不仅能方便地看出当前使用的libc.so.6的实际版本,还大大简化了libc.so.6的升级工作。

防止文件被错误删除

只有当指向一个文件的所有硬链接都被删除后,系统才会真正删除文件。所以通过创建硬链接可以避免文件被错误删除(不能防止文件被修改!)。

5、系统调用原型

硬链接是link,软链接是symlink(即符号链接)。

6、软硬链接文件权限和归属问题

硬链接
具有相同inode的所有硬链接始终具有相同的权限和归属,即改变其中一个硬链接的权限和归属,其他硬链接的权限和归属也会变化。
软链接
文档说“软链接的权限是无关紧要的”,在Linux系统上实际测试,chmod命令操作的是软链接对应的目标文件(chmod的文档也有说明),软链接始终具有读、写、执行的所有权限。
因为软链接始终具有读、写、执行的所有权限,所以基本不需要关心其归属问题。
总结:软链接的权限和归属问题基本可以忽略,只需要关心其目标文件的权限和归属即可。

7、多层软链接会怎样?

没有影响,还是能正常工作。测试命令如下:

echo "abc" > test.txt
ln -s test.txt test_1
ln -s test_1 test_2
ln -s test_2 test_3
cat test_3

输出为"abc"

8、软链接的目标文件删除后再重新创建会怎样?

会链接到新创建的文件。

9、循环软链接会怎样?

能够创建循环软链接(即系统没有检测),但是读取文件时会报错。测试命令如下:

touch abc1
ln -s abc1 abc2
rm abc1
-s abc2 abc1
cat abc1

输出是

cat: abc1: Too many levels of symbolic links

10、参考

https://mp.weixin.qq.com/s/Cu55Sck9FSXLHE0oEVuKQg

分类:

移动端开发

标签:

移动端开发

作者介绍

C
CoderNotCold
V1