2010-05-11 59 views
8

Tôi chỉ muốn làm rõ nếu một liên kết cứng/tượng trưng thực sự là một tệp được tạo ra ??Liên kết cứng và liên kết tượng trưng trong Unix

Tôi chạy lệnh:

ln source hardlink 
ln -s source softlink 

- Lệnh ls cho thấy điều này 2 liên kết như một tập tin.

Vì vậy, truy vấn của tôi là, không ln/ln -s thực sự tạo tệp?

Trân trọng, darkie15

Trả lời

13

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 f1f2 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ó :-)

+0

'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

3

Không ai tạo tệp.

Tệp trên đĩa được xác định bằng "inode". Thư mục ánh xạ tên tệp thành inodes. Liên kết cứng có nghĩa là "tạo tên tệp mới trong thư mục này trỏ tới cùng một inode như tệp tôi đặt tên".

Liên kết tượng trưng có nghĩa là "tạo tên tệp mới trong thư mục này trỏ đến bất kỳ tệp nào mà tệp này trỏ tới."

Khi mangoman chỉ ra trong nhận xét, liên kết tượng trưng sẽ tạo tệp có tên của mục tiêu liên kết, nhưng bạn không nên chú ý đến nó. Đó là một tập tin đặc biệt không có gì trong doanh nghiệp của bạn.

+2

trong trường hợp liên kết mềm, một tệp được tạo có chứa đường dẫn tuyệt đối đến đích. –

Các vấn đề liên quan