Liên kết cứng và liên kết mềm

command-Loạt bài về sử dụng lệnh trên ubuntu
-Nguồn https://tuyetkiem.wordpress.com
-Hãy trích lại thông tin trên khi bạn phổ biến nội dung bài viết.

Bài liên quan :
Tạo, xóa quản lí tài khoản trong Ubuntu
Redirection: Input & Output
Tài liệu sử dụng: l4u của Phan Vĩnh Thịnh
Bài viết gốc: Liên kết cứng và liên kết mềm
Các lệnh có thể dùng: ln, ls, touch, mkdir

1,Tên tập tin
Trong linux tên tập tin có thể dài 255 ký tự bao gồm bất kỳ ký tự nào trừ ký tự có mã bằng 0 và ký tự dấu gạch chéo (/). Tuy nhiên còn có nhiều ký tự nữa có ý nghĩa đặc biệt trong hệ vỏ shell và do đó không nên dùng để đặt tên tập tin như :
! @ # $ & ~ % * ( ) [ ] { } ’ ” \ : ; > < ‘ dấu cách
Có thể dùng dấu \ để xóa bỏ ý nghĩa đặc biệt của các kí tự và đặt tên cho tập tin bằng những kí tự đặc biệt đó.
Ví dụ :

touch a b

Câu lệnh này sẽ tạo ra 2 file là ab
Tuy nhiên tôi sử dụng : \ để bỏ ý nghĩa đặc biệt của dấu cách

touch a\ b

Khi đó tôi sẽ thu được 1 file là a b
Cũng có thể dùng dấu ‘ hay ” (phím gần phím Enter) để đặt tên có dấu cách :
VD :

touch "a b"

sẽ tạo ra file a b
Dấu \ cũng bỏ ý nghĩa đặc biệt của chính nó
Ví dụ sau sẽ tạo ra một thư mục tên là bill\gates ở Desktop

mkdir ~/Desktop/bill\\gates

Riêng với trường hợp phím Enter. Dấu \ xóa bỏ hẳn ý nghĩa thực thi câu lệnh của phím này
Do đó có thể lợi dụng dấu \ để xuống dòng một lệnh quá dài
VD :

sudo \
apt-get autoclean

2, Liên kết cứng
Mỗi tập tin trong Linux có một “chỉ số ký hiệu” (index descriptor) tương ứng, hay còn gọi là “inode”
Tên của bất kỳ tập tin nào trong Linux chính là liên kết đến chỉ số inode của tập tin
Vì thế mỗi tập tin có thể có bao nhiêu tên tùy thích. Những tên này còn được gọi là liên kết “cứng” (hard link)

Có vẻ như chúng ta đang có nhiều cái tên cho 1 file. Khi truy xuất và chỉnh sửa file từ một hardlink thì những hardlink khác cũng được đồng bộ hóa theo. Dễ hiểu là vì chúng đều trỏ tới 1 chỉ số inode-đại diện thực sự cho một file có trong hệ thống
Ý nghĩa của hard link là chúng ta có thể truy xuất 1 file từ nhiều chỗ khác nhau. Dùng từ “đồng bộ” thì có lẽ không chính xác. Vì chúng ta chỉ có 1 fle duy nhất

Lệnh ls với tham số -l sẽ cho chúng ta biết có bao nhiêu hard link cùng trỏ tới 1 file. Nói cách khác : File đang muốn kiểm tra có bao nhiêu tên
VD:

ls -l ~/Desktop/Linux

và tôi thu được :

drwxrwxrwx 2 tuyetkiem tuyetkiem 5028940 2009-03-25 18:10 ~/Desktop/Linux

Số 2 đứng trước “tuyetkiem” chính là số hard link của thư mục Linux
Lệnh ls với tham số -i cho chúng ta biết chỉ số inode của 1 file.
VD:

ls -i ~/Desktop/Linux

Và tôi thu được :

171017 /home/tuyetkiem/Desktop/Linux

Chỉ số inode của thư mục Linux ở đây là 171017
Hãy chọn 1 file có dung lượng lớn 1, 2 GB để thấy rõ sự không thay đổi dung lượng ổ đĩa trước và sau khi tạo 1 hard link
Lệnh ln sẽ tạo ra 1 tên file mới, ở một vị trí mới
VD :

ln ~/file1 ~/Desktop/file2

