我非常了解硬链接的概念,并且已经阅读了一些基本工具的手册页,例如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的任何“其他”文件都将同时更新“其”内容。
好的,这是系统性的行为,现在我知道可以期待它了,因此我可以弄清楚如何解决它,或者适当地利用它。让我感到困惑的是应该在哪里看到该行为记录在案?如果我没有看过文档中的某处,我会感到惊讶。但是显然我错过了,现在找不到讨论此行为的消息来源。