相关疑难解决方法(0)

对 cp 与硬链接的行为感到惊讶

我非常了解硬链接的概念,并且已经多次阅读基本工具的手册页,例如cp--- 甚至最近的 POSIX 规范。我仍然惊讶地观察到以下行为:

$ echo john > john
$ cp -l john paul
$ echo george > george
Run Code Online (Sandbox Code Playgroud)

此时johnpaul将具有相同的 inode(和内容),并且george在这两个方面都会有所不同。现在我们这样做:

$ cp george paul
Run Code Online (Sandbox Code Playgroud)

在这一点上,我期望georgepaul拥有不同的 inode 编号但内容相同——这个期望得到了满足——但我期望paul现在有一个不同的 inode 编号john,并且john仍然有内容john。这是我感到惊讶的地方。事实证明,将文件复制到目标路径paul也会导致在共享paul的 inode 的所有其他目标路径上安装相同的文件(相同的 inode)。我想cp创建一个新文件并将其移动到以前由旧文件占据的位置paul。相反,它似乎是打开现有文件paul,截断它,然后写入george的内容到现有文件中。因此,具有相同 inode 的任何“其他”文件都会同时更新“他们的”内容。

好的,这是一种系统行为,现在我知道期待它,我可以弄清楚如何解决它,或者在适当的时候利用它。让我感到困惑的是,我应该在哪里看到这种行为的记录?如果它没有记录我会感到惊讶的地方在文件我已经看过。但显然我错过了它,现在找不到讨论这种行为的来源。

hard-link cp

22
推荐指数
3
解决办法
3376
查看次数

标签 统计

cp ×1

hard-link ×1