cpコマンドとは?オプションや使い方について詳しく解説!

linux初心者の方でlinuxコマンドを使ってファイルのコピーをしたいと考えている方いらっしゃるのではないでしょうか。

私自身初心者の頃は、cpコマンドの使い方がよくわかっていませんでした。

本記事では、実際のコマンド実行画面と一緒にわかりやすく解説していますので、linux初心者の方はぜひ、参考にしてみてください。

この記事でわかること
・cpコマンドとは
・cpコマンドのオプション
・業務でよく使うcpコマンドの流れ
・関連コマンド


cpコマンドとは

cpコマンドとは、ファイルのコピーを行う際に使用するlinuxコマンドです

実際の業務の中では、同じファイルをもう1つ作りたい時やファイルの編集を行う際のバックアップファイル作成の際によく使用します。

windowsでは右クリックし、ファイルのコピーを選ぶことで簡単にファイルのコピーができます。

linuxでは、コマンドを用いてファイルのコピーを行いますが、ファイルコピーする際に使うcpコマンドの使い方が少し難しいです。

私も慣れるまでは、ネットで調べながらcpコマンドを使っていました。

ネットで何度も調べて行く内に少しずつcpコマンドの使い方に慣れ、作業効率を上げることができるようになります。

cpコマンドのオプション

cpコマンドはファイルをコピーするコマンドということはわかったと思います。

オプションをつけることでファイルコピーだけでなくそのときにディレクトリごとのコピーだったり、権限をそのままにするなどの操作をプラスできます。

ここでは、cpコマンドのオプションについて解説していきます。

オプション説明
-rディレクトリごとコピーするオプション
-f強制的にコピーするオプション
-iコピーする際に確認を行う
-bファイルを上書きする際にバックアップファイルを作成するオプション
-sシンボリックリンクを作成するオプション
-lハードリンクの作成を行うオプション
-vコピー情報を表示するオプション
-p元のファイルのオーナー、グループ、パーミション、タイムスタンプを保持しながらファイルをコピーするオプション

-r・・・ディレクトリごとコピーするオプション

cpコマンドの中でも業務でよく使うコマンドになります。

cpコマンドは通常のコマンド実行では、ファイルのコピーしか行えませんが、-rオプションをつけることでディレクトリのコピーを行うことができます。

ディレクトリのコピーの際にディレクトリ配下にあるファイルも一緒にコピーされます。

windows画面で説明するとExcelやwordのファイルのみのコピーではなく、黄色の四角に似た形のアイコンのフォルダーをコピーするのと同じ操作です。

windowsのフォルダーアイコン

書式
cp -r コピー元ディレクトリ コピー先ディレクトリ

例えば、/tmp/cpdir2ディレクトリ配下に/tmp/cpdirディレクトリをコピーしたい場合には、以下のような書式になります。

書式
cp -r /tmp/cpdir /tmp/cpdir2

-f・・・強制的にコピーするオプション

ーfオプションを使用した際に同じファイルが存在する等の理由でファイルを上書きするような処理になる場合があります。

その際に-iコマンドのように上書きしますがいいですかというメッセージを出力せずに、強制的に上書きすることができるコマンドになります。

上書きしますかのメッセージは1つのファイルで1回メッセージが出力されるため、複数ファイルの上書きですと何回もメッセージが出力されます。

同じメッセージが何度も表示され、それに答えるのは、作業効率が悪いので、ーfコマンドをつけて強制的にコピーを行い、作業効率を上げています。

書式
cp -f コピー元ファイル コピー先ファイル

例えば、/tmp/cpdir2ディレクトリ配下に/tmp/cpdir/cpファイルをメッセージを出力せず強制的にコピーしたい場合には、以下のような書式になります。

書式
cp -f /tmp/cpdir/cp /tmp/cpdir2

ーi・・・コピーする際に確認を行う

ファイルの上書きコピーを行う際に上書きしていいのか確認を行ってからコピーするオプションになります。

