LinuC入門|Linuxでファイルをコピー・移動・削除する方法

コピー・移動・削除の違いを理解して、Linuxのファイル管理を安全かつスムーズに進めよう。

Linuxを使っていると、ファイルを複製したり、別のディレクトリへ移したり、不要になったファイルを削除したりする場面が数多くあります。

AlmaLinux 10.2では、主に次の3つのコマンドを使ってファイルを管理します。

操作コマンドコマンド名の由来
コピーcpcopy
移動・名前変更mvmove
削除rmremove

それぞれ短いコマンドですが、実行結果は大きく異なります。

cpを実行すると、コピー元を残したまま、同じ内容を持つ別のファイルが作られます。mvを実行すると、元の場所からファイルが移動するため、移動元には残りません。rmを実行すると、指定したファイルが削除されます。

特にrmで削除したファイルは、デスクトップ環境のごみ箱には入りません。簡単には元へ戻せないため、削除対象をよく確認してから実行することが大切です。

コピー・移動・削除の違い

最初に、3つのコマンドによる処理結果を整理しておきましょう。

コマンド処理前のファイル処理後の元ファイル処理後の新しい場所
cp存在する残るコピーが作られる
mv存在する残らないファイルが移動する
rm存在する残らない何も作られない

cpは複製を作るコマンドです。元のファイルとコピー先のファイルが両方残ります。

mvはファイルの置き場所または名前を変更するコマンドです。コピーを残す操作ではないため、処理後は元の場所にファイルが残りません。

rmは指定したファイルを削除するコマンドです。別の場所へ移動する処理ではありません。

図1:cp・mv・rmによる処理結果の違い

この図から分かること

cpでは、元のファイルを残したまま、別の場所や別の名前でコピーを作成できます。

mvでは、ファイルそのものを別の場所へ移します。移動元のファイルは残りません。同じディレクトリ内で移動先に新しい名前を指定すると、ファイル名の変更になります。

rmでは、指定したファイルが削除されます。コピー先や移動先は存在しません。

操作前のファイルを確認する

ここでは、ホームディレクトリに次の2つのファイルが存在するものとして操作を進めます。

suzuki@AlmaLinux:~$ ls report[0-9].txt
report4.txt  report8.txt

report4.txtはコピーの練習に使用し、report8.txtは移動の練習に使用します。

lsコマンドとは

lsは、ファイルやディレクトリの名前を表示するコマンドです。ファイル操作の前後でlsを実行すると、対象のファイルが存在するかどうかを確認できます。

lsコマンドの書式
ls [オプション] [ファイルまたはディレクトリ]
lsコマンドの引数
引数説明
ファイル存在を確認するファイルを指定する
ディレクトリ内容を表示するディレクトリを指定する
省略カレントディレクトリの内容を表示する
今回使用するlsのオプション

今回の操作例では、lsにオプションを指定しません。

オプション説明
なし指定したファイルまたはディレクトリを表示する。引数を省略した場合はカレントディレクトリの内容を表示する

report[0-9].txtに含まれる[0-9]は、0から9までの数字1文字を表します。そのため、report4.txtとreport8.txtが表示されています。

cpコマンドでファイルをコピーする

cpは、ファイルやディレクトリをコピーするコマンドです。

コピー元のファイルはそのまま残り、コピー先に同じ内容を持つファイルが作られます。バックアップを作成したい場合や、同じファイルを別のディレクトリでも使用したい場合に利用します。

cpコマンドの書式

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

cpコマンドの引数

引数説明
コピー元コピーするファイルまたはディレクトリを指定する
コピー先コピー後のファイル名またはコピー先ディレクトリを指定する

コピー先に何を指定するかによって、処理結果が変わります。

コピー先の指定処理結果
既存のディレクトリそのディレクトリの中へ同じ名前でコピーする
新しいファイル名指定した名前でコピーを作成する
既存のファイル名コピー先のファイルを上書きする可能性がある

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

オプション説明
-rディレクトリの中身を含めて再帰的にコピーする
-f上書きの確認を行わず、コピーを実行する
-iコピー先が存在する場合、上書きする前に確認する
-pタイムスタンプ、アクセス権、所有者、グループなどの属性を可能な範囲で維持する

同じディレクトリに別名でコピーする

次の例では、report4.txtをreport4-backup.txtという名前でコピーします。

