ディレクトリシンボリックリンクは、パスではなくinodeへのものです(たとえば、ディレクトリハードリンク)。

ディレクトリシンボリックリンクは、パスではなくinodeへのものです(たとえば、ディレクトリハードリンク)。

ディレクトリハードリンクが不可能な理由をよりよく理解しようとしています。大まかに言えば、ディレクトリとファイルは次のようになります。

directory
---------
inode            # exposed as .
inode_of_parent  # exposed as ..
content: 
    mapping from names to inodes
    a hardlink is just another name->inode entry in the mapping

file
----
inode
content

ディレクトリシンボリックリンクについて私が理解したことは次のとおりです。

symlink
-------
inode            # exposed as .  but only if the symlink can be followed
inode_of_parent  # exposed as .. but only if the symlink can be followed
target:
   a named path that, effectively, points to another inode's content

シンボリックリンクのターゲットは他のinodeを指していないため、inodeのリンク数が増加しないことに注意する価値があります。宛先が無効であることが確認された場合、シンボリックリンクは無効です。

私は読んだUNIX / Linuxでディレクトリハードリンクが許可されていないのはなぜですか?これはほとんど利便性(そしておそらくパフォーマンス)によるものです。 [余談:とにかく、".."はDAG構造を効果的に破壊するように見えますが、予測可能な方法でそれを行い、ハードリンクが状況をさらに複雑にするようです。 ] この問題に関するいくつかのコメントははいループは処理できますが、この議論の目的に応じてループを避けたいことを喜んで受け入れます。それでは、なぜinodeを指す他の種類のシンボリックリンクがありませんか?

alternative symlink
-------------------
inode            # exposed as .
inode_of_parent  # exposed as ..
inode_of_target
is_symlink       # this marks it as special and distinct from a directory

シンボリックリンクはターゲットのリンク数を増やす必要があるため、ターゲットの移動と名前の変更に強くなります。そのため、基本的にハードリンクですが、特別なフラグが実際のディレクトリと混同することはできませんので、ループの問題は発生しません。状況は管理可能に見えた。

明らかに、これはとても簡単です。それで、なぜこれが不可能なのか知りたいです。私の話は十分に複雑ではないかもしれませんので、必要に応じて複雑にしてください。

関連情報