Khi nào tạo một liên kết cứng sẽ hữu ích?


11

Về cơ bản có hai hạn chế với các liên kết cứng:

  1. Liên kết cứng thường yêu cầu liên kết và tệp nằm trong cùng một hệ thống tệp.
  2. Chỉ có siêu người dùng mới có thể tạo một liên kết cứng đến một thư mục.

Do đó, các liên kết tượng trưng đã được giới thiệu để khắc phục những hạn chế của liên kết cứng. Vì vậy, câu hỏi là, các liên kết cứng vẫn cần thiết? Có thể có tình huống mà chúng hữu ích hơn?


3
1) Symlink không được theo dõi bởi một số máy chủ HTTP 2) Liên kết cứng có thể được sử dụng để sao lưu 3) Bạn có thể chia sẻ ổ cắm unix giữa các chroots 4) Bạn có thể xóa bất kỳ phiên bản nào của liên kết cứng mà không ảnh hưởng đến các phiên bản khác
Dietrich Epp

Những máy chủ HTTP đó có thể sử dụng một liên kết cứng trỏ đến một liên kết tượng trưng không? hoặc tôi đang nói chuyện vô nghĩa?
arana

Câu trả lời:


11

Hardlinks giúp chúng tôi tổ chức hệ thống tập tin của chúng tôi một cách linh hoạt hơn nhiều. Về cơ bản, các liên kết cứng cho phép chúng ta lấy một tệp và có nhiều vị trí trong hệ thống tệp cùng một lúc. Hãy nghĩ về một kịch bản mà bạn là một nhiếp ảnh gia và có rất nhiều ảnh (đây là một ví dụ từ cuộc sống của tôi!). Bạn có thể sắp xếp chúng theo những người xuất hiện trong đó, bởi vì đôi khi mọi người hỏi bạn về những bức ảnh của họ. Nhưng bạn cũng có thể muốn tổ chức chúng theo địa điểm và theo ngày. Không có cách nào thực sự để lồng ba thứ này, chúng là hai trục tổ chức hoàn toàn riêng biệt. Vì vậy, bạn có thể tạo ba cấu trúc phân cấp khác nhau cho ba thứ khác nhau này và có mỗi ảnh có trong cả ba, mà không cầnphải lưu trữ mỗi bức ảnh ba lần. Đó là sự kỳ diệu của các liên kết cứng. Bỏ liên kết symlink, chúng ta không cần lo lắng về việc "tập tin thực sự" ở đâu, bởi vì tất cả chúng đều là tập tin thực sự. Chúng tôi có thể xóa và di chuyển theo ý muốn, vì tệp sẽ được giữ lại cho đến khi không còn bất kỳ tham chiếu nào đến nó và bị xóa khi bạn xóa liên kết cứng cuối cùng. Nó đơn giản và không yêu cầu bạn phải theo dõi rất nhiều.


1
Hoặc người ta có thể có một chương trình mà ai muốn gọi bằng ba tên gzip, gunzipzcat.
JdeBP

8

Nội dung của tệp sẽ không bị xóa cho đến khi tất cả các liên kết cứng (vâng, tất cả tên tệp là liên kết cứng, ngay cả đầu tiên) đã bị xóa và đóng tệp. Như vậy, nó có thể hữu ích khi một tệp được yêu cầu ở nhiều nơi, nhưng có thể bị xóa khỏi bất kỳ tệp nào vào bất kỳ lúc nào, ví dụ giữa ~/Downloads/coolsong.mp3~/Music/Cool Song.mp3.


3
Đúng rồi. Tôi sử dụng nó để tiếp tục gieo một torrent trong khi có tệp được đặt tên chính xác trong thư mục phim sạch của tôi. Nó dễ dàng hơn nhiều so với việc di chuyển và đổi tên các tệp đang được gieo, và tôi có thể chỉ cần xóa thư mục torrent khi tôi thực hiện gieo hạt. Đó cũng là cách Couch Potato làm điều đó.
Nicolas Bouliane

1

Một lợi thế không mấy quan trọng của liên kết cứng so với liên kết tượng trưng là khi nó đến nút inode cho liên kết cứng, kernel không có bất kỳ xử lý nào nữa để truy cập tệp. Khi nó gặp một liên kết tượng trưng, ​​kernel phải đọc giá trị liên kết và tiếp tục duyệt qua cấu trúc thư mục trước khi nó đến nút inode cho tệp. Điều này mất nhiều thời gian hơn, mặc dù sự khác biệt không nhất thiết phải dễ dàng đo lường. Thật thú vị khi một trong những yếu tố trên giá trị symlink tự nó là một liên kết tượng trưng.


Điểm tuyệt vời. Trong Solaris, người ta có thể tạo các vòng lặp bằng cách sử dụng các liên kết tượng trưng, ​​việc xử lý thậm chí còn thú vị hơn :-)

1

có một số lý do cho các liên kết cứng

  1. để giữ các tham chiếu đến một tệp cho đến khi hết tham chiếu cuối cùng (như Ignacio đã chỉ ra)
  2. khi bạn liên kết các tệp cứng, chúng chỉ chiếm dung lượng của một tệp trong hệ thống tệp (cả hai tham chiếu đến tệp đều có chung các nút i). Do đó, các liên kết cứng phải nằm trên cùng một hệ thống tệp.

Vì vậy, một lý do để sử dụng liên kết cứng là có thể tiết kiệm nhiều dung lượng ...

Bạn có thể nối vào một trong các tham chiếu và dữ liệu đi vào tệp được chia sẻ. Bạn cũng có thể nối thêm một mô tả tệp trong khi đọc từ tệp kia (ví dụ: với đuôi -f)


