LPIC-1 Exam 101 無料問題 10 / 10 ・ 分野4: Devices, Linux Filesystems, Filesystem Hierarchy Standard
あるディレクトリに、ls -l でリンク数 1 と出るファイル data.txt がある。ln data.txt hard.txt と ln -s data.txt soft.txt を実行したあと、rm data.txt を実行した。rm の直前の data.txt のリンク数と、rm のあとに cat soft.txt を実行した結果の組み合わせとして正しいものはどれか。
- リンク数は 3、cat soft.txt は中身を表示できる
- リンク数は 3、cat soft.txt は中身を表示できない
- リンク数は 2、cat soft.txt は中身を表示できない
- リンク数は 2、cat soft.txt は中身を表示できる
正解と解説を見る
正解: C
正解の理由
ハードリンクは同じ i ノードに付けた別の名前で、1つ作るごとにリンク数が1つ増える。ln data.txt hard.txt でリンク数は 2 になる。シンボリックリンクは、たどる先のパス名を中身に持つ別のファイルで、data.txt のリンク数は増やさない。rm data.txt で名前が1つ消えても、hard.txt が同じ i ノードを指しているので中身は残る(リンク数 1)。soft.txt はもう無い data.txt という名前を指すので、たどれない壊れたリンク(dangling link)になり、cat はファイルが無いとして失敗する。
違う選択肢
「リンク数は 3、cat soft.txt は中身を表示できない」… cat の結果は合っている。リンク数に数えられるのは、同じ i ノードを指す名前(ハードリンク)だけである。soft.txt は data.txt という名前を指すだけで、data.txt のリンク数は増やさないので 2 になる。
「リンク数は 2、cat soft.txt は中身を表示できる」… リンク数は合っている。soft.txt が持っているのは data.txt という名前の文字列で、中身そのものではない。名前が消えると soft.txt はたどれず、中身が hard.txt に残っていても表示できない。
「リンク数は 3、cat soft.txt は中身を表示できる」… 2つとも違う。シンボリックリンクはリンク数を増やさず、名前をたどる仕組みなので、data.txt が消えると壊れる。中身は hard.txt から読める。
中身が消える時点
ファイルの中身が解放されるのは、リンク数が 0 になり、どのプロセスも開いていないときである。ハードリンクには「元」と「写し」の区別が無く、ls -li で見ると同じ i ノード番号が並ぶ。壊れた soft.txt は、同じ場所に data.txt を作り直せば、またたどれるようになる。