危険察知4 択難易度 標準

状況

本番 DB サーバーの設定を変える作業。作業者が次のコマンドを貼り付け、Enter を押そうとしている。

Enter の前に止めるべき点は?

$ sudo sed -i 's/max_connections = 100/max_connections = 500/' /etc/mysql/my.cnf

正答

  1. 区切り文字に / を使っているので、= が含まれると置換が壊れる
  2. macOS では -i '' と書かないとエラーになるので、書き方を統一すべき
  3. sed を root で実行すると所有者が変わるので、sudo を外すべき
  4. -i で元ファイルを直接書き換え、控えも差分確認もない

解説

sed -i は置換結果で元のファイルを置き換えるので、正規表現の誤りや意図しない行への一致があっても、元に戻す材料が残らない。sed -i.bak とするか事前に cp で控えを取り、diff で変更箇所が想定どおりか確かめてから再起動する。空白の数が違って何も置換されなかった場合も diff なら気づける。= は区切り文字ではないので 1 番目は誤り。macOS の書き方は Linux の本番サーバーでの作業とは関係がない。

参考: www.gnu.org

bashsedconfig

この問題を含む 危険察知 のテストを制限時間つきで解く

危険察知クイズへ