rm コマンドは、最も基本的なコマンドのひとつです。しかし、Linuxの rm はWindowsの「ごみ箱」と違い、一度削除したファイルは基本的に復元できません。この記事では、
rmコマンド の基本的な使い方から、-r・-f オプションの危険性、ハイフン付きファイルの削除方法、安全に運用するためのテクニックまでを実践的に解説します。でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
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 |
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
※登録30秒/合わなければ解除3秒
