如何在OSX中创建有效的硬链接?


8

好吧,这让我不休。在OS X中,要在终端窗口中创建硬链接,您应该只需键入此即可。

ln a.txt b.txt

...这将创建从a.txt到的硬链接b.txt。简单直接。

当我执行该语句时,肯定会在Finder b.txt中的旁边出现a.txt。但是,即使a.txt使用TextEdit编辑后,b.txt仍具有原始数据!换句话说,它似乎执行了复制,而不是硬链接或其他链接。

对我毫无意义!有人可以告诉我我在做什么错吗?


您如何编辑它?
user151019 2011年

我只是在TextEdit中打开文件并添加一些文本。我只是一遍又一遍地剪切和复制一个块。在Finder中,“ A.txt”的大小现在与“ b.txt”的大小不同,这意味着它们实际上指向磁盘上的两个不同(数据)文件。
Mark A. Donohoe

好奇。我刚刚尝试使用vi编辑文件,链接仍然存在。如您所见,使用TextEdit时,它会中断。
2011年

2
考虑到您的假设是错误的,请考虑编辑您的问题。
丹尼尔·贝克

答案清楚地表明,硬链接实际上是有效的。标题暗示另外的意思。仅仅是OS X应用程序的文件替换行为消除了硬链接,这是一个完全不同的问题。
丹尼尔·贝克

Answers:


14

此行为的原因很简单,并且与大多数Mac OS X应用程序中文件的保存方式有关:从原子上讲。

发生的情况是将文件的副本写入临时暂存区,然后移动以替换原始文件。

很自然地,这会断开硬链接。


是的...似乎是任何使用Cocoa基于文档的方法的OS X应用程序。真臭!我要看看是否可以代替使用软链接(别名)。但是不确定,因为我正在编辑系统使用的DefaultKeyBinding.dict。希望它足够聪明,可以按照链接进行操作。走着瞧!
Mark A. Donohoe

如此真实。这也是为什么在OS X GUI编辑器中很难编辑Unix-y系统配置文件,并且更容易完成的原因vi-仅设置文件的写许可权还不够,还需要文件夹!
丹尼尔·贝克

顺便说一句,软链接不起作用,所以我想在保存到我需要的所有位置后,我会返回脚本文件副本。Stinx!
Mark A. Donohoe

@MarqueIV:符号链接可能有效。
Williham Totland 2011年

我正是这个意思。理解错误。特别是用于OS X的键绑定。它期望实际文件位于特定位置,并且不适用于符号链接。但是,它确实适用于硬链接,但是如上所述,由于编辑器是基于Cocoa文档的,所以我不能在不断开链接的情况下编辑文件,因此看起来我不得不诉诸于手动复制(或重新设置)编辑文档后)。不是最佳选择,但是快速脚本无法解决。
Mark A. Donohoe

3

如果出现,请从superuser看到此条目,这是TextEdit的功能。因此,创建硬链接的常规方法是正确的,但是TextEdit的行为会破坏这一点。(该链接说它将创建一个新文件,然后在编辑后将其移到旧文件上。)


是的...您刚刚在SU上看到了这个消息。这也不只是TextEdit。似乎所有基于文档的应用程序。很臭,因为这意味着我无法使用基于文档的工具来编辑硬链接的文件。
Mark A. Donohoe

它不仅是TextEdit,而且大多数使用文档体系结构的所有基于Cocoa的应用程序都可以这样做。
Mark A. Donohoe

2

请注意,emacs在默认情况下(在所有unix中)也表现出这种(令人吃惊的!)行为,认为原因略有不同(在磁盘空间非常低的情况下,这是“安全”的操作)。但是,可以通过几种方式进行配置。

请参阅make-backup-files(use C-h v make-backup-files)和

  • backup-by-coping
  • backup-by-coping-when-linked
  • backup-by-coping-when-mismatch
  • backup-by-coping-when-privileged-mismatch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.