Đề cập đến câu hỏi của OP mount --bind
. Kiểm tra nhanh cho thấy rằng nó không sửa đổi số lượng liên kết cho thư mục được gắn kết. Hardlinking luôn sửa đổi số lượng liên kết mà bạn có thể thấy bằng cách sử dụng ls -ld
.
Thông thường (hầu hết các hệ thống giống Unix), số lượng liên kết cứng đến một thư mục sẽ là số lượng thư mục được kết nối với tên đó, ví dụ:
".."
(thư mục mẹ)
"."
(chính thư mục)
- thư mục con
Nếu bạn đọc (thường) thông tin mới hơn thông tin trang, bạn có thể khám phá như những người khác đã làm:
Oh great, one spends hours tying to find what is wrong only to
discover,
$ info ln
On all existing implementations, you cannot make a hard link to a
directory, and hard links cannot cross filesystem boundaries. (These
restrictions are not mandated by POSIX, however.)
Therefore, kindly say everywhere you say super-user only,
instead say "few systems, super-user only".
mặc dù hiện tại nó được diễn đạt
Hầu hết các hệ thống đều cấm tạo một liên kết cứng đến một thư mục; trên những nơi được phép, chỉ siêu người dùng mới có thể làm như vậy (và thận trọng, vì việc tạo chu trình sẽ gây ra sự cố cho nhiều tiện ích khác). Liên kết cứng không thể vượt qua ranh giới hệ thống tập tin. (Tuy nhiên, những hạn chế này không bắt buộc bởi POSIX.)
Tạo (và xóa) liên kết cứng vào thư mục là một tính năng bị hạn chế để bảo vệ chống mất tệp nếu thư mục không được liên kết. Do các hoạt động liên kết / hủy liên kết tại giao diện hệ điều hành C là đối xứng , nên việc liên kết đến các thư mục thường chỉ được thực hiện trong các cuộc gọi mkdir / rmdir.
Hãy nhớ rằng phần lớn lõi GNU đã được viết (và ghi lại) 20-30 năm trước, khi một số bảo tàng thực sự vẫn còn được sử dụng. Như đã nêu trong Về liên kết cứng , ban đầu có là không có cuộc gọi mkdir / rmdir; thư mục đã được tạo (như một hoạt động đặc quyền) bằng cách sử dụng các liên kết cứng. Tất cả điều đó biến mất khi các cuộc gọi hệ thống được thêm vào để giải quyết các vấn đề được đề cập. Nhưng tài liệu tiếp tục đề cập đến các hệ thống này qua bộ nhớ của những người bảo trì của họ. Tùy chọn đã được đặt câu hỏi là ở người tiền nhiệm fileutils
(được kết hợp với textutils
và shellutils
vào giữa những năm 1990 để hình thành coreutils
). Một vài mục từ thay đổi có thể giúp làm rõ nguồn gốc của tính năng:
Mon Jul 23 16:57:44 1990 David J. MacKenzie (djm at albert.ai.mit.edu)
* cp.c (copy): Make +update operate silently, like +one-file-system.
* ln.c: Add -F as synonym for -d, for SunOS compatibility.
Wed Feb 21 11:13:26 1990 David J. MacKenzie (djm at albert.ai.mit.edu)
* ln.c (error): New function.
(main, do_link): Call error instead of fprintf and exit.
(main): Recognize new -d +directory option to allow superuser to
make hard links to dirs, like the BSD ln -f option.
(do_link): Don't allow hard links to dirs (they are hard to
get rid of -- rmdir and unlink don't do it), unless -d was given.
(usage): Mention -d +directory option.
Vì vậy, bạn có thể thấy rằng một trong những cổ vật mà tính năng này được áp dụng là SunOS. Trang hướng dẫn tương ứng cho biết điều này:
OPTIONS
-f Force a hard link to a directory -- this option is only avail-
able to the super-user.
-s Create a symbolic link or links.
SYSTEM V OPTIONS
-f Force files to be linked without displaying permissions, asking
questions or reporting errors.
-F Force a hard link to a directory -- this option is only avail-
able to the super-user.
-s Create a symbolic link or links.
Như đã lưu ý trong tài liệu, tính năng này (và tùy chọn tương ứng không có trong POSIX (và xem phần Cơ sở lý giải giải thích tại sao). Thay vào đó, tính năng này đã được chuyển sang một lệnh mới (cũng được cung cấp bởi GNU coreutils) link
. Bản thân lệnh là mơ hồ, bạn phải đọc mô tả của lệnh gọi hàm để sử dụng bất kỳ tiêu chuẩn nào. Tuy nhiên, tiêu chuẩn không làm rõ các điều kiện trong đó lệnh sẽ hoạt động, ngoài việc chuyển tiếp từ chối trách nhiệm về các đặc quyền bắt buộc. Vì thế, bạn phải tìm đến các tính năng phụ thuộc hệ thống ngoài tiêu chuẩn:
Liên kết đến một thư mục bị hạn chế đối với siêu người dùng trong hầu hết các triển khai lịch sử vì khả năng này có thể tạo ra các vòng lặp trong hệ thống phân cấp tệp hoặc làm hỏng hệ thống tệp. Tập POSIX.1-2008 này tiếp tục triết lý đó bằng cách cấm link()
và unlink()
thực hiện điều này. Các chức năng khác có thể làm điều đó nếu người triển khai thiết kế một phần mở rộng như vậy.
Có những hệ thống sử dụng liên kết cứng đến các thư mục vượt quá số lượng bình thường (2 thư mục con cộng).
OSX sử dụng nhiều liên kết cứng đến thư mục cho các tệp thông thường . Nó không hỗ trợ điều này bằng cách sử dụng ln
(xem trang hướng dẫn ). Theo How Time Machine hoạt động Magic của nó , nó thực hiện điều này để cung cấp các phiên bản được sử dụng cho phương tiện sao lưu Time Machine.
Đọc thêm: