のマニュアルページcp(1)
言う
--no-clobber
既存のファイルを上書きしない
しかし、次のようなシナリオはあり得ないでしょうか?
cp
ファイルの存在をチェックします。ファイルが存在しないと仮定します(まだ)- 他のプロセスが同じパスに書き込むため、以前は存在しなかったファイルにデータが書き込まれる
cp
既存のファイルを認識しないため、データを上書きします
この競合状態に対して脆弱ですかcp --no-clobber
? そうでない場合、cp
上記の状況をどのように回避しますか?
答え1
cp
は、この競合状態に対して脆弱ではありません。 が--no-clobber
設定されている場合、コピー先がすでに存在するかどうかを確認します。存在しないと判断され、コピーを続行する必要がある場合、新しいファイルにコピーする必要があることを思い出します。コピー先ファイルを開くときが来たら、作成を強制するフラグでそれを開きます、O_CREAT
そしてO_EXCL
; オペレーティングシステムはファイルが存在しないことを確認します開けながら、EEXIST
失敗する場合は失敗します ( )。