ディレクトリ及びファイルのコピー・移動 ~cp、mvコマンド~
本記事の対象者
LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。
今回の内容
今回は、cp・mvコマンドについて解説します。ファイルやディレクトリのコピーや移動に関するコマンドです。mvには移動以外の使い方がありますのでそこを抑えましょう。
cp
「cp」コマンドは、ディレクトリやファイルをコピーする際に使用します。
※windowsの「copy」コマンドに相当します。
cpコマンド | |
---|---|
意味 | ファイルやディレクトリをコピーする |
書式 | ① cp [オプション] [コピー元ファイル名] [コピー先ファイル名]② cp [オプション] [コピー元ファイル名] [コピー先ディレクトリ名] |
[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
[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は「冗長」の意) |
[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」でタイムスタンプが保持されているのが分かります。
[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 [オプション] [移動元ファイル名] [移動先ファイル名] ※②は同一ディレクトリ内でのファイルの移動を指し、「ファイル名の変更」になります。 |
[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」コマンドの場合はオプションを使用せずともディレクトリの配下ごと移動することが可能です。
[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」コマンドは、移動だけでなく名前変更が可能であることが重要なポイントです。
最後に確認問題で今回学習した内容を是非確かめてください。
確認問題
cpコマンドにおいて、コピー元ファイルの属性を保持したままコピーするために使用するオプションはどれか。
A) -p
B) -i
C) -R
D) -v
「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