Infra Engineer

ディレクトリ及びファイルのコピー・移動 ~cp、mvコマンド~
2021.07.28
Lv1

ディレクトリ及びファイルのコピー・移動 ~cp、mvコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、cp・mvコマンドについて解説します。ファイルやディレクトリのコピーや移動に関するコマンドです。mvには移動以外の使い方がありますのでそこを抑えましょう。

cp
mv
まとめ
確認問題


cp

「cp」コマンドは、ディレクトリやファイルをコピーする際に使用します。
※windowsの「copy」コマンドに相当します。

cpコマンド
意味 ファイルやディレクトリをコピーする
書式 ① cp [オプション] [コピーファイル名] [コピーファイル名]
② cp [オプション] [コピーファイル名] [コピーディレクトリ名]
例①
「file001」ファイルのコピーを「file001a」という名前で作成
[root@localhost ~]# cp file001 file001a
[root@localhost ~]# ls -l
-rw-r--r-- 1 root root 0  7月  4 11:50 file001
-rw-r--r-- 1 root root 0  7月  4 12:00 file001a
例②
「file001」を「/exdir001」にコピー
[root@localhost ~]# mkdir exdir001
[root@localhost ~]# ls -l exdir001
total 0
[root@localhost ~]# cp file001 exdir001
[root@localhost ~]# ls -l exdir001
total 0
-rw-r--r-- 1 root root 0  7月  4 12:00 file001

初めにlsコマンドでexdir001配下に何もないことを確認しています。その後、cpコマンドでfile001をexdir001にコピーし、再びlsコマンドでコピーされていることを確認しています。


次に、cpコマンドのオプションを紹介します。

オプション 説明
-f コピー先の同名ファイルを強制的に上書きする。
–forceに同じ。(forceは「強制」の意)
-i コピー先の同名ファイルを上書きするか確認する。
–interactiveに同じ。(interactiveは「対話式」の意)
-p コピー元ファイルの属性(所有者、所有グループ、アクセス権、タイムスタンプ)を保持したままコピーする。
–preserveに同じ。(preserveは「保持」の意)
※root権限以外ではタイムスタンプのみ保持され、所有者や所有グループはコマンド実行ユーザ自身に変わる。
-R ディレクトリを再帰的にコピーする(指定したディレクトリ以下の階層全体がコピーされる)。
–recursiveに同じ。(recursiveは「再帰的」の意)
-v コピーする前にコピー元のファイル名やディレクトリ名を表示する。
–verboseに同じ。(verboseは「冗長」の意)

例)
「file001」の情報を保持して、「file001b」という名前でコピー。(-p)
[root@localhost ~]# cp -p file001 file001b
[root@localhost ~]# ls -l
-rw-r--r-- 1 root root 0  7月  4 11:50 file001
-rw-r--r-- 1 root root 0  7月  4 12:00 file001a
-rw-r--r-- 1 root root 0  7月  4 11:50 file001b

「file001」と「file001b」でタイムスタンプが保持されているのが分かります。

例)
同一名ファイルが存在する場合、上書き前に確認。(-i)
[root@localhost ~]# cp -i file001 file001b
cp: `file001b` を上書きしてもよろしいですか(yes/no)? y
[root@localhost ~]# ls -l
-rw-r--r-- 1 root root 0  7月  4 11:50 file001
-rw-r--r-- 1 root root 0  7月  4 12:00 file001a
-rw-r--r-- 1 root root 0  7月  4 12:10 file001b

実行前に確認が入ります。「y」を入力すると上書きされ、「n」を入力すると何もしません。


mv

「mv」コマンドは、ディレクトリやファイルの移動、あるいは名前変更に使用します。
「cp」コマンドと異なり、移動元にファイルは残りません。
※windowsの「move」コマンドに相当します。

