rm コマンドは、ファイルやディレクトリを削除するためのコマンドです。
削除されたファイルは通常ゴミ箱には入らず、その場で消えるため、誤操作すると取り返しがつかないことがあります。
単一ファイルの削除から、ディレクトリ配下を再帰的に削除する rm -r、
確認なしに強制削除する rm -f など、非常に強力なコマンドです。
「安全第一」でオプションを選ぶことが大切です。
rm [オプション]... ファイル...
基本は rm 対象ファイル で削除します。
ディレクトリを削除する場合は -r(–recursive)、既存ファイルの有無に関わらずエラーを出さずに進めたい場合は -f(–force)などを組み合わせます。
※ 本番環境では特に、rm 実行前にパスとオプションをよく確認することをおすすめします。
・単一ファイルを削除する
rm hoge.log
カレントディレクトリにある hoge.log を削除します。
削除の確認は表示されず、コマンドが成功すると何も表示されません。
・複数ファイルをまとめて削除する
rm hoge.log fuga.log piyo.log
スペース区切りで列挙した複数のファイルを一度に削除します。
ワイルドカード(*.log など)と組み合わせて使うことも多いです。
・拡張子 .log のファイルをまとめて削除する(ワイルドカード)
rm *.log
カレントディレクトリ内の .log ファイルをすべて削除します。
対象範囲が広くなるため、実行前に ls *.log などで確認しておくと安全です。
・ディレクトリごと再帰的に削除する(-r)
rm -r /tmp/work
/tmp/work ディレクトリと、その配下のファイル・ディレクトリを再帰的にすべて削除します。
内容を確認せずに実行すると、大量のファイルをまとめて失う可能性があるため、十分注意してください。
・削除時に確認をとりながら進める(-i)
rm -i *.log
-i(–interactive=once)は、各ファイルごとに削除してよいか確認します。
y / n で回答しながら削除を進める形になるため、誤削除防止に役立ちます。
・多数のファイルを削除する前に一括確認を行う(-I)
rm -I *.log
-I は、「多数のファイルを削除する」「ディレクトリを削除する」場合に、
まとめて 1 回だけ確認を行うオプションです。
大量のファイルで -i を使うと確認が多すぎると感じる場合に、-I が使いやすいです。
・存在しないファイルがあってもエラーを出さずに進める(-f)
rm -f old.log
-f(–force)は、ファイルが存在しない場合もエラーを出さずに処理を続行します。
スクリプト内で「消せれば消す、なければそのまま」という動きをさせたいときに使われますが、
誤削除に気付きにくくなるため、日常的な手作業では乱用しない方が安全です。
・ディレクトリ配下を強制的に再帰削除する(-rf)
rm -rf /tmp/work
-r と -f を組み合わせて、/tmp/work 以下を確認なしで再帰削除します。
非常に強力なコマンドで、パスを打ち間違えると大事故になります。
本番サーバでは、パスをコピー&ペーストし、実行前に echo で確認するなど、安全策を徹底してください。
・空のディレクトリを削除する(-d)
rm -d emptydir
-d(–dir)は、空のディレクトリを削除します。
中身があるディレクトリの場合はエラーとなるため、その場合は rm -r などを検討します。
・ルートディレクトリを誤って削除しないよう保護する(–preserve-root)
rm -rf --preserve-root /
通常の GNU rm では –preserve-root がデフォルトで有効になっており、
rm -rf / のような危険な操作はブロックされます。
–no-preserve-root を指定するとこの保護を外せてしまうため、実務では指定しないことを推奨します。
・削除しているファイル名を表示する(-v)
rm -rv /tmp/work
-v(–verbose)は、「削除中のファイル名」を表示します。
スクリプトでログを残したい場合や、「本当に狙ったものが消えているか」を確認しながら削除したい場合に便利です。
・ログや一時ファイルの削除
ローテート済みの古いログや、一時ディレクトリのファイルを削除する用途で頻繁に使われます。
対象に本当に不要なファイルだけが含まれているか、ls や find と組み合わせて十分確認することが重要です。
・バックアップ取得後の古い世代の削除
バックアップ世代管理の一環として、「n 世代より古いバックアップを rm で削除する」シェルを書くケースもあります。
この場合も、「削除する候補一覧をログに出す」「dry-run 的に echo rm ... を挟む」など、安全策を取っておくと安心です。
・rm -rf の取り扱い
rm -rf は非常に強力なため、alias で rm を保護する文化もあります(例:alias rm='rm -i')。
ただし、自動処理のスクリプトではエイリアスが逆に予期せぬ動作を招くこともあるため、
対話用シェルとスクリプト用シェルで設定を分けるなどの工夫も検討します。
・本番サーバでの rm 実行前チェック
特に本番環境では、rm 実行前に次のようなステップを挟むと事故防止に役立ちます。
pwdでカレントディレクトリを確認lsやfindで対象ファイルを事前に一覧表示- 可能であれば
rm -iや-Iで確認付き削除
削除系のコマンドは、「慎重すぎるくらいでちょうどいい」くらいの扱いがおすすめです。
| short option | long option | description |
|---|---|---|
| -f | --force | 存在しないファイルでもエラーにせず強制的に処理を続ける・確認メッセージも表示しない |
| -i | --interactive | 各ファイルを削除する前に確認プロンプトを表示する |
| -I | 多数のファイル削除やディレクトリ削除の際に一度だけ確認プロンプトを表示する | |
| -r | --recursive | ディレクトリとその配下を再帰的に削除する |
| -R | --recursive | ディレクトリとその配下を再帰的に削除する(-r と同等) |
| -d | --dir | 空のディレクトリを削除する |
| -v | --verbose | 削除しているファイル・ディレクトリ名を表示する |
| --one-file-system | 他のファイルシステムにまたがって削除しない(マウントポイントの外には降りない) | |
| --preserve-root | ルートディレクトリ(/)の再帰削除を禁止する(GNU rm では通常デフォルトで有効) | |
| --no-preserve-root | ルートディレクトリ(/)の再帰削除保護を無効にする(非常に危険なため通常は使用しない) | |
| --interactive=when,--interactive | 削除時の確認タイミングを always/once/never などで指定する(実装により異なる) | |
| -h | --help | rm コマンドの使い方(ヘルプ)を表示して終了する |
| --version | rm コマンドのバージョン情報を表示して終了する |
ここでは GNU rm を前提として、実務でよく使われる主なオプションだけを TablePress の表としてまとめている想定です。
利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man rm で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
