【Linux】ファイル操作コマンド(cp・mv・rm)で気をつけること

Linux

こんにちは、かつコーチです。

前回は、lscdpwdmkdirというディレクトリ操作の基本コマンドを解説しました。

今回は、実際にファイルを扱う上で欠かせないcpmvrmの3つのコマンドを解説します。

特にrmはファイルを完全に削除してしまうコマンドのため、正しい知識なしに使うのは危険です。

この記事を読めば、これらのコマンドを安全に、かつ効率よく使いこなせるようになります。

ファイル操作コマンドの基本

cp:ファイルやディレクトリをコピーする

cp(Copy)は、ファイルやディレクトリを別の場所にコピーするコマンドです。

# report.txtをbackup.txtという名前でコピーする
cp report.txt backup.txt

# report.txtを別のディレクトリにコピーする
cp report.txt /home/katsu/backup/

ディレクトリごとコピーしたい場合は、-r(再帰的)オプションを付ける必要があります。

# projectsディレクトリを中身ごとコピーする
cp -r projects projects_backup

-rを付けずにディレクトリをコピーしようとすると、「ディレクトリです」というエラーで止まる仕様になっているため、覚えておくとつまずきにくくなります。

mv:ファイルやディレクトリを移動・リネームする

mv(Move)は、ファイルやディレクトリを移動するコマンドですが、同じディレクトリ内で名前を変えて実行すると、そのままリネーム(名前変更)としても機能します。

# ファイルを別のディレクトリに移動する
mv report.txt /home/katsu/documents/

# 同じディレクトリ内で名前だけ変える(リネーム)
mv report.txt final_report.txt

Linuxにはcpのようにコピー元をそのまま残す「rename専用コマンド」は存在せず、mvが移動とリネームの両方を兼ねている点は、最初は少し意外に感じるかもしれません。

rm:ファイルやディレクトリを削除する

rm(Remove)は、ファイルやディレクトリを削除するコマンドです。

# ファイルを削除する
rm old_report.txt

# ディレクトリを中身ごと削除する
rm -r old_backup/

WindowsやmacOSの「ゴミ箱」のような仕組みはなく、rmで削除したファイルは基本的に復元できません。

この違いを理解しないまま操作すると、取り返しのつかない事故につながるため、次の章で詳しく解説します。

安全に使うための実践的な注意点

上書きコピー・移動時の確認オプション

cpmvは、移動先に同名のファイルが存在する場合、確認なしで上書きしてしまうことがあります。

# 上書き前に確認を挟むオプション
cp -i report.txt backup.txt
mv -i report.txt /home/katsu/documents/

-i(interactive)オプションを付けると、上書きが発生する場合に「上書きしますか?」という確認が入るようになります。

慣れないうちは、cpmvともに-iを付ける習慣をつけておくと、重要なファイルを誤って消す事故を防げます。

rmを使う前に必ずlsで確認する

rmを実行する前に、削除対象が正しいかをlsで必ず確認する習慣が、事故防止の基本になります。

# 削除対象を先にlsで確認する
ls old_backup/*.log

# 確認した内容と同じパターンでrmを実行する
rm old_backup/*.log

*(アスタリスク)はワイルドカードと呼ばれ、任意の文字列にマッチする記号です。

rmにワイルドカードを使う前に、必ず同じパターンでlsを実行し、意図した範囲だけが対象になっているかを目視確認するのが鉄則です。

つまずきやすいポイント:スペースの位置ミスでホームディレクトリを消しかけた話

私が駆け出しの頃、不要なログファイルを一括削除しようとして、あわや大惨事という経験をしたことがあります。

❌ Before:スペースの位置を誤ってワイルドカードの範囲が広がる

# 本来は「old_logs/」配下の*.logを消したかった
rm -r old_logs /*.log

このコマンドは、old_logs/*.logという2つの別々の引数として解釈されてしまいます。

old_logsディレクトリの削除に加えて、ルート直下の.logファイルまで対象になりかねない危険なコマンドでした。

実行直前に一瞬の違和感を覚え、ls -r old_logs /*.logで先に確認したことで、被害を未然に防げました。

✅ After:スペースを入れず、意図した範囲を1つの引数にまとめる

# old_logsディレクトリ配下の.logファイルだけを対象にする
rm -r old_logs/*.log

このヒヤリとした経験以来、rmを実行する前は必ず同じ引数でlsを実行し、対象範囲を目で見て確認してから実行するルールを自分に課しています。

rmはUndo(元に戻す)が効かないコマンドだからこそ、一手間を惜しまないことが結果的に一番の時短になります。

応用・一歩先の使い方

削除前に確認を挟むエイリアス設定

より安全に運用したい場合、rm実行時に必ず確認が入るよう、シェルの設定ファイルにエイリアスを追加する方法もあります。

# ~/.bashrcに追記する例
alias rm='rm -i'
# 設定を反映させる
source ~/.bashrc

エイリアスとは、コマンドに別名や既定のオプションを設定する仕組みのことです。

チーム開発のサーバーでは、このエイリアスに頼らず、都度-iを意識して打つ運用ルールにしているケースも多いため、現場のルールに合わせて使い分けましょう。

rsyncによる安全なコピーという選択肢

大量のファイルを移動・バックアップする場合は、cpmvよりもrsyncコマンドの方が安全で高機能な場合があります。

# ディレクトリ全体を差分コピーする(動作確認は-nドライラン推奨)
rsync -avn source_dir/ dest_dir/

rsyncは今後の記事で詳しく扱いますが、「差分だけを転送できる」「途中で失敗しても再開しやすい」という特徴があり、本番環境の移行作業などでよく使われます。

まとめ

この記事のポイント

  • cpはコピー、mvは移動とリネームを兼ねる、rmは削除(復元不可)というのが基本の役割
  • ディレクトリを対象にする場合は-rオプションが必要
  • -iオプションで上書き・削除前の確認を挟むと事故を防げる
  • rmを実行する前は、同じ引数でlsを実行し、対象範囲を必ず目視確認する

次に読むべき記事

ファイル操作の基本が分かったら、次はファイルの中身を確認するcatlessheadtailの使い方に進みましょう。

→ 次の記事:cat・less・head・tailでファイルの中身を確認する

タグ: Linux, 初心者向け, 基本操作

タイトルとURLをコピーしました