Hard link vs. Symbolic link

Đối với nhửng người mới tìm hiểu Linux, thì 2 khái niệm hard link, symbolic link (soft link) gây ít nhiều khó khăn. Có lúc chỉ phân biệt hard link dùng cho file, còn soft link dùng được cho file và thư mục (1). Nhiều bài viết so sánh hard linksoft link, đọc xong rối loạn lên cả, bẵng một thời gian bản thân quên hết. Nào là:

+ Dùng hard link tiết kiệm dung lượng hơn, do 2 file cùng dùng chung 1 chỉ số inode, còn soft link thì tạo ra 1 số inode mới (2).

+Dùng hard link xóa file “nguồn” đi, thì file “đích” vẫn hoạt động. Dùng soft link, khi xóa “nguồn”, file “đích” trở nên vô nghĩa (3).

Để so sánh được 2 kiểu liên kết, cách tốt nhất ta cần hiểu bản chất của nó.

Đầu tiên ta tìm hiểu hệ điều hành quản lý file qua chỉ số inode thế nào.

Ta xem một file tên filename, nó luôn có 2 phần tên và chỉ số inode. Tên filename là nhãn thân thiện cho chúng ta sử dụng, còn hệ điều hành chỉ làm việc với chỉ số inode. Khi ta tương tác với dữ liệu của filename, gõ 1 lệnh nào đó (đọc, chỉnh sửa, lưu …), hệ điều hành căn cứ chỉ số inode, mà tìm ra thông tin của inode trong ngân hàng dữ liệu của mình. Cấu trúc một inode chứa: thông tin của file (ví dụ như các bits read, write, execution của owner, group, other) và địa chỉ vùng dữ liệu của file nằm ở nơi nào trong đĩa.(Hinh 1)

hard

(Hinh 1)

Đối với một thư mục thì hệ điều hành Linux cũng đối xử tương tự như vậy, file và thư mục như nhau cả. Dữ liệu thư mục ở đây là list các thư mục hay file nằm trong nó. Do đó quyền execution của thư mục là quyền được đi vào trong nó (cd thumuc), quyền write của thư mục là quyền được tạo thêm file hay thư mục trong nó, quyền read của thư mục là quyền xem danh sách file, thu mục bên trong nó (ls thumuc).

1) Cơ chế tạo một hard link.
Giả sử ta có file “nguồn” filename, ta muốn tạo file “đích” other.

$ ln filename other

Hệ thống chỉ việc tạo thêm một cái nhãn other, chỉ số inode dùng chỉ số inode của file filename. (Hinh 1). Như vậy cách dùng từ file “nguồn”, file “đích” không chính xác lắm, chẳng cái nào chỉ tới cái nào cả, “tuy 2 mà 1”.

Hiểu đơn giản giống như một nhà có 2 cách ghi địa chỉ, ghi thế nào cũng gởi tới 1 nơi. Ví dụ Tòa nhà Ủy ban nhân dân TpHCM nằm ở số 1 đường ABC, bạn muốn gởi thư tới đó bạn dùng một trong 2 địa chỉ sau
“Uy ban nhân dân TpHCM”
“số 1 đường ABC, TPHCM”
, người phát thư đều đưa đúng địa chỉ cả.

2) Cơ chế tạo một soft link.

Giả sử ta có file “nguồn” filename, ta muốn tạo file “đích” other.

$ ln -s filename other

Trường hợp này, hệ thống tạo 1 file mới hoàn toàn có nhãn other, có inode mới. Chỉ có điều dữ liệu của other không phải là dữ liệu thật như các file bình thường khác mà nó chỉ chứa vỏn vẹn đường dẫn tới file filename. (Hinh 2)

soft

(Hinh 2)

Ta muốn sửa nội dung file other, ta có quyền sửa file này, nhưng ta không có quyền sửa file filename, thì cũng bó tay chịu chết.(4)

Bây giờ những điểm khác biệt (1), (2), (3), (4) … mà ai nói ta đều có thể tự giải thích được.

Posted in GNU/Linux. Nhãn: . 6 Comments »

6 bình luận to “Hard link vs. Symbolic link”

  1. kyanh Says:

    bài viết không đề cập tới cons và pros của mỗi thứ nhỉ?

  2. bronzeboyvn Says:

    Tại sao trong bài viết so sánh, tôi lai không nêu ưu và khuyết của từng loại (cons and pros) ?
    Có nhiều bài viết liệt kê ưu-khuyết rất hay nhưng họ không giải thích tại sao, làm cho người mới học rất lúng túng. Tôi không phải chép lại, mà cung không thuộc các đặc tính ưu và khuyết của chúng. Điều quan trọng là hiểu bản chất để giải thích mọi thứ.
    Bạn hãy nêu ưu-khuyết từng loại, tôi sẽ căn cứ trên 2 hình (1,2) trong bài viết để giải thích rõ ràng “tại sao”.

  3. Ẩn danh Says:

    tra loi chua ro rang lam

  4. bronzeboyvn Says:

    ý của tôi là bạn đọc bất cứ thông tin nào cho biet sự khác biệt giữa 2 loai links này, hãy đạt câu hỏi tại sao nếu bạn không hiểu rõ (thường ở các trang web, họ chỉ liệt kê ra điểm khác biệt chứ không giải thích cặn kẽ nguyên nhân). Khi đó tôi sẽ căn cứ vào bản chất mỗi loại (như đã trình bày) giải thích rõ cho bạn.
    Ví dụ, bạn từng nghe người ta nói: không thề tao hard link đến file thuộc hệ thống filesystem khác. Còn soft link thì có the, ta có thể tạo 1 link ở filesystem nay đến filesystem khác. Bạn cần tôi giải thích tại sao kg ? Cũng như những thông tin so sánh khác, tôi có thể giải thích cho bạn tại sao.

  5. Ẩn danh Says:

    Cam on bai viet rat hay cua ban

  6. nguyenmanh Says:

    bài viết khá hay !


Gửi phản hồi cho bronzeboyvn Hủy trả lời