## はじめに
`cp` コマンドはLinuxでファイルやディレクトリをコピーするための基本コマンドです。単純なファイルコピーから、パーミッションやタイムスタンプを保持したコピー、バックアップ作成まで、多彩なオプションを持っています。
サーバー管理ではファイルの移動・コピーは日常的な作業です。設定ファイルのバックアップ作成や、デプロイ時のファイル配置など、`cp` コマンドを正しく使えることはサーバー管理の基礎スキルです。
## 症状・背景
`cp` コマンドが必要になる主な場面:
– 設定ファイルを編集前にバックアップしたい(例:`nginx.conf.bak`)
– ディレクトリごとファイルをまるごとコピーしたい
– ファイルのパーミッションや所有者を保持したままコピーしたい
– 上書きの確認プロンプトを出してから安全にコピーしたい
## 手順・設定方法
### ステップ1: 基本的なファイルコピー
“`bash
# ファイルを別のファイル名でコピー
cp source.txt destination.txt
# ファイルを別のディレクトリにコピー
cp config.conf /etc/nginx/
# 複数ファイルをディレクトリにコピー
cp file1.txt file2.txt /tmp/
“`
### ステップ2: ディレクトリをコピーする(-r オプション)
“`bash
# ディレクトリを再帰的にコピー(-r または -R)
cp -r /etc/nginx/ /backup/nginx_backup/
# ディレクトリの中身だけをコピー(末尾のスラッシュで指定)
cp -r /etc/nginx/. /backup/nginx/
# ドットファイルも含めてコピー
cp -r /home/user/. /backup/user_home/
“`
### ステップ3: ファイル属性を保持してコピーする
“`bash
# タイムスタンプ・パーミッション・所有者を保持(-p: preserve)
cp -p nginx.conf nginx.conf.bak
# シンボリックリンクも含めすべての属性を保持(-a: archive)
# 本番のバックアップ作成に最適
cp -a /var/www/html/ /backup/html_backup/
# -p に加えてシンボリックリンクも保持(-dp)
cp -dp source_link dest_link
“`
### ステップ4: 安全なコピーと確認
“`bash
# 上書き前に確認プロンプトを表示(-i: interactive)
cp -i important.conf /etc/
# 既存のファイルより新しい場合のみコピー(-u: update)
cp -u newfile.txt /destination/
# コピーした内容を詳細表示(-v: verbose)
cp -v *.conf /etc/nginx/conf.d/
# バックアップを自動作成して上書き(~をサフィックスとして追加)
cp –backup=numbered config.conf /etc/config.conf
“`
## 注意事項
– `cp -r` でディレクトリをコピーする際、コピー先ディレクトリが存在しない場合は新規作成、存在する場合はその中にコピーされる(ディレクトリの存在確認を先にすること)
– `cp` は標準でシンボリックリンクを参照先の実体をコピーする。シンボリックリンクそのものをコピーする場合は `-d` または `-P` オプションを使用
– 大量ファイルのコピーでは `rsync` の使用を検討する(差分コピー・進捗表示が可能)
– 本番環境での上書きは必ずバックアップを取ってから実施すること
## まとめ
1. **基本コピー**: `cp source dest` でファイルをコピー
2. **ディレクトリコピー**: `cp -r srcdir/ destdir/` で再帰的にコピー
3. **属性保持**: `cp -a` でタイムスタンプ・パーミッション・所有者をすべて保持
4. **安全確認**: `cp -i` で上書き前に確認プロンプトを表示
5. **設定バックアップ**: `cp -p file.conf file.conf.bak` で属性を保持してバックアップ
関連記事:
– [mvコマンドでファイルを移動・リネームする方法](../0703-linux-mv-command/)
– [rsyncでディレクトリを同期する方法](../0754-linux-rsync-sync/)
– [Linuxでファイルを一覧表示するlsコマンドの使い方](../0701-linux-ls-command/)





