
以前は、PHP やシェル経由でディレクトリを削除するのが、Windows で削除をクリックするだけのように簡単ではないのはなぜだろうと不思議に思っていました。今では、削除とは単にファイル アロケーション テーブルからファイルのリンクを解除することであり、ディレクトリを削除するには、その中のすべてのファイルのリンクを解除する必要があることがわかっています。
ディレクトリのエントリは削除できるが、その中のファイルのエントリは削除できないということはありますか? オペレーティング システムは、ファイル システム内でアクセスできないファイルを定期的にチェックしますか?
答え1
多くのUNIXには、ディレクトリのリンクをunlink
解除できるコマンドがありますが、root
ないディレクトリの内容を再帰的にリンク解除するため、非常に危険です。そのような事態が発生した場合は、を使用してfsck
切断されたディレクトリを回復します。このディレクトリは、ファイルシステムのフォルダにランダムな名前で表示されますlost+found
(発生したときに名前が失われているためunlink
)。
答え2
はい、可能ですが、OS にはこれを防ぐための手順が用意されているため、可能性は低いです。ただし、ディスク エラーや異常によって、このようなことが起こる可能性があります。
これは一般的にチェックディスク、スキャン、そして他の多くのユーティリティもこれを実行するように設計されています。これらのユーティリティは割り当てテーブルを読み取り、既知のファイルエントリと照合します。何か問題があれば、何らかのアクションが実行されます。
Windowsでは、通常、プロパティドライブアイコンを右クリックすると、オプションが表示されます。かもしれないその後チェックを行ってください。ただし、Windows は起動ディスクのチェックを優先しているようで、次回の再起動時にチェックが行われることが通知されます。
Linux では、... アクティブなシステムで fsck ユーティリティを操作すると、深刻な被害を受ける可能性があります。そのため、Linux ボックスでは、起動時に常にファイル システム チェック (fsck!) が実行されます。再起動するだけで、チェックが行われることがよくあります (ただし、UPS が故障したときにホーム サーバーの電源を抜くと、チェックが実行されることもわかっています) (ファイル システムはダーティとしてマークされます)
OS X ですか? わかりません。マシンの近くでラテをすすったら、近くの GeniusBar にリンクして、マシン自体の不具合が修正されただけだと思います。(おそらく、Starbucks™ の中か近くにいる必要もあると思います)