連載
» 2016年05月31日 05時00分 UPDATE

Linux基本コマンドTips(17):【 cp 】コマンド――ファイルをコピーする

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「cp」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、ファイルをコピーするための「cp」コマンドです。なお、今回は基本操作のみを扱います。

cpコマンドとは?

 Linuxでは、ファイルをコピーする際には「cp」コマンドを使います。「cp コピー元 コピー先」のように指定します。コピー先にディレクトリを指定した場合は、指定したディレクトリにコピー元と同じ名前のファイルが作成されます。


cpコマンドの書式

cp [オプション] コピー元 コピー先

cp [オプション] ファイル1 ファイル2…… コピー先ディレクトリ

※[ ]は省略可能な引数を示しています



cpコマンドの主なオプション

 cpコマンドの主なオプションは次の通りです。

●一般的なオプション
短いオプション 長いオプション 意味
-i --interactive 上書きする前に確認する(実行例1を参照)
-v --verbose 実行内容を表示する(実行例3を参照)
-n --no-clobber 存在するファイルを上書きしない
-f --force 強制的に上書きする
-b --backup=方法 上書きされるファイルのバックアップを作る(「ln」コマンド参照
[方法]:「numbered」または「t」の場合は番号の添え字、「simple」または「never」の場合はファイル名の末尾に「~」または「-S」オプションか環境変数で指定した文字を付けるシンプルなバックアップ(「-b」と同じ)、「existing」または「nil」の場合は既にあるファイルに従う(ない場合はで「simple」と同じ)
-S 接尾辞 --suffix=接尾辞 バックアップファイルを作る際のファイル名末尾に付ける文字(無指定時は「~」1文字、または環境変数「SIMPLE_BACKUP_SUFFIX」に従う)

●リンク関係のオプション
短いオプション 長いオプション 意味
-d シンボリックリンク自体をコピーする(--no-dereference --preserve=linksと同様)
-s --symbolic-link コピーの代わりにシンボリックリンクを作成する
-l --link コピーの代わりにファイルのハードリンクを作成する
-L --dereference コピー元のシンボリックリンクを常にたどる
-P --no-dereference コピー元にあるシンボリックリンクをたどらない

●ディレクトリ関係のオプション
短いオプション 長いオプション 意味
-R,-r --recursive コピー元にディレクトリを指定した場合、再帰的に(サブディレクトリも含めて)コピーする
-t ディレクトリ名 --target-directory=ディレクトリ名 「-t」で指定したディレクトリにコピーする
-T --no-target-directory コピー先(最後の引数)がディレクトリでも特別扱いしない

●属性関係のオプション
短いオプション 長いオプション 意味
-a --archive サブディレクトリや属性なども含め、可能な限り全てを保持しながらコピーする(-dR --preserve=allと同様)
-u --update コピー元のファイルがコピー先ファイルより新しいか新規ファイルの場合だけコピーする
-p パーミッションと所有者とタイムスタンプを保持する(--preserve=mode,ownership,timestamps相当)
--preserve[=属性リスト] 指定した属性を保持する。属性を指定しなかった場合は、mode(パーミッション)、ownership(所有者)、timestamps(タイムスタンプ)が保持される。その他、context(コンテキスト情報)、links(ディレクトリ内のハードリンク)、xattr(ファイルシステムの拡張属性)、all(可能な限り全ての属性)を指定可能
--no-preserve=属性リスト 指定した属性を保持しない
--attributes-only ファイルのデータをコピーせず、ファイルの属性のみコピーする


ファイルをコピーする

 「cp file1 file2」で、「file1」が「file2」へコピーされます。

コマンド実行例

cp file1 file2

(「file1」を「file2」にコピーする)

cp -i file1 file2

(「file1」を「file2」にコピーする。「file2」が既にある場合は、上書きするかどうかを確認する)


 コピー先に同名のファイルがある場合(上記の場合、「file2」が既にある)は、ファイルはコピーで上書きされます。上書きするかどうかを事前に確認したい場合には、「-i」オプションを使います。

$ ls -l
合計 4
-rw-rw-r--. 1 study study 58  5月 18 20:51 file1
「file1」というファイルがある
$ cp file1 file2
「cp」コマンドで「file1」を「file2」にコピーする
$ ls -l
合計 8
-rw-rw-r--. 1 study study 58  5月 18 20:51 file1
-rw-rw-r--. 1 study study 58  5月 18 20:51 file2
$ cp -i file1 file2
cp: `file2' を上書きしますか? 
「i」オプションを付けると、ファイルを上書きする場合に確認メッセージが表示される。「y」キーでコピーが実行される


コピー先にディレクトリを指定する

 コピー先にディレクトリを指定した場合は、そのディレクトリにコピー元のファイルを同じ名前のファイルが作成されます。

コマンド実行例

cp file1 dir1/

(「file1」を「dir1」の中にコピーする(「dir1」の中に「file1」が作成される))


$ ls -l
合計 8
drwxrwxr-x. 2 study study  6  5月 18 21:04 dir1
-rw-rw-r--. 1 study study 58  5月 18 20:51 file1
-rw-rw-r--. 1 study study 58  5月 18 21:00 file2
ディレクトリ「dir1」と、ファイル「file1」「file2」がある
$ ls -l dir1/
合計 0
「ls -l」で「dir1」の中を確認、ファイルはない
$ cp file1 dir1/
「cp」コマンドで「file1」を「dir1」の中にコピーする
$ ls -l dir1/
合計 4
-rw-rw-r--. 1 study study 58  5月 18 21:05 file1
「ls -l」で「dir1」の中を確認、「file1」が存在する

 また、cpコマンドでは、複数のファイルをまとめて別のディレクトリにコピーすることもできます。

$ cp file1 file2 dir1/
「cp」コマンドで「file1」と「file2」をまとめて「dir1」にコピーする
$ ls -l dir1/
合計 8
-rw-rw-r--. 1 study study 58  5月 18 21:07 file1
-rw-rw-r--. 1 study study 58  5月 18 21:07 file2
「ls -l」で「dir1」の中を確認すると、「file1」と「file2」の2つのファイルがある


コピー内容を分かりやすくするには?

 cpコマンドに「-v」オプションを付けて実行すると、コピーしたファイルの名前が表示されるため、操作内容が分かりやすくなります。

コマンド実行例

cp -v コピー元 コピー先


$ cp -v file1 file2 dir1/
`file1' -> `dir1/file1'
`file2' -> `dir1/file2'
「v」オプションを付けると、コピーしたファイルの名前が表示される


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。