创建与符号链接链接的文件与硬链接之间的差异

问题描述 投票:0回答:1

我已经阅读了一些有关符号链接和硬链接的posts,但我想在此确认我的概念,因为有一些行为对我来说是非常不清楚的。考虑这一系列命令行指令。

$ echo abc >file1
$ ln file1 file2 OR $ ln -s file1 file2
$ rm file1
edit content file2 to be different, using vim
$ cat file1

如果我遵循这两个指令序列,1创建一个硬链接,一个创建一个符号链接,我可以解释为什么file1在序列之后不存在,但无法解释为什么file1将在序列之后存在。

以下是我的尝试。

硬链接案例:

to从file1解除引用。因此,file1不再存在,但它链接的inode仍然存在,因为file2仍然链接到它。编辑文件2只会更改其内容。

软链接案例:

file1被删除并且file1链接到的inode被解除引用。(file2不链接到inode而是链接到file1)因此,file1不再存在,并且它链接到的inode被释放并且可以被覆盖不再是任何引用它的文件。

编辑文件2将重新创建file1,因为file2仍然符号链接到file1,然后将链接到一个新的inode,该inode将具有指向已编辑内容的指针。文件1将被删除,而file1链接的inode

我不太确定为符号链接创建inode的逻辑是否正确,有人可以验证我的理解吗?

unix operating-system symlink hardlink
1个回答
0
投票

几乎;在你的最后一种情况下,打开“file2”O_CREAT:

  int fd = open("file2", O_CREAT|..., 0644);

将按照您的观察创建“file1”。它并不完全透明,因为stat()和readlink()可以揭示悬空链接。如果您的编辑表现良好(vi)它应该像您发现的那样工作。它在linux和至少一个UNIX下运行。

© www.soinside.com 2019 - 2024. All rights reserved.