rm -rfで途中で削除できない場合は削除されますか?

rm -rfで途中で削除できない場合は削除されますか?

garbage多くのファイルとディレクトリを含むディレクトリを考えてみましょう。を実行しましたが、そのrm -rf garbage中のファイルやディレクトリの一部がgarbageOS/NFS/etc で使用されているとrm -rf失敗します。残りは削除されますか?それとも最初の失敗時に削除は停止されますか?現在、オペレーティングシステムはUbuntu 20.04ですが、興味深いのはこの動作が標準なのか、オペレーティングシステム(バージョン)によって異なりますか。

答え1

rm行動詳細な規定は POSIX に提供されます。(あなたも見ることができます非常に大きなフォルダでrm -Rfを実行している間、実際の手順の順序は何ですか?完全なシーケンスを再現します)。現在のファイルを削除できない場合やファイルが存在しない場合は、

残りのファイルを処理し続けます。

これは、エラーが発生しても可能であればファイルを削除し続けることを意味します。これは、引数で指定されたファイルrm -rfとディレクトリを処理したときに見つかったファイルの両方に適用されます。

場合によっては、仕事の結果を永遠に待つことができます(例えばNFSマウントからファイルを削除しようとすると(サーバーが応答しない)、最終的にノンストップスリープモード(状態D)に切り替わりますが、その状態が解決したらファイルを削除し続けます。実際には決して止める削除するファイルが不足するまで削除してください。

答え2

rm -rデフォルトでは、ファイル、ディレクトリ、シンボリックリンクなどであるかどうかにかかわらず(使用)、unlinkat「ファイル」エントリのリンクを解除し、最初に見つかったディレクトリを繰り返し(たとえば使用getdentsrm検出したファイルを開いたり、読み書きしたりします。試している場合はまったくありません。つまり、中断せずに待機状態のディレクトリでI / O待機をトリガーしよrmうとすると、続行する前に待機が解決されるのを待ちます。getdentsrm

つまり、rm完了できない場合unlinkatはケースごとに例外を処理します。たとえば、unlinkatファイルが見つからないために失敗すると、続行されますが報告rmされます。ENOENTNo such file or directory

関連情報