1.02.3標準
currentはreleases/v1を指す既存のシンボリックリンクである。
GNU lnを使い、currentをreleases/v2へのシンボリックリンクへ置き換える。
適切なコマンドはどれか。
× 不正解
GNU ln -sfnはシンボリックリンクを作成し、既存のリンク名を置換して、ディレクトリへのリンクを宛先としてたどらない。
詳細解説
誤り
ln releases/v2 current-sがなくハードリンクを試み、既存currentの置換条件も表さない。
誤り。-sがないためディレクトリへのハードリンクを試み、currentを版切替リンクとして作り直せない。
誤り
ln -s releases/v2 currentシンボリックリンク作成は指定するが、既存のcurrentがあるため通常は失敗する。
誤り。新規リンクなら使えるが、currentが既に存在する場面では同名リンクへ単純に置き換えられない。
誤り
ln -f releases/v2 current既存名を除去し得るが、-sがないためシンボリックリンクを作らない。
誤り。-fで既存名の処理は変わるが、-sがないので新しいcurrentをシンボリックリンクにしない。
正しい
ln -sfn releases/v2 currentシンボリックリンクを作り、既存名を置換し、current自体をディレクトリとしてたどらない。
正しい。-sでリンクを作り、-fで既存currentを置換し、-nでcurrentが指すディレクトリ内へ作成されるのを防ぐ。
実際に確かめる
一時的な検証環境で実行できる例です。
tmp=$(mktemp -d); mkdir -p "$tmp/releases/v1" "$tmp/releases/v2"; (cd "$tmp" && ln -s releases/v1 current && ln -sfn releases/v2 current && readlink current); rm -rf "$tmp"期待される結果
releases/v2理解のポイント
- -sはsymbolic
- -fは既存宛先を置換
- -nは宛先リンクを通常ファイル扱い
確認時の注意
- 確認環境: GNU coreutils 9.x / 一時ディレクトリ
- -nはGNU lnの動作を前提とし、検証は一時ディレクトリ内だけで行う。
基礎のおさらい
リリース切替
固定名currentを版別ディレクトリへ向けると、参照側のパスを変えずに対象版を切り替えられる。
原子的切替
厳密な無停止切替では一時リンクを作ってrenameするなど、更新途中を見せない手順も検討する。
問題IDKL-101-417
確認環境GNU coreutils 9.x / 一時ディレクトリ
最終技術確認2026-08-13
誤り・権利侵害を報告