こんにちは、フルスタックエンジニアのryuです。
Linuxで不要なファイルを削除したい。 ディレクトリを消そうとしたら、
Is a directoryと表示された。
そんなときに使うのが、rmコマンドです。
使い方は簡単ですが、削除したファイルは基本的にごみ箱へ移動しません。
この記事では、ファイルとディレクトリの削除方法、-i・-r・-fなどのオプション、誤削除を防ぐ確認手順を解説します。
rmコマンドとは?¶
rmはremoveに由来し、ファイルやディレクトリを削除するコマンドです。
基本的な書式は以下です。
rm [オプション] 対象
rmで削除すると元に戻しにくい¶
デスクトップ環境のファイル操作では、ごみ箱へ移動する場合があります。
一方、ターミナルでrmを実行すると、通常はごみ箱を経由せずに削除されます。
専用の復旧作業で取り戻せる可能性はありますが、必ず復元できるわけではありません。
実行前に、対象の名前と場所を確認することが大切です。
削除には親ディレクトリの権限が必要¶
Linuxでファイルを削除できるかどうかは、主に親ディレクトリの権限で決まります。
ファイル自身が読み取り専用でも、親ディレクトリに必要な権限があれば削除できる場合があります。
Permission deniedが表示された場合は、rm -fを付けるのではなく、親ディレクトリの所有者と権限を確認しましょう。
【関連記事】Permission deniedでファイルを削除できない原因
ファイルをrmで削除する¶
まずは、練習用ファイルを作成して削除してみましょう。
重要なファイルがない作業用ディレクトリで試してください。
削除するファイルを作成する¶
touchで空のファイルを作成します。
touch test.txt
作成できたか確認します。
ls -la test.txt

rmを実行する¶
ファイル名を指定して削除します。
rm test.txt
正常に削除できた場合、通常は何も表示されません。
lsで、ファイルがなくなったことを確認します。
ls -la test.txt

No such file or directoryと表示されれば、その場所にファイルはありません。
相対パスと絶対パスで指定する¶
現在のディレクトリにあるファイルは、相対パスで削除できます。
rm logs/error.log
絶対パスでも指定できます。
rm /home/user1/logs/error.log
削除前にpwdとlsを実行し、対象を確認してください。
【関連記事】相対パスと絶対パスの違い
ディレクトリを削除する¶
オプションなしのrmでは、ディレクトリを削除できません。
中身の有無によって、rmdirとrm -rを使い分けます。
空のディレクトリはrmdirで削除する¶
空のディレクトリなら、rmdirを使えます。
mkdir empty-dir
rmdir empty-dir
中にファイルがある場合は、次のようなエラーになります。
rmdir: failed to remove 'empty-dir': Directory not empty
空であることを確認して削除できるため、単純な整理ではrmdirが安全です。
中身ごと削除する場合は-rを付ける¶
ディレクトリと中身をまとめて削除する場合は、-rを使います。
通常、中身のあるディレクトリを削除しようとすると、以下のようにエラーになります。

そのため、-rオプションを使います。
rm -r testdir/
-rはrecursiveの略で、サブディレクトリを含めて再帰的に処理します。
削除対象が広いため、実行前に中身を確認しましょう。
find testdir -maxdepth 2 -print
rmでよく使うオプション¶
rmには、削除前の確認や実行結果の表示に使えるオプションがあります。
特徴を理解して使い分けましょう。
| オプション | 内容 |
|---|---|
-i |
すべての対象について削除前に確認する |
-I |
多数のファイルや再帰削除で、開始前に一度確認する |
-r・-R |
ディレクトリ以下を再帰的に削除する |
-f |
存在しないファイルを無視し、確認しない |
-v |
削除した対象を表示する |
--one-file-system |
再帰削除時に別ファイルシステムへ降りない |
-iで1つずつ確認する¶
削除前に確認したい場合は、-iを付けます。
rm -i test.txt
rm: remove regular empty file 'test.txt'?
削除する場合はy、中止する場合はnを入力します。
複数ファイルでは1つずつ質問されるため、対象が多いと操作回数が増えます。
-Iで再帰削除の前に確認する¶
-Iは、3個を超えるファイルや再帰削除を行う場合に、開始前に一度確認します。
rm -rI old-backup/
-iより確認回数が少なく、rm -rfより事故を防ぎやすい方法です。
ただし、確認後は対象全体が削除されるため、先に中身を確認してください。
-vで削除結果を表示する¶
削除した対象を表示する場合は、-vを付けます。
rm -v test.txt
removed 'test.txt'

