我完成了以下操作:
- echo" test" >> T1
- echo" test2" >> T2
- ln t1 l1
- cp t2 t1
- cat l1
醇>
用t2覆盖t1之后,我很惊讶硬链接仍然有效。根据我的理解,当您创建文件的新版本时,硬链接不会指向新版本。
为什么在硬链接上使用cat命令[覆盖后]硬链接仍然有效并指向新t1文件的内容?
答案 0 :(得分:0)
根据OS X上cp
的联机帮助页,这是预期的行为:
-f
如果无法打开目标文件,请将其删除并创建新文件,而不提示 确认无论其权限如何。 (-f选项会覆盖以前的任何-n选项。)
复制前目标文件未取消链接。因此,任何现有的访问权限都将是 保留
-n
不要覆盖现有文件。 (-n选项会覆盖以前的所有-f或-i选项。)
这意味着默认情况下不会在复制前删除目标文件。只有在删除其中一个文件后,硬链接才会中断。
为了始终如一地获得您想要实现的行为,您必须在复制之前删除目标文件。