目次
概要
Linuxシステムにおいて、不要になったファイルやディレクトリを削除するための標準的なコマンドです。
GUIのゴミ箱機能とは異なり、rmコマンドで削除されたデータは標準機能では復元できないため、実行には慎重な操作が求められます。
サーバー管理におけるログの整理や、デプロイ前のディレクトリ清掃などで頻繁に使用されます。
仕様(引数・オプション)
構文
rm [オプション] ファイル名またはディレクトリ名
主な引数・オプション
| オプション | 説明 |
-f | 強制削除(force)。確認プロンプトを表示せず、存在しないファイルを指定してもエラーを表示しません。 |
-i | インタラクティブモード。削除前に確認メッセージを表示します。 |
-r / -R | 再帰的削除(recursive)。ディレクトリとその中身をすべて削除します。 |
-d | 空のディレクトリを削除します(rmdirコマンド相当)。 |
-v | 詳細表示(verbose)。削除したファイル名を表示します。 |
--no-preserve-root | ルートディレクトリ(/)の削除保護を無効化します(通常は使用しません)。 |
基本の使い方
最も基本的な使い方は、オプションを指定せずにファイルを1つ削除することです。
コマンド
# カレントディレクトリにある old_config.conf を削除
rm old_config.conf
実行結果
成功時は何も表示されません。ファイルが存在しない場合はエラーが出ます。
(出力なし)
実践コマンド
ディレクトリを中身ごと強制削除する
開発環境の一時ファイルや、アプリケーションのキャッシュディレクトリなどを一括で削除する際によく使用される組み合わせです。確認画面を出さず(-f)、ディレクトリ内を再帰的(-r)に削除します。
# logsディレクトリとその配下の全ファイルを削除
rm -rf ./logs/
(出力なし)
削除前に確認を入れる(安全な削除)
誤操作を防ぐため、削除対象ごとに「本当に削除して良いか」を確認します。重要な設定ファイルを操作する場合に推奨されます。
# 重要ファイルを削除する前に確認を求める
rm -i production_db_backup.sql
rm: remove regular file 'production_db_backup.sql'? y
※ y を入力してEnterを押すと削除され、n を入力するとキャンセルされます。
ディレクトリ内を確認しながら削除する
ディレクトリ(-r)を削除したいが、中身を確認(-i)しながら進めたい場合に使用します。
# user_dataディレクトリの中身を一つずつ確認しながら削除
rm -ri ./user_data/
rm: descend into directory './user_data/'? y
rm: remove regular file './user_data/user_01.dat'? y
rm: remove regular file './user_data/user_02.dat'? n
rm: remove directory './user_data/'? n
カスタムポイント
- 対象パス:
./logs/やproduction_db_backup.sqlは、実際の削除対象に合わせて変更してください。 - オプション: 自動化スクリプト内では
-fを使用し、手動オペレーションでは-iをエイリアスに設定するなど、用途によって使い分けます。 - 複数指定:
rm file1.txt file2.txtのようにスペース区切りで複数のファイルを指定可能です。
注意点
- 復元不可能:rm コマンドで削除したファイルは、Windowsの「ゴミ箱」のような場所には移動せず、即座にディスク上のリンクが解除されます。バックアップがない限り復旧は困難です。
- rm -rf / の危険性:ルートディレクトリを指定して実行するとシステム全体が破壊されます。最近のディストリビューションではデフォルトで保護されていますが、–no-preserve-root オプションはその保護を無効化するため、検証目的以外では絶対に使用しないでください。
- ワイルドカードの誤爆:rm * や rm *.log などを使用する際、予期せぬファイルがマッチして削除されるリスクがあります。実行前に ls *.log などで対象を確認することを推奨します。
- 権限エラー:書き込み権限のないディレクトリ内のファイルを削除しようとすると Permission denied エラーが発生します。その場合は sudo を付与する必要があります。
応用
findコマンドと組み合わせて古いファイルを削除する
指定した日数が経過したログファイルなどを検索し、パイプラインや exec を使わず安全に削除するモダンな手法です。
# 拡張子が .log かつ 更新から30日以上経過したファイルを現在のディレクトリ以下から検索して削除
find . -name "*.log" -mtime +30 -delete
(出力なし ※該当ファイルがあれば削除される)
まとめ
- 向く場面: サーバー内の不要ファイル整理、スクリプトによる一時ファイル削除、ディレクトリ構造の再構築。
- 変更ポイント: 誤削除を防ぐため、慣れないうちは
-iオプションを積極的に利用してください。 - 注意点:
-rfオプションは強力ですが、パス指定を間違えるとシステムを破壊する可能性があります。パスの指定には絶対パスまたは慎重な相対パスを使用してください。
