こんにちは、フルスタックエンジニアのryuです。
今回の記事では、rm: cannot remove 'testdir': Is a directoryというエラーが出た場合の解決方法を解説します。
Linuxでファイルを削除しようとしてrmコマンドを実行したのに、なぜか削除できない。しかも英語のエラーが表示されると、何を間違えたのか分かりにくいですよね。
このエラーは、通常のrmコマンドでディレクトリを削除しようとしたときに発生します。
ディレクトリを削除する場合はrm -rを使うか、中身が空であればrmdirを使います。
この記事では、エラーが出る理由から、rm -rとrmdirの違い、安全に削除するための確認方法まで初心者向けに解説します。
rm: cannot remove 'testdir': Is a directoryというエラーが出る原因¶
エラーはディレクトリを削除すると発生する¶
rmコマンドは、ファイルを削除するコマンドです。testdirというディレクトリを削除すると、「rm: cannot remove ‘testdir’: Is a directory」とエラーが発生します。
rm testdir
実行すると、次のようなエラーが表示されます。
rm: cannot remove 'testdir': Is a directory
エラーの意味は、「testdirはディレクトリです。削除できません。」となります。
rmコマンドは、そのまま実行した場合はファイルを削除するために使います。そのため、ディレクトリを指定すると、これはディレクトリなので通常の削除方法では消せません、という意味のエラーになります。
たとえば、次のような状態を作って確認してみましょう。
mkdir testdir
touch test.txt
ls
実行すると、次のようにファイルとディレクトリが存在します。
test.txt testdir
test.txtは通常のファイルなので、次のコマンドで削除できます。
rm test.txt
一方、testdirはディレクトリなので、同じようにrm testdirと実行すると今回のエラーが発生します。
【関連記事】rmコマンドそのものの使い方を確認したい方は、Linuxのrmコマンドの使い方解説!ファイル削除するコマンドを使ってみようも参考にしてください。
rm -rを使ってディレクトリを削除する¶
rmコマンドの-rオプションを指定する¶
ディレクトリを削除する場合は、”-r”オプションを使用します。
rm -r [ディレクトリ]
rm -r testdir
-rはrecursiveの意味で、指定したディレクトリの中を再帰的にたどりながら削除します。
つまり、ディレクトリそのものだけではなく、中にあるファイルやさらに下のディレクトリもまとめて削除できます。
たとえば、次のようなディレクトリがあるとします。
testdir/
├── file1.txt
└── subdir/
└── file2.txt
この状態で次のコマンドを実行します。
rm -r testdir
すると、file1.txtやsubdir、file2.txtを含めてtestdir全体が削除されます。
便利ですが、rm -rは中身ごと削除するコマンドなので注意が必要です。
rm -rを実行する前に中身を確認する¶
Linuxでは、削除したファイルがデスクトップ環境のゴミ箱へ移動するとは限りません。
特にサーバー上でrmを実行した場合、削除後に簡単に元へ戻せないことがあります。
そのため、ディレクトリを削除する前にlsで中身を確認する癖を付けるのがおすすめです。
ls testdir
より詳しく確認したい場合は、次のように実行できます。
ls -la testdir
削除対象が本当にtestdirで合っていることを確認してから、rm -rを実行しましょう。
rmdirコマンドでディレクトリを削除する¶
空のディレクトリならrmdirでも削除できる¶
rmdirコマンドを使うことでも、ディレクトリを削除することができます。
rmdir [ディレクトリ]
rmdir testdir
ただし、rmdirで削除できるのは基本的に中身が空のディレクトリです。
たとえば、空のディレクトリを作成します。
mkdir testdir
rmdir testdir
この場合は正常に削除できます。
一方、ディレクトリの中にファイルがある場合は削除できません。
mkdir testdir
touch testdir/file.txt
rmdir testdir
すると、環境によって次のようなエラーが表示されます。
rmdir: failed to remove 'testdir': Directory not empty
中身が残っているため、ディレクトリを削除できないという意味です。
rmdirコマンドの使い方についてはこちらの記事で詳しく解説しています。
関連:linuxでディレクトリを削除するコマンド”rmdir”の使い方を詳しく解説!【初心者向け】
rm -rとrmdirはどう使い分ける?¶
ここまで読むと、結局どちらを使えば良いのだろう?と思うかもしれません。
使い分けはシンプルです。
| コマンド | 削除できるもの | 特徴 |
|---|---|---|
rm file.txt |
ファイル | 通常のファイルを削除する |
rm -r testdir |
ディレクトリと中身 | 中身ごとまとめて削除できる |
rmdir testdir |
空のディレクトリ | 中身があると削除できない |
空であることが分かっているディレクトリならrmdirを使えます。
中にファイルや別のディレクトリがあり、それらも含めて削除したい場合はrm -rを使います。
初心者のうちは、ディレクトリを削除するたびに何でもrm -rfを使うのではなく、まず中身を確認してから必要なオプションだけを付ける方が安全です。
rm -rfは便利だが使い方に注意する¶
Linuxの記事や手順書を見ると、次のコマンドを見かけることがあります。
rm -rf testdir
-rはディレクトリを再帰的に削除するオプションです。
-fはforceの意味で、存在しないファイルなどに対する確認や一部のエラーを抑えながら強制的に処理します。
そのため、rm -rfは非常に強力です。
いきなりrm -rfを使わない¶
たとえば、削除したいディレクトリを間違えて指定すると、その中のファイルまで削除される可能性があります。
次のようなコマンドを入力するときは、特に注意してください。
rm -rf ./testdir
実行前にpwdで現在の場所を確認し、lsで対象が正しいか確認するだけでも誤操作を減らせます。
pwd
ls -la
Linuxを勉強している段階では、エラーが出たらすぐ-fを付けるのではなく、なぜエラーになっているのかを確認してから対処することが大切です。
Permission deniedが表示される場合は原因が別¶
rm -rを使ったのに、今度はPermission deniedと表示されることもあります。
これは今回のIs a directoryとは別のエラーです。
たとえば、次のようなエラーです。
rm: cannot remove 'testdir/file.txt': Permission denied
この場合は、ディレクトリだから削除できないのではなく、削除するために必要な権限がない可能性があります。
ファイルやディレクトリの権限は、次のように確認できます。
ls -ld testdir
ls -l testdir
所有者やアクセス権限を確認し、なぜ現在のユーザーで削除できないのかを調べます。
【関連記事】権限が原因で削除できない場合は、ディレクトリやファイルを削除するときにPermission deniedのエラーが出る時の対処方法も参考にしてください。
削除する前に確認する習慣をつける¶
Linuxでファイルやディレクトリを削除するときに一番大切なのは、コマンドを覚えることだけではありません。
削除対象を確認してから実行する習慣も重要です。
たとえば、私は削除する対象が少しでも分かりにくい場合、次のように確認してから実行します。
pwd
ls -la testdir
問題がなければ、その後に削除します。
rm -r testdir
ほんの数秒の確認ですが、サーバー上で重要なファイルを誤って削除するリスクを減らせます。
特にrootユーザーやsudoを使っている場合は、通常のユーザーでは削除できないファイルまで操作できることがあります。
Linuxコマンドは便利ですが、削除系のコマンドは実行前に対象を確認すると覚えておきましょう。
InfraAcademyでLinuxコマンドを実際に練習する¶
今回のようなエラーは、Linuxを実際に操作していると何度も遭遇します。
記事を読んでrm -rを覚えるだけでも解決できますが、実際にディレクトリを作り、ファイルを入れ、削除してみると理解しやすくなります。
さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
Linuxの実践的な内容を学習したい、コマンドを打ちながらLinuxを学習したい。
そのような方に向けて、InfraAcademyではLinuxやネットワーク、AWSを実際に操作しながら学習できる講座を用意しています。
Linuxのファイルやディレクトリ操作から学びたい方は、Linux入門講座がおすすめです。
Linuxサーバーを扱ううえで必要になるIPアドレスやルーティングなどは、ネットワーク講座で学習できます。
さらにクラウド上でLinuxサーバーを構築してみたい方は、AWS講座へ進むこともできます。
↓InfraAcademyの講座の一部です。

インフラエンジニアに必要な知識が学習できます。
参考:Linuxのコマンド練習用サイトのInfraAcademyを作成しました。【Linuxのコマンドをブラウザで練習しよう】
rm: cannot remove 'testdir': Is a directoryエラーまとめ¶
今回の記事では、rm: cannot remove 'testdir': Is a directoryというエラーが出た場合の解決方法を解説しました。
このエラーは、通常のrmコマンドでディレクトリを削除しようとしたときに発生します。
中身を含めてディレクトリを削除する場合は、次のように-rを付けます。
rm -r testdir
空のディレクトリであれば、rmdirでも削除できます。
rmdir testdir
rm -rやrm -rfは便利ですが、指定したディレクトリの中身まで削除されます。
エラーを消すためだけにオプションを追加するのではなく、pwdやlsで削除対象を確認し、何を削除しようとしているのか理解してから実行してみてください。



