我已经阅读了一些关于符号链接和硬链接的posts,但是我想在此确认我的概念,因为有些行为对我来说还不清楚。请考虑以下命令行指令序列。
$ echo abc >file1
$ ln file1 file2 OR $ ln -s file1 file2
$ rm file1
edit content file2 to be different, using vim
$ cat file1
如果我在2种情况下遵循以下说明顺序,其中1种情况创建了硬链接,而1种情况下创建了符号链接,则我可以解释为什么在该顺序之后file1将不存在,但是不能真正解释为什么在之后的情况下file1将存在顺序。
以下是我的尝试。
硬链接案例:
to已从文件1中取消引用。因此,file1不再存在,但是 链接到它的inode仍然存在,因为file2仍然链接到 它。编辑文件2只会更改其内容。
软链接的情况:
file1被删除,file1链接到的inode是 取消引用。(file2不链接到索引节点,而是链接到file1) 因此,file1不再存在,并且链接到它的索引节点为 已释放,可以被覆盖,因为不再有任何文件 引用它。
编辑文件2将重新创建文件1,因为文件2仍然是象征性的 链接到file1,然后链接到一个新的inode 指向已编辑的content.file1的指针,并删除链接到file1的索引节点
我不确定为符号链接创建索引节点的逻辑是否正确,有人可以验证我的理解吗?
答案 0 :(得分:0)
几乎;在您的最后一种情况下,打开“ file2” O_CREAT:
int fd = open("file2", O_CREAT|..., 0644);
如您所见,将创建“ file1”。它不是完全透明的,因为stat()和readlink()可以发现悬挂的链接。如果您的编辑器行为良好(vi),则它应能像您发现的那样工作。它在linux和至少一个UNIX下运行。