rm -Rf
さまざまなサイズ、ユーザー権限などを持つ多くのファイルやフォルダがある非常に大きなフォルダで実行されているとします。
rm
コマンドが最初に削除するファイルのリストを蓄積し、フォルダ全体からそのファイルを検索した後にのみ削除を開始するかどうか疑問に思います。それとも、コマンドの実行中に各ファイルがヒットするとすぐに実際に削除されますか?
たとえば、このrm -Rf /
コマンドを実行し、5秒後にコマンドを終了すると仮定すると、何も削除されませんか?
その特定のインストールフォルダのfsはext4
。
答え1
実行すると、以下のようにエラーメッセージが出力され停止しますrm -Rf /
。rm
POSIXで指定:
オペランドがルートディレクトリとして確認される場合RM診断メッセージは標準エラーに記録する必要があり、そのオペランドに対して操作を実行しないでください。
他の場合、または強制的にrm
プロセスを進める場合/
(バージョンを強制的に適用できると仮定する場合)例えばrm
オプションのあるGNU --no-preserve-root
)、rm
できるだけ早くファイルとディレクトリを削除してください。ディレクトリが空になると、削除できるように深さ優先順にディレクトリを処理します。そのため、5秒以内にファイルとディレクトリが削除される可能性が高くなります。
これはPOSIXによって指定されます(上記のリンクを参照)。
それぞれ文書次の手順を実行する必要があります。
もし文書存在しない:
ㅏ。もし- F指定されたオプションはありません。RM診断メッセージは標準エラーに記録する必要があります。
b。残りの部分を続けます。文書。
もし文書ディレクトリタイプの場合は、次の手順を実行する必要があります。
ㅏ。両方がなければ-アル字型オプションはありません-アル字型オプションの指定、RM診断メッセージは標準エラーに書き込まれ、他の操作は行わないでください。文書をクリックして、残りのファイルを処理し続けます。
b.もし文書空のディレクトリです。RMステップ2dにスキップできます。もし- Fオプションが指定されておらず、権限がありません。文書書き込みは許可されず、標準入力は端末または-私オプションの指定、RMプロンプトは標準エラーに書き込まれ、標準入力から1行を読む必要があります。答えが「いいえ」の場合、RM現在のファイルでは何もしないでください。残りのファイルは引き続き処理されます。
氏。含めるには文書、点または点 - 点を除いて、ここにリストされている4つのステップ(1〜4)は、文書オペランド。これRMユーティリティはシンボリックリンクに沿って階層の他の部分にディレクトリを移動しないでくださいが、リンク自体を削除する必要があります。
d.もし-私オプションの指定、RMプロンプトは標準エラーに書き込まれ、標準入力から1行を読む必要があります。答えが「いいえ」の場合、RM現在のファイルに対して何もせず、残りのファイルを処理し続けます。
もし文書ディレクトリ型ではなく、- Fオプションが指定されておらず、ファイル権限が書き込みを許可しておらず、標準入力が端末または-私オプションの指定、RMプロンプトは標準エラーに書き込まれ、標準入力から1行を読む必要があります。答えが「いいえ」の場合、RM現在のファイルでは何もしないでください。残りのファイルは引き続き処理されます。
現在のファイルがディレクトリの場合RM次のように実装する必要があります。rmdir()現在のファイルのパス名を使用して呼び出されるPOSIX.1-2017システムインタフェースボリュームで定義されている関数道議論。現在のファイルがディレクトリでない場合RM次のように実装する必要があります。解く()現在のファイルのパス名を使用して呼び出されるPOSIX.1-2017システムインタフェースボリュームで定義されている関数道議論。
何らかの理由で失敗した場合RM診断メッセージは標準エラーに書き込まれ、現在のファイルでは何もしないでください。残りのファイルの処理は続行する必要があります。
これRMユーティリティは、パスの長さの制限のために失敗することなく、ファイル階層のすべての深さまで下げることができなければなりません(ユーザーが指定したジョブの数がシステム制限を超えない限り)。