Liên kết cứng trong Linux là gì?


9

Tôi đã tìm kiếm xung quanh và đang cố gắng tìm hiểu sự khác biệt giữa liên kết cứng và liên kết tượng trưng (liên kết mềm).

Tôi thấy liên kết này khá hữu ích. Nhưng tôi vẫn không rõ lắm. Tôi hiểu liên kết mềm không phải là bản sao của tệp gốc, nhưng liên kết cứng có phải là bản sao hay không?

Câu trả lời:


15

Để sử dụng một sự tương tự từ việc gửi thư, một liên kết tượng trưng giống như một địa chỉ chuyển tiếp ... khi một cái gì đó cố gắng mở một liên kết tượng trưng, ​​nó sẽ mở "tệp" (mặc dù không phải là một tệp) được lưu trữ ở đó và thấy rằng nó thay vào đó nên nhìn vào một tệp có tên khác để thay vào đó mở tệp khác.

Một liên kết cứng giống như có hai địa chỉ cho cùng một địa điểm. (Tất nhiên điều này không thực sự có thể trong thế giới vật lý). Khi một cái gì đó cố gắng đọc tên tệp (địa chỉ), họ sẽ nhận được cùng một tệp vật lý (vị trí).

Vì vậy, một liên kết cứng không phải là một bản sao, vì tệp chỉ được lưu trữ một lần (nhưng có nhiều tên). Nhưng nó hoạt động rất giống một bản sao, bởi vì bạn có thể truy cập cùng một thông tin từ hai tên tệp.


+1 cho một sự tương tự rất hay, điều này sẽ giúp tôi đơn giản hóa mọi thứ khi tôi đang cố gắng để giải quyết vấn đề này.
John Gardeniers

1
+1, nhưng hai chi tiết nhỏ: 1) Có thể có nhiều địa chỉ cho cùng một địa điểm trong thế giới thực, chỉ là không phổ biến. 2) Có lẽ sự khác biệt quan trọng nhất giữa liên kết cứng và bản sao là, nếu bạn có /foo/barthay đổi /foocũng sẽ thay đổi /barnếu chúng là liên kết cứng (vì chúng là hai tên cho cùng một tệp), nhưng không phải là chúng bản sao (vì chúng là hai tệp hoàn toàn độc lập).
Dave Sherohman

3

Số A (thứ hai và tất cả các liên kết tiếp theo) đến một tệp là một con trỏ tới cùng một nút trên đĩa.


3

Khi bạn tạo một liên kết cứng, điều đó có nghĩa là cùng một tệp sẽ xuất hiện ở hai nơi khác nhau. Một tệp thực sự chỉ là một tham chiếu đến một tập hợp các khối dữ liệu trên các đĩa, vì vậy một liên kết cứng sẽ thêm một tham chiếu khác. Các tập tin hiếm khi thực sự bị xóa; các tham chiếu chỉ bị xóa để không thể truy cập dữ liệu. Đó là lý do tại sao khi bạn xóa một tệp bạn đã tạo dưới dạng liên kết cứng, tệp gốc khác sẽ ở lại và ngược lại.

Mặt khác, symlink là một hướng để truy cập một tệp có tên nhất định. Nó nói với bất kỳ chương trình nào, "Nếu bạn muốn sử dụng tệp này, nó ở đằng kia". Đây là lý do tại sao nếu bạn xóa mục tiêu của symlink, symlink sẽ bị hỏng. Và nếu bạn xóa liên kết, mục tiêu sẽ không bị ảnh hưởng.


2

Một tệp trong hệ thống * nix có hai phần. một phần dữ liệu và phần khác là inode. inode lưu trữ meta (thông tin liên quan đến dữ liệu như vị trí lưu trữ trong ổ cứng). Liên kết cứng tạo ra một bản sao chính xác của inode này. Trong khi liên kết sym tạo ra một nút inode trỏ đến nút của nút thực tế. Vì vậy, dữ liệu inode trong liên kết cứng giống như dữ liệu đích nhưng dữ liệu khác nhau trong liên kết sym. Vì vậy, để đặt câu chuyện dài ngắn, liên kết sym và liên kết cứng khác nhau bởi nội dung dữ liệu inode của chúng không phải là dữ liệu tệp. Đây là sự hiểu biết của tôi về sự khác biệt giữa liên kết sym và liên kết cứng. Tôi đã có một thời gian khó khăn ban đầu hiểu điều này vì đây là một điều gì đó phát triển hơn và tôi không phải là một nhà phát triển. Oh những người hiểu biết, xin vui lòng sửa cho tôi nếu tôi sai.


3
"Thư mục" trong * nix là danh sách tên tệp và số inode. Liên kết cứng là hai mục nhập thư mục có cùng số inode và do đó tham chiếu đến cùng một nút, không phải là bản sao của nút. Symlink là một mục nhập thư mục trỏ đến một mục nhập thư mục khác (theo tên), không phải bất kỳ inode cụ thể nào. (Ok, nó thực sự có một nút, nhưng nút đó đề cập đến mục nhập thư mục, không phải dữ liệu tệp.)
Randy Orrison
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.