状況
本番 DB サーバーの設定を変える作業。作業者が次のコマンドを貼り付け、Enter を押そうとしている。
Enter の前に止めるべき点は?
$ sudo sed -i 's/max_connections = 100/max_connections = 500/' /etc/mysql/my.cnf正答
- 区切り文字に / を使っているので、= が含まれると置換が壊れる
- macOS では -i '' と書かないとエラーになるので、書き方を統一すべき
- sed を root で実行すると所有者が変わるので、sudo を外すべき
- -i で元ファイルを直接書き換え、控えも差分確認もない
解説
sed -i は置換結果で元のファイルを置き換えるので、正規表現の誤りや意図しない行への一致があっても、元に戻す材料が残らない。sed -i.bak とするか事前に cp で控えを取り、diff で変更箇所が想定どおりか確かめてから再起動する。空白の数が違って何も置換されなかった場合も diff なら気づける。= は区切り文字ではないので 1 番目は誤り。macOS の書き方は Linux の本番サーバーでの作業とは関係がない。
参考: www.gnu.org
この問題を含む 危険察知 のテストを制限時間つきで解く
危険察知クイズへ