Taạo hardlink trong linux

Giới thiệu

  • Trong hệ thống file Linux, một liên kết (link) là một kết nối giữa file name và dữ liệu thực tế trên disk.
  • Có hai loại liên kết chính có thể được tạo: "hard" links, và "soft" hay symbolic links. Trước khi tìm hiểu về hard links và symbolic links, có một khái niệm khác cần hiểu rõ là “inode” - một khái niệm cơ bản trong Linux filesystem. Mỗi đối tượng của filesystem được đại diện bởi một inode.

1. Inode

  • Trong Linux, dữ liệu của các file được chia thành các block. Có nhiều cách tổ chức để liên kết các khối dữ liệu trong một file với nhau, một trong các cách đó là dùng chỉ mục (indexed allocation).

    Taạo hardlink trong linux

  • Lệnh tạo liên kết cứng như sau: ln [file nguồn] [file đích]

Taạo hardlink trong linux

  • 2 file viblo.txt và hardlink.txt có số inode giống nhau là 1326632. Xóa file viblo.txt thì nội dung của file hardlink.txt vẫn còn.

Taạo hardlink trong linux

  • Nội dung trong hardlink.txt vẫn còn vì khi xóa file viblo.txt hệ thống chỉ xóa đi số link count trong inode của file đi 1.
  • Khi sử dụng lệnh rm để xóa file thì làm giảm đi một hard link. Khi số lượng hard link giảm còn 0 thì không thể truy cập tới nội dung của file được nữa
  • Hầu hết người dùng không muốn tự tạo hoặc sửa đổi các hard links, nhưng các symbolic links là một công cụ hữu ích cho bất kỳ người dùng Linux nào.

  • Symbolic links là một file đặc biệt trỏ đến một file hoặc thư mục khác - được gọi là target. Khi được tạo, một symbolic links có thể được sử dụng thay cho target file. Nó có thể có một tên độc nhất, và được đặt trong bất kỳ thư mục nào. Nhiều symbolic links thậm chí có thể được tạo cho cùng một target file, cho phép truy cập target bằng nhiều tên khác nhau.

    Taạo hardlink trong linux

  • Symbolic link không chứa bản sao dữ liệu của target file. Nó tương tự như một shortcut trong Microsoft Windows: nếu bạn xóa một symbolic link, target sẽ không bị ảnh hưởng. Vì chỉ đơn thuần là một shortcut, symbolic link không dùng đến inode entry. Nó sẽ tạo ra một inode mới và nội dung của inode này trỏ đến tên tập tin gốc.

  • Ngoài ra, nếu target của một symbolic link bị xóa, di chuyển hoặc đổi tên, symbolic link không được cập nhật. Khi điều này xảy ra, liên kết tượng trưng được gọi là "broken" hoặc "orphaned" và sẽ không còn hoạt động như một liên kết.

  • Lệnh tạo liên kết tượng trưng như sau: ln -s [file nguồn] [file đích]

Taạo hardlink trong linux

  • 2 file viblo2.txt và softlink.txt có số inode khác nhau lần lượt là 1326634 và 1326630. Xóa file vibo2.txt thì nội dung của file softlink.txt sẽ không còn.

Taạo hardlink trong linux

  • Nội dung của softlink.txt không hiển thị được vì softlink.txt trỏ đến một tập tin khác, mà tập tin này không tồn tại.
Hard linksSymbolic links
Chỉ liên kết được tới file, không liên kết được tới thư mục Có thể liên kết được tới thư mục
Không tham chiếu được tới file trên ổ đĩa khác Có thể tham chiếu tới file/thư mục khác ổ đĩa
Liên kết tới một file vẫn còn ngay cả khi file đó đã được di chuyển Liên kết không còn tham chiếu được nữa nếu file được di chuyển
Được liên kết với inode tham chiếu vật lý trên ổ cứng nơi chứa file Liên kết tham chiếu tên file/thư mục trừu tượng mà không phải địa chỉ vật lý. Chúng được cung cấp inode riêng của mình
Có thể làm việc với mọi ứng dụng Một số ứng dụng không cho phép symbolic link

References

https://en.wikipedia.org/wiki/Inode

https://www.computerhope.com/issues/ch001638.htm

https://www.nixtutor.com/freebsd/understanding-symbolic-links/