メインコンテンツへ
ソフトウェア

Linuxのファイルシステムにおけるハードリンクに関する記述として、適切なものはどれか。

ア.異なるファイルシステム(別パーティション)に存在するファイルに対してもハードリンクを作成できる。
イ.元のファイル名を削除した後も、ハードリンクを通じてファイルのデータにアクセスできる。正解
ウ.ハードリンクはリンク先のパス名を格納した特殊ファイルとして実装されている。
エ.通常ユーザはディレクトリに対してもハードリンクを自由に作成できる。

解説

ハードリンクは「同じ実体に別名をつける」仕組みです。ファイルの本体はinode(アイノード)という管理票で、名前はその票を指す付箋に過ぎません。付箋を1枚剥がしても、票が残っている限り実体は消えません。

なぜ イ が正解か

Linuxでは、ファイルの実体(データブロックとメタ情報)はinode(アイノード)という構造体で管理されます。ハードリンクを作成すると、同じinodeを指すディレクトリエントリが追加され、inode内の「リンクカウント」が1増加します。元のファイル名(ディレクトリエントリ)を削除してもカウントが1減るだけで、0にならない限りinodeもデータブロックも解放されません。そのため、ハードリンク経由でファイルに引き続きアクセスできます。

なぜ ア は間違いか

異なるファイルシステムをまたいでリンクを張れるのはシンボリックリンクの特徴です。ハードリンクは同一ファイルシステム内のinodeを直接参照する仕組みなので、パーティションを越えることはできません。「別パーティションも指せる」という記述が出てきたらシンボリックリンクを疑いましょう。

なぜ ウ は間違いか

「リンク先のパス名を格納した特殊ファイル」はシンボリックリンクの実装です。シンボリックリンクは独自のinodeを持つ「パスを書いたメモ帳」ですが、ハードリンクはそのような独立したファイルを持たず、単に同じinodeを指す別名(ディレクトリエントリ)として存在します。

なぜ エ は間違いか

ディレクトリへのハードリンクは、A→B→Aのような循環参照が生じてファイルシステムが壊れる危険があるため、一般ユーザには許可されていません(rootでも通常は推奨されません)。ディレクトリへのリンクが必要な場合はシンボリックリンクを使います。

出典: AI生成問題(学習用)