You are on page 1of 3

Nếu trên Windows bạn đã quen với khái niệm Shortcut là các file chứa thông tin trỏ

đến
một file thực thi khác thì khái niệm này đã tồn tại trong thế giới UNIX từ rất lâu. Linux và
UNIX cho phép bạn tạo một file liên kết tắt (Symbol Link) đến một file vật lý khác. File
liên kết tắt có thể trỏ đến một file hoặc thư mục. Bạn có thể dùng lệnh ln để tạo liên kết tắt.
Ở đây Linux và UNIX đưa ra khái niệm liên kết tắt rộng hơn khái niệm Shortcut trên
Windows. Lệnh ln có khả năng tạo ra liên kết tắt cứng (hard link) và liên kết tắt mềm (soft
link). - Liên kết tắt cứng sẽ tạo ra một file trỏ đến cùng mục nhập i-node của file vật lý trên
đĩa. Và do đó file vật lý trên đĩa chỉ thật sự bị xóa khi tất cả các liên kết cứng đã bị xóa cùng
với bản thân file.

- Liên kết tắt mềm chỉ chứa các thông tin trỏ đến file vật lý. File liên kết mềm không tham
chiếu trực tiếp đến điểm nhập i-node của file vật lý mà nó trỏ đến. Nếu bạn xóa file vật lý
ban đầu đi thì file liên kết mềm sẽ không biết đường tham chiếu đến file gốc ban đầu nữa.
Tuy nhiên một khi bạn tạo lại file gốc vật lý thì file liên kết mềm vẫn tiếp tục có hiệu lực.

Lệnh ln không tham số sẽ tạo liên kết tắt cứng trong khi với tùy chọn -s thì lệnh ln sẽ tạo
liên kết tắt mềm.

1. Liên kết tắt mềm

Trước hết chúng ta hãy tạo liên kết tắt mềm. Bạn tạo file ict24h trỏ đến thư mục /bin như
sau:
Code:
$ ln -s /bin ict24h
Bạn dùng lệnh ls -l để xem lệnh ln của Linux đã tạo ra ict24h như thế nào:
Code:
$ ls -l ict24h
Ở đây ta thấy thêm một số thông tin mới. Cờ chỉ đặc tính file trước đây là chữ d (chỉ thư
mục) hoặc - (chỉ file) giờ được thay thế bằng chữ l cho biết đây là file liên kết. Ở cột cuối
cùng bên phải bạn thấy thông tin ict24h -> /bin cho biết tên file liên kết làict24h đang trỏ
đến thư mục /bin.

Bây giờ nếu bạn tác động đến ict24h cũng tương tự như bạn tác động vào thư
mục /bin. Chẳng hạn bạn có thể chuyển vào thư mụcict24h và dùng lệnh ls bạn sẽ thấy tất
cả nội dung của thư mục /bin. Sao chép, di chuyển, xóa file trong thư mục ict24h cũng đồng
nghĩa với thay đổi nội dung của thư mục /bin. Tuy nhiên nếu bạn xóa ict24h thì không có
nghĩa là thư mục /bin bị xóa. Chỉ có liên kết mềm bị xóa đi thôi: Mặc dù vậy nếu bạn xóa
thư mục /bin thì coi như ict24h mất liên kết. Mọi thao tác trên ict24h sẽ không còn ý nghĩa
nữa trừ khi bạn tạo lại thư mục /bin.

2. Liên kết tắt cứng

Nào chúng ta hãy tìm hiểu liên kết tắt cứng chi tiết hơn. Như đã nêu, liên kết tắt cứng sẽ tạo
ra file mới trỏ đến cùng mục nhập i-node của file vật lý ban đầu. Lúc này file liên kết tắt
cứng mới sẽ đồng đẳng với file vật lý ban đầu. Nếu bạn xóa file vật lý ban đầu thì dữ liệu
vẫn không bị mất, bởi vì nó đang còn có thể tham chiếu đến bởi liên kết tắt cứng khác. Khi
không còn liên kết cứng nào tham chiếu đến i-node nữa thì dữ liệu của file mới bị xóa khỏi
đĩa.

Trước hết chúng ta hãy tạo ra file vật lý thứ nhất mang tên ict như sau:
Code:
$ cat > file_ict
Chúng ta hãy tạo tiếp file liên kết cứng file_ict1 trỏ đến file _ict như sau:
Code:
$ ln file_ict file_ict1
Bạn dùng lệnh ls-l để xem lệnh ln của Linux đã tạo ra file_ict1 như thế nào:
Code:
$ ls -l file_ict*
Như bạn thấy thông tin mà lệnh ls hiển thị sau khi tạo ra liên kết tắt cứng file_ict1 hoàn
toàn tương đương với file_ict. Một số điểm bạn cần chú ý ở đây:

- Đối với liên kết tắt cứng, đặc tính đầu tiên của file không có ký tự nhận dạng l cho bạn
biết đây là file liên kết tắt như liên kết tắt mềm.

- Cột thông tin thứ 2 như bạn thấy đối với file_ict, trước khi tạo liên kết là 1 nay tăng lên 2.
Căn cứ vào đây bạn sẽ biết đượcfile_ict hiện có 2 liên kết cứng (bản thân tên file_ict cũng
được xem là một liên kết tắt cứng). Bạn không thể biết được rằng liệufile_ict1 và file_ict có
tham chiếu đến cùng dữ liệu hay không trừ khi xem qua nội dung của chúng.

- Ngoại trừ giá trị tham chiếu tăng lên 2 còn file_ict1 tựa như được sao chép thành một bản
khác từ file_ict. Kích thước củafile_ict1 và file_ict hoàn toàn như nhau - giả sử là 22 bytes.
Mặc dù tổng cộng trên đĩa bạn chỉ lưu đúng một khối dữ liệu 22bytes chứ không
phải 22x2=44 bytes.

- Nếu bạn thay đổi nội dung file_ict thì nội dung của file_ict1 cũng thay đổi theo bởi vì nó
trỏ đến cùng khối dữ liệu 22 bytes màfile_ict chỉnh sửa.

- Nếu bạn xóa file_ict đi thì file_ict1 vẫn đọc được nội dung dữ liệu. Bởi vì thật sự chỉ có
liên kết của file_ict đến i-node là bị cắt đứt. Mục nhập i-node vẫn giữ lại liên kết
của file_ict1. Nếu bạn xóa cả file_ict1, lúc này Linux nhận thấy i-node không còn liên kết
tắt cứng nào tham chiếu đến nữa, nó sẽ loại bỏ khối dữ liệu 22 bytes mà i-node nắm giữ
khỏi hệ thống file.

Bạn hãy thử tạo thêm liên kết tắt cứng file_ict2 và xóa hai liên kết tắt cứng ban đầu xem
sao:
Code:
$ cat file_ict
$ ln file_ict file_ict2 (bạn cũng có thể dùnglệnh ln file_ict1 file_ict2)
$ ls -l file_ict
$ rm file_ict file_ict1 (xóa 2 file ban đầu)
$ ls -l file_ict2
$ cat file_ict2 (xem nội dung của file file_ict2)

You might also like