Giải thích về Hard links và soft links trong Linux

Cùng thảo luận về việc khi nào bạn sử dụng hard links hay soft links, và cú pháp của từng câu lệnh.

Đã bao giờ bạn quen thuộc với điều gì đó, đã làm việc xung quanh nó, nhưng vẫn chưa hiểu đầy đủ các khái niệm của nó? Đây là một cảm giác khó chịu nhưng cũng dễ khắc phục. Đôi khi bạn chỉ cần ai đó giải thích những khái niệm này bằng ngôn ngữ đơn giản nhất. Đó cũng chính là mục tiêu của bài viết này, tôi muốn trình bày về Hard links và soft links bằng những thuật ngữ cơ bản nhất có thể. Tôi cũng sẽ hướng dẫn bạn cú pháp để tạo các liên kết này ở phần dưới

Hard links

Phương thức hoạt động của hard link là một trong những gì cơ bản nhất chúng ta sẽ thảo luận hôm nay. Mọi file trong hệ thống Linux bắt đầu với một hard link đơn giản. Đó là sự liên kết giữa tên file và dữ liệu được lưu trong hệ thống. Tạo thêm một hard link nữa cho files có nghĩa sẽ tạo ra một số thay đổi khác, hãy cùng xem chúng

Đầu tiên bạn tạo một file mới trỏ tới dữ liệu giống y như file cũ. Điều này nghĩa là bạn có 2 files khác nhau, trông khác nhau, nhưng trỏ tới cùng một dữ liệu. Ví dụ, nếu bạn tạo ra một file /home/tcarrigan/demo/link_test và viết hello world vào trong file. Ở đây tôi đã có một hard link giữa tên file link_test và nội dung của file (hello world)

[tcarrigan@server demo]$ ls -l
total 4
-rw-rw-r--. 1 tcarrigan tcarrigan 12 Aug 29 14:27 link_test

Ghi nhớ lại số liên kết ở đây là 1

Sau đó tôi sẽ tạo thêm một hard link mới trong thư mục /tmp tới file ở trên sử dụng dòng lệnh

[tcarrigan@server demo]$ ln link_test /tmp/link_new

Cú pháp ở đây là

ln (Đường dẫn file gốc) (Đường dẫn file mới)

Khi bạn trông vào hệ thống, bạn sẽ thấy cả hai hard links

[tcarrigan@server demo]$ ls -l link_test /tmp/link_new 
-rw-rw-r--. 2 tcarrigan tcarrigan 12 Aug 29 14:27 link_test
-rw-rw-r--. 2 tcarrigan tcarrigan 12 Aug 29 14:27 /tmp/link_new

Sự khác nhau cơ bản ở đây là tên file. Và số liên kết đã được thay đổi thành (2). Nếu tôi dùng lệnh cat để xem nội dung của files mới. Nó sẽ hiển thị data ban đầu

[tcarrigan@server demo]$ cat /tmp/link_new 
hello world

Khi sự thay đổi xảy ra với một files, thì files còn lại cũng sẽ ảnh hưởng theo. Ví dụ như quyền hạn, số liên kết, chủ sở hữu, dấu thời gian và nội dung của file là hoàn toàn giống nhau. Nếu files gốc bị xoá, dữ liệu vẫn còn dưới hardlink thứ 2. Dữ liệu chỉ hoàn toàn bị loại bỏ khỏi ổ đĩa của bạn khi tất cả links tới dữ liệu bị loại bỏ. Nếu bạn tìm thấy hai files với các thông số giống hệt nhau nhưng không đảm bảo rằng chúng có được hard-link với nhau không, sử dụng câu lệnh ls -i để xem số inode. Những files được hard-link với nhau có cùng số inode

Hard Limit

Mặc dùng hardlink rất hữu dụng, nhưng có một số hạn chế trong những gì hard links có thể làm. Ví dụ như hardlink chỉ có thể tạo trên những file thông thường (Không phải thư mục hoặc những files đặc biệt). Đồng thời Hardlink cũng không thể mở rộng nhiều hệ thống tệp. Chúng chỉ hoạt động khi có hardlink mới tồn tại trên cùng một hệ thống tệp như file gốc

Soft links

Thường được gọi là symbolic links, soft links liên kết giữa non-regular files và regular files. Chúng có thể mở rộng giữa các filesystems (Điều mà hardlink không làm được). Về định nghĩa, một soft link không phải là một file thông thường, nó là một file đặc biệt trỏ tới file sẵn có. Giờ tôi sẽ chỉ cho bạn cách tạo một soft link. Tôi sử dụng câu lệnh ln -s với cú pháp

ln -s (Đường dẫn tới file bạn muốn trỏ tới) (Đường dẫn file mới)

Trong ví dụ phía dưới, tô sẽ tạo ra một file mới tại /home/tcarrigan/demo/soft_link_test với nội dung là (soft Hello world). Sau đó tôi sẽ tạo một soft link tới file tại /tmp/soft_link_new

[tcarrigan@server demo]$ ln -s /home/tcarrigan/demo/soft_link_test /tmp/soft_link_new
[tcarrigan@server demo]$ ls -l soft_link_test /tmp/soft_link_new 
-rw-rw-r--. 1 tcarrigan tcarrigan 17 Aug 30 11:59 soft_link_test
lrwxrwxrwx. 1 tcarrigan tcarrigan 35 Aug 30 12:09 /tmp/soft_link_new -> /home/tcarrigan/demo/soft_link_test

Lưu ý rằng /tmp/soft_link_new chỉ là một symbolic link, trỏ tới file gốc /home/tcarrigan/demo/soft_link_test. Nếu tôi dùng lệnh cat để xem nội dung của file /tmp/soft_link_new. Tôi sẽ thấy nội dung file gốc (soft Hello world)

[tcarrigan@server demo]$ cat /tmp/soft_link_new 
soft Hello world

Tất cả nghe có vẻ đã hoàn thảo, tuy nhiên vẫn có một số nhược điểm khi sử dụng soft link. Vấn đề lo ngại lớn nhất là mất mát và nhầm lẫn data. Nếu file gốc bị xoá thì softlink bị hỏng. Tình trạng lúc này là soft link bị treo và không trỏ vào đâu. Nếu bạn tạo một file mới với tên như file cũ, thì cái softlink lúc này không bị treo nữa. Nó sẽ trỏ tới file mới tạo, kể cả có nằm trong mục đích của bạn hay không, vì vậy hãy luôn để tâm vào mỗi thao tác nhé

Hard or soft?

Không có một câu trả lời rõ ràng ở đây, mọi thức tuỳ thuộc vào hoàn cảnh riêng của bạn. Trong khi các phương thức hoạt động có vẻ khó nhớ, nhưng cú pháp thì lại thật sự dễ nhớ. Vì vậy khá đơn giản để tach biệt hai thứ này trong trí nhớ chúng a. Tóm gọn lại

  • Một Hardlink luôn luôn trỏ tới một file có dữ liệu trong bộ nhớ
  • Một softlink luôn luôn trỏ file này tới một file khác mà file đó trỏ tới dữ liệu trong bộ nhớ

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *