回答:
主な理由はおそらく歴史的なものです。戻る昔、昔、何もなかったrmdir(2)
し、mkdir(2)
システムコールは、(私たちがここ™第7版UNIXを議論している)、およびrmdir(1)
(必要性)を使用SUIDルートプログラムでしたunlink(2)
ディレクトリを削除するためにシステムコールを。
第7版UNIXマニュアルは、http: //cm.bell-labs.com/7thEdMan でオンラインで入手できます(最終確認2017-04-23)。また、http://plan9.bell-labs.com/7thEdMan(最終確認2017-04-23)でも入手できます。また、Volume 2の記事には少なくとも1つのオンラインソース(http://wolfram.schneider.org/bsd/7thEdManVol2/)があり、Volume 1のコマンドとシステムコールのFreeBSDサイトへのリンクがあるようです。。
rm
コマンド(通常の非SUIDプログラム)が呼び出されたrmdir(1)
空のディレクトリを削除するコマンドを。それ自体はできませんでした。ルート権限が必要でした。そのため、空のディレクトリを削除するrmdir(1)
コマンド(Unix V7のソースコードについてはこちらを参照)が存在し、rm
コマンドは空のディレクトリ自体を削除しませんでした。
rm
ディレクトリの削除に使用するには、-r
オプションを指定する必要があります。
対称性の議論もあります。mkdir(1)
ディレクトリを作成するにはコマンドが必要です。行った操作rmdir(1)
を取り消すコマンドを使用するのが妥当と思われますmkdir(1)
。加えて、彼らはの(これらの日)シンプルexercisorsあるrmdir(2)
とmkdir(2)
はい、バック第7版UNIXで、 -システムコールのmkdir(1)
使用、また、SUID rootプログラムしたmknod(2)
ディレクトリノードと作成するために、コールをlink(2)
作成するための呼び出しを.
して..
、ディレクトリ内のエントリを。
fsck(1)
生き残ったものです。
「rm」はディレクトリでは機能しません。rmdirを使用するか、再帰的な削除のために-rスイッチを指定する必要があります。その理由は歴史的なものでunlink
あり、これrmdir
は別個のシステムコールであり、Unixの初期からのものです。
rmdir(2)
もmkdir(2)
存在していませんでした。ユーザーroot
はmknod(2)
呼び出しを使用してディレクトリノードを作成し、呼び出しを使用してディレクトリ内のエントリとエントリlink(2)
を作成できます。そして、使用できるディレクトリエントリを削除するための呼び出しを。.
..
root
unlink(2)
また、rmdirは空のディレクトリのみを削除します。ディレクトリ内の追加のファイルを削除しないようにしたい場合は、削除するもの、つまり〜/ .bashrcまたは使用しているものを常に確認する必要があるようにrmをエイリアスした場合を除き、rmdir
より安全です)。rm -r
alias rm='rm -i'
また、rmdir
グロビング(ワイルドカード)式を使用して空のディレクトリを簡単に削除できます。たとえば/tmp
、コンテンツのあるファイルやディレクトリに触れずにすべての空のディレクトリを削除するには:
cd /tmp ; rmdir *
rmdir /tmp/*
。/tmp
ディレクトリが本当に大きい場合、名前ごとに余分な5文字があるため、引数のスペースが少し速くなる可能性がありcd
ますが、ディレクトリ階層内を移動する必要はありません。また、rmdir /tmp/* 2>/dev/null
エラーメッセージが表示されないようにすることも検討する価値があります(通常、多くのエラーメッセージが表示されますが、ほとんどすべてのエラーメッセージはそのタスクとは無関係です)。