シンボリックリンクは、ファイル システム内でハード リンクと比較してどのように表現されますか?

シンボリックリンクは、ファイル システム内でハード リンクと比較してどのように表現されますか?

これについての私の理解が正しいかどうか確認したいのですが:

  • ハードリンクを作成すると、同じinodeを指す別のdentryが作成される
  • シンボリックリンクを作成すると、他の inode の dentry を指す完全に新しいファイル オブジェクト/inode が作成されます。ファイル システムは、このファイルを特別な方法で処理します (特定の操作を他の inode の dentry にリダイレクトします)。

答え1

ハードリンクの場合は正しいが、シンボリックリンクの場合は正しくありません。シンボリックリンクの内容は単なる文字列です。これにより、たとえば、シンボリックリンクは現在マウントされていないファイルシステムを指すことができます。シンボリックリンクは単なるテキストです。カーネルがシンボリックリンクに遭遇すると、基本的には、検索していたパスにシンボリックリンクを挿入し、スラッシュで区切られた部分に分割して、必要に応じて検索します...シンボリックリンクは追加の権限を与えません。シンボリックリンクから取得されるパス要素によって発生するトラバーサルは、アプリケーションがそれらのパス要素を指定した場合と同じ権限制約に従います。シンボリックリンクには独自の inode があります (少なくともそのように見えます。内部的には、一部のファイルシステムでは、シンボリックリンクが複数のハードリンクを持つことを許可せず、シンボリックリンクを含むディレクトリに直接格納しますが、それでも関数に inode 番号を報告しますlstat)。

システム レベルでは、シンボリック リンクの扱い方は操作の種類によって異なります。ディレクトリ エントリに作用する操作 (名前の変更、削除など) では、シンボリック リンクは他のファイルと同様に扱われます。ファイルの内容に作用する操作 (例: openchdir) では、シンボリック リンクをたどってターゲットに作用します (シンボリック リンク チェーンが壊れたリンクで終了する場合はエラーを報告します)。ファイルのメタデータに作用する操作 (つまり、inode) の場合は状況によって異なります。操作によっては、関数のペア (例: stat/ lstat) があり、その他の操作ではシンボリック リンクがたどられます (例: chmodutimesLinux ではシンボリック リンクのバリアントはありません)。

関連情報