Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

UNIX(Linux)
入門編

  1. UNIX(Linux)とは
  2. ディストリビューションとは
  3. CentOSとMacOSとCUIについて
  4. 仮想化ソフトウェアを使ったCentOSのインストールとMacOSのCUI環境について
  5. ログインとrootユーザーとシャットダウン等について
  6. コマンドの構造と注意点について
  7. ファイルシステムとカレントディレクトリの移動と表示(cdとpwd)について
  8. 各主要ディレクトリの解説とディレクトリ等の内容表示(ls)について
  9. ちょっと高度なディレクトリの移動(cd)とパスについて
  10. 『ls』コマンドの応用(1)とドットファイルについて
  11. 『ls』コマンドの応用(2)
  12. タブキーを使った入力補完について
  13. ディレクトリの作成方法(mkdir)について
  14. ファイルの簡易作成(touch)とファイルについて
  15. 標準入出力とリダイレクション(>と>>)を使ったファイル生成とechoとcatについて
  1. ファイルとディレクトリの削除(rm)について
  2. ファイルとディレクトリのコピー(cp)について
  3. ファイルとディレクトリの移動と名前変更(mv)について
  4. viエディタとは
  5. viの基本的な使い方(1)
  6. viの基本的な使い方(2)
  7. ターミナル(sshとTera Term)を使ったリモート操作について
  8. ソフトウェアのインストール方法(yumとパッケージ管理ツール)について
  9. ユーザーの概要と確認と追加と切り替え(adduserとsu)について
  10. ユーザーのパスワードと削除と更新と管理者権限での実行(passwdとuserdelとusermodとsudo)について
  11. グループの概要と確認方法(groups)について
  12. グループの追加と削除と設定変更(groupaddとgroupdelとgroupmod)とユーザー追加方法について
  13. パーミッション(権限)について
  14. パーミッションの設定方法(chmodとchown)について
  1. トップページ
  2. UNIX(Linux)入門編 - ファイルとディレクトリのコピー(cp)について

ファイルとディレクトリのコピー(cp)について

みなさまどうも。いかがおすごしでしょうか、これを執筆しているのは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』を付けておくとタイムスタンプとかもそのまま複製されるのでこちらも覚えておきましょう。

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

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。