ファイルの誤った上書きコピーを防ぐことができるので作業の安全性をあげることができます。

-iコマンドを使用することで「対象のファイルを上書きしますか?」というメッセージが出力されます。

ファイルの上書きをしていい場合には、「y」を、上書きしない場合には、「n」を選びます。

ファイルの上書き前に確認を挟むので、上書き対象のファイルを間違えることを防ぐことができます。

書式
cp -i コピー元ファイル コピー先ファイル

例えば、/tmp/cpdir2ディレクトリ配下に/tmp/cpdir/cpファイルを確認を行ってからコピーしたい場合には、以下のような書式になります。

書式
cp -i /tmp/cpdir/cp /tmp/cpdir2

ーb・・・ファイルを上書きする際にバックアップファイルを作成するオプション

ーbコマンドはファイルのコピーを行う際にコピー前のファイルをバックアップファイルとして残しておくことができるオプションになります。

例えば、作業を行っていく上でファイルを元に戻したいと思うことがあると思います。
その際にバックアップファイルを使いファイルを元に戻すため、バックアップファイルは重要になってきます。

ーbコマンドの一番簡単な使用方法は下記のような書式になっており、バックアップファイルをどのような名前でコピーするのか指定していないため、自動的にファイルの最後に「~」のついたバックアップファイルが作成されます。

個人的には、名前はしっかりつけた方がいいと思うのでこの使い方はあまりおすすめしません。

書式
cp -b コピー元ファイル コピー先ファイル

バックアップファイルの最後が「~」のバックアップファイルではなく他の文字の入ったバックアップファイルを作成したい場合には、-suffixオプションを使用します。

個人的に作成日を末尾に入れたバックアップファイルを作成することが多いので今回は作成日を末尾に入れたバックアップファイルの作成の仕方を紹介します。

バックアップファイルの最後に日付を入れたい場合は、下記のような書式になります。

書式
cp -b –suffix=_$(date +%Y%m%d) コピー元ファイル コピー先ファイル

例えば、cpファイルをcpbackupファイルとしてコピーする際にバックアップファイルの最後に日付を入れたい場合には、以下のような書式になります。

書式
cp -b –suffix=_$(date +%Y%m%d) cp cpbackup

ーs・・・シンボリックリンクを作成するオプション

-sオプションは、シンボリックリンクを作成することのできるオプションになります。

シンボリックリンクとは、本体とは、別に内容の同じファイルがあり、そのファイルを参照すると本体も参照できるような仕組みになっています。

windowsでいうところのショートカットファイルみたいなものがシンボリックリンクに当たります。

下記の画像を例にすると「cp_symbolic.txt」ファイルを開くと「cp」ファイルの中身を参照するような形になっています。

書式
cp -s コピー元ファイル シンボリックリンク

例えば、cpファイルのシンボリックリンクcp_symbolic.txtを作成したい場合には、以下のような書式になります。

書式
cp -s cp cp_symbolic.txt

ーl・・・ハードリンクの作成を行うオプション

ーlオプションはハードリンクの作成を行うオプションになります。

ハードリンクとは、実在に存在するファイルを参照するリンクのことを言います。

下記の画像を例にすると、「cp_hard.txt」ファイルの内容を変更した際には、一緒に「cp」ファイルの中身についても同じように変更されます。

書式
cp -l コピー元ファイル ハードリンク

例えば、cpファイルのハードリンクcp_hard.txtを作成したい場合には、以下のような書式になります。

書式
cp -l cp cp_hard.txt

ーv・・・コピー情報を表示するオプション

ーvオプションはコピーしたファイルの情報を表示するオプションになります。

例えば複数のファイルのコピーを行う際にどのファイルをコピーしたのか確認するために-vオプションを使用してコピーファイルの確認をする際等に使われます。

cpコマンドはオプションをつけないとどのファイルをコピーしたのか表示されないため、どのファイルがコピーされたか知りたい場合にーvオプションを使用します。

書式
cp -v コピー元ファイル コピー先ファイル

