Friday, May 27, 2011

Tạo file liên kết tắt trên Linux

Về cách tạo file liên kết tắt này thì LK wa bên vnexperts viết hay nên lấy cho anh em coi luôn !!
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 vnexperts trỏ đến thư mục /bin như sau: $ ln -s /bin vnexperts
Bạn dùng lệnh ls -l để xem lệnh ln của Linux đã tạo ra vnexperts như thế nào:
$ ls -l vnexperts

Ở đâ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 vnexperts -> /bin cho biết tên file liên kết là vnexperts đang trỏ đến thư mục /bin.

Bây giờ nếu bạn tác động đến vnexperts 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ục vnexperts 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 vnexperts 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 vnexperts 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ư vnexperts mất liên kết. Mọi thao tác trên vnexperts 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 vne như sau:
$ cat > file_vne.
Chúng ta hãy tạo tiếp file liên kết cứng file_vne1 trỏ đến file­_vne như sau:
$ ln file_vne file_vne1
Bạn dùng lệnh ls-l để xem lệnh ln của Linux đã tạo ra file_vne1 như thế nào:
$ ls -l file_vne*

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_vne1 hoàn toàn tương đương với file_vne. 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_vne, 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 được file_vne hiện có 2 liên kết cứng (bản thân tên file_vne 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ệu file_vne1 và file_vne 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_vne1 tựa như được sao chép thành một bản khác từ file_vne. Kích thước của file_vne1 và file_vne hoàn toàn như nhau là 44 bytes. Mặc dù tổng cộng trên đĩa bạn chỉ lưu đúng một khối dữ liệu 44 bytes chứ không phải 44x2=88 bytes.

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

- Nếu bạn xóa file_vne đi thì file_vne1 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_vne đế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_vne1. Nếu bạn xóa cả file_vne1, 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 44 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_vne2 và xóa hai liên kết tắt cứng ban đầu xem sao:
$ cat file_vne
$ ln file_vne file_vne2 (bạn cũng có thể dùng lệnh ln file_vne1 file_vne2)
$ ls -l file_vne
$ rm file_vne file_vne1 (xóa 2 file ban đầu)
$ ls -l file_vne2
$ cat file_vne2 (xem nội dung của file file_vne2)

(theo vnexperts)
http://thegioimang.org/linux/tao-file-lien-ket-tat-tren-linux.html

No comments:

Router Packet Networking

Đây là video ngắn khá hay, mô tả đường đi của một gói tin trên Mạng Internet.