我問這個問題是因為我希望能夠解壓縮一個存檔,該存檔也可能包含呼叫 7zip 來解壓縮存檔的程式。 Linux/UNIX 允許在使用文件時刪除或重新命名該文件,但不允許開啟該文件進行寫入。
答案1
答案是肯定和否定。
使用 7zip 的提取命令不應建立臨時檔案。不過,當使用 Windows 資源管理器拖放時,這種情況在 Windows 上確實會發生(取自文件:http://www.7-zip.org/faq.html,ctl-f 搜尋 temp)。
不過你在Linux上。
為了 100% 確定這種情況不會在 Linux 上發生,我建立了一個大檔案,然後提取了一個大檔案並透過 strace 執行程式:
strace -a88 -- 7z e byob.7z 2>&1
我只看到當前工作目錄中的現有文件在覆蓋之前未鏈接,並且唯一訪問的文件是當前工作目錄中的文件。
請自行測試以驗證我沒有錯過任何內容。
我希望這對您有幫助。
答案2
您的問題是關於可執行檔(或腳本) ,呼叫建立新檔案(在同一位置)file1
的機制。file1
根據我對 Unix 上檔案系統的了解,這需要file1
在開啟(執行)時進行破壞。發生這種情況的方式是,破壞者導致原始file1
連結被取消,但由於它是打開的,所以它並沒有真正被刪除。但它不再佔據file1
該目錄中的名稱。新的檔案file1
是在單獨的位置建立的(使用正確的名稱)。當olderfile1
完成執行並退出時,它會被刪除。不過,您應該保留新的file1
現有內容。
警告:這很大程度上是基於我的部分知識的猜測。也許這裡有更多檔案系統概念的人會確認或修正它。同時,我建議您僅將此答案作為理論上的答案,在沒有進一步實驗驗證的情況下,不要將您的解決方案建立在它的基礎上。