【実践Linux2】ファイルのコピー cpコマンドの使い方

Linux上でファイルをコピーするにはcpコマンド(CoPy)を使います。cpコマンドではファイルを複製し、新しくできた複製ファイルのファイル名を指定することができます。

書式

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

オプション

-i

処理を完了する前に確認を行わせます。ファイルを上書きコピーする際などに-iオプションをつけておくことによって、誤って上書きコピーしてしまうリスクを減らすことができます。

-r

ディレクトリーのコピーを行わせます。cpコマンドは通常はファイルをコピーするコマンドですが、-rオプションを付与することによって、ディレクトリ内に存在するすべてのファイル・ディレクトリのコピーを行うことができるようになります。

-p

元ファイルの情報を保存します。ファイルには通常、最終更新日時や所有者などのメタ情報が含まれていますが、通常cpコマンドでコピーするとそれらの情報はすべて新しい情報となってコピーされます。-pオプションを付与することによって、コピー元のこれらの情報を保持したままコピーすることができます。

実行例

$ cp src-file dst-file

cpコマンド一つで以下の三つの挙動が行えます。

ファイルを別名のファイルとしてコピー

上記の実行例において、src-fileがコピー元のファイル名で、dst-fileが存在しないファイル名である場合、src-fileのコピーとして新たにdst-fileが作成されます。

ファイルをディレクトリにコピー

src-fileがコピー元のファイル名で、dst-fileがディレクトリ名の場合、dst-fileディレクトリの中にsrc-fileのコピーが新たに作成されます。

ファイルを新しいファイルで上書き

src-fileがコピー元のファイル名で、dst-fileがすでに存在するファイル名の場合、既に存在していたdst-fileの内容がsrc-fileの内容で上書きされます。

cpコマンドの実行

それでは実際にcpコマンドを実行した場合の挙動を確認してみましょう。

オプションなしでcpコマンドを実行

$ cd ~
$ cp /etc/hosts ~
$ ls
hosts
(略)

上記ではetcディレクトリ内に存在するhostsファイルをホームディレクトリ(~)にコピーしています。

$ cd ~
$ cp /etc/hosts ~/hosts.newname
$ ls
hosts hosts.newname
(略)

上記ではetcディレクトリ内に存在するhostsファイルをホームディレクトリにhosts.newnameファイルとしてコピーしています。

-pオプションをつけてcpコマンドを実行

$ cp -p hosts.newname hosts.sametime
$ ls -l
合計 44
-rw-r--r--. 1 tooyama tooyama 158 5 月 31 11:18 2012 hosts
-rw-r--r--. 1 tooyama tooyama 158 5 月 31 11:24 2012 hosts.newname
-rw-r--r--. 1 tooyama tooyama 158 5 月 31 11:24 2012 hosts.sametime
(略)

新しくコピーしたhosts.sametimeファイルはコピー元のhosts.newnameファイルと同じ更新時間になっているのがわかります。-pオプションをつけたことによって所有者や更新時間などの情報を保持したままコピーすることができました。

-rオプションをつけてcpコマンドを実行

$ mkdir olddir newdir
(olddir と newdir を作成)
$ cp -r olddir/ newdir/
$ ls newdir/
olddir

mkdir(MaKe DIRectory)はディレクトリを作成するためのコマンドです。一行目でolddirとnewdirというディレクトリを作成し、olddirディレクトリ(中身も含む)をnewdirディレクトリの中にコピーしました。ディレクトリのコピーを行っているので-rオプションをつける必要があります。

まとめ

いかがでしたか?今回はファイルをコピーするためのcpコマンドについて解説しました。

-rオプションをつけることによってファイルだけでなく、ディレクトリのコピーを行うこともできます。