Câu trả lời:
Trong Unix tất cả các tệp bình thường là Hardlinks. Các liên kết cứng trong hệ thống tệp Unix (và hầu hết (tất cả?)) Là các tham chiếu đến cái được gọi là inode
. Bộ inode
đếm có tham chiếu, khi bạn có một "liên kết" đến tệp (là modus operandi bình thường) thì bộ đếm là 1. Khi bạn tạo liên kết thứ hai, thứ ba, thứ tư, v.v., bộ đếm được tăng (tăng) mỗi thời gian một. Khi bạn xóa ( rm
) một liên kết, bộ đếm bị giảm (giảm) bởi một liên kết. Nếu bộ đếm liên kết đạt 0, hệ thống tập tin sẽ loại bỏ inode
và đánh dấu khoảng trống là có sẵn để sử dụng.
Nói tóm lại, miễn là bạn không xóa liên kết cuối cùng thì tập tin sẽ vẫn còn.
Edit:
Các tập tin sẽ vẫn còn ngay cả khi liên kết cuối cùng được gỡ bỏ . Đây là một trong những cách để đảm bảo bảo mật dữ liệu có trong một tệp không thể truy cập được đối với bất kỳ quy trình nào khác. Việc xóa hoàn toàn dữ liệu khỏi hệ thống tập tin chỉ được thực hiện nếu dữ liệu có 0 liên kết đến nó như được đưa ra trong siêu dữ liệu của nó và không được sử dụng bởi bất kỳ quy trình nào.
Đây IMHO là do sự xa cách dễ nhất để hiểu khó liên kết (và sự khác biệt của nó từ softlinks).
unlink
.
/proc
là một hệ thống tệp (ảo) riêng biệt.
unlink()
để xóa một tập tin khiến tôi bối rối khi tôi bắt đầu chơi với lập trình C trên MS-DOS một thời gian trở lại vào nửa đầu những năm 1990. :)
Kiểm tra dễ dàng hơn tôi nghĩ: Tôi đã tạo một tệp văn bản, sau đó liên kết cứng với nó. Xóa liên kết cứng sẽ không xóa tệp mà nó được liên kết cứng và tệp được liên kết đến vẫn giữ nguyên vị trí của nó.
tất cả các tệp trong đĩa của bạn thực sự là con trỏ tới dữ liệu thực trên ổ đĩa của bạn.
Khi bạn tạo một liên kết cứng cho tệp đó, tệp hardlink-ed sẽ được trỏ đến cùng dữ liệu mà tệp gốc đã trỏ đến.
như trong ví dụ này, a.txt đã trỏ đến dữ liệu (byte) của tệp trong ổ đĩa, khi b.txt liên kết cứng được tạo, nó sẽ trỏ đến những gì a.txt đang trỏ tới.
do đó loại bỏ một trong số chúng sẽ không ảnh hưởng đến cái khác mà chúng được tách ra khỏi nhau.
NHƯNG, khi bạn loại bỏ cả hai, hệ thống sẽ thấy rằng dữ liệu trên đĩa không có tệp nào trỏ đến nó, vì vậy hệ thống sẽ coi đó là không gian trống và sẽ ghi đè lên khi muốn.
FILE "A.txt"
giống hệt LINK "B.txt"
, đặc biệt là bạn đã gọi cái này FILE
và cái kia a LINK
. Liên kết thực sự là mũi tên đen.
unlink()
.