Nó không phải là về UNIX/Linux nhưng về triển khai hệ thống tập tin - nhưng có, Unix/Linux sử dụng inodes ở cấp hạt nhân và triển khai hệ thống tập tin có inodes (ít nhất là ảo).
Trong nói chung, liên kết tượng trưng là các tập tin (btw, danh bạ cũng được tập tin), có đơn giản:
- cờ
file-type
trong "inode" mà nói đến hệ thống tập tin này là một "liên kết tượng trưng"
- nội dung tệp: đường dẫn đến mục tiêu - nói cách khác: liên kết tượng trưng đơn giản là tệp chứa tên tệp có cờ trong inode.
Hệ thống tệp ảo cũng có thể có liên kết tượng trưng, vì vậy, hãy kiểm tra FUSE hoặc một số nguồn triển khai hệ thống tệp khác. (Ext2/ext3/ufs..etc)
Vì vậy,
là câu trả lời một inode trong UNIX/Linux?
phụ thuộc vào triển khai hệ thống tệp, nhưng có, thường là inode chứa "loại tệp" (và chủ sở hữu, quyền truy cập, dấu thời gian, kích thước, con trỏ đến khối dữ liệu). Có các hệ thống tập tin không có inode
s (trong một phép thuật vật lý) nhưng chỉ có "các nút ảo" để duy trì tính tương thích với hạt nhân.
Nếu có, thì số inode sẽ giống nhau cho mục tiêu và liên kết?
Không. Thông thường, các liên kết tượng trưng là một tập tin với inode riêng của mình, (với loại tập tin, các khối dữ liệu riêng, vv)
Nếu có, có thể liên kết inode có thể có quyền khác với inode mục tiêu (nếu một tồn tại)?
Đây là khoảng cách xử lý các tệp liên kết tượng trưng. Thông thường hạt nhân không cho phép thay đổi các quyền liên kết tượng trưng - và các liên kết tượng trưng luôn có các quyền mặc định.Bạn có thể viết hệ thống tập tin của riêng bạn cho phép các quyền khác nhau cho các liên kết tượng trưng, nhưng bạn sẽ gặp rắc rối, bởi vì các chương trình phổ biến như chmod
không thay đổi quyền đối với liên kết tượng trưng, vì vậy hãy tạo hệ thống tập tin như vậy là vô nghĩa)
To hiểu sự khác biệt giữa hardlinks và symlink, bạn nên hiểu các thư mục trước.
Thư mục là các tệp (được phân biệt bằng cờ trong inode) cho biết hạt nhân, "xử lý tệp này dưới dạng bản đồ là file-name
đến inode_number
". Liên kết cứng chỉ đơn giản là các tên tệp ánh xạ tới cùng một số inode
. Vì vậy, nếu thư mục file chứa:
file_a: 1000
file_b: 1001
file_c: 1000
các phương tiện trên, trong thư mục này có 3 file:
- file_a mô tả bởi inode 1000
- file_b mô tả bởi inode 1001 và
- file_c một lần nữa được mô tả bằng inode 1000 (do đó, nó là một liên kết cứng với tệp_a, không phải là liên kết cứng đến file_a - bởi vì không thể biết tên tệp nào đến trước - y là giống nhau).
Đây là sự khác biệt chính để liên kết tượng trưng, nơi mà các inode của file_b
(inode 1001) có thể có nội dung "file_a" và một lá cờ có nghĩa là "đây là một liên kết tượng trưng". Trong trường hợp này, file_b
sẽ là một liên kết tượng trưng trỏ đến file_a
.
Và 'readlink()' cho phép bạn tìm thấy những gì được lưu trữ làm tên đường dẫn trong liên kết tượng trưng đã cho một liên kết tượng trưng. Hạt nhân xử lý nó với sự tự tin; mọi người không nhất thiết. Ngoài ra còn có 'realpath()' xác định đường dẫn tuyệt đối không có liên kết tượng trưng cho một tệp nhất định. –