InfraAcademy

InfraAcademy Blog

【Linux】rm: cannot remove ‘testdir’: Is a directoryというエラーが出た場合の解決方法

| #Linux #Linux初心者
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、フルスタックエンジニアのryuです。

今回の記事では、rm: cannot remove 'testdir': Is a directoryというエラーが出た場合の解決方法を解説します。

Linuxでファイルを削除しようとしてrmコマンドを実行したのに、なぜか削除できない。しかも英語のエラーが表示されると、何を間違えたのか分かりにくいですよね。

このエラーは、通常のrmコマンドでディレクトリを削除しようとしたときに発生します。

ディレクトリを削除する場合はrm -rを使うか、中身が空であればrmdirを使います。

この記事では、エラーが出る理由から、rm -rrmdirの違い、安全に削除するための確認方法まで初心者向けに解説します。

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.txtsubdirfile2.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の講座の一部です。

上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。

インフラエンジニアに必要な知識が学習できます。

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 -rrm -rfは便利ですが、指定したディレクトリの中身まで削除されます。

エラーを消すためだけにオプションを追加するのではなく、pwdlsで削除対象を確認し、何を削除しようとしているのか理解してから実行してみてください。

Next Action

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

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

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

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

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

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

講座一覧を見る