我非常了解硬链接的概念,并且已经阅读了一些基本工具的手册页,例如cp
---甚至是最新的POSIX规范---。我仍然惊讶地观察到以下行为:
$ echo john > john
$ cp -l john paul
$ echo george > george
在这一点上john
,它们paul
将具有相同的inode(和内容),并且george
在两个方面都将有所不同。现在我们做:
$ cp george paul
在这一点上,我期望george
并paul
拥有不同的inode编号,但是内容相同-实现了这一期望-但我也期望paul
现在拥有与in相同的inode编号john
,并且john
仍然具有内容john
。这就是我感到惊讶的地方。事实证明,将文件复制到目标路径paul
还导致在共享inode的所有其他目标路径上安装相同文件(相同inode)的结果paul
。我当时想cp
创建一个新文件,然后将其移动到旧文件所占据的位置paul
。相反,它似乎要做的是打开现有文件paul
,将其截断并写入george
的内容添加到该现有文件中。因此,具有相同inode的任何“其他”文件都将同时更新“其”内容。
好的,这是系统性的行为,现在我知道可以期待它了,因此我可以弄清楚如何解决它,或者适当地利用它。让我感到困惑的是应该在哪里看到该行为记录在案?如果我没有看过文档中的某处,我会感到惊讶。但是显然我错过了,现在找不到讨论此行为的消息来源。