支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • LinuxにおけるCPコマンドについ

始めに

この記事ではLinuxのGNU&UNIXコマンドの中からCPコマンドについて学習していきます。


CPコマンドとは

ファイルやディレクトリをコピーする際に使用するコマンドです。
同じディレクトリ内や他のディレクトリに複製でき、他のディレクトリに複製する場合は同じ名前にすることもできます。
コマンド投入時の書式は以下の通りです。
CP [オプション] コピー元ファイル名 コピー先ファイル名
CP [オプション] コピー元ファイル名 コピー先ディレクトリ名


少し応用として以下の書式も使われます。
CP [オプション] コピー元ファイル名
上記のようにファイル名を1つだけ指定すると、そのままの名前でそのディレクトリにコピーされます。

CP [オプション] コピー元ファイル名1 コピー元ファイル名2 コピー先ディレクトリ名
上記のようにコマンド投入すると、ファイル名をそのままにディレクトリに複数ファイルコピーされます。

CP [オプション] file* ディレクトリ名
上記のようにコマンド投入すると、fileから始まるファイル※を、ワイルドカードを使用し一度にコピーできます。
※例:file1、filemoto、file.txt等fileから始まる全てのファイル


コマンド例

CP testmoto.txt testsaki.txt
"testmoto.txt"のファイルを"testsaki.txt"というファイル名でコピーします。


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

 -f  コピー先に同名のファイルが有れば強制的に上書きする
 -i コピー先に同名のファイルが有れば上書きするかどうか確認する
 自動で上書き確認される設定になっていることが多いですが、
誤ってファイルを上書きすることがないよう念のため付けておくことをおすすめします
 -n 存在するファイルを上書きしない
 -p コピー元ファイルの属性(所有者、所有グループ、アクセス権、タイムスタンプ)を保持したままコピーする
 -r、-R ディレクトリ内を再帰的にコピーする(ディレクトリをコピーする)
 ディレクトリの中のファイルもコピーされる
 -d シンボリックリンクをシンボリックリンクとしてコピーする
 -a できる限り元ファイルの構成と属性をコピー先でも保持する
 -u コピー先に同じファイル名が存在する時、コピー元のファイルがコピー先のファイルより新しいもしくは
 新規ファイルの場合コピーする
 -b 上書き時に同時にバックアップファイルを作成する
 バックアップファイル名には「~」が付く
 -v コピーされた詳細情報の表示を行う


重要ポイント

ディレクトリをコピーするには、必ず-r(-R)オプションを付けてください。
指定されていないとエラーになります。
また、ファイルの属性を保持したままコピーするには、-pオプションが必要です。


参考

Linux技術者の認定資格であるLPICではCPコマンド以外のコピー方法が出題されることがあります。
参考としてCPコマンドを使わないコピー方法を勉強しましょう。

1.catコマンド

cat fileA > faleB
catコマンドの標準出力をリダイレクトし、fileBにすることで、ファイルのコピーを実現することができます。
catコマンドとは
ファイルの内容を表示します。正確には、ファイルの内容を標準出力に出力します。そのため、シェルのリダイレクトを使って複数のファイルを結合するという使い方もできます。
書式は以下の通りです。
cat [オプション] [ファイル名]


コマンド例

cat file1 file2 > newfile
上記コマンドではfile1とfile2を合わせてnewfileというファイルを作成しています。

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

 -n 各行の左端に行番号を追加する
 -b 空白行以外の左端に行番号を追加する
 -s 連続した空行を1行にする

2.rsyncコマンド

Rsync [オプション] fileA fileB
fileBをfileAと同期させる
rsyncコマンドとは
ディレクトリやファイルを高速にコピーするコマンドです。
ローカル、リモート間のディレクトリ同期やバックアップによく使われる。

書式は以下の通りです。
Rsync [オプション] 同期元 [同期先]


コマンド例

rsync -arv /dir/from/ /dir/to/
上記コマンドでは同期元であるfromディレクトリの中身を同期先のtoディレクトリに転送することで同期しています。

主なオプション

-a コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーする
 -s 連続した空行を1行にする
 -g グループをそのままコピーする
 -l シンボリックリンクをそのまま(ターゲットの指定を変えずに)コピーする
 -o オーナーをそのままコピーする
 -p パーミッションをそのままコピーする
 -r ディレクトリ内を再帰的にコピーする
 -t  タイムスタンプをそのままコピーする
 -u コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーする
 -v コピーしているファイル名やバイト数などの情報を表示する


まとめ

LinuxのGNU&UNIXコマンドの中からCPコマンドについて学習しました。
CPコマンドは使用頻度の高い基本的なコマンドのため、オプションや応用的な使用方法を覚え活用できるようにしていきましょう。
知っていることで役立つ場面が出てくるでしょう。参考にしてください。