Как создать работающий Hard Link в OSX?

8

Хорошо, это заставляет меня биться головой. В OS X, чтобы создать жесткую ссылку, в окне терминала вы должны иметь возможность просто напечатать это ...

ln a.txt b.txt

... и это должно создать жесткую ссылку с a.txtна b.txt. Просто и прямо.

Когда я выполню это утверждение, конечно же, в Finder b.txtпоявится рядом a.txt. Тем не менее, даже после редактирования a.txtс использованием TextEdit, b.txtвсе еще есть исходные данные! Другими словами, похоже, что он выполнил копию, а не ссылку, жестко или иным образом.

Не имеет никакого смысла для меня! Так может кто-нибудь сказать мне, что я здесь делаю не так?

Марк А. Донохо
источник
Как вы редактируете это?
user151019
Я просто открываю файл в TextEdit и добавляю текст. Я просто вырезал и скопировал блок снова и снова и снова. В Finder размер «A.txt» теперь отличается от «b.txt», что означает, что они на самом деле указывают на два разных файла (данных) на диске.
Марк А. Донохо
Любопытно. Я просто попробовал это, используя vi для редактирования файлов, и ссылка сохранилась. С TextEdit, как вы заметили, он ломается.
Ужасно
2
Попробуйте отредактировать свой вопрос, учитывая, что ваши предположения были неверными.
Даниэль Бек
Ответы ясно показывают, что жесткие ссылки на самом деле работают; заголовок говорит об обратном. Это просто поведение замены файлов в приложениях OS X, которое избавляет от ваших жестких ссылок, что является совершенно другой проблемой.
Даниэль Бек

Ответы:

14

Причина такого поведения довольно проста и связана с тем, как файлы сохраняются в большинстве приложений Mac OS X: атомно.

Что происходит, так это то, что копия файла записывается во временную промежуточную область, а затем перемещается для замены исходного файла.

Это, естественно, разрывает жесткие ссылки.

Виллихам Тотланд
источник
Да ... кажется, что все приложения OS X используют подход Cocoa, основанный на документах. Это действительно воняет! Я посмотрю, смогу ли я использовать софт-ссылки (псевдонимы) вместо этого. Не уверен, хотя, потому что я редактирую DefaultKeyBinding.dict, который использует система. Надеюсь, он достаточно умен, чтобы перейти по ссылке. Посмотрим!
Марк А. Донохо,
Это точно. Это также, почему редактирование файлов конфигурации системы Unix-y является болью в редакторах GUI OS X и намного легче сделать viэто - недостаточно установить права записи для файла, вам также нужна папка!
Даниэль Бек
Кстати, софт-ссылки не работают, поэтому я думаю, что я вернулся к созданию сценариев копий файлов после сохранения во всех местах, где мне это нужно. Stinx!
Марк А. Донохо,
@MarqueIV: символические ссылки могут работать.
Виллихам Тотланд
это то, что я имел в виду. Получил неверный термин. В частности, это для привязки клавиш OS X. Он ожидает, что фактический файл находится в определенном месте и не работает с символическими ссылками. Однако он работает с жесткими ссылками, как указано, поскольку редактор основан на Какао-документе, я не могу редактировать файл без разрыва ссылок, поэтому похоже, что мне приходится прибегать к ручному копированию (или переустановке до жестких ссылок) после того, как я отредактирую документ. Не оптимально, но ничего быстрого сценария не исправит.
Марк А. Донохо
3

Если появится, посмотрите эту запись от суперпользователя , что это особенность TextEdit. Таким образом, нормальный метод создания жестких ссылок является правильным, но TextEdit ведет себя так, чтобы это сломать. (Ссылка говорит, что он создает новый файл, а затем перемещает его поверх старого файла после редактирования.)

borrible
источник
Да ... только что видел это на SU прямо как вы опубликовали это. Это не только TextEdit либо. Вроде бы все приложения на основе документов. Воняет, потому что это означает, что я не могу использовать основанные на документе инструменты для редактирования жестко связанных файлов.
Марк А. Донохо
это не просто TextEdit, но все приложения, основанные на Какао, которые используют архитектуру документа, что большинство делает.
Марк А. Донохо,
2

Обратите внимание, что emacs также демонстрирует это (поразительное!) Поведение по умолчанию (во всех Unix-системах), хотя причина немного отличается (это "безопасная" вещь, которую нужно делать в ситуациях с очень небольшим дисковым пространством). Однако его можно настроить несколькими способами.

Смотрите документацию для make-backup-files(использования 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
dmckee --- котенок экс-модератора
источник