Bạn có thể phân biệt một tệp có (các) liên kết cứng với tệp không liên kết cứng với "số liên kết". Tôi thấy hai cách để có được điều này từ dòng lệnh:
% stat original
File: ‘original’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 804h/2052d Inode: 932815 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 500/ bediger) Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
Birth: -
Hoặc là
1010 % ls -li
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary
Sự cô đơn '2' trước "bediger" là số lượng liên kết. Lưu ý rằng cả hai tên tệp có cùng số inode, 932815.
Tôi chắc chắn rằng cả hai lệnh này đều có số lượng liên kết từ trường st_nlink của struct stat, được điền bởi một stat()
lệnh gọi hệ thống.
Gần như tôi có thể nói, chạy tar
với --hard-dereference
nghĩa là thay vì lấy một tệp có hai tên tệp riêng biệt (như trong ví dụ ở trên), bạn nhận được hai tệp, mỗi tệp có một tên tệp. tar
có thể kiểm tra số lượng liên kết trên mỗi tệp và theo mặc định khi giải nén, nó tạo ra một liên kết cứng trên tên tệp thứ hai mà nó có cho dữ liệu tệp được liên kết cứng. Khi được gọi với --hard-dereference
tạo lưu trữ, nó xuất hiện để tạo một tệp hoàn toàn mới cho tên tệp thứ hai khi trích xuất lệnh tar
chạy.