ホームページ > 運用・保守 > Linuxの運用と保守 > Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

青灯夜游
リリース: 2022-11-11 15:36:48
オリジナル
2940 人が閲覧しました

理由: ディレクトリへのハード接続を導入すると、ディレクトリにループが発生する可能性があります。ディレクトリを横断すると、システムが無限ループに陥り、アクセス ディレクトリを見つけることができなくなります。 Linux のディレクトリ構造は、「/directory」をルート ノードとするツリーです。カスタム ハード リンクが許可されている場合、この構造が破壊され、さらにはループが形成される可能性があります。ループが形成されると、ディレクトリツリーを走査することは致命的です。したがって、ディレクトリ ツリー構造の損傷を避けるために、Linux ではユーザーがディレクトリ上のハード リンクをカスタマイズすることはできません。

Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

LINUX ハード リンクをディレクトリにリンクすると、ディレクトリにハード リンクを導入するとディレクトリにループが発生する可能性があるため、ディレクトリにリンクできません。ディレクトリを横断すると、システムが無限ループに陥り、ディレクトリを見つけることができなくなります。カタログにアクセスしてください。

Linux システムでは、各ファイル (ディレクトリもファイル) は inode 構造に対応しており、inode データ構造にはファイルの種類 (ディレクトリ、通常のファイル、シンボリック リンク ファイルなど) に関する情報が含まれています。つまり、オペレーティング システムはディレクトリをトラバースするときにシンボリック リンクを決定できます。シンボリック リンクを決定できるので、当然、過剰なループに入らないように何らかの措置を講じることができます。システムは 8 つのシンボリック リンクに遭遇するとトラバースを停止します。これが、ディレクトリのシンボリック接続が無限ループに入らない理由です。ただし、ハード接続の場合、オペレーティング システムで使用されるデータ構造とアルゴリズムの制限により、このような無限ループを防ぐことは現時点では不可能です。

Linux におけるハード接続の本質

問題について説明する前に、ハード接続の本質について話しましょう。

ハード リンクは、実際には、ディレクトリの i ノードが指すブロックのコンテンツです。ディレクトリ ブロック内の各レコードはハード リンクです。 Linux では、ディレクトリ自体がファイルの一種 (ディレクトリ ファイル、記号 d) であり、「ディレクトリ ファイル」のファイル内容はハード リンクです。

例 (図内のディレクトリ接続数の変化に注目してください):

Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

tmp 数の変更前後の図ディレクトリ接続は次のとおりです (赤い線は接続番号のソースを示します):

Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

上記の例を通じて、ディレクトリ接続時のハード リンクの数がわかります。作成されたばかりのディレクトリは 2 で、1 つは親ディレクトリから、もう 1 つはそれ自体から取得されます。ディレクトリのサブディレクトリを作成すると、ハード接続の数が 1 から 3 に変わります。これは、サブディレクトリからの追加の「..」接続があるためです。

ここで疑問に思う人もいるかもしれませんが、ディレクトリにはハード リンクは使用できないということなのではないでしょうか?上のデモでは何が起こっているのでしょうか?

ここで、「ディレクトリにはハード リンクを使用できない」という概念を明確にする必要があります。これは、ディレクトリへのハード リンクはユーザーがカスタマイズできず、オペレーティング システムによってのみ維持できることを意味します。実際、ディレクトリとハード リンクは分離できず、相互に統合されています。 「ハード リンク」自体は、実際にはディレクトリがそのサブファイル名とサブディレクトリ名を維持する方法です。

カスタム ハード接続の悪夢: ループ

ハード接続の性質について話した後、今日のトピックに戻ります。ユーザー定義のディレクトリへのハードリンクを許可しますか?

Linux のディレクトリ構造は、「/directory」をルート ノードとするツリーであることがわかっています。カスタム ハード リンクを許可すると、この構造が破壊されたり、ループが形成されたりする可能性があります。たとえば、次のようになります。次のコマンドが正常に実行できた場合:

Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

Linux のハード リンクでディレクトリをリンクできないのはなぜですか?

ループが形成されると、ループを横断する必要があるコマンドにとって致命的になります。ディレクトリ ツリー (たとえば、上から下へ。下から上へ移動する du コマンドと、下から上へ移動する pwd コマンド)。したがって、ディレクトリ ツリー構造の損傷を避けるために、Linux ではユーザーがディレクトリ上のハード リンクをカスタマイズすることはできません。ソフトリンクにこの制限がない理由は、ソフトリンクファイルはシステムが認識できる特殊なファイルタイプであるのに対し、「ハードリンクファイル」はシステムの通常のファイルと何ら変わりなく、判断できないためです。

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinux のハード リンクでディレクトリをリンクできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート