Linux

Khái niệm Liên kết cứng và Liên kết mềm trong Linux


Thật ra khái niệm này cũng không có gì đáng để quan tâm quá nhiều (nếu chỉ thi thôi), nhưng vì mấy hôm trước đọc sách mà thấy nói ong đầu quá. May sao trên mạng cũng có một vài tài liệu nói dễ hiểu hơn. Hôm nay xin mạn phép chém lại một chút.
Khái niệm liên kết tồn tại trên UNIX khá lâu rồi. Khái niệm này hoàn toàn bao quát hơn khái niệm Shortcut bên Windows. Unix cho phép tạo một liên kết tắt để trỏ đến một file vật lí khác, nó có thể là một file hay một thư mục. Ở đây phát sinh 2 khái niệm là liên kết tắt cứng và liên kết tắt mềm.
1. Liên kết tắt mềm
File liên kết tắt mềm chỉ chứa các thông tin của file vật lí mà nó trỏ đến, nó hoàn toàn không tham chiếu trực tiếp đến điểm nhập inode của file này. Khi bạn xóa file vật lí gốc, thì dĩ nhiên file liên kết tắt hoàn toàn không còn ý nghĩa j nữa, trừ khi bạn khởi tạo lại file vật lí đã xóa. Nhưng nếu xóa file liên kết tắt mềm thì không có nghĩa là file vật lí kia cũng bị xóa nốt!
Mọi thao tác như thêm, chỉnh sửa dữ liệu trong 2 file này hoàn toàn như nhau.
Giả dụ ta có thư mục test trong Home. Sử dụng lệnh “ln -s” để tạo 1 liên kết mềm đến thư mục này.

$ ln -s test test-file

Như vậy, kết quả thu được là ta có một file liên kết mềm test-file nằm trong Home (để ý bạn sẽ thấy cái mũi tên ở file này).
Câu lệnh “ls -l” sẽ cho ta biết thông tin chi tiết của file test-file:

$ ls -s test-file

Kết quả thu được sẽ có dạng:
lrwxrwxrwx 1 hoanghai hoanghai 4 2009-12-09 22:58 test-file -> test
Để ý rằng chữ “l” (in đậm) thay thế cho thuộc tính của file test-file, nó biểu thị rằng test-fle là một file liên kết và nó trỏ đến thư mục test (phần in đầm cuối).

Symbolic link Example
Symbolic link Example

Ban thử thao tác thêm, xóa hay copy file trong thư mục test sẽ thấy kết quả như đã nói ở trên.
2. Liên kết tắt cứng
Liên kết tắt cứng sẽ tạo ra 1 file vật lí cùng trỏ đến mục nhạp inode của file vật lí gốc. 2 fle này hoàn toàn đồng đẳng với nhau. Nếu xóa file gốc thì dữ liệu hoàn toàn không bị mất, nó chỉ mất khi ko còn liên kết nào đến inode nữa.
Giả dụ ta tạo ra file_test1:

$ cat > file_test1

Chúng ta sẽ tạo liên kết cứng trỏ file_test2 đến file_test1 ở trên.

$ ln file_test1 file_test2

Bây giờ dùng lệnh “ls -l” để xem lệnh “ln” đã tạo ra file_test2 như thế nào

$ls -l file_test*

Như thế bạn sẽ thấy 2 file hoàn toàn tương tự nhau.

Hard link Example
A ardlink Example

Cần lưu ý một số đặc tính của liên kết cứng như sau:
– Đặc tính đầu tiên mà ta thấy là không có kí tự “l” để nhận dạng liên kết (Như trong trường hợp liên kết mềm) – Nó coi như 1 file thông thường.
– Đặc tính thưs 2 mà ta thấy là số liên kết vật lí liên kết đến file_test1 trước đó là 1, bây giờ đã tăng lên 2. Nó bao gồm liên kết đến chính nó (Liên kết này cũng là 1 liên kết cứng). Bạn không thể biết 2 file trên có tham chiếu đến cùng dữ liệu hay ko, trừ khi xem qua chúng.
– Hai file: file_test1 và file_test2 có cùng dung lượng (ở đây là 12 bytes), mặc dù trên ổ đĩa khối dữ liệu chúng lưu trữ cũng chỉ là 12 bytes (Chứ ko phải 12 + 12 = 44 bytes).
– Nếu bạn xóa file_test1 thì file_test2 vẫn đọc được nội dung dữ liệu. Chỉ khi bạn xóa luôn cả 2 file thì hệ thống mới nhận ra rằng inode không còn tham chiếu đến liên kết cứng nào đó, khi đó nó sẽ xóa khối dữ liệu 12 bytes kia.

Hoàng Hải

1 bình luận về “Khái niệm Liên kết cứng và Liên kết mềm trong Linux

Bình luận về bài viết này

Trang web này sử dụng Akismet để lọc thư rác. Tìm hiểu cách xử lý bình luận của bạn.