suzuki@AlmaLinux:~$ cp report4.txt report4-backup.txt

作成結果を確認します。

suzuki@AlmaLinux:~$ ls report4.txt report4-backup.txt
report4-backup.txt  report4.txt

cpを使っているため、コピー元のreport4.txtは残っています。新しくreport4-backup.txtが作られ、2つのファイルが存在する状態になります。

既存のディレクトリへコピーする

コピー先として既存のディレクトリを指定すると、そのディレクトリ内へコピーされます。

次の例では、report4.txtをDownloadsディレクトリへコピーします。

suzuki@AlmaLinux:~$ cp report4.txt Downloads/

コピーされたファイルを確認します。

suzuki@AlmaLinux:~$ ls Downloads/report4.txt
Downloads/report4.txt

元のファイルも確認してみましょう。

suzuki@AlmaLinux:~$ ls report4.txt
report4.txt

コピー元とコピー先の両方にreport4.txtが存在しています。

コピー先にディレクトリを指定した場合は、通常、コピー元と同じファイル名が使用されます。

絶対パスを指定してコピーする

cpには、ホームディレクトリ以外のファイルも指定できます。

次の例では、AlmaLinuxのホスト名とIPアドレスの対応を記述する/etc/hostsを、ホームディレクトリへhosts-reference.txtという名前でコピーします。

suzuki@AlmaLinux:~$ cp /etc/hosts hosts-reference.txt

/etc/hostsはコピー元の絶対パスです。hosts-reference.txtは、カレントディレクトリに作成するコピー先の名前です。

コピー結果を確認します。

suzuki@AlmaLinux:~$ ls hosts-reference.txt
hosts-reference.txt

catコマンドで内容を確認する

catは、ファイルの内容を端末画面に表示するコマンドです。

catコマンドの書式
cat [オプション] ファイル
catコマンドの引数
引数説明
ファイル内容を表示するファイルを指定する
今回使用するcatのオプション

今回の操作例では、catにオプションを指定しません。

オプション説明
なし指定したファイルの内容を端末画面へ表示する

コピーしたファイルの内容を確認します。

suzuki@AlmaLinux:~$ cat hosts-reference.txt
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

環境によっては、このほかの設定行が表示されることもあります。

catで内容が表示されれば、/etc/hostsの内容がhosts-reference.txtへコピーされていることを確認できます。

-iで上書き前に確認する

コピー先に同じ名前のファイルが存在すると、コピー先の内容が上書きされる可能性があります。

上書き前に確認したい場合は、-iを指定します。

suzuki@AlmaLinux:~$ cp -i report4.txt report4-backup.txt
cp: report4-backup.txtを上書きしますか? y

yを入力すると上書きが実行されます。nを入力すると、そのファイルのコピーは行われません。

重要なファイルを扱うときや、コピー先に同名ファイルがあるか分からないときは、-iを付けると安心です。

環境によっては、cpをオプションなしで実行しても上書き確認が表示されることがあります。これはシェル側でcpに-iを追加する設定が行われている場合があるためです。

-fで確認せずに上書きする

-fを指定すると、上書き確認を行わずにコピーを進めます。

suzuki@AlmaLinux:~$ cp -f report4.txt report4-backup.txt

定型処理などで確認を省略したい場合に利用できますが、コピー先の内容を誤って失う可能性があります。

コピー先が正しいことを十分に確認できている場合に限って使用するとよいでしょう。-fを指定しても、アクセス権がないファイルや書き込みが許可されていない場所へ必ずコピーできるわけではありません。

-pでファイル属性を維持する

通常のコピーでは、コピー先ファイルの更新日時などが変わることがあります。

-pを指定すると、タイムスタンプ、アクセス権、所有者、グループなどの属性を可能な範囲で維持してコピーします。

suzuki@AlmaLinux:~$ cp -p report4.txt report4-preserved.txt

バックアップなどで、ファイルの内容だけでなく属性情報も維持したい場合に役立ちます。

ただし、一般ユーザーがほかのユーザーの所有者情報をそのまま設定することはできません。実行ユーザーの権限によっては、一部の属性を維持できない場合があります。

-rでディレクトリをコピーする

通常のcpでは、ディレクトリをそのままコピーできません。ディレクトリ内のファイルやサブディレクトリを含めてコピーする場合は、-rを指定します。

