rmコマンドでファイルやディレクトリを削除する方法|-rfの危険性と安全な使い方コマンド


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドP-T, ファイル・ディレクトリ管理コマンド > rmコマンドでファイルやディレクトリを削除する方法|-rfの危険性と安全な使い方コマンド
「rm コマンドを実行したら、消すつもりがなかったファイルまで消えてしまった」 「rm -rf を実行したら、サーバーが起動しなくなった」 Linuxでファイルやディレクトリを削除する rm コマンドは、最も基本的なコマンドのひとつです。しかし、Linuxの rm はWindowsの「ごみ箱」と違い、一度削除したファイルは基本的に復元できません。

この記事では、rmコマンド の基本的な使い方から、-r-f オプションの危険性、ハイフン付きファイルの削除方法、安全に運用するためのテクニックまでを実践的に解説します。

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を無料で手に入れる 図解60P/登録10秒/解除も3秒

rmコマンドの基本~ファイルを1つ削除する

rm はremove(削除)の略で、指定したファイルを削除するコマンドです。

# 基本書式 # rm ファイル名 # sample.txt を削除する $ rm sample.txt

削除が成功しても、デフォルトでは何もメッセージが表示されません。削除されたか確認するには ls コマンドで確認してください。

複数のファイルを同時に削除することもできます。

# 複数ファイルをスペース区切りで指定 $ rm file1.txt file2.txt file3.txt # ワイルドカードで一括削除(.log ファイルをすべて削除) $ rm *.log

削除前に確認する(-i オプション)

-i オプションを付けると、ファイルを削除する前に確認メッセージが表示されます。

$ rm -i important.conf rm: remove regular file 'important.conf'? y # y を入力すると削除、n で中止

大事なディレクトリで作業する際は、-i を付ける習慣をつけましょう。後述する alias 設定で自動化する方法もあります。

削除経過を表示する(-v オプション)

-v(verbose)オプションを付けると、削除したファイル名が逐一表示されます。大量のファイルを削除する際に、何が消えたか確認したいときに便利です。

$ rm -v *.tmp removed 'cache1.tmp' removed 'cache2.tmp' removed 'session.tmp'

ディレクトリごと削除する(-r オプション)

rm コマンドは、オプションなしではディレクトリを削除できません。ディレクトリとその中身をまとめて削除するには -r(recursive=再帰的)オプションを使います。

# tmpdir ディレクトリとその中身をすべて削除する $ rm -r tmpdir/

確認メッセージが表示されるので、y を入力して削除を進めます。

確認なしで強制削除する(-f オプション)

-f(force)オプションは、確認メッセージを表示せずに強制的に削除します。存在しないファイルを指定してもエラーを出しません。

# 確認なしでファイルを削除 $ rm -f old_log.txt # 存在しないファイルを指定してもエラーにならない $ rm -f nonexistent.txt

【重要】rm -rf の危険性

-r-f を組み合わせた rm -rf は、「ディレクトリ以下のすべてを確認なしで強制削除」するコマンドです。非常に強力で便利ですが、パスを間違えるとシステムを破壊します。

# これは正しい使い方(不要なログディレクトリを削除) # rm -rf /var/log/old_logs/ # 絶対にやってはいけない例(ルートディレクトリ以下を全削除) # rm -rf /

特に root ユーザーで作業しているときは、rm -rf の実行前に必ずパスを二度確認してください。変数展開を使う場合(rm -rf ${DIR}/)は、変数が空になっていないかの確認も重要です。

「Permission denied」が出た時の対処法

一般ユーザーで、自分に書き込み権限のないファイルを削除しようとするとエラーになります。

$ rm /var/log/messages rm: cannot remove '/var/log/messages': Permission denied

この場合は sudo を付けて実行するか、ファイルの所有者を確認してください。

# sudo を付けて削除(root権限が必要) $ sudo rm /var/log/old.log # 先に所有者を確認する $ ls -l /var/log/old.log

「Is a directory」が出た時の対処法

-r オプションを付けずにディレクトリを削除しようとすると、このエラーが表示されます。

$ rm mydir/ rm: cannot remove 'mydir/': Is a directory # -r を付けてディレクトリごと削除する $ rm -r mydir/

空のディレクトリだけを削除したい場合は、rmdir コマンドも使えます。rmdir はディレクトリが空でない場合にエラーを返すため、誤って中身のあるディレクトリを消してしまう事故を防げます。

「Device or resource busy」が出た時の対処法

ファイルやディレクトリが別のプロセスによって使用中の場合に表示されるエラーです。

$ rm -r /mnt/usb/ rm: cannot remove '/mnt/usb/': Device or resource busy

マウントされたデバイスを削除しようとした場合にもこのエラーが出ます。lsof コマンドや fuser コマンドで使用中のプロセスを確認し、先にアンマウントしてください。

# 使用中のプロセスを確認 $ lsof /mnt/usb/ # アンマウントしてから削除 $ sudo umount /mnt/usb

ハイフン(-)で始まるファイルを削除する方法

ファイル名が - で始まっていると、rm がオプションと誤認してエラーになります。

$ rm -filename.txt rm: invalid option -- 'l'

この場合は、--(ダブルハイフン)を付けるか、./ でパスを明示します。

# 方法1: -- でオプションの終了を明示する $ rm -- -filename.txt # 方法2: ./ でカレントディレクトリを明示する $ rm ./-filename.txt

安全にrmを使うためのテクニック

1. alias で rm -i を標準にする

.bashrc に以下を追記すると、rm を実行するたびに自動で -i(確認付き)が適用されます。

# .bashrc に追記 alias rm='rm -i' # 設定を反映 $ source ~/.bashrc

ただし、スクリプト内では alias は無効になるため、スクリプトで rm を使う場合は影響しません。

2. 削除前にlsで確認する

ワイルドカードを使った rm を実行する前に、同じパターンで ls を実行して対象を確認する習慣をつけましょう。

# まず ls で対象を確認 $ ls /var/log/*.old # 問題なければ rm で削除 $ rm /var/log/*.old

3. findコマンドと組み合わせた条件付き削除

特定の条件に合致するファイルだけを削除したい場合は、find コマンドと組み合わせます。

# 30日以上前の .log ファイルを削除 $ find /var/log/ -name "*.log" -mtime +30 -delete # 削除前に対象を確認する(-print で一覧表示) $ find /var/log/ -name "*.log" -mtime +30 -print

-delete を使う前に、必ず -print で対象ファイルを確認してください。

本記事のまとめ(rmコマンド早見表)

やりたいこと コマンド
ファイルを削除する rm ファイル名
確認付きで削除する rm -i ファイル名
削除経過を表示する rm -v ファイル名
ディレクトリごと削除する rm -r ディレクトリ名
確認なしで強制削除する rm -f ファイル名
ディレクトリを確認なしで強制削除する rm -rf ディレクトリ名
ハイフン付きファイルを削除する rm -- -ファイル名
古いファイルを条件付きで削除する find パス -name "*.log" -mtime +30 -delete


暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

※登録30秒/合わなければ解除3秒


宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る