7zip は一時ファイルに抽出してから、その一時ファイルの名前を実際のターゲットの名前に変更しますか?

7zip は一時ファイルに抽出してから、その一時ファイルの名前を実際のターゲットの名前に変更しますか?

この質問をする理由は、アーカイブを解凍するために 7zip を呼び出すプログラムそのものも含まれている可能性があるアーカイブを解凍できるようにしたいからです。Linux/UNIX では、使用中のファイルを削除したり名前を変更したりできますが、書き込み用に開くことはできません。

答え1

答えはイエスであり、ノーでもあります。

7zipの解凍コマンドでは、一時ファイルは作成されないはずです。ただし、Windowsエクスプローラーのドラッグアンドドロップを使用すると、Windowsでは一時ファイルが作成されます(次のドキュメントから引用)。http://www.7-zip.org/faq.html、ctl-f で temp を検索します)。

ただし、Linux を使用しています。

Linux ではこのようなことが起こらないことを 100% 確実にするために、大きなアーカイブを作成して解凍し、strace でプログラムを実行しました。

strace -a88 -- 7z e byob.7z 2>&1

上書き前にリンクが解除された現在の作業ディレクトリ内の既存のファイルのみが表示され、アクセスされたファイルは現在の作業ディレクトリ内のファイルのみでした。

何か見落としがないか確認するために、ご自身でテストしてください。

これがお役に立てば幸いです。

答え2

あなたの質問は、実行可能ファイル(またはスクリプト)に関するもので、 (同じ場所に)file1新しいものを作成するメカニズムを呼び出します。file1

Unix のファイル システムについて私が理解しているところによると、これはfile1開いている間 (実行中) に の上書きを必要とします。この動作は、上書きによって元のファイルのリンクfile1が解除されますが、開いているため実際には削除されません。ただし、そのディレクトリ内の名前は占有されなくなりますfile1。新しいファイルfile1は別の場所に作成されます (正しい名前を使用)。古いファイルは実行を完了して終了すると削除されます。ただし、file1新しいファイルはそのまま残ります。file1

注意: これは主に私の断片的な知識に基づいた推測です。ファイルシステムの概念に詳しい人がこれを肯定または訂正するかもしれません。その間、この回答は理論的なものとしてのみ受け止め、実験によるさらなる検証なしにこの回答に基づいてソリューションを構築しないことをお勧めします。

関連情報