LinuCレベル1 ファイル・ディレクトリの操作と管理 問32
ファイル・ディレクトリの操作と管理/ハードリンクとシンボリックリンクカレントディレクトリが /home/alice で、/home/alice/data/report.txt が存在し、/tmp/data というディレクトリは存在しない。この状態で ln -s data/report.txt /tmp/report-link を実行した。作成されたシンボリックリンクの説明として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル1の出題範囲「ファイル・ディレクトリの操作と管理」に対応。実際の試験問題ではありません)
- A/tmp/report-link は /home/alice/data/report.txt を指し、内容を読める
- B/tmp/report-link は /tmp/data/report.txt を指すことになり、リンク切れになる
- C相対パスはリンク先に指定できないため、エラーになりリンクは作成されない
- D/tmp/report-link には report.txt の内容がコピーされ、独立したファイルになる
正解:B
解説
シンボリックリンクは、ln -s に指定したリンク先の文字列をそのまま内容として保存します。相対パスで保存された場合、その相対パスは実行時のカレントディレクトリではなく、リンクファイルが置かれたディレクトリを基準に解釈されます。そのため /tmp/report-link は /tmp/data/report.txt を指すことになり、存在しないパスなのでリンク切れになります。絶対パスで指定するか、GNU coreutilsの ln では -r(--relative)オプションで正しい相対パスを計算させると防げます。
選択肢ごとの解説
- A誤り。相対パスはリンクを実行したときのカレントディレクトリではなく、リンクが置かれた /tmp を基準に解釈されるため、/home/alice 側のファイルは指しません。
- B正しい。リンクの内容「data/report.txt」は /tmp を基準に解釈され、存在しない /tmp/data/report.txt を指すリンク切れになります。
- C誤り。シンボリックリンクのリンク先には相対パスも指定でき、ln はリンク先が存在するかどうかを確認せずにリンクを作成します。
- D誤り。ln -s はファイルの内容をコピーせず、リンク先のパスを保存した特別なファイルを作成します。内容の複製を作るのは cp です。