Bardzo dobrze rozumiem pojęcie linków twardych i cp
kilkakrotnie czytałem strony podręcznika dla podstawowych narzędzi, takich jak --- a nawet najnowsze specyfikacje POSIX. Wciąż byłem zaskoczony obserwowaniem następującego zachowania:
$ echo john > john
$ cp -l john paul
$ echo george > george
W tym momencie john
i paul
będzie miał taką samą zawartość iwęzeł (i), i george
będą się różniły w obu aspektach. Teraz wykonujemy:
$ cp george paul
W tym momencie spodziewałem się george
i będę paul
miał różne numery i-węzłów, ale tę samą treść --- to oczekiwanie zostało spełnione --- ale spodziewałem się również, że będę paul
mieć inny numer john
i- węzła i john
nadal będę mieć zawartość john
. Byłem tam zaskoczony. Okazuje się, że skopiowanie pliku do ścieżki docelowej paul
powoduje również zainstalowanie tego samego pliku (tego samego i-węzła) na wszystkich innych ścieżkach docelowych, które współużytkują paul
i-węzeł. Myślałem, że cp
tworzy nowy plik i przenosi go do miejsca, które poprzednio zajmował stary plik paul
. Zamiast tego wydaje się, że otwiera istniejący plik paul
, obcina go i piszegeorge
zawartość tego istniejącego pliku. W związku z tym wszystkie „inne” pliki z tym samym i-węzłem otrzymują jednocześnie „swoją” treść.
Ok, to jest systematyczne zachowanie i teraz, kiedy wiem, że mogę się tego spodziewać, mogę wymyślić, jak go obejść, lub odpowiednio go wykorzystać. Co mnie zastanawia, gdzie miałem udokumentować to zachowanie? Byłbym zaskoczony, gdyby nie zostało to udokumentowane gdzieś w dokumentach, które już przeglądałem. Ale najwyraźniej mi tego brakowało i nie mogę teraz znaleźć źródła, które omawia takie zachowanie.