Trong ví dụ trên nếu file1 không có hard link nào nữa thì ta có 2 liên kết đến chỉ số inode của file1.
Có thể xóa 1 hard link mà không ảnh hưởng gì đến hard link khác. File chỉ bị xóa khi mọi hard link dẫn đến chỉ số inode bị xóa. Thực ra tôi không chắc về điều này. Chỉ biết rằng nếu mọi hard link bị xóa thì tôi sẽ không biết làm cách nào để truy cập vào file đó nếu nó vẫn còn trên hệ thống
3, Liên kết mềm
Thay vì tạo ra một đường dẫn đến chỉ số inode của 1 file chúng ta có thể tạo ra 1 liên kết mềm. Khái niệm symlink cũng tương tự như khái niệm shortcut bên Windows. Một symlink là 1 file thực sự, nhưng trỏ đến hard link gốc đã tạo ra nó.
Xóa một symlink không ảnh hưởng đến hard link gốc. Thay đổi nội dung symlink sẽ làm thay đổi hardlink gốc hay thay đổi file. Nhưng xóa hardlink gốc thì symlink sẽ không còn giá trị
Lệnh ln với tham số -s sẽ tạo ra 1 symlink
VD :

ln -s ~/a ~/Desktop/b

Câu lệnh trên tạo ra một symlink của file a, tên symlink này là b, đặt ở desktop.

Vài lưu ý :
-Thay đổi nội dung 1 file không làm thay đổi chỉ số inode của file đó
-Trong ví dụ trên : b tất nhiên là hard link của 1 file thực sự. Do đó có thể tạo ra các hard link cho b. Mọi hard link tạo từ b đều là symlink của a. Chỉ số inode của b rõ ràng khác của a. Như vậy khái niệm hard link và symlink là hết sức tương đối.
– Không thể tạo ra một hard link cho một thư mục. Cũng không tạo ra 1 hard link cho 1 file nằm ở một phân vùng khác. Đối với symlink thì có thể tạo thoải mái
-Trong bài viết đối tượng mà tôi đề cập đến là file. Tuy nhiên tôi lại thường xuyên đưa “thư mục” vào các ví dụ. Thực ra trong hệ thống file linux. “Thư mục” cũng chỉ là một file “bình thường”. “File” này chứa danh sách về các “file khác” và cho phép truy xuất đến các file trong danh sách mà nó chứa. Khác biệt ở đây là hệ thống có phân biệt 1 file “thư mục”
———–
Đón đọc bài tiếp theo : Các trường hợp sử dụng lệnh mv

6 phản hồi to “Liên kết cứng và liên kết mềm”

  1. moriator Says:

    Chúng ta thường gọi “file a”, “file b”, nhưng thực tế inode của chúng mới thực sự là đối tượng tồn tại trên đĩa. Còn “a”, “b” chỉ là link.🙂

    Khi xóa tất cả hard link và không có chương trình nào mở file (chính xác là inode) thì Linux sẽ tự động xóa file đó.

    Có một ví dụ thú vị (ít nhất với em) là ~/Desktop/ với ~/Desktop/Linux/.. cùng inode😀 Lúc trước xài “cd ..” cứ nghĩ “..” là kí hiệu “chỉ tới cha”, nhưng thực tế nó là 1 thư mục có cùng inode với thư mục cha.

    Symlink giải quyết được những khuyết điểm của hard link, nhưng nó sẽ gặp rắc rối nếu ta dùng đường dẫn tương đối khi tạo nó.😀

  2. tuyetkiem Says:

    Mình thì nhận xét như thế này:
    Thay đổi nội dung, kích thước, di chuyển, đặt lại tên, chuyển chủ sở hữu đều không làm thay đổi chỉ số inode.
    Như vậy chỉ số inode được gán cho 1 file ngay khi file đó được tạo ra. Các quá trình thay đổi nội dung, dung lượng, đổi tên, đổi vị trí, chuyển chủ sở hữu không phải là quá trình tạo 1 file mới với các thay đổi bởi thao tác shell của người thực hiện. Nó đúng là các quá trình update thông tin cho file cũ. Một quá trình update thông tin không làm thay đổi cách thức xác định file của hệ thống.
    =>Việc hệ thống quản lí một file với các thông tin của nó nằm bên ngoài chỉ số inode.

    (Ai thấy sai xin hãy phản hồi. Mình rất cảm ơn)

  3. tuyetkiem Says:

    @ moriator : Ngay khi một thư mục được tạo ra . Có 2 thông tin đặc chưng của thư mục đó là (.) và (..)
    Theo mình nghĩ thư mục (.) đối với 1 thư mục bất kì và chính nó -Là 2 hardlink của cùng 1 inode
    Còn thư mục (..) của một thư mục bất kì là hardlink với thư mục cha của thư mục bất kì đó. Trong trường hợp này mình nghĩ có sự dùng chung (..) của các thư mục cùng cha

  4. St.Konqueror Says:

    2 cái comments của anh là vào ngày Apr Fool, tin được không đây ta?😀

  5. vuong Says:

    Các bạn cho mình hỏi: thư mục trong linux mà trình duyệt file vẫn hiển thị ra thực sự nó là gì? Có phải nó là 1 mẩu tin chứa các tên file kèm inode tương ứng không?


Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: