Trong các hệ thống kiểu Unix, cấu trúc dữ liệu đại diện cho các đối tượng hệ thống tệp (nói cách khác, dữ liệu về một tệp), được lưu trữ trong cái gọi là "inode".
Tên tệp chỉ là một liên kết đến nút này và được gọi là "liên kết cứng". Không có sự khác biệt giữa tên đầu tiên một tập tin được đưa ra và bất kỳ liên kết tiếp theo. Vì vậy, câu trả lời là "có": một liên kết cứng là một tệp thông thường và thực sự, một tệp thông thường là một liên kết cứng.
Các ls
lệnh sẽ cho bạn thấy có bao nhiêu liên kết cứng có đến tập tin.
Ví dụ:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Ở đây chúng tôi đã tạo một tập tin gọi là /tmp/hello.txt
. Đầu 1
ra từ ls -l
chỉ ra rằng có 1 liên kết cứng đến tệp này. Liên kết cứng này là tên tệp chính nó /tmp/hello.txt
.
Nếu bây giờ chúng ta tạo một liên kết cứng khác đến tệp này:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
bây giờ bạn có thể thấy rằng cả hai tên tệp cho biết có 2 liên kết cứng đến tệp. Cả hai đều không phải là tên tệp "phù hợp", cả hai đều có giá trị như nhau. Chúng ta có thể thấy rằng cả hai đều trỏ đến cùng một nút (trong trường hợp này, 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Có một quan niệm sai lầm phổ biến rằng điều này là khác nhau cho các thư mục. Tôi đã nghe người ta nói rằng số lượng liên kết được trả về bởi ls
một thư mục là số thư mục con, trong đó có .
và ..
đó là không chính xác . Hoặc, ít nhất, trong khi nó sẽ cung cấp cho bạn con số chính xác, nó đúng vì những lý do sai!
Nếu chúng ta tạo một thư mục và thực hiện, ls -ld
chúng ta sẽ nhận được:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
Điều này cho thấy có 2 liên kết cứng đến thư mục này. Đó là:
/tmp/testdir
/tmp/testdir/.
Lưu ý rằng /tmp/testdir/..
là không một liên kết đến thư mục này, đó là một liên kết đến /tmp
. Và điều này cho bạn biết lý do tại sao "số lượng thư mục con" hoạt động. Khi chúng ta tạo một thư mục con mới:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
Bây giờ bạn có thể thấy có 3 liên kết cứng đến /tmp/testdir
thư mục. Đó là:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Vì vậy, mỗi thư mục con mới sẽ tăng số lượng liên kết lên một, vì ..
mục nhập mà nó chứa.