Language
日本語
English

Caution

JavaScript is disabled in your browser.
This site uses JavaScript for features such as search.
For the best experience, please enable JavaScript before browsing this site.

UNIX(Linux)
Beginner

  1. What is UNIX (Linux)? - Japanese Only
  2. What are Distributions? - Japanese Only
  3. About CentOS, macOS, and CUI - Japanese Only
  4. Installing CentOS with Virtualization Software and macOS CUI Environment - Japanese Only
  5. Login, root User, and Shutdown - Japanese Only
  6. Command Structure and Important Notes - Japanese Only
  7. File System and Navigating Directories (cd and pwd) - Japanese Only
  8. Key Directories and Listing Contents (ls) - Japanese Only
  9. Advanced Directory Navigation (cd) and Paths - Japanese Only
  10. Advanced ls Command (Part 1) and Dotfiles - Japanese Only
  11. Advanced ls Command (Part 2) - Japanese Only
  12. Tab Completion for Input - Japanese Only
  13. Creating Directories (mkdir) - Japanese Only
  14. Quick File Creation (touch) and About Files - Japanese Only
  15. Standard I/O, Redirection (> and >>), echo, and cat - Japanese Only
  1. Deleting Files and Directories (rm) - Japanese Only
  2. Copying Files and Directories (cp) - Japanese Only
  3. Moving and Renaming Files and Directories (mv) - Japanese Only
  4. What is the vi Editor? - Japanese Only
  5. Basic vi Usage (Part 1) - Japanese Only
  6. Basic vi Usage (Part 2) - Japanese Only
  7. Remote Operations via Terminal (SSH and Tera Term) - Japanese Only
  8. Installing Software (yum and Package Managers) - Japanese Only
  9. User Overview, Verification, Creation, and Switching (adduser and su) - Japanese Only
  10. User Passwords, Deletion, Modification, and sudo (passwd, userdel, usermod) - Japanese Only
  11. About Groups and the groups Command - Japanese Only
  12. Adding, Deleting, and Modifying Groups (groupadd, groupdel, groupmod) - Japanese Only
  13. About Permissions - Japanese Only
  14. Setting Permissions (chmod and chown) - Japanese Only
  1. Home
  2. UNIX(Linux)Beginner - Copying Files and Directories (cp)

Copying Files and Directories (cp) - Japanese Only

みなさまどうも。いかがおすごしでしょうか、これを執筆しているのは6月なのですがなんだか今日はとってもあちちーでございます。

さて今回はファイルとディレクトリをコピー(複製)することができる『cp』コマンドくんについてやっていきます。

基本的な使い方は『cp コピー元ファイル名 コピー先ファイル名』って感じなりますのでいつも通りちょいと試していきましょう。

まず適当に『echo』と『>』を使って『test.txt』というファイルを生成して

[root@localhost ~]# echo 初音ミク > test.txt

その後に『cp test.txt test1.txt』というコマンドを叩いてみます。

[root@localhost ~]# cp test.txt test1.txt

これで『test1.txt』という名前のファイルとしてコピーが完了しています。『ls』と『cat』で確認してみましょう。

[root@localhost ~]# ls
test.txt  test1.txt
[root@localhost ~]# cat test1.txt
初音ミク

バッチリですね。

そして先程は『test1.txt』という存在しないファイル名を指定していましたがすでに存在しているファイル名を指定するとどうなるのかというと確認が入る感じになります。今現在は以下のように

[root@localhost ~]# ls
test.txt  test1.txt

『test.txt』と『test1.txt』が存在している状況ですね。ここで無駄にもう一度『cp test.txt test1.txt』というコマンドを叩いてみます。すると

[root@localhost ~]# cp test.txt test1.txt
cp: overwrite `test1.txt'?

こんな感じで「上書きしちゃうけどいいっすかー?」って確認が入ります。

『rm』コマンドくんと同じようにCentOSの場合は「最初の文字が「y」または「Y」だった場合に「yes」と判定する」って感じになるので上書きしちゃってOKなら以下のように

[root@localhost ~]# cp test.txt test1.txt
cp: overwrite `test1.txt'? y

「y」とかを打ち込んでエンターキーをバシッと押してしまえばOKです。

そしてコピー先が現在のカレントディレクトリではない別のディレクトリになる場合についてです。

まず下準備として現在のカレントディレクトリである『/root』に『test』って名前のディレクトリを作ってみます。

[root@localhost ~]# mkdir test

