主な理由はおそらく歴史的なものです。昔は rmdir(2)
なんてなかった と mkdir(2)
システム コール (ここでは第 7 版 UNIX™ について説明します)、および rmdir(1)
(必然的に) unlink(2)
を使用する SUID ルート プログラムでした。 ディレクトリを削除するためのシステム コール。
第 7 版の UNIX マニュアルは、http://cm.bell-labs.com/7thEdMan でオンラインで入手できます (最終チェック日は 2017-04-23)。それらは http://plan9.bell-labs.com/7thEdMan でも入手できます (最終チェックは 2017-04-23)。また、第 2 巻の記事については、少なくとも 1 つの代替ソース (http://wolfram.schneider.org/bsd/7thEdManVol2/) がオンラインにあるようです。第 1 巻のコマンドとシステム コールについては、FreeBSD サイトへのリンクがあります。 .
rm
コマンド (通常の非 SUID プログラム) が rmdir(1)
を呼び出しました 空のディレクトリを削除するコマンド。それ自体はできませんでした。 root 権限が必要でした。つまり、rmdir(1)
空のディレクトリを削除するコマンド (Unix V7 のソース コードについてはこちらを参照) が存在し、rm
コマンドは空のディレクトリ自体を削除しませんでした.
rm
を使用するには ディレクトリを削除するには、-r
を指定する必要があります オプション。
対称性引数もあります。コマンド mkdir(1)
が必要です ディレクトリを作成します。コマンド rmdir(1)
を持つのが合理的と思われます mkdir(1)
を元に戻すには やりました。さらに、彼らは (最近では) rmdir(2)
の単純な実行者です。 そして mkdir(2)
システム コール — はい、第 7 版 UNIX、mkdir(1)
に戻ります mknod(2)
を使用する SUID ルート プログラムでもありました。 ディレクトリ ノードと link(2)
を作成する呼び出し .
を作成するための呼び出し そして ..
ディレクトリ内のエントリ。
「rm」はディレクトリでは機能しません。再帰的に削除するには、rmdir を使用するか、-r スイッチを指定する必要があります。理由は歴史的なものです:unlink
と rmdir
は独立したシステム コールであり、Unix の初期から存在しています。
また、rmdir は empty のみを削除します ディレクトリ。ディレクトリ内の追加ファイルを削除しないようにしたい場合は、rmdir
rm -r
よりも安全です (削除するものを常に確認する必要があるように rm にエイリアスを設定した場合を除く、つまり alias rm='rm -i'
~/.bashrc またはあなたが使用しているもの)。