Tôi hiểu rất rõ khái niệm về các liên kết cứng và đã đọc các trang hướng dẫn cho các công cụ cơ bản như cp
--- và thậm chí các thông số kỹ thuật POSIX gần đây --- một số lần. Tôi vẫn ngạc nhiên khi thấy các hành vi sau:
$ echo john > john
$ cp -l john paul
$ echo george > george
Tại thời điểm này john
và paul
sẽ có cùng một nút (và nội dung), và george
sẽ khác nhau ở cả hai khía cạnh. Bây giờ chúng tôi làm:
$ cp george paul
Tại thời điểm này, tôi mong đợi george
và paul
có các số inode khác nhau nhưng cùng một nội dung --- kỳ vọng này đã được thực hiện --- nhưng tôi cũng dự kiến paul
bây giờ sẽ có một số inode khác john
và john
vẫn có nội dung john
. Đây là nơi tôi đã ngạc nhiên. Nó chỉ ra rằng việc sao chép một tệp vào đường dẫn đích paul
cũng có kết quả của việc cài đặt cùng một tệp đó (cùng một nút) tại tất cả các đường dẫn đích khác có chung paul
inode. Tôi đã nghĩ rằng cp
tạo ra một tập tin mới và di chuyển nó vào nơi trước đây bị chiếm giữ bởi tập tin cũ paul
. Thay vào đó, những gì nó dường như làm là mở tệp hiện có paul
, cắt bớt nó và viếtgeorge
Nội dung của tập tin hiện có. Do đó, bất kỳ tệp "khác" nào có cùng inode đều được cập nhật nội dung "của chúng" cùng một lúc.
Ok, đây là một hành vi có hệ thống và bây giờ tôi biết để mong đợi nó, tôi có thể tìm ra cách làm việc xung quanh nó, hoặc tận dụng nó, khi thích hợp. Điều gì làm tôi bối rối là tôi phải xem tài liệu này ở đâu? Tôi sẽ ngạc nhiên nếu nó không được ghi lại ở đâu đó trong các tài liệu mà tôi đã xem. Nhưng rõ ràng là tôi đã bỏ lỡ nó và bây giờ không thể tìm thấy một nguồn thảo luận về hành vi này.