Linuxのcpコマンドとは?ファイルをコピーする方法を初心者向けに徹底解説
生徒
「Linux(リナックス)で作成したファイルを、別のフォルダに複製したいときはどうすればいいですか?」
先生
「それなら cp(シーピー)コマンドを使います。copy(コピー)の略称で、Linux操作の基本中の基本ですよ。」
生徒
「コピーして貼り付ける作業ですね!難しくないでしょうか?」
先生
「コマンド一つで簡単にできます。上書きの注意点やディレクトリ(フォルダ)ごとのコピー方法など、順を追って説明しますね。」
1. cpコマンドとは?
cpコマンドは、Linux(リナックス)やUnix(ユニックス)系のOSにおいて、ファイルやディレクトリを複製するための命令です。読み方は、そのままアルファベットで「シーピー」と読みます。語源は英語の copy(コピー)から来ています。
Windows(ウィンドウズ)やMac(マック)でいうところの「右クリックしてコピー」から「貼り付け」を行う一連の動作を、ターミナル(黒い画面)上で一行の文字列だけで完結させることができます。バックアップを取る際や、設定ファイルを編集する前に元の状態を保存しておきたい時など、日々の業務で最も頻繁に使われるコマンドの一つです。
2. cpコマンドの基本的な使い方
一番シンプルな使い方は、「コピー元」と「コピー先」を指定する方法です。コマンドの後にスペースを空けて、対象となるファイル名を記述します。基本構成(文法)は以下の通りです。
cp [コピーしたいファイル] [新しいファイル名]
例えば、memo.txt というファイルを memo_backup.txt という名前で複製したい場合は次のように入力します。
cp memo.txt memo_backup.txt
ls
memo.txt memo_backup.txt
このように実行すると、中身が全く同じ新しいファイルが出来上がります。もし、コピー先にすでに同じ名前のファイルがある場合は、警告なしに上書きされてしまうので注意が必要です。
3. 別のディレクトリ(フォルダ)にコピーする
ファイルを現在の場所(カレントディレクトリ)ではなく、別のディレクトリ(フォルダ)に移動させたい場合もあります。Linuxではフォルダのことを「ディレクトリ(読み方:ディレクトリ)」と呼びます。
特定のフォルダの中にコピーを配置したい場合は、コピー先にディレクトリ名を指定します。
mkdir backup_dir
cp test.txt backup_dir/
ls backup_dir/
test.txt
上記の例では、まず mkdir(エムケーディアイアール:ディレクトリ作成)で backup_dir を作り、そこに test.txt をコピーしています。コピー先のファイル名を省略すると、元のファイル名と同じ名前で保存されます。
4. ディレクトリごとコピーする方法(-rオプション)
ファイル単体ではなく、フォルダ(ディレクトリ)とその中身をまるごとコピーしたい時には、通常の cp コマンドだけではエラーが出てしまいます。そこで登場するのがオプション(読み方:オプション)です。
ディレクトリを再帰的に(中身を含めてすべて)コピーするには、-r オプションを使います。recursive(リカーシブ:再帰的)の頭文字です。
cp -r project_folder project_folder_backup
ls -d project_folder_backup
project_folder_backup
この -r を忘れると、「cp: -r not specified; omitting directory」というエラーメッセージが表示され、コピーに失敗します。初心者が最初につまずきやすいポイントなので、「フォルダは -r」とセットで覚えておきましょう。
5. 上書き前に確認する安全なコピー(-iオプション)
Linux(リナックス)の操作において怖いのが、大切なファイルをうっかり上書きして消してしまうことです。標準の cp コマンドは、コピー先に同名ファイルがあっても無言で上書きします。
これを防ぐために、上書きする前に「本当にいいですか?」と確認してくれるのが -i オプションです。interactive(インタラクティブ:対話的な)の略です。
cp -i sample.txt existing_file.txt
cp: overwrite 'existing_file.txt'?
ここで y(イエス)を押せば実行され、n(ノー)を押せば中止されます。特に、管理者権限(ルートユーザー)で作業する際は、このオプションを意識することで重大なミスを防ぐことができます。
6. ファイルの属性を保持してコピーする(-pオプション)
ファイルをコピーすると、通常は「コピーを実行した日時」が新しいファイルの作成日時(タイムスタンプ)になります。また、所有者や権限(パーミッション)といった情報も、コピーしたユーザーの設定に変わってしまいます。
元のファイルの作成日時や権限をそのまま引き継ぎたい場合は、-p オプションを使います。preserve(プリザーブ:保存する)という意味です。
cp -p original.txt backup.txt
ls -l
-rw-r--r-- 1 user user 1024 3月 20 10:00 original.txt
-rw-r--r-- 1 user user 1024 3月 20 10:00 backup.txt
システムの設定ファイルやログファイルをバックアップする際には、この「属性の保持」が非常に重要になります。後で「いつ作られたファイルか分からなくなった」とならないよう、実務では多用されます。
7. 複数のファイルを一度にコピーする
一つずつコマンドを打つのは大変ですが、cp コマンドは複数のファイルをまとめてコピーすることも可能です。最後に指定した引数が「コピー先のディレクトリ」として認識されます。
また、ワイルドカード(読み方:ワイルドカード)と呼ばれる特殊な記号 *(アスタリスク)を使うと、特定の拡張子を持つファイルを一括で指定できます。
cp file1.txt file2.txt file3.txt work_dir/
cp *.jpg image_backup/
上記の2行目では、末尾が .jpg で終わるすべてのファイルを image_backup フォルダに集めています。これにより、大量の画像ファイルなどを一瞬で整理することができます。シェルの強力な機能の一つですね。
8. ルート権限でのコピー作業
システム全体に関わる重要な場所(例えば /etc など)にファイルをコピーする場合は、一般ユーザーでは権限が足りずエラーになります。その際は sudo(スードゥー)コマンドを組み合わせて、管理者権限(ルート)で実行する必要があります。
管理者として作業する場合は、プロンプト(入力待ちの記号)が # になることが多いです。
cp /home/user/my_config.conf /etc/my_service/
ls /etc/my_service/
my_config.conf
ルートユーザー(特権利用者)での操作は、システムを壊してしまう危険性もあるため、慎重に行う必要があります。コピーする前に必ずパス(ファイルの場所)が正しいか確認する癖をつけましょう。
9. cpコマンドの便利な組み合わせ(雑学)
cp コマンドには、他にも便利な機能があります。例えば -v オプション(読み方:ブイオプション)を使うと、コピーの経過を表示してくれます(verbose:冗長な)。
歴史的な話をすると、Linuxの前身であるUnixが誕生した1970年代から cp コマンドは存在していました。当時は非常にメモリ(主記憶装置:シュキオクソウチ)が少なかったため、極限まで短い名前(たった2文字)にすることで、キーボードの入力手間を減らす工夫がなされたと言われています。
現代の Bash(バッシュ)や Zsh(ゼットシェルのような最新のシェル環境でも、この伝統的な2文字のコマンドは変わらずに使い続けられています。それだけ完成された、シンプルで強力なツールだということですね。
まとめ
今回の記事では、Linux(リナックス)操作において欠かすことのできない最重要コマンドの一つである「cpコマンド」について詳しく解説してきました。ファイルを複製するという単純な作業に思えますが、Linuxの世界ではその一歩がシステム管理やプログラム開発の基盤となります。
cpコマンドの重要ポイントの振り返り
まず、もっとも基本的な使い方は「cp [コピー元] [コピー先]」という形式でしたね。このシンプルな構造を理解するだけで、ファイルのバックアップ作成が驚くほどスムーズになります。しかし、単にコピーするだけではなく、実務においては「属性を維持する」ことや「ディレクトリごと一括で扱う」といった応用力が求められます。
主要なオプションの使い分け
Linuxコマンドの真骨頂は「オプション」にあります。今回紹介した代表的なオプションを以下の表にまとめました。これらを指が覚えるまで使い込むことが、脱・初心者への近道です。
| オプション | 読み方 | 主な役割・効果 |
|---|---|---|
| -r | アール | ディレクトリ(フォルダ)を中身ごと再帰的にコピーする |
| -i | アイ | 上書きする前に確認メッセージを表示する(安全対策) |
| -p | ピー | 作成日時や権限(パーミッション)などの属性を保持する |
| -v | ブイ | コピーの実行経過を詳細に表示する(バーボーズモード) |
| -u | ユー | コピー先より新しい場合、または存在しない場合のみコピー(更新) |
実践的なサンプルプログラム(スクリプト例)
実際の現場では、複数のコマンドを組み合わせて自動化することもあります。例えば、特定の日付をファイル名に含めてバックアップを取るシェルスクリプトのような使い方も一般的です。ここでは、JavaプログラムからLinuxコマンドを呼び出して、安全にファイルをコピーするイメージを紹介します。
public class LinuxCommandHelper {
public static void main(String[] args) {
// Linuxのcpコマンドを模したロジックの例
String sourceFile = "config.sys";
String backupFile = "config.sys.bak";
System.out.println("バックアップを開始します...");
// 実際にはProcessBuilderなどでcpコマンドを呼び出すことが可能です
// 安全のために-iオプションや-pオプションを検討しましょう
boolean success = performFileCopy(sourceFile, backupFile);
if (success) {
System.out.println("ファイルの複製に成功しました。");
}
}
private static boolean performFileCopy(String src, String dest) {
// コピー処理のシミュレーション
return true;
}
}
このように、プログラム言語からLinuxコマンドを制御する場合でも、コマンドの引数やオプションの知識がそのまま活かされます。また、コマンドライン上での一括操作(ワイルドカード利用)も非常に強力です。
# 拡張子が.confのファイルをすべてbackupディレクトリにコピー
cp *.conf /home/user/backup/
# 完了後に確認
ls /home/user/backup/
Linuxは「習うより慣れろ」の世界です。まずは自分の環境で、重要ではないファイルを使って何度も cp コマまんどを試してみてください。特に -r オプションでディレクトリ構造がどう維持されるか、-p オプションでタイムスタンプがどう変わるかを目で確認することが、深い理解につながります。
エンジニアとしてのキャリアを歩む上で、サーバー構築やクラウド環境の操作は避けて通れません。その中心にあるのが、この cp コマンドを含む基本的なLinuxコマンド群です。この記事が、あなたのLinuxライフの第一歩を支える一助となれば幸いです。
生徒
「先生、ありがとうございました!cpコマンドって、単にコピーするだけじゃなくて、色々なオプションで安全に作業できるんですね。」
先生
「その通りです。特に初心者のうちは、大切な設定ファイルを壊さないように -i オプションを使って、確認の癖をつけるのがおすすめですよ。」
生徒
「ディレクトリをコピーしようとしてエラーが出たときは焦りましたが、-r を付ければいいと分かってスッキリしました。再帰的(recursive)の頭文字なんですね。」
先生
「よく覚えましたね!ディレクトリの中にさらにディレクトリがある場合でも、-r があれば丸ごと複製してくれます。他にも -p で作成日時を守るのも実務では必須級のテクニックです。」
生徒
「ワイルドカードの * も便利そうです。画像ファイルだけを一気にバックアップする時に使ってみます!」
先生
「いいですね。コマンド操作に慣れてくると、マウスで操作するよりもずっと速く、正確に仕事ができるようになります。次はファイルを移動させる mv コマンドについても学んでいきましょうか。」
生徒
「はい!どんどん練習して、Linuxマスターを目指します!」