【Linuxコマンド】cp コマンドの使い方とよく使うオプション

概要

 
Linux の cp コマンド は、ファイルやディレクトリをコピー(複製)するためのコマンドです。
オプションを指定することで、コピー元ファイルのアクセス日時・所有者・グループ・パーミッションなどの属性も引き継ぐことができます。
 

設定ファイルのバックアップや Web コンテンツのデプロイ、ログの退避など、サーバ運用のあらゆる場面で登場する基本コマンドです。
特に本番環境では「どこからどこへコピーするか」「上書きしてよいか」を慎重に確認しながら使う必要があります。
 

フォーマット

 

cp [オプション]... [-T] コピー元 コピー先
cp [オプション]... コピー元... ディレクトリ
cp [オプション]... -t ディレクトリ コピー元...

 

1 つ目の形式は、単一のコピー元を単一のコピー先にコピーするパターンです。
2 つ目・3 つ目の形式は、複数のコピー元を 1 つのディレクトリの中にコピーするパターンです。
ディレクトリをコピーする場合は、通常 -r または -R オプションを組み合わせます。

 

よく使うコマンド例

 

・単一のファイルを別名でコピーする。

cp file1.txt file2.txt

最も基本的な使い方です。
file1.txt の内容をコピーして、file2.txt という新しいファイルを作成します(file2.txt が存在する場合は上書きされます)。

 

・複数のファイルをディレクトリにまとめてコピーする。

cp index.html style.css script.js /var/www/html/

複数のコピー元ファイルを指定し、最後の引数にディレクトリを指定すると、
そのディレクトリの中に同名ファイルとしてコピーされます。

 

・ディレクトリごと再帰的にコピーする。

cp -r public_html public_html_backup

-r(または -R)オプションを付けると、ディレクトリの中身を再帰的に丸ごとコピーします。
Web コンテンツのバックアップを取るときなどによく使います。

 

・コピー元ファイルの属性を引き継いでコピーする。

cp -p file1 file2

-p オプションを付けると、コピー元のタイムスタンプ・所有者・グループ・パーミッションをできるだけ保持したままコピーします。
ログファイルや設定ファイルなど、権限や更新日時を変えたくない場合に利用します。

 

・上書きする前に確認のプロンプトを表示する。

cp -i config.php config.php.bak

-i オプションは「interactive」の略で、上書きが発生する場合に確認のメッセージを表示します。
誤って重要なファイルを上書きしてしまう事故を防ぐため、本番環境では alias cp='cp -i' と設定しているケースも多いです。

 

・コピーしているファイル名を表示しながら処理する。

cp -v *.log /backup/logs/

-v オプションは「verbose」の略で、コピー中のファイル名を表示します。
大量のファイルをコピーするときに、どこまで進んでいるかを確認したい場合に便利です。

 

・既存ファイルをバックアップしてから上書きする。

cp --backup index.html /var/www/html/

–backup オプションを付けると、コピー先に同名ファイルが存在する場合、
既存ファイルをバックアップファイルとしてリネームしてから上書きします。
バックアップファイルの命名ルールは --suffix--backup の CONTROL で調整できます(下の表を参照)。

 

・バックアップ付きで設定ファイルを上書きする(~ を付ける)。

cp --backup=numbered httpd.conf /etc/httpd/conf/httpd.conf

CONTROL に numbered などを指定すると、
httpd.conf.~1~ のように世代管理されたバックアップファイルが作成されます。
設定変更の履歴を残しておきたいときに便利です。

 

実務でのよくある使いどころ

 

・設定ファイルのバックアップを取ってから編集する
本番環境で .conf ファイルを編集する前には、必ず
cp -p httpd.conf httpd.conf.bak のように属性を保持したバックアップを取っておくのがおすすめです。
 

・Web コンテンツのリリース/ロールバック
新しいリリース用ディレクトリを作成し、cp -r でファイル一式をコピーしてからシンボリックリンクを切り替える、
といったデプロイ手順でも cp はよく登場します。
 

・ログやデータの退避
ログローテーションやバックアップの前処理として、
cp で別のディスクや NFS 領域に退避しておく運用も一般的です。
 

・スクリプト内での安全なコピー
シェルスクリプトの中で cp -icp --backup を使うことで、
誤上書きに備えながら安全に処理を行うことができます。
 

オプション(よく使うオプションのみ)

 

short optionlong optiondescription
-a--archiveコピー元のファイルの属性を保持する。-dR --preserve=all と同様
-b--backup[=CONTROL]コピー先ファイルが存在する時にバックアップを作成する(PREFIXはdefault)
-f--forceコピー先ファイルが存在する時にそのまま上書きする
-i--interactiveコピー先ファイルが存在する時に上書きしてよいか対話で確認をいれる
-l--linkコピーの代わりにファイルのハードリンクを作成する
-L--dereferenceSOURCE にあるシンボリックリンクを常にたどる
-n--no-clobber存在するファイルを上書きしない (前に指定した -i オプションを上書きする)
-pファイルの属性も併せてコピーする
-P--no-dereferenceSOURCE にあるシンボリックリンクを決してたどらない
-R、-r--recursive再帰的にディレクトリをコピーする
-s--symbolic-linkコピーの代わりにシンボリックリンクを作成する
-S--suffix=SUFFIX通常のバックアップ接尾辞を上書きする
-t--target-directory=DIRECTORY全ての SOURCE 引数を DIRECTORY にコピーする
-T--no-target-directoryDEST を通常ファイルとして扱う
-u--updateSOURCE ファイルがコピー先ファイルより新しいか、存在しない時だけコピーする
-v--verbose実行していることを説明する
-x--one-file-systemこのファイルシステムだけで実行する
--helpこの使い方を表示して終了する
--versionバージョン情報を表示して終了する
 

--backup オプションの CONTROL に指定できる値と挙動の違いは、下記の表にまとめています。

--suffix でバックアップファイル名の接尾辞をカスタマイズすることも可能です。

--backupのCONTROLに指定するオプション

short optionlong optiondescription
noneoffバックアップを作成しない(--backup を指定してもバックアップを取らない設定)
simple元ファイル名の末尾に ~ を付けたバックアップファイルを作成する(例: file → file~)
numbered元ファイル名の末尾に .~番号~ を付けた世代管理バックアップを作成する(例: file → file.~1~)
existing既存のバックアップがある場合は numbered を、それ以外の場合は simple を使用してバックアップを作成する
 

より詳細なオプションや挙動については、Linux の
cp(1) マニュアルページ(英語)
もあわせて参照してください。

ファイルの移動やリネームには mv コマンド
ディレクトリ作成には mkdir コマンド など、目的に応じてコマンドを使い分けると効率的です。

ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
ブログランキング・にほんブログ村へ
にほんブログ村