Вопрос ОП упоминает 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.)
Создание (и удаление) жестких ссылок на каталог - это ограниченная функция для защиты от потери файлов, если каталог не связан. Поскольку операции link / unlink на интерфейсе операционной системы C симметричны , связь с каталогами обычно выполняется только в вызовах mkdir / rmdir.
Имейте в виду, что большая часть coreutils 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.
Дальнейшее чтение: