InfraAcademy

InfraAcademy Blog

linuxでディレクトリを削除するコマンド”rmdir”の使い方を詳しく解説!【初心者向け】

| #Linux #コマンド #Linux入門
Linuxをブラウザで試してみる

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

こんにちは、インフラエンジニアのryuです。

今回は、Linuxでディレクトリを削除するときに使う rmdirrm -r の違いを初心者向けに解説します。

Linuxでディレクトリを削除しようとして、

rmdir: failed to remove 'testdir': Directory not empty

と表示された経験はありませんか?

rmdir は便利ですが、空のディレクトリしか削除できません。

中にファイルやディレクトリがある場合は、用途に応じて rm -r などを使います。

ただし、rm -r は配下のファイルまでまとめて削除するため、使い方を間違えると大きな事故につながります。

また、元記事では「削除対象ディレクトリに書き込み権限が必要」「chmod 777 で権限を付ければよい」と説明していましたが、これは正確ではありません。

ディレクトリそのものを削除できるかどうかは、基本的にそのディレクトリを含む親ディレクトリ側の書き込み権限と実行権限が関係します。

この記事では、rmdir の基本から、-prm -r、権限エラー、削除前の確認方法まで順番に解説します。

rmdirは空のディレクトリを削除するコマンド

rmdir は、空のディレクトリを削除するコマンドです。

名前は、

remove directory

から来ています。

基本的な使い方は、

rmdir ディレクトリ名

です。

例えば、

rmdir testdir

と実行すると、空の testdir を削除できます。

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

rmdir /home/user/testdir

または、

rmdir ./testdir

です。

実際にrmdirを使ってみる

まず削除用のディレクトリを作成します。

mkdir testdir

作成できたか確認します。

ls -la

mkdir testdir

次に、

rmdir testdir

を実行します。

その後、

ls -la

で確認します。

rmdir testdir

testdir が表示されなくなっていれば削除できています。

中身があるディレクトリはrmdirで削除できない

rmdir で特に重要なのが、

空ではないディレクトリは削除できない

という点です。

例えば、

mkdir testdir
touch testdir/test.txt

とします。

この状態で、

rmdir testdir

を実行すると、

rmdir: failed to remove 'testdir': Directory not empty

のようなエラーになります。

これは異常ではありません。

rmdir が、誤って中のファイルまで削除しないように動いているためです。

初心者のうちは、

空のディレクトリ → rmdir

と覚えておきましょう。

中身を確認してから削除する

削除前に、

ls -la testdir

で中身を確認します。

さらにサブディレクトリも含めて確認したいなら、

find testdir -maxdepth 2 -print

などを使えます。

「空だと思っていたけど設定ファイルが残っていた」ということもあります。

削除コマンドでは、

消す前に対象を確認する

習慣が非常に大切です。

空ではないディレクトリは rm -r

ディレクトリの中身ごと削除したい場合は、

rm -r testdir

を利用します。

-r は再帰的に処理するオプションです。

例えば、

testdir/
├── file1.txt
├── file2.txt
└── subdir/
    └── file3.txt

というディレクトリに対して、

rm -r testdir

を実行すると、配下のファイルやサブディレクトリも含めて削除されます。

これは便利ですが、rmdirよりはるかに影響が大きいコマンドです。

削除対象を間違えないようにしてください。

詳しくはこちらの記事でも解説しています。

Linuxのrmコマンドの使い方解説!ファイルを削除する方法

rm -rf を安易に使わない

Linuxの解説記事を見ると、

rm -rf testdir

をよく見かけます。

-f は強制的に処理するオプションで、存在しないファイルなどに対する確認や一部のエラーを抑制します。

便利ですが、初心者のうちは何でも rm -rf で削除する癖を付けない方がよいでしょう。

例えば、

rm -rf /path/to/dir

でパスを間違えれば、多数のファイルを一度に失う可能性があります。

まずは、

ls -la 対象

や、

find 対象 -maxdepth 2 -print

で中身を確認し、削除対象が正しいことを確認してから実行しましょう。

rmdir -p で親ディレクトリも削除する

rmdir には -p / --parents オプションがあります。

例えば、

mkdir -p testdir/testdir1

とします。

この状態で、

rmdir -p testdir/testdir1

を実行すると、

testdir/testdir1
↓
testdir

の順に、空になった親ディレクトリも削除しようとします。

GNU Coreutilsの説明では、

rmdir -p a/b/c

は、おおまかに、

rmdir a/b/c
rmdir a/b
rmdir a

と順番に実行するような動作です。

親ディレクトリに別のファイルやディレクトリが残っていれば、そこで削除は失敗します。

-p の動きを実際に確認する

元記事の例と同じように、

mkdir -p testdir/testdir1
mkdir -p testdir/testdir2

とします。

確認すると、

lsコマンドでディレクトリの確認

のような構成になります。

まず、

rmdir testdir/testdir1

だけなら、testdir1 のみ削除されます。

rmdir testdir/testdir1

この時点では testdir2 が残っているため、親の testdir は空ではありません。

続いて、

rmdir -p testdir/testdir2

を実行します。

testdir2 を削除すると testdir も空になるため、親ディレクトリまで削除できます。

"-p"オプションで親ディレクトリも削除する

rmdirでよく使うオプション

GNUの rmdir で代表的なオプションは次のとおりです。

オプション 意味
-p, --parents 空になった親ディレクトリも順に削除する
-v, --verbose 削除に成功したディレクトリを表示する
--ignore-fail-on-non-empty 空でないことによる失敗を診断メッセージの対象外にする

例えば、

rmdir -v testdir

とすると、削除した内容を表示できます。

ディレクトリを削除できる権限はどこを見る?

ここは元記事から大きく修正するポイントです。

元記事では、

「削除対象ディレクトリに書き込み権限 w が必要」

と説明していました。

しかし、Linuxでディレクトリエントリを削除できるかどうかは、基本的に親ディレクトリ側の権限が重要です。

例えば、

/home/user/
└── testdir/

という構成で testdir を削除する場合、testdir という名前を /home/user/ のディレクトリエントリから削除します。

そのため、基本的には親ディレクトリ /home/user/ に対して、

書き込み権限 w
実行権限 x

が必要です。

削除対象の testdir 自身に w が付いているかどうかだけでは判断できません。

chmod 777 を安易に使わない

元記事では、削除できない場合に、

chmod 777 testdir

を紹介していました。

これは推奨しません。

777 は、

所有者:読み・書き・実行
グループ:読み・書き・実行
その他:読み・書き・実行

という非常に広い権限です。

権限エラーが出たからといって、とりあえず 777 にするのはセキュリティ上よくありません。

まず、

ls -ld .
ls -ld ..
ls -ld testdir

などで、対象と親ディレクトリの所有者・権限を確認しましょう。

必要であれば所有者やグループ、適切な権限を見直します。

Linuxの権限についてはこちらで詳しく解説しています。

Linuxのファイル権限とは?chmodの数字・rwx・Permission deniedを解説

Permission denied が出る場合

例えば、

rmdir testdir

で、

Permission denied

と表示された場合は、親ディレクトリの権限を確認します。

ls -ld .

例えば、

dr-xr-xr-x

のように書き込み権限がなければ、そのディレクトリ配下の名前を削除できない可能性があります。

ただし、実際の削除可否には、

  • 所有者
  • グループ
  • ACL
  • sticky bit
  • ファイルシステムの状態

なども影響します。

初心者のうちは、「削除対象自身のwだけを見るのではなく、親ディレクトリの権限を確認する」と覚えてください。

sticky bitがあるディレクトリ

/tmp のような共有ディレクトリでは、sticky bitが設定されていることがあります。

ls -ld /tmp

とすると、

drwxrwxrwt

のように最後が t になっています。

この場合、ディレクトリ自体は多くのユーザーが書き込めますが、他人が所有しているファイルやディレクトリを自由に削除できないよう制限されます。

「親ディレクトリに書き込み権限があるのに削除できない」という場合には、こうした仕組みも関係することがあります。

rmdirrm -r の違い

違いをまとめると次のようになります。

コマンド 削除対象
rmdir dir 空のディレクトリ
rmdir -p a/b/c 空のディレクトリと空になった親
rm -r dir 中身があるディレクトリも含めて再帰削除

初心者には rmdir の方が安全です。

中身があれば削除を拒否してくれるためです。

一方、rm -r は中身ごと削除するので、実行前の確認が重要です。

削除ではなく残したまま空にしたい場合

例えば、

/var/app/cache/

というディレクトリそのものは残し、中身だけ整理したいケースもあります。

この場合は、ディレクトリそのものを rmdir するのではなく、必要なファイルだけを対象にします。

ただし、

rm -rf /var/app/cache/*

のようなコマンドは、隠しファイルを対象にしないなど思わぬ挙動もあるため、安易にコピーして使わないでください。

どのファイルを消したいのかを findls で確認してから削除する方が安全です。

findコマンドで空ディレクトリを探す

空のディレクトリを探したい場合は、

find . -type d -empty

を利用できます。

例えば、

./cache/old
./tmp/test

のように空ディレクトリを見つけられます。

削除前に一覧を確認し、

「本当に不要な空ディレクトリだけか」

を確認できます。

findコマンドについてはこちらの記事でも解説しています。

Linuxでファイル検索をする方法は?findコマンドの使い方を詳しく解説

Linuxの削除コマンドは実際に安全な環境で試す

rmdirrm は、実際に使わないとなかなか違いを覚えられません。

例えばホームディレクトリ配下に練習用のディレクトリを作り、

mkdir -p ~/linux-practice/a/b
touch ~/linux-practice/a/test.txt

のようにして、

rmdir
rm -r
ls
find

の動きを確認すると理解しやすくなります。

InfraAcademyでは、Linuxコマンドをブラウザ上のターミナルで実行しながら学習できます。

本番サーバーで削除コマンドをいきなり試すのは危険なので、学習用環境でコマンドの動きを確認してから使うのがおすすめです。

InfraAcademyでLinuxを実行しながら学ぶ

Linuxでディレクトリを削除する方法まとめ

今回は、Linuxでディレクトリを削除する方法を解説しました。

空のディレクトリなら、

rmdir testdir

です。

親ディレクトリも空なら一緒に削除したい場合は、

rmdir -p parent/child

を利用できます。

中身があるディレクトリを削除するなら、

rm -r testdir

ですが、配下のファイルまで削除されるため注意してください。

また、削除権限で重要なのは、

削除対象のディレクトリ自身へ chmod 777 することではありません。

基本的には、親ディレクトリ側の書き込み・実行権限や所有者などを確認します。

削除系のコマンドでは、

対象を確認
↓
中身を確認
↓
権限を確認
↓
削除

という順番を習慣にしておきましょう。

あわせて読みたい

Next Action

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

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

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

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

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

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

講座一覧を見る