创建通过符号链接和硬链接链接的文件之间的区别

时间:2019-04-13 10:41:04

标签: unix operating-system symlink hardlink

我已经阅读了一些关于符号链接和硬链接的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的索引节点

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

1 个答案:

答案 0 :(得分:0)

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

  int fd = open("file2", O_CREAT|..., 0644);
如您所见,

将创建“ file1”。它不是完全透明的,因为stat()和readlink()可以发现悬挂的链接。如果您的编辑器行为良好(vi),则它应能像您发现的那样工作。它在linux和至少一个UNIX下运行。