複数の対象を削除したときに、何が処理されたのか記録しやすくなります。
-fは権限を突破するオプションではない¶
-fはforceの略ですが、Permission deniedを回避するものではありません。
存在しないファイルをエラーにせず、対話確認を表示しないためのオプションです。
rm -f not-found.txt
ファイルがなくても、通常はエラーを表示しません。
権限が不足している場合は、-fを付けても削除できません。
rm -rfを安全に使うための確認¶
rm -rfは、ディレクトリ以下を確認なしで削除します。
便利ですが、パスを間違えた場合の影響が大きいコマンドです。
実行前に対象を表示する¶
まず、現在地と削除対象を確認します。
pwd
ls -ld old-data/
find old-data/ -maxdepth 2 -print
シェルの履歴からコマンドを再利用した場合も、パスを確認してください。
ワイルドカードを使うときは、何に展開されるか先に表示します。
printf '%s\n' *.log
想定どおりのファイルだけが表示されてから、削除を実行します。
変数を使うスクリプトでは空文字を確認する¶
次のように、変数を使って削除するスクリプトでは注意が必要です。
rm -rf "$target_dir"
実行前に、値が空ではないことを検証します。
if [ -z "$target_dir" ]; then
echo "target_dir is empty" >&2
exit 1
fi
rm -rI -- "$target_dir"
--以降はオプションではなく、ファイル名として扱われます。
ファイルシステムをまたぐ削除を防ぐ¶
GNU rmでは、--one-file-systemを使うと、再帰削除の途中で別のファイルシステムへ移動することを防げます。
rm -rI --one-file-system old-root/
バックアップ先やマウントポイントがディレクトリ内にある場合の事故を減らせます。
すべての環境で利用できるとは限らないため、rm --helpで確認してください。
特殊なファイル名を削除する¶
ファイル名がハイフンから始まると、オプションとして解釈されることがあります。
その場合は、--またはパスを使います。
--を使って削除する¶
-test.txtというファイルを削除する場合は、以下のように実行します。
rm -- -test.txt
--より後ろは、オプションとして解釈されません。
./を付けて削除する¶
現在のディレクトリにあることを明示しても削除できます。
rm ./-test.txt
改行や空白を含むファイル名では、シェルの補完機能を使い、名前を手入力しすぎない方が安全です。
rmで削除できないときの確認方法¶
エラーが出た場合は、メッセージに応じて原因を確認します。
sudoや-fを先に付けるのではなく、現在の状態を調べましょう。
Permission denied¶
現在のユーザーと親ディレクトリの権限を確認します。
id
ls -ld .
ls -l target.txt
パスの途中も調べる場合は、namei -lが便利です。
namei -l /path/to/target.txt
Is a directory¶
ディレクトリへオプションなしのrmを実行すると表示されます。
空ならrmdir、中身ごと削除するなら内容を確認してrm -rを使います。
Read-only file system¶
ファイルシステムが読み取り専用になっています。
findmnt -T target.txt
障害によって読み取り専用へ切り替わった可能性もあるため、原因を確認せずに再マウントしないようにしましょう。
削除ではなく移動する方法もある¶
重要なファイルや、本当に不要か判断できないファイルは、すぐ削除せず別の場所へ移動する方法があります。
mkdir -p ~/delete-check
mv target.txt ~/delete-check/
一定期間置き、問題がないことを確認してから削除します。
ただし、/tmpは自動削除される場合があり、長期保管場所には向きません。
エンジニアとして10年以上Linuxを扱っていますが、本番サーバーでは削除より移動を選ぶことがあります。
元に戻せる余地を残しておくと、操作ミスや影響の見落としに対応しやすいからです。
rmコマンドの使い方まとめ¶
ファイルを削除する場合は、対象を指定してrmを実行します。
rm test.txt
ディレクトリを中身ごと削除する場合は-rを付けます。
rm -r testdir/
削除前に確認するなら、-iまたは-Iを使います。
rm -i test.txt
rm -rI testdir/
-fは権限を突破するオプションではありません。
現在地、削除対象、ワイルドカードの展開結果を確認してから実行することが大切です。
Linuxのファイル操作を練習したい方へ¶
InfraAcademyでは、ブラウザ上のLinux環境でファイルを作成し、コピー、移動、削除を練習できます。
コマンドの意味から覚えたい方は、Linuxコマンドの意味一覧も参考にしてください。
サーバー運用や権限管理まで学びたい方は、Linux中級講座がおすすめです。