Một số sử dụng điển hình của các liên kết cứng là gì?


9

Mọi người đã quen với Windows đều có thể tưởng tượng ra các liên kết tượng trưng là gì và chúng được sử dụng như thế nào. Mặt khác, khái niệm liên kết cứng là xa lạ với Windows (tôi có đúng không?).

Tôi muốn biết những cách sử dụng điển hình cho các liên kết cứng trong Linux. Tôi đã thấy các bài viết khác nhau mô tả sự khác biệt trong cách họ làm việc. Điều tôi đang hỏi là một số tình huống điển hình khi người dùng sẽ tốt hơn khi sử dụng liên kết cứng thay vì liên kết tượng trưng?


3
Câu hỏi này đã được hỏi trên Unix & Linux stackexchange: Tại sao liên kết cứng tồn tại?
Flimm

Câu trả lời:


9

Tôi sử dụng một liên kết cứng trong đó tôi cần một tệp duy nhất ở hai hoặc nhiều nơi, tôi dự đoán rằng một ngày nào đó tôi sẽ muốn xóa một trong các vị trí và tôi có thể quên rằng tôi có một liên kết đến tệp. Điều này ngăn tôi kết thúc bằng một liên kết tượng trưng đến một tệp không còn tồn tại.

Làm rõ:

Trên thực tế, một tên tệp là một liên kết cứng đến tệp. Do đó, mỗi tệp có ít nhất một liên kết cứng, là những gì chúng ta thường nghĩ là "tên" tệp. Khi bạn xóa một tập tin, trên thực tế bạn đang xóa liên kết cứng của nó (do đó tên "remove", nghĩa là rmthay vì "xóa"). Khi một tệp có liên kết cứng cuối cùng bị xóa, hệ thống cũng xóa tệp.


7

Liên kết cứng cho phép ...

  • một thực thi duy nhất để có nhiều hơn một tên.

    Thí dụ:

    ls -l /bin | grep -v ' 1 ' | sortsẽ liệt kê những cái trong /bincho bạn Kết quả ...

    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 gunzip
    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 uncompress
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bunzip2
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzcat
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzip2
    

    Thay vì 3 tệp bunzip2 bzcat và bzip2 sử dụng cùng một tệp và bên trong tệp, việc phân biệt được thực hiện để làm gì. Lưu mã và ít mã hơn có nghĩa là ít lỗi hơn và bảo trì dễ dàng hơn.

  • một tập tin duy nhất được truy cập bởi một số đường dẫn.

    Lấy ví dụ một trình quản lý gói, tạo thư mục / usr / share / doc / $ packagename cho mỗi gói được cài đặt và bên trong thư mục đó một tệp có tên LICENSE với thông tin giấy phép của gói. Nhiều gói trên hệ thống Linux điển hình được cấp phép GPL, vì vậy thay vì có 200 bản sao GPL trên hệ thống tệp, chỉ có thể có một bản sao và 199 liên kết.ptman @ Serverfault

Lý do tại sao các liên kết cứng hoạt động ở đây (và các liên kết mềm thì không): chỉ xóa 1 trong số các liên kết cứng không tự xóa tệp.


2
"Ví dụ: di chuyển ( mv) là bản sao ( cp) + loại bỏ ( rm)." Điều này chỉ đúng khi nguồn và đích nằm trên các giá treo khác nhau. Mặt khác, mvdi chuyển chỉ tên, không phải tập tin.
Paddy Landau

1
Nếu bạn muốn đi kỹ thuật: mv thay đổi inode không phải tên. Nhưng bạn đã đúng: Có vẻ như ví dụ đó ngày nay hơi cũ và tôi nên sử dụng gzip làm ví dụ;)
Rinzwind

3
Chúng tôi đang lạc đề một chút, nhưng tôi vừa thử nghiệm điều này. Miễn là tệp vẫn còn trên cùng một mount, chỉ mvthay đổi tên; các nút vẫn giữ nguyên.
Paddy Landau

Điều này không thực sự giải thích lý do tại sao bạn không thể chỉ sử dụng các liên kết tượng trưng - mà bạn có thể lưu cho một vài byte dữ liệu bổ sung. Điều này được giải quyết chính xác trong câu trả lời này .
Ken Sharp
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.