次の例では、Documentsディレクトリ内にprojectディレクトリが存在するものとします。

suzuki@AlmaLinux:~$ cp -r Documents/project Documents/project-backup
suzuki@AlmaLinux:~$ cp -r Documents/project Documents/project-backup

この操作では、projectディレクトリとその中身がproject-backupへコピーされます。

コピー結果を確認します。

suzuki@AlmaLinux:~$ ls Documents/project Documents/project-backup

-rは、指定したディレクトリの下にあるファイルやサブディレクトリを順番にたどってコピーします。大きなディレクトリを指定した場合は、処理に時間がかかり、コピー先の空き容量も多く使用します。

図2:cpとmvにおけるコピー先・移動先の指定

この図から分かること

cpとmvでは、2番目の引数に何を指定するかによって処理結果が変わります。

既存のディレクトリを指定した場合は、そのディレクトリの中へコピーまたは移動します。新しいファイル名を指定した場合、cpでは別名のコピーが作られ、mvでは元のファイルの名前が変更されます。

cpでは元ファイルが残りますが、mvでは元の場所からファイルがなくなる点が大きな違いです。

mvコマンドでファイルを移動する

mvは、ファイルやディレクトリを別の場所へ移動するコマンドです。

同じディレクトリ内で移動先に新しい名前を指定すると、ファイル名の変更として動作します。

mvコマンドの書式

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

mvコマンドの引数

引数説明
移動元移動または名前変更するファイルやディレクトリを指定する
移動先移動先のディレクトリまたは変更後の名前を指定する

移動先の指定と処理結果の関係は、次のとおりです。

移動先の指定処理結果
既存のディレクトリ指定したディレクトリの中へ移動する
新しいファイル名ファイル名を変更する
既存のファイル名移動先のファイルを上書きする可能性がある

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

オプション説明
-f上書きの確認を行わず、移動または名前変更を実行する
-i移動先が存在する場合、上書きする前に確認する

ファイルを別のディレクトリへ移動する

次の例では、report8.txtをDocumentsディレクトリへ移動します。

suzuki@AlmaLinux:~$ mv report8.txt Documents/

移動先を確認します。

suzuki@AlmaLinux:~$ ls Documents/report8.txt
Documents/report8.txt

移動元も確認してみましょう。

suzuki@AlmaLinux:~$ ls report8.txt
ls: report8.txtにアクセスできません: そのようなファイルやディレクトリはありません

report8.txtはDocumentsへ移動したため、ホームディレクトリには残っていません。

cpの場合は元のファイルが残りますが、mvの場合は元の場所からなくなります。

mvでファイル名を変更する

同じディレクトリ内で移動先に新しいファイル名を指定すると、ファイル名を変更できます。

次の例では、hosts-reference.txtをhosts-backup.txtへ変更します。

suzuki@AlmaLinux:~$ mv hosts-reference.txt hosts-backup.txt

変更後の名前を確認します。

suzuki@AlmaLinux:~$ ls hosts-backup.txt
hosts-backup.txt

変更前の名前を確認すると、ファイルが存在しないことが分かります。

suzuki@AlmaLinux:~$ ls hosts-reference.txt
ls: hosts-reference.txtにアクセスできません: そのようなファイルやディレクトリはありません

mvによる名前変更では、同じ内容を持つ別のファイルが追加されるわけではありません。既存のファイルの名前が変更され、変更前の名前はなくなります。

-i で移動先の上書きを確認する

移動先に同じ名前のファイルが存在すると、そのファイルが上書きされる可能性があります。

上書き前に確認したい場合は、-iを指定します。

suzuki@AlmaLinux:~$ mv -i report4-backup.txt Documents/
mv: Documents/report4-backup.txtを上書きしますか? n

nを入力すると、移動は中止されます。移動元のreport4-backup.txtもそのまま残ります。

重要なファイルを扱う場合は、-iを付けて確認しながら操作すると安心です。

-fで確認せずに移動する

-fを指定すると、移動先に同名ファイルが存在しても確認を行わずに処理を進めます。

suzuki@AlmaLinux:~$ mv -f report4-backup.txt Documents/

この操作では、Documents内にreport4-backup.txtが存在すると、上書きされる可能性があります。

