Bardzo dobrze rozumiem pojęcie linków twardych i cpkilkakrotnie 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 johni paulbędzie miał taką samą zawartość iwęzeł (i), i georgebędą się różniły w obu aspektach. Teraz wykonujemy:
$ cp george paul
W tym momencie spodziewałem się georgei będę paulmiał 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ę paulmieć inny numer johni- węzła i johnnadal będę mieć zawartość john. Byłem tam zaskoczony. Okazuje się, że skopiowanie pliku do ścieżki docelowej paulpowoduje również zainstalowanie tego samego pliku (tego samego i-węzła) na wszystkich innych ścieżkach docelowych, które współużytkują pauli-węzeł. Myślałem, że cptworzy 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 piszegeorgezawartość 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.