はじめに
この実験では、ファイルやディレクトリの管理に欠かせない Linux の強力なツールである cp コマンドについて学習します。ファイルやディレクトリを効率的にコピーする方法、コピープロセスをカスタマイズするためのさまざまなオプション、そしてそれらのスキルを実際のシナリオで応用する方法を学びます。この実験を終える頃には、日常的なファイル管理タスクやバックアップに cp を使いこなせるようになっているでしょう。
基本的な cp コマンドの理解
cp コマンドは、Linux でファイルを複製するための基本となるコマンドです。まずは、重要なドキュメントのバックアップを作成するという簡単なシナリオから始めましょう。
プロジェクトディレクトリ(~/project)に、important_report.txt という名前のファイルがあります。あなたのタスクは、このファイルのバックアップを同じディレクトリ内に作成することです。
まず、プロジェクトディレクトリの内容を確認しましょう。
ls ~/project
他のファイルと一緒に important_report.txt が表示されるはずです。他にもファイルがあるかもしれませんが、今は important_report.txt に集中してください。
次に、バックアップを作成します。
cp ~/project/important_report.txt ~/project/important_report_backup.txt
このコマンドは、important_report.txt のコピーを important_report_backup.txt という名前で同じディレクトリに作成します。コマンドの各部分の意味は以下の通りです。
cp: ファイルをコピーするためのコマンドです。~/project/important_report.txt: コピー元(ソース)となるファイルです。~記号はホームディレクトリを表します。~/project/important_report_backup.txt: コピー先(デスティネーション)となるファイルです。元の名前に「_backup」を付けた新しいファイルを作成しています。
コピーが正常に作成されたか確認するために、もう一度ディレクトリの内容を表示します。
ls ~/project
important_report.txt と important_report_backup.txt の両方が表示されるはずです。新しいファイルが見当たらない場合は、cp コマンドを正しく入力したか再確認してください。
異なるディレクトリへのファイルのコピー
ファイルを別の場所にコピーする必要がある場面はよくあります。ここでは、音楽コレクションを整理するシナリオをシミュレートしてみましょう。
まず、音楽用のディレクトリが存在するか確認します。
ls ~/project
music という名前のディレクトリが表示されるはずです。もし見当たらない場合でも、セットアップスクリプトで作成されるので心配いりません。
では、プロジェクトディレクトリから music ディレクトリに音楽ファイルをコピーしてみましょう。
cp ~/project/favorite_song.mp3 ~/project/music/
このコマンドは、favorite_song.mp3 をプロジェクトディレクトリから music ディレクトリへコピーします。コマンドを詳しく見てみましょう。
cp: コピーコマンドです。~/project/favorite_song.mp3: コピー元のファイルです。~/project/music/: コピー先のディレクトリです。末尾のスラッシュ(/)は、musicがディレクトリであることをcpコマンドに明示しています。
ファイルが正しくコピーされたか確認するために、music ディレクトリの内容を表示します。
ls ~/project/music
favorite_song.mp3 が表示されるはずです。表示されない場合は、cp コマンドの入力ミスがないか、また ~/project ディレクトリに favorite_song.mp3 が存在するかを確認してください。
複数のファイルを一度にコピーする
1 つのコマンドで複数のファイルをコピーすることができ、一括操作に非常に便利です。ドキュメントのコレクションを整理してみましょう。
まず、documents ディレクトリが存在するか確認します。
ls ~/project
documents というディレクトリが表示されるはずです。
次に、複数のテキストファイルをこの documents ディレクトリにコピーします。
cp ~/project/report1.txt ~/project/report2.txt ~/project/notes.txt ~/project/documents/
このコマンドは、report1.txt、report2.txt、notes.txt を documents ディレクトリにコピーします。仕組みは以下の通りです。
cp: コピーコマンドです。~/project/report1.txt ~/project/report2.txt ~/project/notes.txt: コピー元のファイル群です。スペースで区切ることで、必要な数だけファイルを並べることができます。~/project/documents/: コピー先のディレクトリです。
ファイルがコピーされたことを確認します。
ls ~/project/documents
3 つのファイル(report1.txt、report2.txt、notes.txt)がすべて表示されるはずです。足りないものがある場合は、cp コマンドにタイポ(入力ミス)がないか確認してください。
対話型コピーのための -i オプションの使用
ファイルをコピーする際、コピー先に同名のファイルが既に存在している場合があります。-i オプションを使用すると cp が対話型(インタラクティブ)になり、既存のファイルを上書きする前に確認を求めてくるようになります。
このシナリオを試してみましょう。
まず、既存のファイルの内容を確認します。
cat ~/project/test_file.txt
ヒント:
catコマンドに馴染みがなくても大丈夫です。これについては後ほど詳しく説明します。
「Original content」と表示されるはずです。
次に、同じ名前のファイルをコピーしようとしてみます。
cp -i ~/project/new_test_file.txt ~/project/test_file.txt
プロンプトが表示されたら、上書きする場合は y を入力して Enter を押し、上書きしたくない場合は n を入力して Enter を押します。
-i オプションは「interactive(対話型)」の略です。既存のファイルを上書きする前に必ず確認を求めるよう cp に指示します。これは、誤ってデータを消失させないための安全策です。
では、ファイルの内容を再度確認しましょう。
cat ~/project/test_file.txt
上書きを選択した場合は「New content」と表示され、そうでない場合は「Original content」のままになっているはずです。
-r オプションによる再帰的コピー
-r オプションを使用すると、ディレクトリとその中身を丸ごとコピー(再帰的コピー)できます。これは、ディレクトリ構造全体をバックアップする際に非常に便利です。
ウェブサイトのディレクトリ全体をバックアップしてみましょう。
cp -r ~/project/website ~/project/website_backup
このコマンドは、website ディレクトリとその中のすべてのファイルを、website_backup という新しいディレクトリにコピーします。各部分の意味は以下の通りです。
cp: コピーコマンドです。-r: 「recursive(再帰的)」の略です。ディレクトリとその中身をすべてコピーするようcpに指示します。~/project/website: コピー元のディレクトリです。~/project/website_backup: すべてがコピーされる新しいディレクトリ名です。
バックアップが正常に作成されたか確認します。
ls -R ~/project/website_backup
ディレクトリ構造全体とファイルが表示されるはずです。ls コマンドの -R オプションは、ディレクトリの内容を再帰的に表示します。
期待通りの構造になっていない場合は、cp -r コマンドを正しく入力したか確認してください。
-p オプションによるファイル属性の保持
ファイルをコピーする際、タイムスタンプ(更新日時)や権限(パーミッション)などの元のファイルの属性を保持したい場合があります。その場合は -p オプションを使用します。
実際に試してみましょう。
まず、元のファイルの属性を確認します。
ls -l ~/project/old_file.txt
表示される日付と時刻を覚えておいてください。
次に、属性を保持したままファイルをコピーします。
cp -p ~/project/old_file.txt ~/project/preserved_file.txt
-p オプションは「preserve(保持)」の略です。元のファイルの修正時刻、アクセス時刻、および権限を維持します。
両方のファイルの属性を比較してみましょう。
ls -l ~/project/old_file.txt ~/project/preserved_file.txt
両方のファイルが同じ日付と時刻になっているはずです。もし異なっている場合は、cp で -p オプションを使用したか確認してください。
ワイルドカードを使用した選択的コピー
ワイルドカードを使用すると、特定のパターンに基づいて複数のファイルをコピーできます。これは、特定の種類のファイルや、特定の命名規則を持つファイルをコピーしたいときに便利です。
すべてのテキストファイルを text_files ディレクトリにコピーしてみましょう。
cp ~/project/*.txt ~/project/text_files/
続いて、すべての PDF ファイルを pdf_files ディレクトリにコピーします。
cp ~/project/*.pdf ~/project/pdf_files/
ワイルドカード(*)の意味は以下の通りです。
*.txt: 「.txt」で終わるすべてのファイルに一致します。*.pdf: 「.pdf」で終わるすべてのファイルに一致します。
これにより、ファイルを 1 つずつ指定することなく、まとめてコピーできます。
ファイルが正しくコピーされたか確認します。
ls ~/project/text_files
ls ~/project/pdf_files
text_files ディレクトリにはすべての .txt ファイルが、pdf_files ディレクトリにはすべての .pdf ファイルが入っているはずです。
まとめ
この実験では、Linux の cp コマンドの主要な使い方をマスターしました。学んだ内容は以下の通りです。
- 単一ファイルのコピー
- 異なるディレクトリへのファイルのコピー
- 複数のファイルの一括コピー
-iオプションによる対話型コピー-rオプションによるディレクトリの再帰的コピー-pオプションによるファイル属性の保持- ワイルドカードを使用した選択的コピー
この実験では触れませんでしたが、他にも以下のような cp オプションがあります。
-u: コピー元がコピー先より新しい場合、またはコピー先が存在しない場合のみコピーする(アップデート)-v: 実行内容を詳しく表示する(詳細モード)-n: 既存のファイルを上書きしない-l: ファイルをコピーする代わりにハードリンクを作成する-s: ファイルをコピーする代わりにシンボリックリンクを作成する
cp コマンドは、Linux でのファイル管理において非常に強力なツールです。これらのスキルを身につけたことで、幅広いファイルコピー作業を効率的かつ確実に行えるようになりました。



