Sự khác biệt giữa một liên kết cứng và các tập tin sao chép là gì?


22

Tôi hiểu rằng các liên kết cứng bao gồm một bản sao của tệp gốc và tôi có thể xóa một tệp được liên kết cứng trong một thư mục và nó vẫn tồn tại trong thư mục khác.

Nếu đó là lý do, tại sao tôi lại muốn sử dụng các liên kết cứng? Tại sao không chỉ có hai tập tin riêng biệt?

Câu trả lời:


29

Nếu bạn sao chép một tập tin, nó sẽ nhân đôi nội dung. Vì vậy, nếu bạn sửa đổi nội dung của một tệp duy nhất, điều đó không có hiệu lực đối với tệp khác.

Nếu bạn tạo một liên kết cứng, điều đó sẽ tạo ra một tệp trỏ đến cùng một nội dung. Vì vậy, nếu bạn thay đổi nội dung của một trong hai tệp, thay đổi sẽ được nhìn thấy trên cả hai.


3
Đối với các tệp rất lớn, việc tạo liên kết cứng luôn nhanh hơn sao chép tệp gốc?
Jorge Bucaran

14

Một liên kết cứng về cơ bản là một tên tệp thứ hai cho cùng một tệp. Vì vậy, nếu bạn liên kết cứng một tệp, nó sẽ chỉ một lần trên hệ thống tệp và do đó chỉ chiếm dung lượng một lần. Vì vậy, bạn muốn sử dụng điều này nếu bạn muốn lưu không gian đĩa


4
Cảm ơn đã phản ứng kịp thời. Vậy thì tại sao tôi muốn sử dụng một liên kết cứng thay vì một liên kết mềm?
Mike B

5
Một liên kết mềm về cơ bản là một con trỏ đến một tập tin khác. Vì vậy, nếu bạn xóa tệp gốc, liên kết mềm vẫn tồn tại nhưng sẽ bị hỏng. Một liên kết cứng là 2 tên cho cùng một tệp, vì vậy chúng có thể bị xóa riêng lẻ.
Peter

19
Lời giải thích của Peter là tốt, nhưng anh ấy đã bỏ qua "số lượng liên kết". Trong inode của tệp (trên siêu dữ liệu đĩa) có số lượng liên kết. Một liên kết cứng làm tăng số lượng liên kết, một liên kết mềm thì không. Hạt nhân được phép xóa nội dung của tệp nếu số lượng liên kết giảm xuống không.
Bruce Ediger

4
Tôi nghĩ rằng câu trả lời của Alan cho vấn đề này có một điểm quan trọng: thay đổi một tệp sẽ thay đổi tất cả các liên kết cứng, với một bản sao chúng sẽ có nội dung khác nhau.
donothings thành công

6

Trên các hệ thống tệp unix, mỗi tên tệp thực sự là một liên kết cứng đến vị trí của dữ liệu trên đĩa, được gọi là inode. Nếu bạn tạo một liên kết cứng mới đến một tệp hiện có, nó sẽ không tốn thêm dung lượng trên đĩa vì nó chỉ là một con trỏ khác cho cùng một dữ liệu. Nếu bạn chỉnh sửa dữ liệu bằng một hoặc một liên kết khác (hoặc chỉnh sửa trực tiếp nút), cả hai tệp sẽ bị thay đổi.

Hệ thống giữ một số lượng bao nhiêu liên kết cứng mà mỗi nút có. Khi số lượng liên kết là 0, không thể truy cập tệp và dữ liệu được đánh dấu là an toàn để ghi đè. Vì vậy, đưa ra một tệp có 2 liên kết cứng, nếu bạn xóa một trong hai liên kết, dữ liệu sẽ không bị xóa. Chỉ khi bạn xóa cả hai thì dữ liệu sẽ biến mất.

Bạn có thể thấy số lượng inode của các tệp bằng cách sử dụng -ichuyển sang lslệnh.

Mặt khác, một liên kết mềm chỉ đến một tệp khác bằng tên tệp của nó. Nếu bạn di chuyển hoặc xóa tệp gốc, liên kết sẽ bị hỏng.


0

Với tham chiếu đến một phần của câu hỏi, "tại sao tôi lại muốn sử dụng các liên kết cứng?":

Các tệp được liên kết cứng (hoặc đối với các vấn đề được liên kết mềm (tượng trưng) cung cấp một cách hữu ích để có một tệp thực thi duy nhất có thể được thực hiện để giả trang cho các mục đích khác nhau.

Đó là, tên mà mã được gọi có thể được kiểm tra để xác định các tùy chọn có sẵn để thực thi. Điều này cho phép phát triển và đóng gói một đoạn mã lớn với tất cả các chức năng được chia sẻ cần thiết cho các mục đích hơi khác nhau. Từ quan điểm của người dùng, đặc điểm kỹ thuật của "cái gì" để chạy (theo tên) giới hạn các lựa chọn và bản trình bày trong một tập hợp con các tùy chọn dễ quản lý hơn.

Một ví dụ kinh điển là LVM. Cùng một lúc HP-UX sử dụng file cứng liên kết cho thực thi khác nhau (ví dụ như vgdisplay, vgcreate, vgextend, vv Hôm nay, như Linux, các lệnh này thực sự mang tính biểu tượng (mềm) liên kết đến các lvmthực thi.


Điều này không có gì để làm với câu hỏi.
rjmunro

1
@rjmunro Mình xin khác. OP hỏi, "tại sao tôi lại muốn sử dụng các liên kết cứng?"
JRFerguson

Tôi không hiểu ví dụ cuối cùng. Trước đây, có các liên kết cứng đến nhiều tệp thực thi, bây giờ có các liên kết mềm đến một tệp thực thi. Làm thế nào là những liên kết mềm phân biệt?
Emanuel Berg

@EmanuelBerg Quan điểm của tôi là bất kể sử dụng liên kết cứng hay mềm, đó là tên mà tệp thực thi được gọi để xác định các tùy chọn và đối số hợp lệ để thực thi.
JRFerguson

1
@EmanuelBerg TMTOWTDI
JRFerguson
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.