Jak stworzyć działający Hard Link w OSX?

8

Ok, to mnie kręci głową. W OS X, aby utworzyć twardy link, w oknie terminala, możesz po prostu wpisać ten ...

ln a.txt b.txt

... a to powinno stworzyć twardy link od a.txtdo b.txt. Prosty i prosty.

Kiedy wykonuję to polecenie, z pewnością w Finderze b.txtpojawia się obok a.txt. Jednak nawet po edycji a.txtza pomocą TextEdit b.txtnadal ma oryginalne dane! Innymi słowy, wygląda na to, że wykonał kopię, a nie łącze, twarde lub w inny sposób.

Nie ma dla mnie żadnego sensu! Czy ktoś może mi powiedzieć, co robię źle tutaj?

Mark A. Donohoe
źródło
Jak to edytujesz?
user151019
Po prostu otwieram plik w TextEdit i dodaję trochę tekstu. Po prostu wycinałem i kopiowałem blok w kółko. W Finderze „A.txt” ma teraz inny rozmiar niż „b.txt”, co oznacza, że ​​w rzeczywistości wskazują dwa różne pliki (danych) na dysku.
Mark A. Donohoe,
Ciekawy. Właśnie próbowałem tego za pomocą vi do edycji plików i link trwał. TextEdit, jak zauważysz, psuje się.
boricious
2
Rozważ edycję pytania, biorąc pod uwagę, że twoje założenia były błędne.
Daniel Beck
Odpowiedzi wyraźnie pokazują, że twarde linki faktycznie działają; tytuł sugeruje inaczej. To tylko działanie polegające na zastępowaniu plików przez aplikacje OS X, które pozbywa się twardych linków, co jest zupełnie innym problemem.
Daniel Beck

Odpowiedzi:

14

Przyczyna takiego zachowania jest raczej prosta i dotyczy sposobu zapisywania plików w większości aplikacji Mac OS X: Atomowo.

Dzieje się tak, że kopia pliku jest zapisywana w tymczasowym obszarze przemieszczania, a następnie przenoszona w celu zastąpienia oryginalnego pliku.

To, naturalnie, zrywa twarde linki.

Williham Totland
źródło
Tak ... wydaje się być dowolną aplikacją OS X, która wykorzystuje podejście Cocoa oparte na dokumentach. To naprawdę śmierdzi! Zobaczę, czy uda mi się zamiast tego użyć miękkich linków (aliasów). Nie jestem jednak pewien, ponieważ edytuję plik DefaultKeyBinding.dict, z którego korzysta system. Mamy nadzieję, że jest wystarczająco inteligentny, aby podążać za linkiem. Zobaczymy!
Mark A. Donohoe,
Tak prawdziwe. Dlatego też edytowanie plików konfiguracyjnych systemu Unix-y jest uciążliwe dla edytorów GUI OS X i jest o wiele łatwiejsze do osiągnięcia vi- nie wystarczy ustawić uprawnienia do zapisu w pliku, potrzebujesz również folderu!
Daniel Beck
BTW, miękkie linki nie działają, więc chyba wracam do skryptowania kopii plików po zapisaniu we wszystkich potrzebnych mi miejscach. Stinx!
Mark A. Donohoe
@MarqueIV: dowiązania symboliczne mogą działać.
Williham Totland
o to mi chodziło. Błędnie użyłem tego terminu. W szczególności dotyczy to skrótów klawiszowych OS X. Oczekuje, że rzeczywisty plik znajduje się w określonej lokalizacji i nie działa z dowiązaniami symbolicznymi. Działa jednak z twardymi linkami, jak jednak wspomniano, ponieważ edytor jest oparty na dokumentach Cocoa, nie mogę edytować pliku bez zerwania linków, więc wygląda na to, że muszę skorzystać z ręcznego kopiowania (lub zmiany ustawień) w górę twardych linków) po edycji dokumentu. Nie jest to optymalne, ale szybki skrypt nic nie naprawi.
Mark A. Donohoe
3

Jeśli się pojawi, zobacz ten wpis od administratora , że jest to funkcja TextEdita. Tak więc normalna metoda tworzenia twardych dowiązań jest poprawna, ale TextEdit zachowuje się w taki sposób, aby to przerwać. (Link mówi, że tworzy nowy plik, a po edycji przenosi go na stary plik).

okropny
źródło
Tak ... właśnie to zobaczyłem na SU, kiedy to opublikowałeś. To nie tylko TextEdit. Wygląda na to, że wszystkie aplikacje oparte na dokumentach. Śmierdzi, ponieważ oznacza to, że nie mogę używać narzędzi opartych na dokumentach do edytowania plików z twardymi linkami.
Mark A. Donohoe,
nie tylko TextEdit, ale wszystkie aplikacje oparte na kakao, które korzystają z architektury dokumentów, co większość z nich robi.
Mark A. Donohoe
2

Zauważ, że emacs również domyślnie wykazuje takie (zaskakujące!) Zachowanie (we wszystkich systemach uniksowych), uważając, że przyczyna jest nieco inna (jest to „bezpieczna” rzecz w sytuacjach bardzo małej ilości miejsca na dysku). Można go jednak skonfigurować na kilka sposobów.

Zobacz dokumentację dla make-backup-files(użytkowania C-h v make-backup-files) i dla

  • backup-by-coping
  • backup-by-coping-when-linked
  • backup-by-coping-when-mismatch
  • backup-by-coping-when-privileged-mismatch
dmckee --- były kot moderator
źródło