そして「対象となるディレクトリの配下にコピー元と同じファイル名で複製したいぜー」という場合は以下のようなコマンドでOKです。

[root@localhost ~]# cp test.txt test/

上記の『cp test.txt test/』って部分に注目ですね。このように『cp 元となるファイル 対象となるディレクトリ』って記述するだけで同じファイル名での複製が可能です。ちゃんとできてるか『ls』コマンドくんと『cat』コマンドくんでちょいと確認してみましょう。

[root@localhost ~]# ls test/
test.txt
[root@localhost ~]# cat test/test.txt
初音ミク

バッチリですね。

もちろん以下のように

[root@localhost ~]# cp test.txt test/test.txt

きっちり書いてしまってもOKです。ただタイピングが面倒くさいので省略してしまうのが楽ちんですね。

ちなみにディレクトリの末尾の『/』はあってもなくてもどっちでもOKです。以下の2つになりますね、どちらも同じ結果となります。

[root@localhost ~]# cp test.txt test
[root@localhost ~]# cp test.txt test/

続いてディレクトリのコピーについてなんですが『cp ディレクトリ名 ディレクトリ名』とするとこうなります。以下は『test』ってディレクトリを『test1』ってディレクトリ名でコピーしようとした感じですね。

[root@localhost ~]# cp test test1
cp: omitting directory `test'

ここがちょっとややこしいのですが「omitting」は省略とか割愛とかって意味になり、直訳すると「testってディレクトリは省略しました!」になるのですがこれは要するに「これはディレクトリだからコピーは省略して処理を完了しました!」って事を言ってると思っちゃって下さい。

「じゃあディレクトリをコピーしたいときはどうするの?」と言われると『rm』コマンドくんと同じように『-r』オプションをつけてしまえばOKです。こんな感じですね。

[root@localhost ~]# cp -r test test1
[root@localhost ~]# ls
test.txt  test1.txt  test  test1

カレントディレクトリではないディレクトリに同じディレクトリ名で複製したい場合は先ほどと同じくディレクトリ名の部分は省略しちゃってOKです。以下は『test2』ってディレクトリを作って、その中に同じディレクトリ名でディレクトリ『test』を複製した感じですね。

[root@localhost ~]# mkdir test2
[root@localhost ~]# cp -r test test2/
[root@localhost ~]# ls test2/
test

ここまでは大丈夫そうでしょうか。

さてここでちょいと注意するべき点があります。それは「『cp』コマンドを普通に叩いて複製すると現在の操作ユーザーとグループが所有者として設定される」という点です。

「これは一体どういう意味だべ?」って思った方も多いと思うのですが前の記事で解説した通りUNIX系OSでは「ひとつのデバイスを複数の人が触るマルチユーザーシステム」を基本としていますよね。

その中で『root』さん(管理者権限持ちユーザー)と一般ユーザーさんでは権限で大きな差があるため、「一般ユーザーさんが作ったファイルとかを『root』さんが複製すると『root』さんが所有者になっちゃって一般ユーザーさんがさっぱり触れなくなっちゃうんだなーテヘペロ(・ω<) 」って事態が発生します。

これ状況によっては非常に面倒くさいことになってしまいがちな部分です。例えばウェブサービスを提供しているファイル群とかになると一般ユーザーさんが居たりデータベース処理を行うMySQLさんとか人じゃないソフトウェアさんが居たりと所有者が沢山入り交じる感じになるので一度間違えると修正が大変になっちゃうんですね。ファイルを誰でも自由にいじれるようにしちゃうとそれはそれでセキュリティ的にあまり良くないので避けたいわけでございます。

じゃあどうすれば良いのかというと『-p』オプションをつけてあげればOKです。こんな感じですね。

[root@localhost ~]# cp -p test.txt test2.txt

こうすることで所有者とかそういう情報を含めたうえで複製できます。これ間違いやすいポイントなので忘れないよう気をつけて下さい。

ちなみに『-p』を付けておくとタイムスタンプとかもそのまま複製されるのでこちらも覚えておきましょう。

というわけで以上になります。次の記事ではファイルとかディレクトリとかの移動とかについてやっていきます。またお会いしましょう。

This article was written by Sakurama.

Author's beloved small mammal

桜舞 春人 Sakurama Haruto

A Tokyo-based programmer who has been creating various content since the ISDN era, with a bit of concern about his hair. A true long sleeper who generally feels unwell without at least 10 hours of sleep. His dream is to live a life where he can sleep as much as he wants. Loves games, sports, and music. Please share some hair with him.

If you find any errors or copyright issues, please .