-fは確認を省略できる反面、移動先にある重要なファイルを失う危険があります。移動元と移動先を十分に確認したうえで使用しましょう。

cpとmvの使い分け

cpとmvは、処理後に元ファイルを残すかどうかで使い分けます。

操作したい内容使用するコマンド
元ファイルを残して複製したいcp
別のディレクトリでも同じファイルを使いたいcp
バックアップ用のファイルを作りたいcp
ファイルを別の場所へ移したいmv
ファイル名を変更したいmv
元の場所にファイルを残したくないmv

ファイル名を変更するだけならmvを使用します。cpで別名のファイルを作ると、変更前と変更後に相当する2つのファイルが残るため、単純な名前変更とは結果が異なります。

rmコマンドでファイルを削除する

rmは、指定したファイルやディレクトリを削除するコマンドです。

rmで削除したファイルは、通常、デスクトップ環境のごみ箱には移動しません。削除後に元へ戻すことを前提としたコマンドではないため、対象を慎重に確認する必要があります。

rmコマンドの書式

rm [オプション] ファイル

ディレクトリを削除する場合は、-rを指定します。

rm -r ディレクトリ

rmコマンドの引数

引数説明
ファイル削除するファイルを指定する
ディレクトリ-rを指定した場合に、削除するディレクトリを指定する

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

オプション説明
-rディレクトリとその中身を再帰的に削除する
-f確認メッセージを表示せずに削除する。存在しないファイルもエラーにしない
-iファイルを削除する前に確認する

-iで確認してからファイルを削除する

ここでは、Documentsへ移動したreport8.txtを削除します。

最初に、ファイルが存在することを確認します。

suzuki@AlmaLinux:~$ ls Documents/report8.txt
Documents/report8.txt

削除前に確認を表示するため、-iを指定します。

suzuki@AlmaLinux:~$ rm -i Documents/report8.txt
rm: 通常ファイルDocuments/report8.txtを削除しますか? y

yを入力すると削除されます。nを入力すると削除は中止されます。

削除後に同じファイルを指定してlsを実行します。

suzuki@AlmaLinux:~$ ls Documents/report8.txt
ls: Documents/report8.txtにアクセスできません: そのようなファイルやディレクトリはありません

ファイルが見つからないというメッセージが表示されれば、削除されたことを確認できます。

rmをオプションなしで実行した場合、通常は確認せずに削除されます。ただし、利用環境やシェルの設定によっては、rmをオプションなしで実行しても確認が表示されることがあります。

存在しないファイルを削除した場合

すでに削除したファイルをもう一度rmで指定すると、ファイルが存在しないためエラーになります。

suzuki@AlmaLinux:~$ rm Documents/report8.txt
rm: Documents/report8.txtを削除できません: そのようなファイルやディレクトリはありません

rmは、指定されたファイルが存在するかどうかを確認します。存在しなければ削除できないため、エラーメッセージを表示します。

同じファイルを繰り返し削除しても、2回目以降の削除が成功するわけではありません。最初のrmでファイルが削除されていれば、次に同じ名前を指定したときは存在しないファイルとして扱われます。

-f で確認とエラー表示を抑える

-fを指定すると、削除前の確認を行いません。また、指定したファイルが存在しない場合も、そのことをエラーとして表示しません。

suzuki@AlmaLinux:~$ rm -f Documents/report8.txt

report8.txtが存在していなくても、通常はメッセージを表示せずに処理を終了します。

-fは処理を自動化するときに便利ですが、確認なしで削除されるため注意が必要です。入力したパスが間違っていても、削除前に止めて確認する機会がありません。

-r でディレクトリを削除する

ディレクトリとその中身をまとめて削除する場合は、-rを指定します。

次の例では、コピーの練習で作成したDocuments/project-backupを削除します。

最初に対象を確認します。

suzuki@AlmaLinux:~$ ls Documents/project-backup

内容を確認したうえで、-iと-rを組み合わせて削除します。

suzuki@AlmaLinux:~$ rm -i -r Documents/project-backup

-rは、指定したディレクトリの中にあるファイルやサブディレクトリもたどって削除します。

ディレクトリ内に多数のファイルがある場合、-iを指定すると、それぞれについて確認が表示されることがあります。確認回数は増えますが、削除対象を慎重に確認できます。