mvコマンド
意味 ファイルやディレクトリを移動する
書式 ①mv [オプション] [移動ファイル名orディレクトリ名] [移動ディレクトリ名]
②mv [オプション] [移動ファイル名] [移動ファイル名]
※②は同一ディレクトリ内でのファイルの移動を指し、「ファイル名の変更」になります。
例①
「file001」ファイルを「exdir002」ディレクトリに移動
[root@localhost ~]# mkdir exdir002
[root@localhost ~]# ls
exdir001 exdir002 file001 file001a file001b
[root@localhost ~]# mv file001 exdir002
[root@localhost ~]# ls
exdir001 exdir002 file001a file001b
[root@localhost ~]# ls exdir002
file001
[root@localhost ~]# mv file001a file001b exdir002
[root@localhost ~]# ls exdir002
file001 file001a file001b

「mv file001exdir002」により「exdir002」ディレクトリに「file001」が移動したのが分かります。元のファイルが残っていないのも分かります。また、移動元に複数ファイルを指定することも可能です。
ディレクトリの移動も同様に可能です。
※「cp」コマンドの場合は、ディレクトリ配下をすべてコピーするために「-R」オプションを使用する必要がありますが、「mv」コマンドの場合はオプションを使用せずともディレクトリの配下ごと移動することが可能です。

例②
「file001」を「file002」に名前変更
[root@localhost ~]# cd exdir002
[root@localhost exdir002]# mv file001 file002
[root@localhost exdir002]# ls
file002 file001a file001b

同一ディレクトリ内で「mv」コマンドを使用して移動元と移動先にファイル名を指定すると、「名前変更」となります。
※[移動先ディレクトリ名]にまだ存在しないディレクトリ名を指定することで、ディレクトリ名の変更も可能です。既に存在するディレクトリ名を指定すると、当然ですがそのディレクトリごと移動先ディレクトリ配下に移動する操作となります。


次に、mvコマンドのオプションを紹介します。

オプション 説明
-f 移動先の同名ファイルを強制的に上書きする。
–forceに同じ。(forceは「強制」の意)
-i 移動先の同名ファイルを上書きするか確認する。
–interactiveに同じ。(interactiveは「対話式」の意)
-u 移動先ファイルの方が新しい場合は上書きを中止する。
–updateに同じ。(updateは「更新」の意)

まとめ

今回は、ファイルやディレクトリのコピーに使用する「cp」コマンドと、移動に使用する「mv」コマンドについて解説しました。
「cp」コマンドはコピー元のファイルが残ります。また、ディレクトリ配下も含めてコピーする場合には「-R」オプションを使用します。
「mv」コマンドは移動元ファイルが残りません。また、ディレクトリ配下も含めて移動するのにオプションは必要ありません。
また、「mv」コマンドは、移動だけでなく名前変更が可能であることが重要なポイントです。

最後に確認問題で今回学習した内容を是非確かめてください。

確認問題

問題1

cpコマンドにおいて、コピー元ファイルの属性を保持したままコピーするために使用するオプションはどれか。

A) -p
B) -i
C) -R
D) -v

解答・解説
答え:A

A) ⇒ 正解です。
B) ⇒ コピー先にある同名ファイルを上書きするか確認するためのオプションです。
C) ⇒ ディレクトリ配下の階層全体をコピーするためのオプションです。
D) ⇒ コピーする前にコピー元のファイル名やディレクトリ名を表示するオプションです。

問題2

「sample001.txt」を「sample002.txt」にリネームするためのコマンドとして正しいものはどれか。ただし、「sample002.txt」は現状存在しないものとする。

A) cp sample001.txt sample002.txt
B) mv sample002.txt sample001.txt
C) mv sample001.txt sample002.txt
D) cp sample002.txt sample001.txt

解答・解説
答え:C

ファイルの名前変更に使用するのは「mv」コマンドです。また、その際の書式は mv [オプション] [移動(変更前)ファイル名] [移動(変更後)ファイル名]です。