Ngoài tất cả các câu trả lời khác, tôi muốn chỉ ra các thuộc tính quan trọng sau:
Một liên kết mềm là một tham chiếu thực sự, tức là nó là một tệp nhỏ chứa tên đường dẫn. Việc giải quyết một /this/path/here
liên kết mềm xảy ra trong suốt cho ứng dụng: nếu một quá trình mở tệp, giả sử đó là một liên kết tượng trưng chỉ đến /that/other/path
thì toàn bộ việc xử lý mở /that/other/path
được thực hiện bởi HĐH. Hơn nữa, nếu /that/other/path
chính nó là một liên kết tượng trưng, thì điều này cũng đang được HĐH xử lý. Trong thực tế, HĐH tuân theo chuỗi liên kết tượng trưng cho đến khi tìm thấy một thứ khác (ví dụ: tệp thông thường) hoặc cho đến khi đạt được SYMLOOP_MAX
(xem sysconf(3)
) nhiều mục, trong trường hợp đó, HĐH (chính xác hơn: lệnh gọi hệ thống) trả về lỗi và đặt errno
để ELOOP
. Do đó, một tham chiếu vòng tròn như thế xyz -> xyz
sẽ không làm trì hoãn quá trình. (Đối với các hệ thống Linux, hãy xem path_resolution(7)
chi tiết đầy đủ.)
Lưu ý rằng một quy trình có thể kiểm tra xem tên đường dẫn có phải là một liên kết tượng trưng hay không thông qua việc sử dụng lstat(2)
và có thể sửa đổi các thuộc tính tệp của nó (được lưu trữ trong bảng inode) thông qua lchown(2)
và các mục khác (xem symlink(7)
toàn bộ câu chuyện.)
Bây giờ, về mặt quyền, bạn sẽ nhận thấy rằng các liên kết tượng trưng luôn có quyền 777 ( rwxrwxrwx
theo ký hiệu tượng trưng). Điều này là do thực tế là bất kỳ quyền nào khác có thể được bỏ qua bằng cách truy cập tệp thực tế, dù sao đi nữa. Ngược lại, 777 cho một liên kết tượng trưng không làm cho tệp symlink được truy cập nếu nó không thể truy cập được ở vị trí đầu tiên. Chẳng hạn, một liên kết tượng trưng có quyền 777 trỏ đến một tệp có quyền 640 không cho phép tệp này có thể truy cập được đối với "khác" (công khai chung). Nói cách khác, một tệp xyz
có thể truy cập thông qua một liên kết tượng trưng khi và chỉ khi nó có thể truy cập trực tiếp, tức là không có sự gián tiếp. Do đó, các quyền của symlink không có tác dụng bảo mật nào.
Một trong những khác biệt chính có thể nhìn thấy giữa liên kết cứng và liên kết tượng trưng (còn gọi là liên kết mềm) là liên kết tượng trưng hoạt động trên các hệ thống tệp trong khi liên kết cứng bị giới hạn trong một hệ thống tệp. Đó là, một tệp trên phân vùng A có thể được liên kết với nhau từ phân vùng B, nhưng nó không thể được liên kết cứng từ đó. Điều này rõ ràng từ thực tế là một liên kết cứng thực sự là một mục trong thư mục, bao gồm tên tệp và số inode, và số inode chỉ là duy nhất cho mỗi hệ thống tệp.
Thuật ngữ hardlink thực sự là hơi sai lệch. Mặc dù đối với nguồn symlink và đích có thể phân biệt rõ ràng (symlink có mục riêng trong bảng inode), nhưng điều này không đúng với liên kết cứng. Nếu bạn tạo một liên kết cứng cho một tệp, mục nhập ban đầu và liên kết cứng không thể phân biệt được về những gì đã có trước tiên. (Vì chúng đề cập đến cùng một nút, chúng chia sẻ các thuộc tính tệp của chúng như chủ sở hữu, quyền, dấu thời gian, v.v.) hoặc thứ ba, hoặc thứ tư ...) liên kết cứng. Trong thực tế, mỗi inode lưu trữ một bộ đếm cho số lượng liên kết cứng đến inode đó.
Cuối cùng, lưu ý rằng người dùng thông thường có thể không liên kết thư mục cứng. Điều này là do điều này phải được thực hiện hết sức thận trọng: một người dùng không cẩn thận có thể đưa các chu kỳ vào cây tệp phân cấp nghiêm ngặt khác, mà tất cả các công cụ thông thường (như fsck
) và bản thân HĐH không được chuẩn bị để xử lý.