-rと-fを組み合わせると、ディレクトリとその中身が確認なしで削除されます。削除範囲を間違えたときの影響が非常に大きいため、安易に組み合わせないようにしましょう。

図3:rmで安全にファイルを削除する流れ

この図から分かること

rmを安全に使うには、削除前と削除後の確認が大切です。

最初にlsで対象が正しいことを確認し、rm -iで削除前の確認を表示します。削除に同意した場合だけyを入力し、最後にlsを実行してファイルが存在しないことを確認します。

rm -fは確認を省略し、rm -rはディレクトリの中身まで削除します。便利な一方で、指定を間違えた場合の影響が大きいため、対象のパスを丁寧に確認する必要があります。

相対パスと絶対パスの指定

cp、mv、rmでは、相対パスと絶対パスのどちらも使用できます。

パスの種類指定例説明
相対パスDocuments/report4.txtカレントディレクトリを基準に指定する
絶対パス/etc/hostsルートディレクトリから指定する
カレントディレクトリ.現在作業しているディレクトリを表す

次の例では、/etc/hostsをカレントディレクトリにhosts-copy.txtという名前でコピーしています。

suzuki@AlmaLinux:~$ cp /etc/hosts ./hosts-copy.txt

./hosts-copy.txtの先頭にある.は、カレントディレクトリを表します。

次の指定も、ホームディレクトリで実行している場合は同じ結果になります。

suzuki@AlmaLinux:~$ cp /etc/hosts hosts-copy.txt

パスを省略したファイル名は、基本的にカレントディレクトリを基準として扱われます。

上書きが発生する条件

cpとmvでは、コピー先または移動先に同じ名前のファイルが存在すると、上書きが発生する可能性があります。

操作例上書きの対象
cp report4.txt report4-backup.txt既存のreport4-backup.txt
cp report4.txt Downloads/Downloads内の既存のreport4.txt
mv report4.txt Documents/Documents内の既存のreport4.txt
mv hosts-reference.txt hosts-backup.txt既存のhosts-backup.txt

上書きを避けたい場合は、-iを指定して確認を表示します。

suzuki@AlmaLinux:~$ cp -i report4.txt report4-backup.txt
suzuki@AlmaLinux:~$ mv -i report4.txt Documents/

反対に、-fを指定すると確認を省略します。

suzuki@AlmaLinux:~$ cp -f report4.txt report4-backup.txt
suzuki@AlmaLinux:~$ mv -f report4.txt Documents/

上書きによって失われたコピー先の内容は、簡単には戻せません。練習中は-iを使い、上書き対象を確認しながら操作するとよいでしょう。

rootで操作するときの注意

rootは、システム上のほぼすべてのファイルを操作できる特別なユーザーです。

一般ユーザーではアクセス権によって保護されるファイルでも、rootならコピー、移動、削除できる場合があります。そのため、rootでrmやmvを実行するときは、一般ユーザーで操作するとき以上に注意が必要です。

root@AlmaLinux:~# rm -i /tmp/old-report.txt

rootで操作しているときは、プロンプトの末尾が#になります。

root@AlmaLinux:~#

一般ユーザーsuzukiでは、プロンプトの末尾が$になります。

suzuki@AlmaLinux:~$

特別な権限が必要ないファイル操作は、できるだけ一般ユーザーで行うと安全です。

安全にファイル操作を行うための確認ポイント

cp、mv、rmを実行するときは、次の点を確認しましょう。

  • コピー元、移動元、削除対象の名前が正しいか確認する
  • コピー先または移動先が、ファイル名なのかディレクトリなのか確認する
  • 上書きの可能性がある場合は-iを指定する
  • -fを使う前に、確認を省略しても問題ない操作か考える
  • ディレクトリをコピーするときはcp -rを使用する
  • ディレクトリを削除するときはrm -rの対象を慎重に確認する
  • 属性を維持してコピーしたい場合はcp -pを使用する
  • rmの実行前にlsで削除対象を確認する
  • rmの実行後にもlsで削除結果を確認する
  • rootでは必要な操作だけを行う

コピーしたい場合はcp、移動または名前変更をしたい場合はmv、削除したい場合はrmを使用します。

特に覚えておきたいのは、cpでは元ファイルが残り、mvでは元の場所からファイルがなくなり、rmでは指定したファイル自体が削除されるという違いです。