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の出題範囲「ファイル・ディレクトリの操作と管理」に対応。実際の試験問題ではありません)
- Ab.txt と c.txt の両方に、追記した内容が反映される
- Bc.txt には追記した内容が反映されるが、b.txt には反映されない
- Cb.txt には追記した内容が反映されるが、c.txt には反映されない
- Db.txt と c.txt のどちらにも、追記した内容は反映されない
正解: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 と同じデータを指しているため、追記した内容が見えます。