マンページからなぜなら:
-d, -F, --directory
allow the superuser to attempt to hard link directories (note: will
probably fail due to system restrictions, even for the superuser)
実際にこれを可能にするファイルシステムドライバがありますか、それとも唯一のオプションですかmount --bind <src> <dest>
?または、ファイルシステム固有のドライバに到達する前に、カーネルによってこの動作がブロックされますか?
注:実際には、どのコンピュータでもこれを行う予定はありません。ただ気になるだけです。
ベストアンサー1
最初の注意:このコマンドには、およびその他のオプションはln
ありません。これは移植不可能なGNUismです。-d
-F
--directory
探している機能はlink(1)
コマンドによって実装されます。
元の質問に戻って:
一般的なUNIXシステムでは、ディレクトリへのハードリンクが可能かどうかはファイルシステムドライバによって決定されます。
Solaris UFSドライバはディレクトリへのハードリンクをサポートしますが、ZFSドライバはサポートしません。
SolarisのUFSがハードリンクをサポートしているのは、AT&Tがこの機能に興味を持っているからです。 BSDのUFSはハードリンクディレクトリをサポートしません。
ZFSがハードリンクされたディレクトリをサポートしていないのは、Jeff Bonwickがその機能を好まないためです。
Linuxに関して私の推測では、Linuxブロックが親カーネル層のディレクトリにハードリンクを作成しようとしているようです。この仮定の理由は、Linus Torvaldsがgit clone
ハードリンクされたディレクトリをサポートするプラットフォームでルートとして呼び出されたときにディレクトリを破棄するGIT用のコードを書いたからです。
ハードリンクされたディレクトリの作成をサポートするファイルシステムは、unlink(1)
ルートとして空でないディレクトリの削除もサポートする必要があります。
したがって、TorvaldsがLinuxの仕組みを知っていると仮定し、Linuxがハードリンクされたディレクトリをサポートしている場合、Torvaldsはunlink(2)
ディレクトリをrootとして呼び出してもエラーは返されませんが、ディレクトリが破損することに注意してください。つまり、Linuxでは、ファイルシステムドライバがハードリンクされたディレクトリを実装することはできません。