0

Nhiều ví dụ được đưa ra ở đây là hợp lệ, nhưng sẽ hoạt động tốt như nhau với các liên kết mềm (ví dụ: vấn đề "cần một tệp ở nhiều nơi").

Một ví dụ điển hình cho việc các liên kết cứng thực sự hữu ích là phần mềm sao lưu Dirvish :

Dirvish là một hệ thống sao lưu mạng quay nhanh, dựa trên đĩa.

Với dirvish, bạn có thể duy trì một tập hợp các hình ảnh hoàn chỉnh của các hệ thống tập tin của bạn với việc tạo và hết hạn không giám sát. Một vault sao lưu dirvish giống như một cỗ máy thời gian cho dữ liệu của bạn.

Dirvish tạo các bản sao lưu ở cấp hệ thống tệp (tức là sao chép tệp, nó không tạo hình ảnh), bằng cách sao chép tệp vào hệ thống tệp (sao lưu) riêng biệt (như ổ cứng USB). Mỗi khi bạn tạo một bản sao lưu, dirvish sẽ tạo một bản sao hoàn chỉnh riêng của cây thư mục sẽ được lưu.

Mẹo nhỏ là nếu dirvish phát hiện ra rằng đã có bản sao lưu cũ của cây bạn đang lưu, nó sẽ tự động sử dụng lại các tệp không thay đổi, bằng cách tạo một liên kết cứng trong cây mới đến tệp trong cây cũ.

Theo cách đó, mỗi bản sao lưu là một bản sao hoàn chỉnh, khép kín của cây thư mục, nhưng đồng thời chỉ có các tệp đã thay đổi thực sự chiếm không gian trong hệ thống tệp. Nói cách khác, bạn nhận được lợi ích của sao lưu gia tăng (tiết kiệm không gian) và sao lưu toàn bộ (truy xuất dễ dàng) cùng một lúc.

Điều này chỉ có thể bởi vì các liên kết cứng hoàn toàn trong suốt đối với các công cụ không gian người dùng.

Điều này có thể cũng hoạt động với các liên kết tượng trưng (mặc dù bạn gặp vấn đề khi sao lưu dữ liệu sử dụng chính các liên kết tượng trưng), nhưng một lợi thế chỉ có thể có với các liên kết cứng là:

Nếu bạn muốn loại bỏ các bản sao lưu cũ, bạn chỉ cần xóa cây thư mục sao lưu tương ứng. Các tệp chỉ được liên kết từ cây đó sẽ bị xóa tự động bởi hệ thống tệp (vì liên kết cứng cuối cùng của chúng bị xóa), nhưng các tệp cũng xuất hiện trong các bản sao khác vẫn còn trên đĩa.


Âm thanh như rsnapshot.
Ignacio Vazquez-Abrams

0

Một trường hợp hữu ích là, khi bạn có một chương trình (hoặc tập lệnh) cần tải xuống một tarball tạm thời lớn và sau khi giải nén nó, chương trình của bạn sẽ xóa nó ngay lập tức.

Nếu bạn vì lý do nào đó muốn bảo quản tarball đó để sử dụng trong tương lai, cách tốt nhất là ln /tmp/tarball.tgz ~trong khi tarball vẫn đang được tải xuống. Sau đó, bạn không cần phải làm bất cứ điều gì.

Khi quá trình tải xuống kết thúc và ngay cả sau khi chương trình của bạn đã xóa 'bản gốc', bản sao chính xác vẫn phải nằm trong thư mục chính của bạn.


0

Tôi sử dụng 'Liên kết cứng' để sao lưu một số 'HowTos' và Đoạn trích của tôi

Tôi có một thư mục có tên 'Tài liệu được chia sẻ' trong người dùng / root của tôi. Trong thư mục đó, tôi có 'liên kết cứng' với các mẹo, thủ thuật, đoạn trích, cách thức sống trong các thư mục phù hợp của họ; php, mysql, css, regex, công thức, linux, v.v.

Từ lâu, tôi đã sử dụng symlink. Tôi trung thực sao lưu thư mục 'Tài liệu được chia sẻ' chung này vào máy chủ của mình. Vấn đề là, liên kết tượng trưng hoặc 'Liên kết mềm', nếu được sao chép (cp -auv) hoặc bị xóa và sao chép, CHỈ sao lưu hoặc sao chép 'liên kết' và KHÔNG phải nội dung của tài liệu. Vì vậy, tôi phải duyệt qua các thư mục và sao chép từng tệp trong số 2 tá tệp từ vị trí thực tế của chúng.

Với HARD LINKS, tôi có thể sao chép, tar, rsync thư mục 'Tài liệu được chia sẻ' và thực sự sao lưu những tài liệu phân tán rộng rãi đó một cách tự tin, nội dung thực sự được sao lưu. Nó thực sự hấp dẫn tôi, khi tôi nhận ra mình đã sao lưu 0 'tập tin liên kết' và không phải thông tin.

Mặt trái của việc sử dụng 'Liên kết cứng' là việc thực hiện ls trên một thư mục không cung cấp cho bạn một dấu hiệu cho thấy một tệp được 'liên kết' với một tệp khác hoặc nơi tệp đó có thể cùng tồn tại. Có nhiều cách để tìm thấy chúng, nhưng tôi đang nói rằng nó không rõ ràng với một ls -l đơn giản -> trỏ đến ... Vì vậy, tôi thường thêm một ghi chú vào phần đầu của tài liệu cho biết tập tin / tập tin này là tập tin nào 'được' chia sẻ 'với

Landis.

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.