A pergunta do OP menciona mount --bind
. Uma verificação rápida mostra que ele não modifica a contagem de links para o diretório que está montado. Hardlinking sempre modifica a contagem de links, que você pode ver usando ls -ld
.
Normalmente (a maioria dos sistemas semelhantes a Unix), o número de hardlinks para um diretório será o número de diretórios conectados a esse nome, por exemplo,
-
".."
(o diretório pai)
-
"."
(o próprio diretório)
- subdiretórios
Se você ler a página (em geral) mais informativa informações , poderá descobrir como outros fizeram:
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".
embora atualmente esteja redigido
Most systems prohibit making a hard link to a directory; on those where it is allowed, only the super-user can do so (and with caution, since creating a cycle will cause problems to many other utilities). Hard links cannot cross file system boundaries. (These restrictions are not mandated by POSIX, however.)
Criar (e remover) hardlinks para um diretório é um recurso restrito para proteger contra a perda de arquivos se um diretório estiver desvinculado. Como as operações de link / unlink na interface do sistema operacional C são simétricas , a vinculação a diretórios é normalmente feita apenas em chamadas mkdir / rmdir.
Tenha em mente que muito dos GNU Coreutils foi escrito (e documentado) 20 a 30 anos atrás, quando algumas peças reais de museu ainda estavam em uso. Conforme observado em Em relação ao Hard Link , originalmente eram nenhuma chamada mkdir / rmdir ; diretórios foram criados (como uma operação privilegiada) usando hard links. Tudo isso desapareceu quando as chamadas do sistema foram adicionadas para resolver os problemas mencionados. Mas a documentação continua a se referir a esses sistemas além da memória de seus mantenedores. A opção que foi questionada estava no predecessor fileutils
(que foi combinado com textutils
e shellutils
em meados dos anos 90 para formar coreutils
). Alguns itens do changelog podem ajudar a esclarecer a origem do recurso:
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.
Assim, você pode ver, por exemplo, que uma das antiguidades para as quais esse recurso era aplicável era o SunOS. O correspondente página de manual disse isto:
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.
Como observado na documentação, esse recurso (e a opção correspondente não estão em POSIX (e veja o Rationale seção que explica porquê). Em vez disso, o recurso foi movido para um novo comando (fornecido também pelo GNU coreutils) chamado link
. A descrição do comando em si é vaga, você tem que ler a descrição do chamada de função para obter qualquer uso do padrão.No entanto, o padrão não esclarece as condições em que o comando funcionaria, além de levar adiante o isenção de responsabilidade sobre os privilégios necessários. Para isso, você precisa acessar recursos dependentes do sistema fora do padrão:
Linking to a directory is restricted to the superuser in most historical implementations because this capability may produce loops in the file hierarchy or otherwise corrupt the file system. This volume of POSIX.1-2008 continues that philosophy by prohibiting link()
and unlink()
from doing this. Other functions could do it if the implementor designed such an extension.
Existem sistemas que usam hardlinks para diretórios além do número normal (mais 2 subdiretórios).
O OSX usa vários hardlinks para diretórios para arquivos comuns . Ele não suporta isso usando ln
(consulte página de manual ). De acordo com o Como a Máquina do Tempo trabalha sua mágica , ela faz isso para fornecer as versões usadas para o recurso de backup do Time Machine. p>
Leitura adicional: