Згадується питання ОП mount --bind
. Швидка перевірка показує, що вона не змінює кількість посилань для встановленого каталогу. Жорстке посилання завжди змінює кількість посилань, які ви можете бачити, використовуючи ls -ld
.
Зазвичай (більшість Unix-подібних систем) кількість жорстких посилань на каталог буде число каталогів, підключених до цього імені, наприклад,
".."
(батьківський каталог)
"."
(сам каталог)
- підкаталоги
Якщо ви прочитаєте (зазвичай) більш інформативну інформаційну сторінку, ви можете виявити, як це зробили інші :
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".
хоча це зараз написано
Більшість систем забороняє робити жорстке посилання на каталог; на тих, де це дозволено, лише суперкористувач може це зробити (і з обережністю, оскільки створення циклу спричинить проблеми для багатьох інших утиліт). Жорсткі посилання не можуть перетинати межі файлової системи. (Однак POSIX не обмежує ці обмеження.)
Створення (та видалення) жорстких посилань до каталогу - це обмежена функція для захисту від втрати файлів, якщо каталог не пов’язаний. Оскільки операції зв'язку / відключення в інтерфейсі операційної системи C є симетричними , зв'язок із каталогами зазвичай здійснюється лише у викликах mkdir / rmdir.
Майте на увазі, що значна частина основних програм GNU була написана (і задокументована) 20-30 років тому, коли деякі справжні музейні експонати ще використовувались. Як зазначалося в частині Hard Link , спочатку не було дзвінків mkdir / rmdir; каталоги були створені (як привілейована операція) за допомогою жорстких посилань. Все це минуло, коли були додані системні дзвінки для вирішення зазначених проблем. Але документація продовжує посилатися на ці системи минулою пам'яттю їх обслуговуючого персоналу. Варіант, який був поставлений під сумнів, був у попередника fileutils
(який поєднувався з textutils
і shellutils
в середині 1990-х років з формуванням coreutils
). Деякі елементи із журналу змін можуть допомогти з’ясувати походження функції:
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.
Таким чином, ви можете побачити, наприклад, що одним із антикваріатів, для якого ця функція застосовна, був SunOS. Відповідна сторінка керівництва сказала це:
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.
Як зазначено в документації, ця функція (і відповідна опція відсутня в POSIX (див. Розділ Обгрунтування, який пояснює, чому). Швидше, ця функція була перенесена в нову команду (надану також GNU coreutils)) link
. Опис сама команда розпливчаста; вам потрібно прочитати опис виклику функції, щоб отримати будь-яке використання від стандарту, однак стандарт не уточнює умови, в яких команда працюватиме, окрім перенесення відповідальності про необхідні привілеї. Для цього вам потрібно перейти до залежних від системи функцій поза стандартними:
Посилання на каталог обмежується суперусером у більшості історичних реалізацій, оскільки ця можливість може створювати петлі в ієрархії файлів або іншим чином пошкоджувати файлову систему. Цей том POSIX.1-2008 продовжує цю філософію, забороняючи link()
та unlink()
робити це. Інші функції могли б це зробити, якщо виконавець сконструював таке розширення.
Там є системи , які використовують жорсткі посилання на каталоги за межами нормального числа (2 плюс підкаталоги).
OSX використовує декілька жорстких посилань на каталоги для звичайних файлів . Він не підтримує це за допомогою ln
(див . Сторінку керівництва ). Згідно з тим, як Time Machine працює над своєю магією , він робить це для надання версій, які використовуються для резервного копіювання Time Machine.
Подальше читання: