`cp`と`rm`がディレクトリを別々に扱うのはなぜですか?

`cp`と`rm`がディレクトリを別々に扱うのはなぜですか?

ツールがディレクトリを通常のファイルとは別に扱うcpのはなぜですか?rmどちらも、ユーザーが再帰的な動作を望んでいることを明示的に指定する必要があります。それ以外の場合、ディレクトリはまったく処理されません。

コンピュータとの最初の対話(しばらく前)は、Windows/GUI/クリック/ドラッグアンドドロップ環境で行われました。

この動作は、特にワイルドカードを使用してコマンドを実行するときには残念です。*ディレクトリ( )から以下を除くすべてのエントリを削除するにはどうすればよいですか?空でないサブディレクトリ

私はこれがユーザーが自分の足に銃を撃つのを防ぐ一種のセキュリティ機能であると想像することができますが、これはいくつかのUnixの原則の私の理解と矛盾しています。

  • Unix は通常、ユーザー自身を保護しません。常にユーザーが自分がしていることを知っているとします。
  • Unixでは、すべてがファイルです。ディレクトリは別のファイルではありませんか?なぜ彼らは異なって扱われますか?

私の質問:

  • この動作は技術的な制限によって引き起こされますか、それとも意図的な選択ですか?

後者なら、

  • この選択を促した歴史的記録はありますか?

答え1

ドロバートunix mvプログラムはディレクトリに-R(再帰)オプションを必要としませんが、cpに必要な理由は何ですか?基本的にあなたの質問に答えます。通常のファイルをコピーまたは削除することは、ディレクトリで同じ操作を実行するのとは異なります。ディレクトリを使用すると、その中に含まれるすべてのファイルを処理する必要があるからです。したがって、操作は基本的に異なります。

rmdir空のディレクトリでのみ機能する特別なユーティリティがあることにも注目する価値があります。事実を確認しないと、最初はディレクトリではなくディレクトリのみを削除でき、空のディレクトリを使用して繰り返しrm作業し、rmそのディレクトリを削除して完全な削除をrmdir実行する必要があると結論付けることができます。

答え2

一部のUNIXバージョンでは、rmのマニュアルページでこれをファイルリンク解除コマンドとして指定します。
UNIXでは、ファイルはファイルシステムのID以外に名前や場所がないinodeというファイルシステムのオブジェクトです。その名前はそのディレクトリへの参照です。ディレクトリは、そのディレクトリにリストされているファイル(またはファイルであるためディレクトリ)をインデックス化するファイル形式です。
ファイルが切断されると、ファイルの参照数が減り、ゼロに達するとファイルシステムによって使用可能とマークされ、対応するブロック/範囲も使用可能とマークされるため、実際に削除されます。

まず、ファイルのリンクを解除せずにディレクトリを管理できる場合は、ファイルシステムでinodeが参照されますが、通常の方法ではアクセスできないポイントに達したことです。
参照回数によって参照されるため、削除表示にならず、欠落したファイルになります。
欠落している「ファイル」がディレクトリの場合、状況はさらに複雑になり、ファイルシステム内の失われたストレージの量が増えます。

したがって、rm -rはUNIXユーザーの生活を楽にするための機能として追加されましたが、標準の「UNIX精神」を犠牲にしました。これはディレクトリにドロップダウンするため、既存のUNIXユーティリティよりも複雑なためです。文書を削除し、

さらに、UNIXの初期にはシステムにメモリが多くなく、マッピングされたディレクトリの反復構造がパフォーマンスの低下を引き起こし、時にはタスクを分割しないとタスクを完了できませんでした。

cp、ファイルを読み取り、ブロック単位でコピーします。ファイルなどのディレクトリをコピーすると、参照カウントを増やすことなくファイルへの参照が追加されるため、データの不一致が発生する可能性があります(該当するブロックが使用可能とマークされているinodeを読み書きする場合)。無料で)。元の inode が削除される)、データ損失 - ファイルへの最後の (既知の) 参照を削除すると、対応する inode 番号がリサイクルされる可能性があるためです。

tl;dr群衆の場合:
UNIXのディレクトリはファイル形式であることは事実ですが、ディレクトリに含まれる情報はファイルシステムのメタデータであるため、システムで異なるように処理されるため、ファイルに対して機能するコマンドはディレクトリの動作を変更しないとディレクトリで実行できません。アクション。および依存関係メタデータ。

関連情報