symbolic and hard リンクの違いをよく知っています。 ディレクトリへのハードリンクの作成 の危険性も認識しています。
それにもかかわらず、私はinsistingハードリンクの作成についてディレクトリおよびそのすべてのサブディレクトリへ(同じパーティション上)。
ただし、次は機能しません。
root@fab-ux:/home/fab-user/Public
# ln --directory ../Documents/CV/ CV
ln: failed to create hard link ‘CV’ => ‘../Documents/CV/’: Operation not permitted
この愚かさを達成できるカーネル/ファイルシステム(EXT4で実行中)パラメーターはありますか?
はい、bindをマウントでき、cronジョブを介して個々のファイルをハードリンクできます。しかし、ポイントは、物理的に1つのディレクトリだけの便利さandすべてのファイルとパブリックディレクトリ内の特定のハードリンクディレクトリのみをクラウドにアップロードすると、クラウドソフトウェアはシンボリックリンクを検出し、それらをサポートしませんそして最も重要なもの: Ubuntuを実行しています! OSXでもWindowsでもない:システムに[〜#〜] i [〜#〜]がしたいことをしたい!
現在のカーネル(ファイルシステムの1つではなく、カーネルによる機能)にとどまっている限り、この制限を回避する方法はほとんどありません。
ハードリンクの制限
ファイルシステムでのループを防ぎ、_
..
_(親ディレクトリ)の解釈を一貫させるために、現代の多くのオペレーティングシステムはディレクトリへのハードリンクを許可していません。 UNIX System Vはそれらを許可しましたが、そのようなリンクを作成する権限を持っているのはスーパーユーザーだけです。
...ディレクトリへのリンクは、ほとんどの歴史的な実装ではスーパーユーザーに制限されています。これは、この機能によりファイル階層でループが発生したり、ファイルシステムが破損したりする可能性があるためです。 POSIX.1-2008のこのボリュームは、link()およびunlink()がこれを行うことを禁止することにより、その哲学を続けています。 。実装者がそのような拡張を設計した場合、他の機能はそれを行うことができます...
link()
のような通常のファイルであるoldpathをチェックしないシステムコールはもうないので、唯一の方法は linkat() と同じような関数を作成することですご希望の方法。
Linuxではディレクトリへのハードリンクを作成できません。 OSXはこれをタイムマシンで使用できますが、Linuxでは使用できないと聞きました。最も近い方法はcp -l
は、元のディレクトリをミラーリングする新しいディレクトリツリーを作成しますが、すべての通常ファイルをハードリンクします。