Linux でファイルを扱う作業に欠かせないのが、コピーの cp、移動・名前変更の mv、削除の rm という3つのコマンドです。GUI での「コピー&ペースト」「ドラッグ移動」「ゴミ箱へ」に当たる操作を、ターミナルから素早く正確に行えます。ただしターミナルでの操作はゴミ箱を経由せずその場で確定するため、特に rm は使い方を誤ると取り返しがつきません。この記事では、3つのコマンドの基本の使い方とよく使うオプションを実例つきで解説し、あわせて rm -rf の危険性と安全に使うコツを初心者の方にも分かるように説明します。
目次
ファイルをコピーする cp
cp は「copy(コピー)」の略で、ファイルを複製するコマンドです。書式は cp コピー元 コピー先 です。コピー先にファイル名を指定すればその名前で複製され、ディレクトリを指定すればその中へ同じ名前でコピーされます。
# 書式: cp コピー元 コピー先
# index.html を backup.html という名前で複製する
cp index.html backup.html
# index.html を backup ディレクトリの中へコピーする
cp index.html backup/
複数のファイルをまとめて1つのディレクトリへコピーすることもできます。その場合はコピー先にディレクトリを指定します。バックアップを取ってから作業したいときなどに便利です。
# 複数ファイルを backup ディレクトリへまとめてコピー
cp style.css script.js backup/
ディレクトリごとコピーする -r
cp はそのままではファイルしかコピーできず、ディレクトリを指定するとエラーになります。ディレクトリを中身ごと丸ごとコピーしたいときは -r(recursive=再帰的)を付けます。フォルダの構造をそっくり複製したいときに使います。
# src ディレクトリを中身ごと src_backup として複製する
cp -r src src_backup
cp でよく使うオプション
cp には、上書きを防いだり属性を保ったりするためのオプションがあります。よく使うものを表にまとめます。
| オプション | 意味 |
|---|---|
-r | ディレクトリを中身ごと再帰的にコピーする |
-i | コピー先が既にあるとき、上書きしてよいか確認する |
-p | 更新日時やパーミッションなどの属性を保持する |
-v | コピーした内容を1件ずつ表示する(verbose) |
ここで注意したいのが、cp は同名のファイルが既にあると、確認なしで上書きしてしまう点です。大切なファイルを誤って潰さないためには、上書き前に確認をはさむ -i を付けておくと安全です。-i を付けると、上書きが発生する場面で overwrite backup.html? のように尋ねられ、y と答えたときだけ上書きされます。
# 上書きの前に確認する
cp -i index.html backup.html
# 属性(更新日時など)を保ったままコピーする
cp -p index.html backup.html
ファイルを移動・リネームする mv
mv は「move(移動)」の略で、ファイルやディレクトリを別の場所へ移動するコマンドです。書式は cp と同じく mv 移動元 移動先 です。cp が複製(元も残る)なのに対し、mv は移動なので元の場所からはなくなるのが違いです。
# index.html を public ディレクトリへ移動する
mv index.html public/
# 複数ファイルを images ディレクトリへまとめて移動する
mv logo.png banner.png images/
mv でファイル名を変更する
Linux には「リネーム専用」のコマンドはなく、名前の変更も mv で行います。移動先に別の名前を指定すると、同じ場所で名前を付け替えたことになります。「移動先が同じ場所で名前だけ違う=リネーム」と考えると分かりやすいでしょう。ディレクトリ名の変更も同じ要領です。
# old.txt を new.txt に名前変更する
mv old.txt new.txt
# ディレクトリ名を変更する(work → project)
mv work project
mv も cp と同じく、移動先に同名のファイルがあると確認なしで上書きします。上書きで元のファイルが消えるのを防ぎたいときは、こちらも -i を付けて確認するようにしておくと安心です。
# 上書きの前に確認する
mv -i new.txt old.txt
ファイルを削除する rm
rm は「remove(削除)」の略で、ファイルを削除するコマンドです。書式は rm 削除するファイル です。複数のファイルを一度に消すこともできます。
# tmp.txt を削除する
rm tmp.txt
# 複数のファイルをまとめて削除する
rm a.log b.log c.log
ここで最初に覚えておいてほしいのが、rm で消したファイルはゴミ箱に入らず、その場で完全に削除されるということです。GUI のように「ゴミ箱から戻す」ことは基本的にできません。この前提を踏まえて、オプションを見ていきましょう。
ディレクトリを削除する -r
rm もそのままではファイルしか消せません。ディレクトリを中身ごと削除したいときは、cp と同様に -r(再帰的)を付けます。中に入っているファイルやサブディレクトリもすべて削除されます。
# tmp ディレクトリを中身ごと削除する
rm -r tmp
rm でよく使うオプション
rm の主なオプションを表にまとめます。特に -f は動作を理解してから使うようにしてください。
| オプション | 意味 |
|---|---|
-r | ディレクトリを中身ごと再帰的に削除する |
-i | 1件ずつ削除してよいか確認する |
-f | 確認や警告を出さず強制的に削除する |
-v | 削除した内容を1件ずつ表示する(verbose) |
削除は取り消せないため、不安なときは -i を付けて1件ずつ確認しながら消すのがおすすめです。remove tmp.txt? のように尋ねられ、y と答えたものだけが削除されます。
# 1件ずつ確認しながら削除する
rm -i *.log
ワイルドカードで複数まとめて指定する
cp・mv・rm はいずれも、*(アスタリスク)などのワイルドカードで複数のファイルをまとめて指定できます。* は「任意の文字列」を表し、*.log なら「.log で終わるすべてのファイル」という意味になります。数が多いファイルを一度に扱えて便利です。
# 画像ファイルをまとめて images ディレクトリへコピー
cp *.png images/
# .tmp で終わるファイルをすべて削除する
rm *.tmp
ワイルドカードは強力ですが、削除と組み合わせるときは特に注意が必要です。* がどのファイルに一致するかは、実行してみないと分かりにくいことがあります。rm *.tmp を実行する前に、まず ls *.tmp で対象を一覧表示して確認すると、意図しないファイルを巻き込む事故を防げます。
rm -rf の危険性と安全に使うコツ
ここまでのオプションを組み合わせた rm -rf は、「ディレクトリを中身ごと(-r)、確認も警告もなしに強制削除(-f)する」という、非常に強力で危険なコマンドです。便利なぶん、指定を1文字間違えただけで大切なファイルやシステムを一瞬で消し去ってしまいます。しかも rm はゴミ箱を経由しないため、実行してしまうと元に戻す手段はありません。ここでは代表的な事故と、それを避けるための習慣を紹介します。
rm -rf / は絶対に実行しない
/ はシステム全体の起点となるルートディレクトリです。rm -rf / は、そこから下にあるすべてを削除しようとする命令になり、システムそのものを破壊しかねません。現在の多くの環境では安全装置が働いて止まる場合もありますが、環境によっては本当に消えてしまうため、興味本位でも実行してはいけません。似た形の rm -rf ~(ホームディレクトリ全体)なども同様に危険です。
スペースの入れ間違いに注意する
特に怖いのが、/ と対象パスの間に意図せずスペースが入ってしまうミスです。たとえば rm -rf /home/user/tmp のつもりが、うっかり rm -rf / home/user/tmp と打つと、シェルはこれを「/ と home/user/tmp の2つを削除せよ」と解釈し、ルートから消し始めてしまいます。パスを打つときは、余計なスペースが入っていないか実行前に必ず見直してください。
rm -rf * は今いる場所を確認してから
rm -rf * は「今いるディレクトリの中身をすべて削除する」という意味です。作業ディレクトリの後片付けに使われますが、自分が今どこにいるかを勘違いしていると大惨事になります。実行する前に pwd で現在地を確認し、ls で消える対象を目で見てから実行する習慣をつけましょう。
# 今どのディレクトリにいるかを確認する
pwd
# 何が消えるのかを先に一覧表示して確認する
ls
安全のためのコツをまとめると、削除の前に ls や pwd で対象と現在地を確認すること、慣れないうちは -f を付けず、必要なら -i で確認しながら消すこと、そして絶対パス(/ から始まるパス)を rm -rf に渡すときは特に慎重になることです。少し面倒でも、この一手間が取り返しのつかない事故を防ぎます。
まとめ
cp・mv・rm は、ファイル操作の基本となる3つのコマンドです。要点を整理します。
cp コピー元 コピー先でコピー。ディレクトリごとコピーは-r、上書き確認は-i、属性保持は-p。mv 移動元 移動先で移動。同じ場所で別名を指定すればファイル名・ディレクトリ名の変更になる。rm ファイルで削除。ディレクトリは-r、1件ずつ確認は-i、強制削除は-f。*などのワイルドカードで複数まとめて指定できる。削除前はlsで対象を確認する。rmはゴミ箱を経由せず取り消せない。rm -rfは特に危険で、/やスペースの入れ間違いに厳重注意。
まずは cp と mv で安全な操作に慣れ、rm は「消したら戻せない」ことを常に意識して、確認をはさみながら使っていきましょう。この3つを押さえれば、ターミナルでのファイル整理がぐっと快適になります。