InfraAcademy

InfraAcademy Blog

Linuxのrmコマンドの使い方解説!【ファイル削除するコマンドを使ってみよう】

こんにちは、フルスタックエンジニアの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

rmコマンド実行

No such file or directoryと表示されれば、その場所にファイルはありません。

相対パスと絶対パスで指定する

現在のディレクトリにあるファイルは、相対パスで削除できます。

rm logs/error.log

絶対パスでも指定できます。

rm /home/user1/logs/error.log

削除前にpwdlsを実行し、対象を確認してください。

【関連記事】相対パスと絶対パスの違い

ディレクトリを削除する

オプションなしのrmでは、ディレクトリを削除できません。

中身の有無によって、rmdirrm -rを使い分けます。

空のディレクトリはrmdirで削除する

空のディレクトリなら、rmdirを使えます。

mkdir empty-dir
rmdir empty-dir

中にファイルがある場合は、次のようなエラーになります。

rmdir: failed to remove 'empty-dir': Directory not empty

空であることを確認して削除できるため、単純な整理ではrmdirが安全です。

中身ごと削除する場合は-rを付ける

ディレクトリと中身をまとめて削除する場合は、-rを使います。 通常、中身のあるディレクトリを削除しようとすると、以下のようにエラーになります。 rm -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'

rm -vで削除の詳細を表示

複数の対象を削除したときに、何が処理されたのか記録しやすくなります。

-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コマンドの意味一覧も参考にしてください。

サーバー運用や権限管理まで学びたい方は、Linux中級講座がおすすめです。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る