LinuCレベル2 システムの保守と運用管理 問29
システムの保守と運用管理/makeによるソースコードからのビルドとインストールソースツリーの最上位ディレクトリで「patch -p1 < fix.patch」を実行した。パッチ内のファイル名が「a/src/main.c」のとき、-p1の働きとして適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「システムの保守と運用管理」に対応。実際の試験問題ではありません)
- Aパッチの差分のうち1つ目のファイルだけを適用し、残りのファイルへの変更は無視する
- B変更内容を適用せずに1回だけ試行し、適用できるかどうかの結果だけを表示する
- Cファイル名の先頭から階層を1つ取り除き、src/main.cとして対象のファイルを探す
- D適用前のファイルを1世代だけ残すように、拡張子.origのバックアップを作成する
正解:C
解説
patchの-pオプションは、パッチに書かれたファイル名の先頭から、指定した数だけディレクトリの階層を取り除いて対象ファイルを探す指定です。diffやgitで作ったパッチでは「a/src/main.c」「b/src/main.c」のように余分な階層が付いていることが多く、ソースツリーの最上位で-p1を指定すると「src/main.c」として正しく当てられます。実際に書き換えずに適用できるかを確認したい場合は--dry-run、バックアップを残したい場合は-bを使います。
選択肢ごとの解説
- A誤り。-pは適用するファイルの数を指定するものではなく、パッチ内の全ファイルが対象になります。
- B誤り。適用せずに結果だけを確認するのは--dry-runオプションの働きです。
- C正しい。-p1はファイル名の先頭から1階層(a/)を取り除き、src/main.cとして対象を探します。
- D誤り。適用前のファイルのバックアップ(.orig)を作成するのは-bオプションの働きです。