Linuxのcpコマンドで本番設定ファイルを上書きしてしまった日の話|現役講師が語る上書き事故の恐怖と作業前バックアップの鉄則

HOMEリナックスマスター.JP 公式ブログLinux学習ガイド > Linuxのcpコマンドで本番設定ファイルを上書きしてしまった日の話|現役講師が語る上書き事故の恐怖と作業前バックアップの鉄則
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「設定変更のために新しい設定ファイルをコピーしたのに、Apacheが起動しない。ログには文法エラーが出ている。でも、テスト環境で確認済みのはずのファイルだ」

そう思いながらコマンド履歴を遡ると、引数の順番が逆でした。本番のhttpd.confを手元のファイルで上書きするつもりが、逆方向にコピーしていたのです。

この記事では、私がSE時代(2001年~2006年)に経験したcpコマンドによる設定ファイルの上書き事故の実体験をもとに、その怖さと、私が今でも守り続けている「作業前バックアップの鉄則」を語ります。

この記事のポイント

・cpコマンドは確認なしにファイルを上書きする
・Linuxにはゴミ箱がなく上書き後のファイルは戻せない
・作業前に「.bak」コピーを取るのが20年変わらない鉄則
・cp -iオプションで上書き前に確認ダイアログを出せる


Linuxのcpコマンドで本番設定ファイルを上書きしてしまった日の話|現役講師が語る上書き事故の恐怖と作業前バックアップの鉄則
「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

「コピーの方向が逆だった」── 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 に上書きされた

cpコマンドの引数は「コピー元 コピー先」の順です。しかし私はそれを逆に打ってしまっていました。このコマンドは何も確認せず、エラーも出さずに、静かに実行を完了します。

直後に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]

エラーが出て初めて「何かがおかしい」と気づきました。コマンド履歴を確認すると、cpの引数順が逆だったことが判明しました。本番のhttpd.confが、手元にあった途中段階のファイルで上書きされていたのです。

幸いなことに、前日の作業でバックアップを残していたため事なきを得ました。しかし、もしバックアップがなければ、そのサーバーの設定を一から作り直すことになっていたと思います。

20年以上サーバーを運用してきた経験から言うと、「cpの引数を間違えた」という事故は決して珍しくありません。私のセミナーでも、受講生から同じ失敗談をよく聞きます。

cpコマンドが「静かに上書きする」理由

Windowsでファイルをコピーするとき、上書きが発生すると「置き換えますか?」というダイアログが表示されます。しかしLinuxのcpコマンドは、デフォルトで何も確認せずに上書きします。

# デフォルトのcp(確認なしに即時上書き) $ cp 新ファイル /etc/httpd/conf/httpd.conf # → 何も表示されずに上書き完了

そしてLinuxには「ゴミ箱」がありません。ターミナルからcpコマンドで上書きしてしまったファイルは、原則として復元できません。Windowsの感覚のままLinuxを操作していると、この違いで大きな事故を起こしてしまいます。

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

この1コマンドが習慣になっているだけで、万一のときに「.bak」ファイルから即座に戻せます。「たった1行で保険がかけられる」と考えれば、省略する理由がありません。

設定ファイルを含む複数のファイルをまとめてアーカイブしたい場合は、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 と答えればキャンセルできる

「alias cp='cp -i'」と .bashrc に設定しておけば、cpコマンドを打つたびに自動的に確認が入ります。ただし、スクリプト内のcpにはこの設定が効かないこともあるため、バックアップ習慣と組み合わせるのが鉄則です。

3. diffで差分確認してから本番に適用する

新しい設定ファイルを本番に適用する前に、既存ファイルとの差分をdiffコマンドで確認することも有効です。

# 差分を確認してから本番に適用する $ diff /etc/httpd/conf/httpd.conf ~/work/httpd.conf.new # 差分が意図した変更だけであることを確認してから実行 $ cp ~/work/httpd.conf.new /etc/httpd/conf/httpd.conf

「変更点が本当に意図したものかどうか」をコピー前に確認できます。予期しない差分が見えたら、その場で立ち止まって考えられます。Apacheの設定ファイルの変更については、Apacheのタイムアウト設定を確認する方法も参考にしてください。

まとめ

cpコマンドの上書き事故は、「コマンドの使い方を知っていれば防げる」類のミスではありません。長年Linuxを使っている現場のエンジニアでも、疲れているとき・急いでいるときにやってしまいます。だからこそ「習慣」として染み込ませることが重要です。

やること コマンド
作業前にバックアップを取る cp ファイル名 ファイル名.bak
上書き前に確認ダイアログを出す cp -i 新ファイル コピー先
差分を確認してからコピーする diff 既存ファイル 新ファイル
cpコマンドに常時-iを設定する alias cp='cp -i'
「たった1行のバックアップコマンドを打つかどうか」で、事故が起きたときの結末が大きく変わります。あの日の経験以来、私はファイルに触れる前に必ず「.bak」を取る習慣を20年間続けています。

Linuxには「戻せない」操作がたくさんあります。その怖さを身をもって経験してから覚えるより、知識として先に持っておく方がずっと良いと思います。

本番サーバーの作業ミスを防ぐ「安全な運用の型」を身につけませんか?

「ミスをしてから覚えるのでは、現場では遅すぎる」という方が多いです。現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録