mar*_*lam 5 hard-link cp ln mv
假设我有以下设置:
$ cat fileA
textA
$ cat fileB
textB
$ ln fileA myLink
$ cat myLink # as expected
textA
Run Code Online (Sandbox Code Playgroud)
我不明白以下行为:
$ cp fileB fileA
$ cat myLink # expected ?
textB
Run Code Online (Sandbox Code Playgroud)
如果我写的话,我会预料到这个结果ln -s fileA myLink
,但不是在这里。
我希望cp
在覆盖模式下执行以下操作:
fileB
复制硬盘上某处 的内容fileA
到该硬盘地址 但相反,我推断它会执行以下操作:
fileA
fileB
复制该地址的内容似乎并不适用于mv
,它按照我的预期工作。
我的问题:
man cp
or man mv
?man ln
fileB
大小并不比 更大fileA
),还是可以可靠地用作特征?cp fileB fileA
以便下一个cat myLink
仍然显示textA
?硬链接不存在“跟随链接” - 创建硬链接只是为同一个文件提供几个不同的名称(在低级别,文件实际上是整数 - “inode”,它们的名称只是为了用户方便) - 有没有“原件”和“副本”——它们是相同的。因此,您打开和写入的硬链接是完全相同的,它们都是相同的。
因此cp
,默认情况下会打开一个文件并向其写入内容,从而更改该文件(以及它所具有的所有名称)。所以是的,这是预期的。现在,如果您(而不是重写)首先删除其中一个名称(从而减少链接计数),然后使用与您的名称相同的名称重新创建新文件,那么您最终会得到两个不同的文件。那就是cp --remove-destination
要做的事。
1基础知识记录在 link(2)
由ln(1)
2是的,这是正常行为,而不是侥幸。但请参阅上面的评论cp --remove-destination
3不,不是真的。硬链接只是同一文件的几个名称。你似乎想要的是 COW(写时复制)链接,它只存在于特殊的文件系统中
4是的,cp --remove-destination fileB fileA