Я дуже добре розумію поняття жорстких посилань і неодноразово читав головні сторінки для основних інструментів, таких як cp--- та навіть останні специфікації POSIX ---. І все-таки я здивовано спостерігав таку поведінку:
$ echo john > john
$ cp -l john paul
$ echo george > george
У цей момент johnі paulбуде однаковий inode (і зміст), і georgeбуде відрізнятися в обох аспектах. Тепер ми робимо:
$ cp george paul
У цей момент я очікував georgeі paulмати різні номери inode, але однаковий зміст --- це очікування було виконано ---, але я також очікував, paulщо тепер буде інше число inode від john, і для того, johnщоб все-таки мати вміст john. Тут я здивувався. Виявляється, що копіювання файлу в шлях призначення paulтакож має результат встановлення того самого файлу (того ж inode) на всіх інших шляхах призначення, які мають спільний paulinode. Я думав, що cpстворює новий файл і переміщує його на місце, яке раніше займав старий файл paul. Замість цього, здається, відкрити існуючий файл paul, обрізати його та написатиgeorgeвміст у тому наявному файлі. Отже, будь-які "інші" файли з тим самим inode одночасно оновлюють "свій" вміст.
Гаразд, це систематична поведінка, і тепер, коли я знаю, на що її чекаю, я можу зрозуміти, як обійтися навколо цього, або скористатися цим, якщо це доречно. Які головоломки мені, де я повинен був бачити цю поведінку документально? Я був би здивований, якби це не було десь зафіксовано в документах, які я вже переглянув. Але, мабуть, я пропустив це, і зараз не можу знайти джерело, яке б обговорювало цю поведінку.