Một tệp là một nút có dữ liệu meta trong đó một danh sách các con trỏ tới nơi để tìm dữ liệu.
Để có thể truy cập một tệp, bạn phải liên kết nó với một thư mục (nghĩ về các thư mục là thư mục điện thoại, không phải thư mục), đó là thêm một hoặc nhiều mục vào một trong nhiều thư mục để liên kết tên với tệp đó.
Tất cả các liên kết, các tên tệp đó trỏ đến cùng một tệp. Không có cái nào là bản gốc và cái khác là liên kết. Chúng là tất cả các điểm truy cập vào cùng một tệp (cùng một nút) trong cây thư mục. Khi bạn nhận được kích thước của tệp ( lstat
cuộc gọi hệ thống), bạn đang truy xuất thông tin (siêu dữ liệu được đề cập ở trên) được lưu trữ trong nút, không quan trọng tên tệp nào, liên kết nào bạn đang sử dụng để tham chiếu đến tệp đó .
Ngược lại, symlink là một tệp khác (một nút khác) có nội dung là đường dẫn đến tệp đích. Giống như bất kỳ tệp nào khác, các liên kết tượng trưng đó phải được liên kết với một thư mục (phải có tên) để bạn có thể truy cập chúng. Bạn cũng có thể có một số liên kết đến một liên kết tượng trưng, hay nói cách khác, liên kết tượng trưng có thể được đặt một số tên (trong một hoặc nhiều thư mục).
$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a
Trên số tập tin 10486707 là một tập tin thông thường. Hai mục trong thư mục hiện tại (một có tên a
, một có tên b
) liên kết với nó. Vì số liên kết là 2, chúng tôi biết không có tên nào khác của tệp đó trong thư mục hiện tại hoặc bất kỳ thư mục nào khác. Số tệp 10502404 là một tệp khác, lần này loại symlink được liên kết hai lần với thư mục hiện tại. Nội dung của nó (mục tiêu) là đường dẫn tương đối "a".
Lưu ý rằng nếu 10502404 được liên kết với một thư mục khác so với thư mục hiện tại, nó thường sẽ trỏ đến một tệp khác tùy thuộc vào cách truy cập.
$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
2:
total 92
10608674 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar
Các tệp không có tên được liên kết với chúng ngoài các thư mục liên kết chúng. Không gian được lấy theo tên của họ là các mục trong các thư mục đó, nó chiếm trong kích thước tệp / mức sử dụng đĩa của các thư mục.
Bạn sẽ nhận thấy rằng hệ thống gọi để xóa một tập tin unlink
. Đó là, bạn không xóa các tệp, bạn hủy liên kết chúng khỏi các thư mục mà chúng được tham chiếu. Một khi đã hủy liên kết khỏi thư mục cuối cùng có một mục nhập đến một tệp nhất định, tệp đó sẽ bị hủy (miễn là không có quá trình nào có nó đã mở).
lstat
cuộc gọi hệ thống có kích thước của chúng.