Inode là một cấu trúc dữ liệu mô tả một đối tượng hệ thống file, chẳng hạn như một file hoặc một thư mục. Nó lưu trữ metadata liên quan đến đối tượng đó, bao gồm dấu thời gian, bản đồ khối hoặc các thuộc tính mở rộng.
Bạn có thể thấy inode hoạt động bằng cách tạo một thư mục và sau đó xem thông tin inode và kích thước của nó:
$ mkdir dir
$ ls -li
total 0
25606589 drwxrwxr-x. 2 localuser localuser 6 set 19 15:21 dir
$ stat dir
File: dir
Size: 6
Blocks: 0
IO Block: 4096 directory
Device: fd00h/64768d
Inode: 25606589
Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/localuser) Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2022-09-19 15:21:27.616000000 -0300
Modify: 2022-09-19 15:21:27.616000000 -0300
Change: 2022-09-19 15:21:27.616000000 -0300
Birth: -
Sử dụng lệnh ls
với tùy chọn -i
để hiển thị inode. Bạn có thể thấy rằng địa chỉ inode của thư mục dir
được đưa ra dưới đây là 25606589. Bạn có thể xác nhận inode và kiểm tra thông tin metadata khác bằng lệnh stat
.
Tạo một file bên trong thư mục này và kiểm tra thông tin tương tự:
$ touch dir/file
$ stat dir
File: dir
Size: 18
Blocks: 0
IO Block: 4096 directory
Device: fd00h/64768d
Inode: 25606589
Links: 2
Access: (0775/drwxrwxr-x) Uid: ( 1000/localuser) Gid: ( 1000/localuser)
Context: unconfined_u:object_r:user_home_t:s0
...
$ ls -li dir/file
25606591 -rw-rw-r--. 1 localuser localuser 0 set 19 15:29 dir/file
$ stat dir/file
File: dir/file
Size: 0
Blocks: 0
IO Block: 4096 regular empty file
Device: fd00h/64768d
Inode: 25606591
Links: 1
...
File này có địa chỉ inode riêng (25606591) và kích thước của nó là 0 byte vì nó không có nội dung. Thêm chỉ một byte dữ liệu vào nó và xem điều gì sẽ xảy ra:
$ echo 1 > dir/file
$ stat dir/file
File: dir/file
Size: 2
Blocks: 8
IO Block: 4096 regular file
Device: fd00h/64768d
Inode: 25606591
Links: 1
...
File bây giờ tiêu thụ tám sector, mặc dù bạn chỉ thêm 1B dữ liệu. Đó là bởi vì bạn đang làm việc với kích thước đĩa khối 4KiB mặc định và kích thước sector 512B. Địa chỉ inode vẫn giữ nguyên, điều này rất quan trọng vì bất kể kích thước file, nó luôn được tham chiếu bởi địa chỉ inode của nó, chứ không phải từng sector riêng lẻ được tiêu thụ. Tuy nhiên, nếu bạn sao chép file, bản sao sẽ nhận được địa chỉ inode riêng và nó sẽ tiêu thụ thêm tám sector nữa. Điều đó rất quan trọng vì bạn không tạo bản sao khi bạn tạo một liên kết.
Không giống như hard link, Linux Soft Link (còn được gọi là liên kết mềm) chỉ là các file đặc biệt trỏ đến một file hoặc thư mục trong hệ thống của bạn. Liên kết mềm có lợi thế hơn liên kết cứng trong một số trường hợp, chẳng hạn như tạo liên kết cho các thư mục, trỏ đến các file hoặc thư mục trong một hệ thống file khác, có inode và quyền khác với file hoặc thư mục gốc và có kích thước nhỏ. Bằng cách hoạt động như một con trỏ đến nội dung gốc và không phải là bản sao của nó, kích thước của nó chỉ là số byte cần thiết để tạo thành tên của file hoặc thư mục.
Liên kết mềm cũng có những hạn chế. Bởi vì bạn chỉ đang tạo một con trỏ đến một thư mục, nếu bạn thay đổi tên hoặc vị trí thư mục gốc, thì bạn sẽ “phá vỡ” con trỏ của mình. Linux soft link của bạn không thể tìm thấy file hoặc thư mục mà nó được liên kết nữa trừ khi bạn thay đổi đối tượng gốc trở lại tên hoặc vị trí bạn đã sử dụng khi bạn tạo liên kết mềm. Ngoài ra, liên kết mềm không kế thừa các quyền gốc từ file gốc. Điều đó có nghĩa là bất kỳ thay đổi quyền nào được thực hiện trong file gốc sẽ không được phản ánh trong liên kết mềm.
Để tạo linux soft link, hãy sử dụng lệnh ln
, đây là cùng một lệnh và cú pháp được sử dụng cho hard link, ngoại trừ việc bạn bao gồm tùy chọn -s
. Dưới đây là một ví dụ:
$ ln -s /tmp/hard ./dir/soft
$ ls -li dir/
total 0
25811328 lrwxrwxrwx. 1 localuser localuser 9 set 20 13:13 soft -> /tmp/hard
$ ln -s /home/localuser/dir/ /tmp/softdir
$ ls -li total 0
25606589 drwxrwxr-x. 2 localuser localuser 18 set 20 13:13 dir
...
Nếu bạn đang làm việc trong một shell với lệnh ls
có màu, linux soft link được tạo cho một file hoặc thư mục có màu xanh lam hoặc xanh lục lam, trong khi file gốc có màu trắng và thư mục gốc có màu xanh lam đậm. Những màu này cho phép bạn dễ dàng xác định liên kết mềm và nội dung gốc. Ngoài ra, các liên kết mềm được tạo cho file và thư mục có địa chỉ inode khác với bản gốc.
Khi bạn xóa file mà linux soft link trỏ đến, kết nối bị cắt đứt (và dữ liệu biến mất ngay lập tức, không giống như với hard link). Xem cách hai loại khác nhau dưới đây:
$ rm /tmp/hard
$ ls -li /tmp/
total 0
8410604 lrwxrwxrwx. 1 localuser localuser 20 set 20 13:18 softdir -> /home/localuser/dir/
$ ls -li dir/
total 0
25811328 lrwxrwxrwx. 1 localuser localuser 9 set 20 13:13 soft ->
$ file dir/soft
dir/soft: broken symbolic link to /tmp/hard
...
Khi làm việc với linux soft link, hãy đảm bảo luôn có nội dung gốc để tránh bị hỏng liên kết trên hệ thống của bạn.