`cp --no-clobber` は競合状態に対して脆弱ですか?

`cp --no-clobber` は競合状態に対して脆弱ですか?

のマニュアルページcp(1)言う

--no-clobber既存のファイルを上書きしない

しかし、次のようなシナリオはあり得ないでしょうか?

  1. cpファイルの存在をチェックします。ファイルが存在しないと仮定します(まだ)
  2. 他のプロセスが同じパスに書き込むため、以前は存在しなかったファイルにデータが書き込まれる
  3. cp既存のファイルを認識しないため、データを上書きします

この競合状態に対して脆弱ですかcp --no-clobber? そうでない場合、cp上記の状況をどのように回避しますか?

答え1

cpは、この競合状態に対して脆弱ではありません。 が--no-clobber設定されている場合、コピー先がすでに存在するかどうかを確認します。存在しないと判断され、コピーを続行する必要がある場合、新しいファイルにコピーする必要があることを思い出します。コピー先ファイルを開くときが来たら、作成を強制するフラグでそれを開きますO_CREATそしてO_EXCL; オペレーティングシステムはファイルが存在しないことを確認します開けながらEEXIST失敗する場合は失敗します ( )。

関連情報