例えば、cpファイルをcpbackupとしてコピーしコピー情報を表示したい場合には、以下のような書式になります。

書式
cp -v cp cpbackup

ーp・・・元のファイルのオーナー、グループ、パーミション、タイムスタンプを保持しながらファイルをコピーするオプション

-pコマンドは、業務の中でもかなり使う機会の多いコマンドになります。

ファイルの編集を行う際に元のファイルのコピーをを行う際に元ファイルの権限を保持しながらコピーする必要があります。

その際に-pオプションを使用し、オーナー、グループ、パーミション、タイムスタンプを保持しながらファイルのコピーを行います。

なぜ権限を保持する必要があるの?

権限を保持する理由としては、ファイルの権限によって内容の変更や内容の参照ができるユーザが変わってきます。

ファイルをコピーしたことでファイルを参照できなくなったり、内容の変更ができなくなったりすることを防ぐために権限を保持することは重要になってきます。

書式
cp -p コピー元ファイル コピー先ファイル

例えば、cpファイルをcpbackupとしてコピーする際に元ファイルのオーナー、グループ、パーミッション、タイムスタンプを保持する場合には、以下のような書式になります。

書式
cp -p cp cpbackup

業務でよく使うcpコマンドの流れ

業務の中でcpコマンドを使う機会が多いのですが、その中でも特に多い使い方を紹介します。

ファイルの編集を行う前にcpコマンドでバックアップファイルの作成を行う流れになります。

実行の流れ

STEP

編集ファイルの確認

cat 編集対象ファイル
STEP

編集ファイルのバックアップファイルを作成

cp 編集対象ファイル バックアップファイル
STEP

バックアップファイルが作成されたことを確認

ls -l バックアップファイル
STEP

編集ファイルの編集

vi 編集対象ファイル
STEP

編集後ファイルとバックアップファイルの差分確認

diff 編集対象ファイル バックアップファイル
STEP

編集後ファイルの確認

cat 編集対象ファイル

関連コマンド

cpコマンドにコマンドの操作内容が似ているコマンドを紹介していきます。

少しだけ用途が異なるので、やりたいことによってうまく使い分けしましょう。

mvコマンド

mvコマンドはファイルの移動名前の変更を行う際に使用するコマンドになります。

cpコマンドは、元の場所にファイルが残りますが、mvコマンドは移動なので元の場所にファイルが残らない点がcpコマンドとの違いになります。

■ファイルの移動

書式
mv [オプション] 移動元 移動先

■ファイル名変更

書式
mv [オプション] 変更前ファイル名 変更後ファイル名



rsyncコマンド

コピー元ファイルとコピー先ファイルの差分をコピーできるコマンドになります。

cpコマンドは、ファイルごとのコピーになりますが、rsyncコマンドは、コピー元ファイルとコピー先ファイルの差分のみのコピーになるため、cpコマンドよりも早くコピーを行うことができます。

書式
rsync [オプション] コピー元ファイル [コピー先ファイル]

まとめ

いかがでしたか。

本記事では、linux cpコマンドについて詳しく解説してきました。

cpコマンドの使い方が最初は、難しいと思う方多いと思うのでぜひ、本記事を参考にしてcpコマンドを使ってみてください。

今後もlinuxについての記事を投稿していきますので、宜しくお願い致します。

【初心者エンジニア必見!エンジニアが持っておきたい持ち物・ガジェット一覧】

エンジニアにおすすめの持ち物とガジェットを一覧でまとめています。

利用することで作業効率を上げることのできる物を厳選して紹介しているため、エンジニアの方やリモート勤務の方は特に参考にしてみてください。




ABOUT US
はなちゃん
25歳インフラエンジニア5年目のはなちゃんです。 未経験からインフラエンジニアになった経験を生かしてインフラエンジニアの基礎的部分、linux、awsを中心にブログを書いています。 転職サイトを利用した転職経験もあります。 ■保有資格:LPIC lenel3・ITパスポート・AWS SAA ■業務経験:インフラ業務の設計~運用まで