OPの質問の言及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 coreutilsの多くは、実際の博物館の一部がまだ使用されている20〜30年前に作成(および文書化)されたことに留意してください。ハードリンクに関してで述べたように、もともとmkdir / rmdir呼び出しはありませんでした。ディレクトリは(特権操作として)ハードリンクを使用して作成されました。言及された問題を解決するためにシステムコールが追加されたとき、それらすべてはなくなりました。しかし、ドキュメントはメンテナの記憶を超えてこれらのシステムを引き続き参照しています。問題となったオプションは前任者でしたfileutils
(1990年代半ばにtextutils
と結合されてshellutils
を形成しました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.
たとえば、この機能を適用できる骨董品の1つが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にはありません(およびその理由を説明するRationaleセクションを参照してください)。むしろ、この機能は(GNU coreutilsによって提供される)という新しいコマンドに移動されましたlink
。の説明コマンド自体はあいまいです。標準を使用するには、関数呼び出しの説明を読む必要があります。ただし、標準では、コマンドが機能する条件を明確にしていません。そのためには、標準外のシステム依存機能に移動する必要があります。
ディレクトリへのリンクは、ほとんどの従来の実装ではスーパーユーザーに制限されています。これは、この機能によってファイル階層にループが発生したり、ファイルシステムが破損したりする可能性があるためです。POSIX.1-2008のこの巻では、これを禁止しlink()
、禁止することにより、その哲学を継続しunlink()
ています。他の関数は、実装者がそのような拡張を設計した場合にそれを行うことができます。
あります、通常の数(2つのプラスサブディレクトリ)を超えてのディレクトリにハードリンクを使用するシステムが。
OSXは、通常のファイルのディレクトリへの複数のハードリンクを使用します。これは、この使用をサポートしていませんln
(マニュアルページを参照)。Time Machineの魔法のしくみによれば、これはTime Machineバックアップ機能に使用されるバージョンを提供するために行われます。
参考文献: