Có và không :-)
Trong UNIX, nội dung của tệp khác với mục nhập thư mục cho tệp đó. Bạn có thể có nhiều mục nhập thư mục trỏ đến cùng một nội dung (tra cứu inode để biết mô tả cách hoạt động của tính năng này) và, đây là mẹo phức tạp:
Tất cả các mục nhập đó đều bằng nhau. Mặc dù có thể đã được tạo trước, không có gì đặc biệt về nó. Nếu bạn xóa nó, nội dung sẽ không biến mất, chỉ mục nhập thư mục. Nội dung sẽ biến mất khi inode không có mục trỏ đến nó (và tất cả các tiến trình đóng tập tin - tôi đã bị cắn trước đó bằng cách cố gắng dọn dẹp không gian đĩa xóa các tệp nhật ký chỉ để tìm ra điều đó, bởi vì một tiến trình vẫn có tệp mở, nội dung tập tin không được phục hồi mặc dù không có mục nhập thư mục nào trỏ tới chúng).
Đó là liên kết cứng.
Liên kết mềm phức tạp hơn một chút. Họ tạo ra một "tập tin" của các loại (một inode riêng biệt), có chứa đường dẫn đến tập tin mục tiêu. Và các liên kết đó là không phải là bằng nhau. Xóa bản gốc sẽ để lại cho bạn một liên kết mềm trỏ đến đâu đó.
Bởi vì inode là duy nhất trên một hệ thống tệp nhất định, liên kết cứng không thể tham chiếu đến dữ liệu trên hệ thống tệp khác.
Liên kết mềm không có giới hạn đó vì chúng lưu trữ đường dẫn đến tệp đích, chứ không phải inode của nó.
Các bảng điểm sau đây có thể giúp:
$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
hello
$ cat f2
hello
$ cat f3
hello
$ rm f1
$ ls -ial f*
7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
cat: f1: No such file or directory
$ cat f2
hello
$ cat f3
cat: f3: No such file or directory
Tôi đã sử dụng chỉ có bốn chữ số cuối cùng của số inode để giữ entry ngắn (và không đánh bạn với những con số inode như 43910096366994672
) nhưng bạn có thể nhìn thấy rằng f1
và f2
có cùng một inode chính xác trong khi f3
là khác nhau.Bạn cũng có thể thấy rằng nội dung của tệp được tạo ban đầu là f1
tồn tại khi xóa vì f2
vẫn đang tham chiếu đến nó.
Tuy nhiên, vì f3
đang tham chiếu tên f1
thay vì inode của nó, bạn gặp lỗi khi cố gắng sử dụng.
Ngoài: Bạn ta phải yêu nó khi UNIX đồ chơi với bạn như thế này:
$ ls f*
f2 f3
$ cat f3 # What the ...?
cat: f3: No such file or directory
Hầu như nhiều niềm vui như tạo ra một tập tin gọi là gianxóa lùix và sau đó xem ai đó cố gắng xóa nó :-)
'rm \'? Tôi không thấy làm thế nào backspace (^?) Sẽ làm cho nó phức tạp hơn :) –
Unode