この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
そう思いながらコマンド履歴を遡ると、引数の順番が逆でした。本番のhttpd.confを手元のファイルで上書きするつもりが、逆方向にコピーしていたのです。
この記事では、私がSE時代(2001年~2006年)に経験したcpコマンドによる設定ファイルの上書き事故の実体験をもとに、その怖さと、私が今でも守り続けている「作業前バックアップの鉄則」を語ります。
この記事のポイント
・cpコマンドは確認なしにファイルを上書きする
・Linuxにはゴミ箱がなく上書き後のファイルは戻せない
・作業前に「.bak」コピーを取るのが20年変わらない鉄則
・cp -iオプションで上書き前に確認ダイアログを出せる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
「コピーの方向が逆だった」── SE時代に起きた上書き事故
SE時代、客先常駐で担当していたRed Hat Linux 9の本番Webサーバーで、Apacheの設定変更を任されました。テスト環境で新しい設定ファイル(httpd.conf)の動作確認を終え、いよいよ本番への適用です。手元のファイルを本番サーバーにコピーしようとして、次のコマンドを実行しました。
# このとき実際に打ったコマンド(引数の順番を間違えた) # 意図:手元の新ファイル → 本番の httpd.conf へコピー # 実際:本番の httpd.conf → 手元のファイルへコピー(逆!) $ cp /etc/httpd/conf/httpd.conf ~/work/httpd.conf # 結果:本番の設定が ~/work/httpd.conf に上書きされた
直後にApacheを再起動すると、起動に失敗しました。
# Apacheの起動エラー(再現) # Red Hat Linux 9、Apache 2.0系 $ service httpd restart Stopping httpd: [ OK ] Starting httpd: Syntax error on line 79 of /etc/httpd/conf/httpd.conf: Invalid command 'ServerName_backup', perhaps misspelled or defined by a module not included in the server configuration [FAILED]
幸いなことに、前日の作業でバックアップを残していたため事なきを得ました。しかし、もしバックアップがなければ、そのサーバーの設定を一から作り直すことになっていたと思います。
20年以上サーバーを運用してきた経験から言うと、「cpの引数を間違えた」という事故は決して珍しくありません。私のセミナーでも、受講生から同じ失敗談をよく聞きます。
cpコマンドが「静かに上書きする」理由
Windowsでファイルをコピーするとき、上書きが発生すると「置き換えますか?」というダイアログが表示されます。しかしLinuxのcpコマンドは、デフォルトで何も確認せずに上書きします。# デフォルトのcp(確認なしに即時上書き) $ cp 新ファイル /etc/httpd/conf/httpd.conf # → 何も表示されずに上書き完了
・Linuxのcp:上書き確認なし。コマンドは即時実行される
・Linuxのゴミ箱:ターミナル操作では存在しない
・リカバリの難しさ:バックアップがなければ復元は困難
現役講師が20年続けてきた「上書き事故を防ぐ3つの習慣」
セミナーで3,100名以上を指導してきた中で、「cpコマンドで大事な設定ファイルを上書きしてしまった」という話は本当によく聞きます。対策は難しくありません。習慣にしてしまえばよいだけです。1. 作業前に必ず「.bak」バックアップを取る
最も確実な対策は、ファイルを編集・コピーする前にバックアップを取ることです。私はファイルに触れる前に、必ず元のファイルを「.bak」という拡張子でコピーする習慣を持っています。# 作業前に必ずバックアップを取る(1秒の習慣) $ cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak # 日付付きバックアップも有効(複数世代を残せる) $ cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.20260719.bak
設定ファイルを含む複数のファイルをまとめてアーカイブしたい場合は、tarコマンドの使い方|.tar.gzの圧縮・展開からオプションまでも参考にしてください。
2. cp -i でコピー前に確認する
cpコマンドに「-i」(--interactive)オプションを付けると、上書き先のファイルが存在する場合に確認を求めます。# -iオプションで上書き確認(y で上書き、n でキャンセル) $ cp -i 新httpd.conf /etc/httpd/conf/httpd.conf cp: overwrite '/etc/httpd/conf/httpd.conf'? n # → n と答えればキャンセルできる
3. diffで差分確認してから本番に適用する
新しい設定ファイルを本番に適用する前に、既存ファイルとの差分をdiffコマンドで確認することも有効です。# 差分を確認してから本番に適用する $ diff /etc/httpd/conf/httpd.conf ~/work/httpd.conf.new # 差分が意図した変更だけであることを確認してから実行 $ cp ~/work/httpd.conf.new /etc/httpd/conf/httpd.conf
まとめ
cpコマンドの上書き事故は、「コマンドの使い方を知っていれば防げる」類のミスではありません。長年Linuxを使っている現場のエンジニアでも、疲れているとき・急いでいるときにやってしまいます。だからこそ「習慣」として染み込ませることが重要です。| やること | コマンド |
|---|---|
| 作業前にバックアップを取る | cp ファイル名 ファイル名.bak |
| 上書き前に確認ダイアログを出す | cp -i 新ファイル コピー先 |
| 差分を確認してからコピーする | diff 既存ファイル 新ファイル |
| cpコマンドに常時-iを設定する | alias cp='cp -i' |
Linuxには「戻せない」操作がたくさんあります。その怖さを身をもって経験してから覚えるより、知識として先に持っておく方がずっと良いと思います。
本番サーバーの作業ミスを防ぐ「安全な運用の型」を身につけませんか?
「ミスをしてから覚えるのでは、現場では遅すぎる」という方が多いです。現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:LinuxでSSHが繋がらなくなった日の話|iptables設定ミスのロックアウト体験と現役講師が守る3つの鉄則
- この記事の属するカテゴリ:Linux学習ガイドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます