用了linux 这么久,终于发现一个需要硬连接的地方

问题: 为什么要有硬连接呢?

网上搜软连接和硬连接,会有大量介绍, 这里简单说一下

软连接 等于 windows 的快捷方式。 软连接保存了源文件的地址,向c里面的指针

graph LR A[file1] --> B[inode] C[file2] --> A

硬连接是在文件目录上增加一个filename->inode 记录, 也就是两个文件名指向同一个inode。而一般的文件和inode是一对一的关系

graph LR A[file1] --> B[inode] C[file2] --> B

硬连接可以从ls -l 命令看到, 一般文件是1,空目录是2, 目录不为空时大于2

如下sm.md文件为2表示有一个硬连接, 只有当硬连接个数为0时才会删除inode,所以删除一个硬连接不会删除文件

-rw-r--r--  1 jimery users   306 Mar  4 17:13 文档.md
-rw-r--r--  2 jimery users 23835 Jun  8 18:13 sm.md

回到问题,硬连接有什么用

在chroot或者容器外,必须用硬连接才能找到文件!

这是因为软连接只是保存了源文件的地址,而到了新系统,这个地址没变,但容器内的根目录发生了变化

在容器外建立了软连接

ls content/pdf/sm2.pdf -l
lrwxrwxrwx 1 jimery users 48 Jun  8 19:28 content/pdf/sm2.pdf -> /home/j/content/pdf/sm.md

在容器内查看

lrwxrwxrwx    1 root     root            48 Jun  8 11:28 content/pdf/sm2.pdf -> /home/j/content/pdf/sm.md

而在容器内,/home/j/content/pdf/sm.md 的文件已经不存在。所以导致访问失败
但硬连接就不会有这个问题

原文地址:https://www.cnblogs.com/hustcpp/p/13067861.html