web-dev-qa-db-ja.com

cpとtarは一時ファイルを作成してから、アトミックmvを実行しますか?

JavaのFiles.walkFileTreeを使用して、特定のディレクトリで* .csvファイルを定期的にスキャンし、それらを読み取っています。

Mvは(少なくとも同じデバイス内で)アトミックであることを知っているので、ファイルの「mv」は競合状態の観点から問題にはならないはずです。

代わりにcpを実行する場合、cpは最初に別のファイル名にコピーを実行し、次に元の名前にアトミックmvを実行しますか?それとも、直接読み取り/書き込みを行うことで競合状態を引き起こしますか?

Tar&gzを使用してファイルを別のディレクトリに抽出する場合にも同じ質問があります。

PS。答えがOSに依存している場合、私はCentOS 6に取り組んでいます。また、可能であれば、Windowsについても答えを述べることができますか?

1
Abhinav Vishak

GNU cpおよびGNU tar(CentOSを含むほとんどのLinuxディストリビューションの標準実装))の場合、どちらも作成しますファイルはインプレースです。他のほとんどの実装にも同じことが当てはまると確信しています。ラッパースクリプトを記述して機能的にアトミックにするのはそれほど難しくありません。Windowsについてはよくわかりませんが、わかりません。 t think POSIXがファイルシステム操作のアトミック性に対して行う保証をこれ以上提供すること。

mvは、ファイルシステムの境界を越えない場合にのみアトミックであり、それ以外の場合は、cpを実行してからソースファイルのリンクを解除することと同等になることにも注意してください。

2