過去問ドリル

LinuCレベル1 ファイル・ディレクトリの操作と管理 問24

ファイル・ディレクトリの操作と管理/ハードリンクとシンボリックリンク

ファイル a.txt から、cp a.txt b.txt で b.txt を、ln a.txt c.txt で c.txt を作成した。その後、echo "new" >> a.txt を実行して a.txt に1行追記した。b.txt と c.txt の内容についての説明として適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル1の出題範囲「ファイル・ディレクトリの操作と管理」に対応。実際の試験問題ではありません)

正解:B

解説

ln で作成したハードリンク c.txt は、a.txt と同じinode(同じデータの実体)を指す別名なので、a.txt への追記は c.txt から読んでもそのまま見えます。一方、cp で作成した b.txt は、コピーした時点の内容を持つ独立した別のファイル(別のinode)なので、その後の a.txt の変更は反映されません。ls -i で確認すると、a.txt と c.txt は同じinode番号、b.txt は異なるinode番号になっています。コピーは「その時点の複製」、リンクは「同じ実体への別の入口」という違いがあります。

選択肢ごとの解説

  • A誤り。cp で作った b.txt は独立したファイルなので、コピー後の a.txt の変更は b.txt には反映されません。
  • B正しい。ハードリンクの c.txt は a.txt と同じ実体を指すため変更が見えますが、コピーの b.txt は別の実体です。
  • C誤り。反映の関係が逆です。同じinodeを共有するのはハードリンクの c.txt で、コピーの b.txt ではありません。
  • D誤り。ハードリンクの c.txt は a.txt と同じデータを指しているため、追記した内容が見えます。
LinuCレベル1の問題を演習モードで解く